[maven-release-plugin]  copy for tag chemistry-opencmis-0.13.0-RC1

git-svn-id: https://svn.apache.org/repos/asf/chemistry/opencmis/tags/chemistry-opencmis-0.13.0-RC1@1670131 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/chemistry-opencmis-dist/pom.xml b/chemistry-opencmis-dist/pom.xml
index ccdb186..d07f791 100644
--- a/chemistry-opencmis-dist/pom.xml
+++ b/chemistry-opencmis-dist/pom.xml
@@ -131,38 +131,6 @@
             </activation>
             <build>
                 <plugins>
-                    <!-- Fetches docs from ${docs.download.directory} -->
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>exec-maven-plugin</artifactId>
-                        <version>1.1.1</version>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>fetch-docs</id>
-                                <phase>generate-resources</phase>
-                                <goals>
-                                    <goal>exec</goal>
-                                </goals>
-                                <configuration>
-                                    <executable>wget</executable>
-                                    <arguments>
-                                        <argument>--directory-prefix=${docs.download.directory}</argument>
-                                        <argument>--domains=chemistry.apache.org</argument>
-                                        <argument>--mirror</argument>
-                                        <argument>-k</argument>
-                                        <argument>-np</argument>
-                                        <argument>--include-directories=/java/</argument>
-                                        <argument>--exclude-directories=/java/0.4.0/maven/,/java/0.5.0/maven/,/java/0.6.0/maven/,/java/0.7.0/maven/</argument>
-                                        <argument>${docs.start.url}</argument>
-                                    </arguments>
-                                    <successCodes>
-                                        <successCode>8</successCode>
-                                    </successCodes>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
                     <plugin>
                         <artifactId>maven-assembly-plugin</artifactId>
                         <inherited>false</inherited>
@@ -180,9 +148,6 @@
                                         <descriptor>
                                             src/main/assembly/server-webapps-assembly.xml
                                         </descriptor>
-                                        <descriptor>
-                                            src/main/assembly/docs-assembly.xml
-                                        </descriptor>
                                     </descriptors>
                                 </configuration>
                             </execution>
diff --git a/chemistry-opencmis-dist/src/main/assembly/docs-assembly.xml b/chemistry-opencmis-dist/src/main/assembly/docs-assembly.xml
deleted file mode 100644
index eb1289f..0000000
--- a/chemistry-opencmis-dist/src/main/assembly/docs-assembly.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-    <!--
-        Lice nsed to the Apache Software Foundation (ASF) under one or
-        more contributor license agreements. See the NOTICE file
-        distributed with this work for additional information regarding
-        copyright ownership. The ASF licenses this file to you under the
-        Apache License, Version 2.0 (the "License"); you may not use
-        this file except in compliance with the License. You may obtain
-        a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions
-        and limitations under the License.
-    -->
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>docs</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <directory>${project.build.directory}/downloaded-site/chemistry.apache.org/java</directory>
-            <outputDirectory>sitedocs</outputDirectory>
-            <includes>
-                <include>**</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${parentBasedir}/target/site/apidocs</directory>
-            <outputDirectory>javadocs</outputDirectory>
-            <includes>
-                <include>**</include>
-            </includes>
-        </fileSet>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>DEPENDENCIES</exclude>
-		        <exclude>NOTICE</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/src/main/resources</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>DEPENDENCIES</include>
-                <include>NOTICE</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-</assembly>
diff --git a/trunk/README.txt b/trunk/README.txt
deleted file mode 100644
index 86fefff..0000000
--- a/trunk/README.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-=========================
-Apache Chemistry OpenCMIS
-=========================
-
-OpenCMIS is a collection of Java libraries, frameworks and tools around
-the CMIS (Content Management Interoperability Services) specification.
-
-OpenCMIS supports the specification versions
- - CMIS 1.0 <http://docs.oasis-open.org/cmis/CMIS/v1.0/cmis-spec-v1.0.html>
- - CMIS 1.1 <http://docs.oasis-open.org/cmis/CMIS/v1.1/CMIS-v1.1.html>
-
-
-Building OpenCMIS
-=================
-
-You can build OpenCMIS like this:
-
-    mvn clean install
-
-You need Maven 3 with Java 6 (or higher) for the build.
-Set the environment variable MAVEN_OPTS to 
-'-Xmx1024m -XX:MaxPermSize=256m' to give Maven more memory.
-
-License (see also package specific LICENSE files)
-=================================================
-
-Collective work: Copyright 2010-2015 The Apache Software Foundation.
-
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-Dependencies with "Weak Copyleft" or dual licenses
-==================================================
-
-OpenCMIS uses some libraries with open source licenses that require reciprocal
-licensing when modified. These libraries are included in unmodified binary
-form and can be redistributed under terms that are compatible with the
-Apache License.
-
-Some libraries used by OpenCMIS are dual-licensed under different open source
-licenses. These libraries are redistributed under the license whose terms
-are compatible with the Apache License.
-
-See LICENSE file included in all Apache Chemistry OpenCMIS packages for 
-full licensing details.
-
diff --git a/trunk/_dev/Formatting_presets.xml b/trunk/_dev/Formatting_presets.xml
deleted file mode 100644
index a2d2771..0000000
--- a/trunk/_dev/Formatting_presets.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<profiles version="11">
-<profile kind="CodeFormatterProfile" name="OpenCMIS" version="11">
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
-<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-</profile>
-</profiles>
diff --git a/trunk/_dev/codetemplates.xml b/trunk/_dev/codetemplates.xml
deleted file mode 100644
index dce79e2..0000000
--- a/trunk/_dev/codetemplates.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="false" context="newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-${package_declaration}
-
-${typecomment}
-${type_declaration}</template></templates>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/README b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/README
deleted file mode 100644
index afc0933..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/README
+++ /dev/null
@@ -1,127 +0,0 @@
-OpenCMIS Android Client

-=======================

-

-The OpenCMIS Android Client provides a collection of methods to access and manage CMIS Repository.

-

-

-OpenCMIS Client Bindings supported

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

-OpenCMIS Android Client supports the AtomPub Binding and the Browser Binding.

-The Web Service Binding (SOAP protocol) is not supported by this library.

-

-

-Android Version Supported

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

-Previous versions of Android don't contain all dependencies required to run and use OpenCMIS Android client.  

-It's only since Android 2.3 (aka Gingerbread) everything works. 

-In other terms, Android client supports Android 2.3 and above.

-

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

- !!! IMPORTANT NOTE !!!

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

-OpenCMIS Android Client is a SYNCHRONOUS library ! 

-It's highly recommended that you encapsulate all CMIS operations in background thread. 

-In Android it's possible to use

-+	Services

-+	Loaders

-+	AsyncTask

-+	Thread/Handler

-

-For more information on Thread and background task : <http://developer.android.com/guide/components/processes-and-threads.html>

-

-

-Importing the Android OpenCMIS Client into your Android Project

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

-

-The Android OpenCMIS Client requires SLF4J for android.

-Download it from here: <http://www.slf4j.org/android/>

-

-Put the Android OpenCMIS Client Jar and SLF4J jar into your Android project libs folder. 

-Now you're ready to use OpenCMIS inside your project.

-

-For more information on Project libs folder : <http://tools.android.com/recent/dealingwithdependenciesinandroidprojects>

-

-Importing the Android OpenCMIS Client with Maven 

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

-If you use Maven to build your Android Project, it's possible to add this library as Maven dependency.

-

-Add to your pom project : 

-

-<dependencies>

-	...

-	<dependency>

-		<groupId>com.google.android</groupId>

-		<artifactId>annotations</artifactId>

-	</dependency>

-	<dependency>

-		<groupId>org.apache.chemistry.opencmis</groupId>

-		<artifactId>chemistry-opencmis-android-client</artifactId>

-		<version>x.z.y</version>

-		<exclusions>

-			<exclusion>

-				<groupId>org.slf4j</groupId>

-				<artifactId>slf4j-api</artifactId>

-			</exclusion>

-		</exclusions>

-	</dependency>

-	<dependency>

-		<groupId>org.slf4j</groupId>

-		<artifactId>slf4j-android</artifactId>

-		<version>1.7.5</version>

-	</dependency>

-	...

-</dependencies>

-

-

-Code sample

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

-This code sample illustrates how to display in a simple TextView a list of folder children.

-  

-public class FirstOpenCMISActivity extends Activity {

-

-    @Override

-    public void onCreate(Bundle savedInstanceState) {

-        super.onCreate(savedInstanceState);

-        setContentView(R.layout.activity_main);

-        new FirstOpenCMISAsyncTask().execute();

-    }

-

-    @Override

-    public boolean onCreateOptionsMenu(Menu menu) {

-        getMenuInflater().inflate(R.menu.activity_main, menu);

-        return true;

-    }

-    

-    

-    private class FirstOpenCMISAsyncTask extends AsyncTask<Void, Void, String>

-    {

-    	@Override

-    	protected String doInBackground(Void... arg0) {

-    		

-    		SessionFactory sessionFactory = SessionFactoryImpl.newInstance();

-    		Map<String, String> parameter = new HashMap<String, String>();

-    		parameter.put(SessionParameter.USER, "admin");

-    		parameter.put(SessionParameter.PASSWORD, "admin");

-    		parameter.put(SessionParameter.ATOMPUB_URL, "http://192.168.1.100:8080/inmemory/atom/");

-    		parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());

-    		Repository repository = sessionFactory.getRepositories(parameter).get(0);

-    		parameter.put(SessionParameter.REPOSITORY_ID, repository.getId());

-    		Session session = sessionFactory.createSession(parameter);

-    		

-    		String listChildren = "";

-    		Folder mediaFolder = (Folder) session.getObjectByPath("/media");

-    		ItemIterable<CmisObject> children = mediaFolder.getChildren();

-    	    for (CmisObject o : children) {

-    	    	listChildren += o.getName() + " - " + o.getType().getDisplayName() + " - " + o.getCreatedBy() + "\b\n";

-    	    }

-    		

-    		return listChildren;

-    	}

-

-    	@Override

-    	protected void onPostExecute(String result) {

-    		TextView tv = (TextView) (FirstOpenCMISActivity.this).findViewById(R.id.opencmis_text);

-    		tv.setText(result);

-    	}

-    }

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/pom.xml b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/pom.xml
deleted file mode 100644
index f005d91..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/pom.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.chemistry.opencmis</groupId>
-		<artifactId>chemistry-opencmis</artifactId>
-		<version>0.13.0</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>chemistry-opencmis-android-client</artifactId>
-	<name>OpenCMIS Android Client</name>
-	<packaging>jar</packaging>
-
-	<properties>
-		<parentBasedir>../../</parentBasedir>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>com.google.android</groupId>
-			<artifactId>android</artifactId>
-			<version>2.3.3</version>
-			<scope>provided</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-		    <plugin>
-                 <artifactId>maven-antrun-plugin</artifactId>
-                 <executions>
-                     <execution>
-                         <phase>generate-resources</phase>
-                         <configuration>
-                             <target>
-                          		<property name="gendir" value="${project.build.directory}/opencmis-core" />
-
-								<property name="basedir" value="${maven.basedir}" />
-                                <property name="commons-api" value="${basedir}/../../chemistry-opencmis-commons/chemistry-opencmis-commons-api" />
-                                <property name="commons-impl" value="${basedir}/../../chemistry-opencmis-commons/chemistry-opencmis-commons-impl" />
-                                <property name="client-bindings" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-bindings" />
-                                <property name="client-api" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-api" />
-                                <property name="client-impl" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-impl" />
-
-                                <property name="sourcefiles" value="src/main/java" />
-                                 
-								<copy todir="${gendir}">
-									<fileset dir="${commons-api}/${sourcefiles}">
-										<include name="**/*.java" />
-									</fileset>
-								</copy>
-                                
-                           		<copy todir="${gendir}">
-									<fileset dir="${commons-impl}/${sourcefiles}">
-										<include name="**/*.java" />
-										<exclude name="**/tube/**" />
-										<exclude name="**/jaxb/**" />
-										<exclude name="**/webservices/**" />
-										<exclude name="**/impl/WSConverter.*" />
-										<exclude name="**/impl/XMLConverter.*" />
-										<exclude name="**/impl/XMLConverter.*" />
-										<exclude name="**/impl/XMLUtils.*" />
-										<exclude name="**/impl/XMLWalker.*" />										
-									</fileset>
-								</copy>
-                                
-                            	<copy todir="${gendir}">
-									<fileset dir="${client-bindings}/${sourcefiles}">
-										<include name="**/*.java" />
-										<exclude name="**/spi/LTPAWSSecurityAuthenticationProvider.*" />
-										<exclude name="**/spi/local/**" />
-										<exclude name="**/spi/http/DefaultHttpInvoker.*" />
-										<exclude name="**/spi/http/ApacheClientHttpInvoker.*" />
-										<exclude name="**/spi/webservices/**" />
-										<exclude name="**/spi/atompub/**" />
-									</fileset>
-								</copy>                            
-                                
-                            	<copy todir="${gendir}">
-									<fileset dir="${client-api}/${sourcefiles}">
-										<include name="**/*.java" />
-									</fileset>
-								</copy>                            
-                                
-                            	<copy todir="${gendir}">
-									<fileset dir="${client-impl}/${sourcefiles}">
-										<include name="**/*.java" />
-										<exclude name="**/TypeUtils.java" />
-										<exclude name="**/osgi/**" />
-									</fileset>
-								</copy>
-								
-								<replace dir="${gendir}" token="javax.xml.ws.handler.HandlerResolver" value="org.apache.chemistry.opencmis.client.bindings.spi.HandlerResolver" />            
-                             </target>
-                         </configuration>
-                         <goals>
-                             <goal>run</goal>
-                         </goals>
-                     </execution>
-                 </executions>
-            </plugin>
-            <plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<version>1.7</version>
-				<executions>
-					<execution>
-						<phase>generate-sources</phase>
-						<goals>
-							<goal>add-source</goal>
-						</goals>
-    			        <configuration>
-    			            <sources>
-   								<source>${project.build.directory}/opencmis-core</source>
-							</sources>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>pack</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>true</attach>
-                            <descriptors>
-                                <descriptor>
-                                  src/main/assembly/assembly.xml
-                                </descriptor>
-                            </descriptors>
-                        </configuration>
-                     </execution>
-                </executions>
-            </plugin>
-		</plugins>
-
-	</build>
-</project>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/assembly/assembly.xml b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/assembly/assembly.xml
deleted file mode 100644
index 933eefa..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/assembly/assembly.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-    <!--
-        Licensed to the Apache Software Foundation (ASF) under one or
-        more contributor license agreements. See the NOTICE file
-        distributed with this work for additional information regarding
-        copyright ownership. The ASF licenses this file to you under the
-        Apache License, Version 2.0 (the "License"); you may not use
-        this file except in compliance with the License. You may obtain
-        a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions
-        and limitations under the License.
-    -->
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <id>pack</id>
-    <formats>
-        <format>zip</format>
-        <format>tar.gz</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    
-    <files>
-        <file>
-            <source>README</source>
-            <outputDirectory></outputDirectory>
-        </file>
-        <file>
-            <source>${project.build.directory}/${project.build.finalName}.jar</source>
-            <outputDirectory></outputDirectory>
-        </file>
-    </files>
-    
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory> 
-        </fileSet>
-    </fileSets>
-</assembly>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/HandlerResolver.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/HandlerResolver.java
deleted file mode 100644
index 3f3bbaa..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/HandlerResolver.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-/**
- * Dummy interface, which replaces a JAX-WS interface that doesn't exits on
- * Android.
- */
-public interface HandlerResolver {
-
-}
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
deleted file mode 100644
index 338e71f..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
+++ /dev/null
@@ -1,981 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;

-

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.HashMap;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Map;

-import java.util.Set;

-

-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;

-import org.apache.chemistry.opencmis.client.bindings.impl.RepositoryInfoCache;

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.SessionParameter;

-import org.apache.chemistry.opencmis.commons.data.Ace;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;

-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;

-import org.xmlpull.v1.XmlSerializer;

-

-/**

- * Base class for all AtomPub client services.

- */

-public abstract class AbstractAtomPubService implements LinkAccess {

-

-    protected enum IdentifierType {

-        ID, PATH

-    }

-

-    protected static final String NAME_COLLECTION = "collection";

-    protected static final String NAME_URI_TEMPLATE = "uritemplate";

-    protected static final String NAME_PATH_SEGMENT = "pathSegment";

-    protected static final String NAME_RELATIVE_PATH_SEGMENT = "relativePathSegment";

-    protected static final String NAME_NUM_ITEMS = "numItems";

-

-    private BindingSession session;

-

-    /**

-     * Sets the current session.

-     */

-    protected void setSession(BindingSession session) {

-        this.session = session;

-    }

-

-    /**

-     * Gets the current session.

-     */

-    protected BindingSession getSession() {

-        return session;

-    }

-

-    /**

-     * Gets the HTTP Invoker object.

-     */

-    protected HttpInvoker getHttpInvoker() {

-        return CmisBindingsHelper.getHttpInvoker(session);

-    }

-

-    /**

-     * Returns the service document URL of this session.

-     */

-    protected String getServiceDocURL() {

-        Object url = session.get(SessionParameter.ATOMPUB_URL);

-        if (url instanceof String) {

-            return (String) url;

-        }

-

-        return null;

-    }

-

-    /**

-     * Return the CMIS version of the given repository.

-     */

-    protected CmisVersion getCmisVersion(String repositoryId) {

-        if (CmisBindingsHelper.getForcedCmisVersion(session) != null) {

-            return CmisBindingsHelper.getForcedCmisVersion(session);

-        }

-

-        RepositoryInfoCache cache = CmisBindingsHelper.getRepositoryInfoCache(session);

-        RepositoryInfo info = cache.get(repositoryId);

-

-        if (info == null) {

-            List<RepositoryInfo> infoList = getRepositoriesInternal(repositoryId);

-            if (isNotEmpty(infoList)) {

-                info = infoList.get(0);

-                cache.put(info);

-            }

-        }

-

-        return (info == null ? CmisVersion.CMIS_1_0 : info.getCmisVersion());

-    }

-

-    // ---- link cache ----

-

-    /**

-     * Returns the link cache or creates a new cache if it doesn't exist.

-     */

-    protected LinkCache getLinkCache() {

-        LinkCache linkCache = (LinkCache) getSession().get(SpiSessionParameter.LINK_CACHE);

-        if (linkCache == null) {

-            linkCache = new LinkCache(getSession());

-            getSession().put(SpiSessionParameter.LINK_CACHE, linkCache);

-        }

-

-        return linkCache;

-    }

-

-    /**

-     * Gets a link from the cache.

-     */

-    protected String getLink(String repositoryId, String id, String rel, String type) {

-        if (repositoryId == null) {

-            throw new CmisInvalidArgumentException("Repository id must be set!");

-        }

-

-        if (id == null) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        return getLinkCache().getLink(repositoryId, id, rel, type);

-    }

-

-    /**

-     * Gets a link from the cache.

-     */

-    protected String getLink(String repositoryId, String id, String rel) {

-        return getLink(repositoryId, id, rel, null);

-    }

-

-    /**

-     * Gets a link from the cache if it is there or loads it into the cache if

-     * it is not there.

-     */

-    public String loadLink(String repositoryId, String id, String rel, String type) {

-        String link = getLink(repositoryId, id, rel, type);

-        if (link == null) {

-            getObjectInternal(repositoryId, IdentifierType.ID, id, ReturnVersion.THIS, null, null, null, null, null,

-                    null, null);

-            link = getLink(repositoryId, id, rel, type);

-        }

-

-        return link;

-    }

-

-    /**

-     * Gets the content link from the cache if it is there or loads it into the

-     * cache if it is not there.

-     */

-    public String loadContentLink(String repositoryId, String id) {

-        return loadLink(repositoryId, id, AtomPubParser.LINK_REL_CONTENT, null);

-    }

-

-    /**

-     * Gets a rendition content link from the cache if it is there or loads it

-     * into the cache if it is not there.

-     */

-    public String loadRenditionContentLink(String repositoryId, String id, String streamId) {

-        return loadLink(repositoryId, id, Constants.REL_ALTERNATE, streamId);

-    }

-

-    /**

-     * Adds a link to the cache.

-     */

-    protected void addLink(String repositoryId, String id, String rel, String type, String link) {

-        getLinkCache().addLink(repositoryId, id, rel, type, link);

-    }

-

-    /**

-     * Adds a link to the cache.

-     */

-    protected void addLink(String repositoryId, String id, AtomLink link) {

-        getLinkCache().addLink(repositoryId, id, link.getRel(), link.getType(), link.getHref());

-    }

-

-    /**

-     * Removes all links of an object.

-     */

-    protected void removeLinks(String repositoryId, String id) {

-        getLinkCache().removeLinks(repositoryId, id);

-    }

-

-    /**

-     * Locks the link cache.

-     */

-    protected void lockLinks() {

-        getLinkCache().lockLinks();

-    }

-

-    /**

-     * Unlocks the link cache.

-     */

-    protected void unlockLinks() {

-        getLinkCache().unlockLinks();

-    }

-

-    /**

-     * Checks a link throw an appropriate exception.

-     */

-    protected void throwLinkException(String repositoryId, String id, String rel, String type) {

-        int index = getLinkCache().checkLink(repositoryId, id, rel, type);

-

-        switch (index) {

-        case 0:

-            throw new CmisObjectNotFoundException("Unknown repository!");

-        case 1:

-            throw new CmisObjectNotFoundException("Unknown object!");

-        case 2:

-            throw new CmisNotSupportedException("Operation not supported by the repository for this object!");

-        case 3:

-            throw new CmisNotSupportedException("No link with matching media type!");

-        case 4:

-            throw new CmisRuntimeException("Nothing wrong! Either this is a bug or a threading issue.");

-        default:

-            throw new CmisRuntimeException("Unknown error!");

-        }

-    }

-

-    /**

-     * Gets a type link from the cache.

-     */

-    protected String getTypeLink(String repositoryId, String typeId, String rel, String type) {

-        if (repositoryId == null) {

-            throw new CmisInvalidArgumentException("Repository id must be set!");

-        }

-

-        if (typeId == null) {

-            throw new CmisInvalidArgumentException("Type id must be set!");

-        }

-

-        return getLinkCache().getTypeLink(repositoryId, typeId, rel, type);

-    }

-

-    /**

-     * Gets a type link from the cache.

-     */

-    protected String getTypeLink(String repositoryId, String typeId, String rel) {

-        return getTypeLink(repositoryId, typeId, rel, null);

-    }

-

-    /**

-     * Gets a link from the cache if it is there or loads it into the cache if

-     * it is not there.

-     */

-    protected String loadTypeLink(String repositoryId, String typeId, String rel, String type) {

-        String link = getTypeLink(repositoryId, typeId, rel, type);

-        if (link == null) {

-            getTypeDefinitionInternal(repositoryId, typeId);

-            link = getTypeLink(repositoryId, typeId, rel, type);

-        }

-

-        return link;

-    }

-

-    /**

-     * Adds a type link to the cache.

-     */

-    protected void addTypeLink(String repositoryId, String typeId, String rel, String type, String link) {

-        getLinkCache().addTypeLink(repositoryId, typeId, rel, type, link);

-    }

-

-    /**

-     * Adds a type link to the cache.

-     */

-    protected void addTypeLink(String repositoryId, String typeId, AtomLink link) {

-        getLinkCache().addTypeLink(repositoryId, typeId, link.getRel(), link.getType(), link.getHref());

-    }

-

-    /**

-     * Removes all links of a type.

-     */

-    protected void removeTypeLinks(String repositoryId, String id) {

-        getLinkCache().removeTypeLinks(repositoryId, id);

-    }

-

-    /**

-     * Locks the type link cache.

-     */

-    protected void lockTypeLinks() {

-        getLinkCache().lockTypeLinks();

-    }

-

-    /**

-     * Unlocks the type link cache.

-     */

-    protected void unlockTypeLinks() {

-        getLinkCache().unlockTypeLinks();

-    }

-

-    /**

-     * Gets a collection from the cache.

-     */

-    protected String getCollection(String repositoryId, String collection) {

-        return getLinkCache().getCollection(repositoryId, collection);

-    }

-

-    /**

-     * Gets a collection from the cache if it is there or loads it into the

-     * cache if it is not there.

-     */

-    protected String loadCollection(String repositoryId, String collection) {

-        String link = getCollection(repositoryId, collection);

-        if (link == null) {

-            // cache repository info

-            getRepositoriesInternal(repositoryId);

-            link = getCollection(repositoryId, collection);

-        }

-

-        return link;

-    }

-

-    /**

-     * Adds a collection to the cache.

-     */

-    protected void addCollection(String repositoryId, String collection, String link) {

-        getLinkCache().addCollection(repositoryId, collection, link);

-    }

-

-    /**

-     * Gets a repository link from the cache.

-     */

-    protected String getRepositoryLink(String repositoryId, String rel) {

-        return getLinkCache().getRepositoryLink(repositoryId, rel);

-    }

-

-    /**

-     * Gets a repository link from the cache if it is there or loads it into the

-     * cache if it is not there.

-     */

-    protected String loadRepositoryLink(String repositoryId, String rel) {

-        String link = getRepositoryLink(repositoryId, rel);

-        if (link == null) {

-            // cache repository info

-            getRepositoriesInternal(repositoryId);

-            link = getRepositoryLink(repositoryId, rel);

-        }

-

-        return link;

-    }

-

-    /**

-     * Adds a repository link to the cache.

-     */

-    protected void addRepositoryLink(String repositoryId, String rel, String link) {

-        getLinkCache().addRepositoryLink(repositoryId, rel, link);

-    }

-

-    /**

-     * Adds a repository link to the cache.

-     */

-    protected void addRepositoryLink(String repositoryId, AtomLink link) {

-        addRepositoryLink(repositoryId, link.getRel(), link.getHref());

-    }

-

-    /**

-     * Gets an URI template from the cache.

-     */

-    protected String getTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {

-        return getLinkCache().getTemplateLink(repositoryId, type, parameters);

-    }

-

-    /**

-     * Gets a template link from the cache if it is there or loads it into the

-     * cache if it is not there.

-     */

-    protected String loadTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {

-        String link = getTemplateLink(repositoryId, type, parameters);

-        if (link == null) {

-            // cache repository info

-            getRepositoriesInternal(repositoryId);

-            link = getTemplateLink(repositoryId, type, parameters);

-        }

-

-        return link;

-    }

-

-    /**

-     * Adds an URI template to the cache.

-     */

-    protected void addTemplate(String repositoryId, String type, String link) {

-        getLinkCache().addTemplate(repositoryId, type, link);

-    }

-

-    // ---- exceptions ----

-

-    /**

-     * Converts a HTTP status code into an Exception.

-     */

-    protected CmisBaseException convertStatusCode(int code, String message, String errorContent, Throwable t) {

-        String exception = extractException(errorContent);

-        message = extractErrorMessage(message, errorContent);

-

-        switch (code) {

-        case 301:

-        case 302:

-        case 303:

-        case 307:

-            return new CmisConnectionException("Redirects are not supported (HTTP status code " + code + "): "

-                    + message, errorContent, t);

-        case 400:

-            if (CmisFilterNotValidException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisFilterNotValidException(message, errorContent, t);

-            }

-            return new CmisInvalidArgumentException(message, errorContent, t);

-        case 401:

-            return new CmisUnauthorizedException(message, errorContent, t);

-        case 403:

-            if (CmisStreamNotSupportedException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisStreamNotSupportedException(message, errorContent, t);

-            }

-            return new CmisPermissionDeniedException(message, errorContent, t);

-        case 404:

-            return new CmisObjectNotFoundException(message, errorContent, t);

-        case 405:

-            return new CmisNotSupportedException(message, errorContent, t);

-        case 407:

-            return new CmisProxyAuthenticationException(message, errorContent, t);

-        case 409:

-            if (CmisContentAlreadyExistsException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisContentAlreadyExistsException(message, errorContent, t);

-            } else if (CmisVersioningException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisVersioningException(message, errorContent, t);

-            } else if (CmisUpdateConflictException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisUpdateConflictException(message, errorContent, t);

-            } else if (CmisNameConstraintViolationException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisNameConstraintViolationException(message, errorContent, t);

-            }

-            return new CmisConstraintException(message, errorContent, t);

-        default:

-            if (CmisStorageException.EXCEPTION_NAME.equals(exception)) {

-                return new CmisStorageException(message, errorContent, t);

-            }

-            return new CmisRuntimeException(message, errorContent, t);

-        }

-    }

-

-    protected String extractException(String errorContent) {

-        if (errorContent == null) {

-            return null;

-        }

-

-        int begin = errorContent.indexOf("<!--exception-->");

-        int end = errorContent.indexOf("<!--/exception-->");

-

-        if (begin == -1 || end == -1 || begin > end) {

-            return null;

-        }

-

-        return errorContent.substring(begin + "<!--exception-->".length(), end);

-    }

-

-    protected String extractErrorMessage(String message, String errorContent) {

-        if (errorContent == null) {

-            return message;

-        }

-

-        int begin = errorContent.indexOf("<!--message-->");

-        int end = errorContent.indexOf("<!--/message-->");

-

-        if (begin == -1 || end == -1 || begin > end) {

-            return message;

-        }

-

-        return errorContent.substring(begin + "<!--message-->".length(), end);

-    }

-

-    // ---- helpers ----

-

-    protected boolean is(String name, AtomElement element) {

-        return name.equals(element.getName().getLocalPart());

-    }

-

-    protected boolean isStr(String name, AtomElement element) {

-        return is(name, element) && (element.getObject() instanceof String);

-    }

-

-    protected boolean isInt(String name, AtomElement element) {

-        return is(name, element) && (element.getObject() instanceof BigInteger);

-    }

-

-    protected boolean isNextLink(AtomElement element) {

-        return Constants.REL_NEXT.equals(((AtomLink) element.getObject()).getRel());

-    }

-

-    /**

-     * Creates a CMIS object with properties and policy ids.

-     */

-    protected ObjectDataImpl createObject(Properties properties, String changeToken, List<String> policies) {

-        ObjectDataImpl object = new ObjectDataImpl();

-

-        if (properties == null) {

-            properties = new PropertiesImpl();

-            if (changeToken != null) {

-                ((PropertiesImpl) properties)

-                        .addProperty(new PropertyStringImpl(PropertyIds.CHANGE_TOKEN, changeToken));

-            }

-        } else if (changeToken != null && !properties.getProperties().containsKey(PropertyIds.CHANGE_TOKEN)) {

-            properties = new PropertiesImpl(properties);

-            ((PropertiesImpl) properties).addProperty(new PropertyStringImpl(PropertyIds.CHANGE_TOKEN, changeToken));

-        }

-        object.setProperties(properties);

-

-        if (policies != null && !policies.isEmpty()) {

-            PolicyIdListImpl policyIdList = new PolicyIdListImpl();

-            policyIdList.setPolicyIds(policies);

-            object.setPolicyIds(policyIdList);

-        }

-

-        return object;

-    }

-

-    /**

-     * Creates a CMIS object that only contains an id in the property list.

-     */

-    protected ObjectData createIdObject(String objectId) {

-        ObjectDataImpl object = new ObjectDataImpl();

-

-        PropertiesImpl properties = new PropertiesImpl();

-        object.setProperties(properties);

-

-        properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_ID, objectId));

-

-        return object;

-    }

-

-    /**

-     * Parses an input stream.

-     */

-    @SuppressWarnings("unchecked")

-    protected <T extends AtomBase> T parse(InputStream stream, Class<T> clazz) {

-        AtomPubParser parser = new AtomPubParser(stream);

-

-        try {

-            parser.parse();

-        } catch (Exception e) {

-            throw new CmisConnectionException("Parsing exception!", e);

-        }

-

-        AtomBase parseResult = parser.getResults();

-

-        if (!clazz.isInstance(parseResult)) {

-            throw new CmisConnectionException("Unexpected document! Received: "

-                    + (parseResult == null ? "something unknown" : parseResult.getType()));

-        }

-

-        return (T) parseResult;

-    }

-

-    /**

-     * Performs a GET on an URL, checks the response code and returns the

-     * result.

-     */

-    protected Response read(UrlBuilder url) {

-        // make the call

-        // Log.d("URL", url.toString());

-        Response resp = getHttpInvoker().invokeGET(url, session);

-

-        // check response code

-        if (resp.getResponseCode() != 200) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-

-        return resp;

-    }

-

-    /**

-     * Performs a POST on an URL, checks the response code and returns the

-     * result.

-     */

-    protected Response post(UrlBuilder url, String contentType, Output writer) {

-        // make the call

-        // Log.d("URL", url.toString());

-        Response resp = getHttpInvoker().invokePOST(url, contentType, writer, session);

-

-        // check response code

-        if (resp.getResponseCode() != 201) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-

-        return resp;

-    }

-

-    /**

-     * Performs a PUT on an URL, checks the response code and returns the

-     * result.

-     */

-    protected Response put(UrlBuilder url, String contentType, Output writer) {

-        return put(url, contentType, null, writer);

-    }

-

-    /**

-     * Performs a PUT on an URL, checks the response code and returns the

-     * result.

-     */

-    protected Response put(UrlBuilder url, String contentType, Map<String, String> headers, Output writer) {

-        // make the call

-        // Log.d("URL", url.toString());

-        Response resp = getHttpInvoker().invokePUT(url, contentType, headers, writer, session);

-

-        // check response code

-        if ((resp.getResponseCode() < 200) || (resp.getResponseCode() > 299)) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-

-        return resp;

-    }

-

-    /**

-     * Performs a DELETE on an URL, checks the response code and returns the

-     * result.

-     */

-    protected void delete(UrlBuilder url) {

-        // make the call

-        // Log.d("URL", url.toString());

-        Response resp = getHttpInvoker().invokeDELETE(url, session);

-

-        // check response code

-        if (resp.getResponseCode() != 204) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-    }

-

-    // ---- common operations ----

-

-    /**

-     * Checks if at least one ACE list is not empty.

-     */

-    protected boolean isAclMergeRequired(Acl addAces, Acl removeAces) {

-        return (addAces != null && addAces.getAces() != null && !addAces.getAces().isEmpty())

-                || (removeAces != null && removeAces.getAces() != null && !removeAces.getAces().isEmpty());

-    }

-

-    /**

-     * Merges the new ACL from original, add and remove ACEs lists.

-     */

-    protected Acl mergeAcls(Acl originalAces, Acl addAces, Acl removeAces) {

-        Map<String, Set<String>> originals = convertAclToMap(originalAces);

-        Map<String, Set<String>> adds = convertAclToMap(addAces);

-        Map<String, Set<String>> removes = convertAclToMap(removeAces);

-        List<Ace> newAces = new ArrayList<Ace>();

-

-        // iterate through the original ACEs

-        for (Map.Entry<String, Set<String>> ace : originals.entrySet()) {

-

-            // add permissions

-            Set<String> addPermissions = adds.get(ace.getKey());

-            if (addPermissions != null) {

-                ace.getValue().addAll(addPermissions);

-            }

-

-            // remove permissions

-            Set<String> removePermissions = removes.get(ace.getKey());

-            if (removePermissions != null) {

-                ace.getValue().removeAll(removePermissions);

-            }

-

-            // create new ACE

-            if (!ace.getValue().isEmpty()) {

-                newAces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ace.getKey()),

-                        new ArrayList<String>(ace.getValue())));

-            }

-        }

-

-        // find all ACEs that should be added but are not in the original ACE

-        // list

-        for (Map.Entry<String, Set<String>> ace : adds.entrySet()) {

-            if (!originals.containsKey(ace.getKey()) && !ace.getValue().isEmpty()) {

-                newAces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ace.getKey()),

-                        new ArrayList<String>(ace.getValue())));

-            }

-        }

-

-        return new AccessControlListImpl(newAces);

-    }

-

-    /**

-     * Converts a list of ACEs into Map for better handling.

-     */

-    private static Map<String, Set<String>> convertAclToMap(Acl acl) {

-        Map<String, Set<String>> result = new HashMap<String, Set<String>>();

-

-        if (acl == null || acl.getAces() == null) {

-            return result;

-        }

-

-        for (Ace ace : acl.getAces()) {

-            // don't consider indirect ACEs - we can't change them

-            if (!ace.isDirect()) {

-                // ignore

-                continue;

-            }

-

-            // although a principal must not be null, check it

-            if (ace.getPrincipal() == null || ace.getPrincipal().getId() == null) {

-                // ignore

-                continue;

-            }

-

-            Set<String> permissions = result.get(ace.getPrincipal().getId());

-            if (permissions == null) {

-                permissions = new HashSet<String>();

-                result.put(ace.getPrincipal().getId(), permissions);

-            }

-

-            if (ace.getPermissions() != null) {

-                permissions.addAll(ace.getPermissions());

-            }

-        }

-

-        return result;

-    }

-

-    /**

-     * Retrieves the Service Document from the server and caches the repository

-     * info objects, collections, links, URI templates, etc.

-     */

-    @SuppressWarnings("unchecked")

-    protected List<RepositoryInfo> getRepositoriesInternal(String repositoryId) {

-        List<RepositoryInfo> repInfos = new ArrayList<RepositoryInfo>();

-

-        // retrieve service doc

-        UrlBuilder url = new UrlBuilder(getServiceDocURL());

-        url.addParameter(Constants.PARAM_REPOSITORY_ID, repositoryId);

-

-        // read and parse

-        Response resp = read(url);

-        ServiceDoc serviceDoc = parse(resp.getStream(), ServiceDoc.class);

-

-        // walk through the workspaces

-        for (RepositoryWorkspace ws : serviceDoc.getWorkspaces()) {

-            if (ws.getId() == null) {

-                // found a non-CMIS workspace

-                continue;

-            }

-

-            for (AtomElement element : ws.getElements()) {

-                if (is(NAME_COLLECTION, element)) {

-                    Map<String, String> colMap = (Map<String, String>) element.getObject();

-                    addCollection(ws.getId(), colMap.get("collectionType"), colMap.get("href"));

-                } else if (element.getObject() instanceof AtomLink) {

-                    addRepositoryLink(ws.getId(), (AtomLink) element.getObject());

-                } else if (is(NAME_URI_TEMPLATE, element)) {

-                    Map<String, String> tempMap = (Map<String, String>) element.getObject();

-                    addTemplate(ws.getId(), tempMap.get("type"), tempMap.get("template"));

-                } else if (element.getObject() instanceof RepositoryInfo) {

-                    repInfos.add((RepositoryInfo) element.getObject());

-                }

-            }

-        }

-

-        return repInfos;

-    }

-

-    /**

-     * Retrieves an object from the server and caches the links.

-     */

-    protected ObjectData getObjectInternal(String repositoryId, IdentifierType idOrPath, String objectIdOrPath,

-            ReturnVersion returnVersion, String filter, Boolean includeAllowableActions,

-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,

-            Boolean includeAcl, ExtensionsData extension) {

-

-        Map<String, Object> parameters = new HashMap<String, Object>();

-        parameters.put(Constants.PARAM_ID, objectIdOrPath);

-        parameters.put(Constants.PARAM_PATH, objectIdOrPath);

-        parameters.put(Constants.PARAM_RETURN_VERSION, returnVersion);

-        parameters.put(Constants.PARAM_FILTER, filter);

-        parameters.put(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        parameters.put(Constants.PARAM_ACL, includeAcl);

-        parameters.put(Constants.PARAM_POLICY_IDS, includePolicyIds);

-        parameters.put(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        parameters.put(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-

-        String link = loadTemplateLink(repositoryId, (idOrPath == IdentifierType.ID ? Constants.TEMPLATE_OBJECT_BY_ID

-                : Constants.TEMPLATE_OBJECT_BY_PATH), parameters);

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        // workaround for missing template parameter in the CMIS spec

-        if (returnVersion != null && returnVersion != ReturnVersion.THIS) {

-            url.addParameter(Constants.PARAM_RETURN_VERSION, returnVersion);

-        }

-

-        // read and parse

-        Response resp = read(url);

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        lockLinks();

-        ObjectData result = null;

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof ObjectData) {

-                    result = (ObjectData) element.getObject();

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-

-        return result;

-    }

-

-    /**

-     * Retrieves a type definition.

-     */

-    protected TypeDefinition getTypeDefinitionInternal(String repositoryId, String typeId) {

-

-        Map<String, Object> parameters = new HashMap<String, Object>();

-        parameters.put(Constants.PARAM_ID, typeId);

-

-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository!");

-        }

-

-        // read and parse

-        Response resp = read(new UrlBuilder(link));

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        lockTypeLinks();

-        TypeDefinition result = null;

-        try {

-            // clean up cache

-            removeTypeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof TypeDefinition) {

-                    result = (TypeDefinition) element.getObject();

-                }

-            }

-        } finally {

-            unlockTypeLinks();

-        }

-

-        return result;

-    }

-

-    /**

-     * Retrieves the ACL of an object.

-     */

-    public Acl getAclInternal(String repositoryId, String objectId, Boolean onlyBasicPermissions,

-            ExtensionsData extension) {

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_ONLY_BASIC_PERMISSIONS, onlyBasicPermissions);

-

-        // read and parse

-        Response resp = read(url);

-        AtomAcl acl = parse(resp.getStream(), AtomAcl.class);

-

-        return acl.getACL();

-    }

-

-    /**

-     * Updates the ACL of an object.

-     */

-    protected AtomAcl updateAcl(String repositoryId, String objectId, final Acl acl, AclPropagation aclPropagation) {

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);

-        }

-

-        UrlBuilder aclUrl = new UrlBuilder(link);

-        aclUrl.addParameter(Constants.PARAM_ACL_PROPAGATION, aclPropagation);

-

-        final CmisVersion cmisVersion = getCmisVersion(repositoryId);

-

-        // update

-        Response resp = put(aclUrl, Constants.MEDIATYPE_ACL, new Output() {

-            public void write(OutputStream out) throws Exception {

-                XmlSerializer writer = XMLUtils.createWriter(out);

-                XMLUtils.startXmlDocument(writer);

-                XMLConverter.writeAcl(writer, cmisVersion, true, acl);

-                XMLUtils.endXmlDocument(writer);

-            }

-        });

-

-        // parse new entry

-        return parse(resp.getStream(), AtomAcl.class);

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
deleted file mode 100644
index 3daf17a..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.spi.AclService;

-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;

-

-/**

- * ACL Service AtomPub client.

- */

-public class AclServiceImpl extends AbstractAtomPubService implements AclService, ExtendedAclService {

-

-    /**

-     * Constructor.

-     */

-    public AclServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,

-            AclPropagation aclPropagation, ExtensionsData extension) {

-

-        // fetch the current ACL

-        Acl originalAces = getAcl(repositoryId, objectId, false, null);

-

-        // if no changes required, just return the ACL

-        if (!isAclMergeRequired(addAces, removeAces)) {

-            return originalAces;

-        }

-

-        // merge ACLs

-        Acl newACL = mergeAcls(originalAces, addAces, removeAces);

-

-        // update ACL

-        AtomAcl acl = updateAcl(repositoryId, objectId, newACL, aclPropagation);

-        Acl result = acl.getACL();

-

-        return result;

-    }

-

-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {

-        return getAclInternal(repositoryId, objectId, onlyBasicPermissions, extension);

-    }

-

-    public Acl setAcl(String repositoryId, String objectId, Acl aces) {

-        AtomAcl acl = updateAcl(repositoryId, objectId, aces, AclPropagation.OBJECTONLY);

-        Acl result = acl.getACL();

-

-        return result;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java
deleted file mode 100644
index 00a936d..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_ID;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_TITLE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_UPDATED;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_BASE64;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_FILENAME;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_MEDIATYPE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ENTRY;

-

-import java.io.BufferedInputStream;

-import java.io.ByteArrayInputStream;

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.util.GregorianCalendar;

-import java.util.TimeZone;

-

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.PropertyData;

-import org.apache.chemistry.opencmis.commons.data.PropertyString;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.impl.Base64;

-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;

-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;

-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;

-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;

-import org.xmlpull.v1.XmlSerializer;

-

-/**

- * Writes a CMIS Atom entry to an output stream.

- */

-public class AtomEntryWriter {

-

-    private static final int BUFFER_SIZE = 8 * 1024;

-

-    private final CmisVersion cmisVersion;

-    private final ObjectData object;

-    private final ContentStream contentStream;

-    private final InputStream stream;

-    private final TypeDefinition typeDef;

-    private final BulkUpdateImpl bulkUpdate;

-

-    /**

-     * Constructor for objects.

-     */

-    public AtomEntryWriter(ObjectData object, CmisVersion cmisVersion) {

-        this(object, cmisVersion, null);

-    }

-

-    /**

-     * Constructor for objects.

-     */

-    public AtomEntryWriter(ObjectData object, CmisVersion cmisVersion, ContentStream contentStream) {

-        if ((object == null) || (object.getProperties() == null)) {

-            throw new CmisInvalidArgumentException("Object and properties must not be null!");

-        }

-

-        if ((contentStream != null) && (contentStream.getMimeType() == null)) {

-            throw new CmisInvalidArgumentException("Media type must be set if a stream is present!");

-        }

-

-        this.object = object;

-        this.cmisVersion = cmisVersion;

-        this.contentStream = contentStream;

-        if (contentStream != null && contentStream.getStream() != null) {

-            InputStream in = contentStream.getStream();

-

-            // avoid double buffering

-            if (!(in instanceof BufferedInputStream) && !(in instanceof ByteArrayInputStream)) {

-                stream = new BufferedInputStream(in, BUFFER_SIZE);

-            } else {

-                stream = in;

-            }

-        } else {

-            stream = null;

-        }

-        this.typeDef = null;

-        this.bulkUpdate = null;

-    }

-

-    /**

-     * Constructor for types.

-     */

-    public AtomEntryWriter(TypeDefinition type, CmisVersion cmisVersion) {

-        if (type == null) {

-            throw new CmisInvalidArgumentException("Type must not be null!");

-        }

-

-        this.typeDef = type;

-        this.cmisVersion = cmisVersion;

-        this.object = null;

-        this.contentStream = null;

-        this.stream = null;

-        this.bulkUpdate = null;

-    }

-

-    /**

-     * Constructor for bulk updates.

-     */

-    public AtomEntryWriter(BulkUpdateImpl bulkUpdate) {

-        if (bulkUpdate == null) {

-            throw new CmisInvalidArgumentException("Bulk update data must not be null!");

-        }

-

-        this.bulkUpdate = bulkUpdate;

-        this.typeDef = null;

-        this.cmisVersion = CmisVersion.CMIS_1_1;

-        this.object = null;

-        this.contentStream = null;

-        this.stream = null;

-    }

-

-    /**

-     * Writes the entry to an output stream.

-     * 

-     * @throws IOException

-     * @throws IllegalStateException

-     * @throws IllegalArgumentException

-     */

-    public void write(OutputStream out) throws IOException {

-        XmlSerializer  writer = XMLUtils.createWriter(out);

-

-        // start doc

-        XMLUtils.startXmlDocument(writer);

-

-        // start entry

-        writer.startTag(XMLConstants.NAMESPACE_ATOM, TAG_ENTRY);

-

-        writer.attribute("", XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);

-        writer.attribute("", XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);

-        writer.attribute("", XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);

-        

-        if (contentStream != null && contentStream.getFileName() != null) {

-          writer.attribute("", XMLConstants.PREFIX_APACHE_CHEMISTY,XMLConstants.NAMESPACE_APACHE_CHEMISTRY); 

-        }

-        

-

-        // atom:id

-        writeTag(writer, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_ID, "urn:uuid:00000000-0000-0000-0000-00000000000");

-

-        // atom:title

-        writeTag(writer, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_TITLE, getTitle());

-

-        // atom:updated

-        writeTag(writer, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_UPDATED, getUpdated());

-

-        // content

-        if (stream != null) {

-            writer.startTag(XMLConstants.NAMESPACE_RESTATOM, TAG_CONTENT);

-

-            writeTag(writer, XMLConstants.NAMESPACE_RESTATOM, TAG_CONTENT_MEDIATYPE, contentStream.getMimeType());

-

-            if (contentStream.getFileName() != null) {

-                XMLUtils.write(writer, XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY,

-                        TAG_CONTENT_FILENAME, contentStream.getFileName());

-            }

-

-            writer.startTag(XMLConstants.NAMESPACE_RESTATOM, TAG_CONTENT_BASE64);

-            writeContent(writer);

-            writer.endTag(XMLConstants.NAMESPACE_RESTATOM, TAG_CONTENT_BASE64);

-

-            writer.endTag(XMLConstants.NAMESPACE_RESTATOM, TAG_CONTENT);

-        }

-

-        // object

-        if (object != null) {

-            XMLConverter.writeObject(writer, cmisVersion, XMLConstants.NAMESPACE_RESTATOM, object);

-        }

-

-        // type

-        if (typeDef != null) {

-            XMLConverter.writeTypeDefinition(writer, cmisVersion, XMLConstants.NAMESPACE_RESTATOM, typeDef);

-        }

-

-        // bulk update

-        if (bulkUpdate != null) {

-            XMLConverter.writeBulkUpdate(writer, XMLConstants.NAMESPACE_RESTATOM, bulkUpdate);

-        }

-

-        // end entry

-        writer.endTag(XMLConstants.NAMESPACE_ATOM, TAG_ENTRY);

-

-        // end document

-        XMLUtils.endXmlDocument(writer);

-    }

-

-    // ---- internal ----

-

-    private String getTitle() {

-        String result = "";

-

-        if (object != null) {

-            PropertyData<?> nameProperty = object.getProperties().getProperties().get(PropertyIds.NAME);

-            if (nameProperty instanceof PropertyString) {

-                result = ((PropertyString) nameProperty).getFirstValue();

-            }

-        }

-

-        if (typeDef != null) {

-            if (typeDef.getDisplayName() != null) {

-                result = typeDef.getDisplayName();

-            }

-        }

-

-        if (bulkUpdate != null) {

-            result = "Bulk Update Properties";

-        }

-

-        return result;

-    }

-

-    private void writeContent(XmlSerializer writer) throws IOException {

-        @SuppressWarnings("resource")

-        Base64.InputStream b64stream = new Base64.InputStream(stream, Base64.ENCODE);

-

-        char[] buffer = new char[BUFFER_SIZE];

-        int pos = 0;

-        int b;

-

-        while ((b = b64stream.read()) > -1) {

-            buffer[pos++] = (char) (b & 0xFF);

-            if (pos == buffer.length) {

-                writer.text(buffer, 0, buffer.length);

-                pos = 0;

-            }

-        }

-        if (pos > 0) {

-            writer.text(buffer, 0, pos);

-        }

-    }

-

-    private static String getUpdated() {

-        return DateTimeHelper.formatXmlDateTime(new GregorianCalendar(TimeZone.getTimeZone("GMT")));

-    }

-

-    private static void writeTag(XmlSerializer writer, String tagNameSpace, String tagName, String text)

-            throws IOException {

-        writer.startTag(tagNameSpace, tagName);

-        writer.text(text);

-        writer.endTag(tagNameSpace, tagName);

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java
deleted file mode 100644
index ff31962..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.CONTENT_SRC;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_HREF;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_REL;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_TYPE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACL;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ALLOWABLEACTIONS;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CHILDREN;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_COLLECTION;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_COLLECTION_TYPE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ENTRY;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_FEED;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_HTML;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_LINK;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_NUM_ITEMS;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_PATH_SEGMENT;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_RELATIVE_PATH_SEGMENT;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPOSITORY_INFO;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_SERVICE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TEMPLATE_TEMPLATE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TEMPLATE_TYPE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TYPE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_URI_TEMPLATE;

-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_WORKSPACE;

-

-import java.io.InputStream;

-import java.math.BigInteger;

-import java.util.HashMap;

-import java.util.Map;

-

-import javax.xml.namespace.QName;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAllowableActions;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.HtmlDoc;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.impl.IOUtils;

-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;

-import org.apache.chemistry.opencmis.commons.impl.XMLConstraints;

-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;

-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;

-import org.xmlpull.v1.XmlPullParser;

-import org.xmlpull.v1.XmlPullParserException;

-

-/**

- * AtomPub Parser.

- */

-public class AtomPubParser {

-

-    // public constants

-    public static final String LINK_REL_CONTENT = "@@content@@";

-

-    private final InputStream stream;

-    private AtomBase parseResult;

-

-    public AtomPubParser(InputStream stream) {

-        if (stream == null) {

-            throw new IllegalArgumentException("No stream.");

-        }

-

-        this.stream = stream;

-    }

-

-    /**

-     * Parses the stream.

-     */

-    public void parse() throws XmlPullParserException {

-        XmlPullParser parser = XMLUtils.createParser(stream);

-

-        try {

-            while (true) {

-                int event = parser.getEventType();

-                if (event == XmlPullParser.START_TAG) {

-                    QName name = new QName(parser.getNamespace(), parser.getName());

-

-                    if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {

-                        if (TAG_FEED.equals(name.getLocalPart())) {

-                            parseResult = parseFeed(parser);

-                            break;

-                        } else if (TAG_ENTRY.equals(name.getLocalPart())) {

-                            parseResult = parseEntry(parser);

-                            break;

-                        }

-                    } else if (XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI())) {

-                        if (TAG_ALLOWABLEACTIONS.equals(name.getLocalPart())) {

-                            parseResult = parseAllowableActions(parser);

-                            break;

-                        } else if (TAG_ACL.equals(name.getLocalPart())) {

-                            parseResult = parseACL(parser);

-                            break;

-                        }

-                    } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {

-                        if (TAG_SERVICE.equals(name.getLocalPart())) {

-                            parseResult = parseServiceDoc(parser);

-                            break;

-                        }

-                    } else if (TAG_HTML.equalsIgnoreCase(name.getLocalPart())) {

-                        parseResult = new HtmlDoc();

-                        break;

-                    }

-                }

-

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        } finally {

-            // make sure the stream is read and closed in all cases

-            IOUtils.consumeAndClose(stream);

-        }

-    }

-

-    /**

-     * Return the parse results.

-     */

-    public AtomBase getResults() {

-        return parseResult;

-    }

-

-    /**

-     * Parses a service document.

-     */

-    private static ServiceDoc parseServiceDoc(XmlPullParser parser) throws XmlPullParserException {

-        ServiceDoc result = new ServiceDoc();

-

-        XMLUtils.next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName name = new QName(parser.getNamespace(), parser.getName());

-

-                if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {

-                    if (TAG_WORKSPACE.equals(name.getLocalPart())) {

-                        result.addWorkspace(parseWorkspace(parser));

-                    } else {

-                        XMLUtils.skip(parser);

-                    }

-                } else {

-                    XMLUtils.skip(parser);

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        return result;

-    }

-

-    /**

-     * Parses a workspace element in a service document.

-     */

-    private static RepositoryWorkspace parseWorkspace(XmlPullParser parser) throws XmlPullParserException {

-        RepositoryWorkspace workspace = new RepositoryWorkspace();

-

-        XMLUtils.next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                AtomElement element = parseWorkspaceElement(parser);

-

-                // check if we can extract the workspace id

-                if ((element != null) && (element.getObject() instanceof RepositoryInfo)) {

-                    workspace.setId(((RepositoryInfo) element.getObject()).getId());

-                }

-

-                // add to workspace

-                workspace.addElement(element);

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return workspace;

-    }

-

-    /**

-     * Parses an Atom feed.

-     */

-    private AtomFeed parseFeed(XmlPullParser parser) throws XmlPullParserException {

-        AtomFeed result = new AtomFeed();

-

-        XMLUtils.next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName name = new QName(parser.getNamespace(), parser.getName());

-

-                if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {

-                    if (TAG_LINK.equals(name.getLocalPart())) {

-                        result.addElement(parseLink(parser));

-                    } else if (TAG_ENTRY.equals(name.getLocalPart())) {

-                        result.addEntry(parseEntry(parser));

-                    } else {

-                        XMLUtils.skip(parser);

-                    }

-                } else if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {

-                    if (TAG_NUM_ITEMS.equals(name.getLocalPart())) {

-                        result.addElement(parseBigInteger(parser));

-                    } else {

-                        XMLUtils.skip(parser);

-                    }

-                } else {

-                    XMLUtils.skip(parser);

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return result;

-    }

-

-    /**

-     * Parses an Atom entry.

-     * 

-     * @throws XmlPullParserException

-     */

-    private AtomEntry parseEntry(XmlPullParser parser) throws XmlPullParserException {

-        AtomEntry result = new AtomEntry();

-

-        XMLUtils.next(parser);

-

-        // walk through all tags in entry

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                AtomElement element = parseElement(parser);

-                if (element != null) {

-                    // add to entry

-                    result.addElement(element);

-

-                    // find and set object id

-                    if (element.getObject() instanceof ObjectData) {

-                        result.setId(((ObjectData) element.getObject()).getId());

-                    } else if (element.getObject() instanceof TypeDefinition) {

-                        result.setId(((TypeDefinition) element.getObject()).getId());

-                    }

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return result;

-    }

-

-    /**

-     * Parses an Allowable Actions document.

-     */

-    private static AtomAllowableActions parseAllowableActions(XmlPullParser parser) throws XmlPullParserException {

-        return new AtomAllowableActions(XMLConverter.convertAllowableActions(parser));

-    }

-

-    /**

-     * Parses an ACL document.

-     */

-    private static AtomAcl parseACL(XmlPullParser parser) throws XmlPullParserException {

-        return new AtomAcl(XMLConverter.convertAcl(parser));

-    }

-

-    /**

-     * Parses an element.

-     * 

-     * @throws XmlPullParserException

-     */

-    private AtomElement parseElement(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-

-        if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {

-            if (TAG_OBJECT.equals(name.getLocalPart())) {

-                return new AtomElement(name, XMLConverter.convertObject(parser));

-            } else if (TAG_PATH_SEGMENT.equals(name.getLocalPart())

-                    || TAG_RELATIVE_PATH_SEGMENT.equals(name.getLocalPart())) {

-                return parseText(parser);

-            } else if (TAG_TYPE.equals(name.getLocalPart())) {

-                return new AtomElement(name, XMLConverter.convertTypeDefinition(parser));

-            } else if (TAG_CHILDREN.equals(name.getLocalPart())) {

-                return parseChildren(parser);

-            }

-        } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {

-            if (TAG_LINK.equals(name.getLocalPart())) {

-                return parseLink(parser);

-            } else if (TAG_CONTENT.equals(name.getLocalPart())) {

-                return parseAtomContentSrc(parser);

-            }

-        }

-

-        // we don't know it - skip it

-        XMLUtils.skip(parser);

-

-        return null;

-    }

-

-    /**

-     * Parses a children element.

-     */

-    private AtomElement parseChildren(XmlPullParser parser) throws XmlPullParserException {

-        AtomElement result = null;

-        QName childName = new QName(parser.getNamespace(), parser.getName());

-

-        XMLUtils.next(parser);

-

-        // walk through the children tag

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName name = new QName(parser.getNamespace(), parser.getName());

-

-                if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {

-                    if (TAG_FEED.equals(name.getLocalPart())) {

-                        result = new AtomElement(childName, parseFeed(parser));

-                    } else {

-                        XMLUtils.skip(parser);

-                    }

-                } else {

-                    XMLUtils.skip(parser);

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return result;

-    }

-

-    /**

-     * Parses a workspace element.

-     */

-    private static AtomElement parseWorkspaceElement(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-

-        if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {

-            if (TAG_REPOSITORY_INFO.equals(name.getLocalPart())) {

-                return new AtomElement(name, XMLConverter.convertRepositoryInfo(parser));

-            } else if (TAG_URI_TEMPLATE.equals(name.getLocalPart())) {

-                return parseTemplate(parser);

-            }

-        } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {

-            if (TAG_LINK.equals(name.getLocalPart())) {

-                return parseLink(parser);

-            }

-        } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {

-            if (TAG_COLLECTION.equals(name.getLocalPart())) {

-                return parseCollection(parser);

-            }

-        }

-

-        // we don't know it - skip it

-        XMLUtils.skip(parser);

-

-        return null;

-    }

-

-    /**

-     * Parses a collection tag.

-     */

-    private static AtomElement parseCollection(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        Map<String, String> result = new HashMap<String, String>();

-

-        result.put("href", parser.getAttributeValue(null, "href"));

-

-        XMLUtils.next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName tagName = new QName(parser.getNamespace(), parser.getName());

-                if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())

-                        && TAG_COLLECTION_TYPE.equals(tagName.getLocalPart())) {

-                    result.put("collectionType", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));

-                } else {

-                    XMLUtils.skip(parser);

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return new AtomElement(name, result);

-    }

-

-    /**

-     * Parses a template tag.

-     */

-    private static AtomElement parseTemplate(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        Map<String, String> result = new HashMap<String, String>();

-

-        XMLUtils.next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName tagName = new QName(parser.getNamespace(), parser.getName());

-                if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())) {

-                    if (TAG_TEMPLATE_TEMPLATE.equals(tagName.getLocalPart())) {

-                        result.put("template", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));

-                    } else if (TAG_TEMPLATE_TYPE.equals(tagName.getLocalPart())) {

-                        result.put("type", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));

-                    } else {

-                        XMLUtils.skip(parser);

-                    }

-                } else {

-                    XMLUtils.skip(parser);

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!XMLUtils.next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        XMLUtils.next(parser);

-

-        return new AtomElement(name, result);

-    }

-

-    /**

-     * Parses a link tag.

-     */

-    private static AtomElement parseLink(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        AtomLink result = new AtomLink();

-

-        // save attributes

-        for (int i = 0; i < parser.getAttributeCount(); i++) {

-            if (LINK_REL.equals(parser.getAttributeName(i))) {

-                result.setRel(parser.getAttributeValue(i));

-            } else if (LINK_HREF.equals(parser.getAttributeName(i))) {

-                result.setHref(parser.getAttributeValue(i));

-            } else if (LINK_TYPE.equals(parser.getAttributeName(i))) {

-                result.setType(parser.getAttributeValue(i));

-            }

-        }

-

-        // skip enclosed tags, if any

-        XMLUtils.skip(parser);

-

-        return new AtomElement(name, result);

-    }

-

-    /**

-     * Parses a link tag.

-     */

-    private static AtomElement parseAtomContentSrc(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        AtomLink result = new AtomLink();

-        result.setRel(LINK_REL_CONTENT);

-

-        // save attributes

-        for (int i = 0; i < parser.getAttributeCount(); i++) {

-            if (CONTENT_SRC.equals(parser.getAttributeName(i))) {

-                result.setHref(parser.getAttributeValue(i));

-            }

-        }

-

-        // skip enclosed tags, if any

-        XMLUtils.skip(parser);

-

-        return new AtomElement(name, result);

-    }

-

-    /**

-     * Parses a text tag.

-     * 

-     * @throws XmlPullParserException

-     */

-    private static AtomElement parseText(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        return new AtomElement(name, XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));

-    }

-

-    /**

-     * Parses a text tag and convert it into an integer.

-     */

-    private static AtomElement parseBigInteger(XmlPullParser parser) throws XmlPullParserException {

-        QName name = new QName(parser.getNamespace(), parser.getName());

-        return new AtomElement(name, new BigInteger(XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH)));

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java
deleted file mode 100644
index 699cf29..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.util.HashSet;

-import java.util.Set;

-

-/**

- * Constants for AtomPub.

- */

-public final class CmisAtomPubConstants {

-

-    private CmisAtomPubConstants() {

-    }

-

-    // service doc

-    public static final String TAG_SERVICE = "service";

-    public static final String TAG_WORKSPACE = "workspace";

-    public static final String TAG_REPOSITORY_INFO = "repositoryInfo";

-    public static final String TAG_COLLECTION = "collection";

-    public static final String TAG_COLLECTION_TYPE = "collectionType";

-    public static final String TAG_URI_TEMPLATE = "uritemplate";

-    public static final String TAG_TEMPLATE_TEMPLATE = "template";

-    public static final String TAG_TEMPLATE_TYPE = "type";

-    public static final String TAG_LINK = "link";

-

-    // atom

-    public static final String TAG_ATOM_ID = "id";

-    public static final String TAG_ATOM_TITLE = "title";

-    public static final String TAG_ATOM_UPDATED = "updated";

-

-    // feed

-    public static final String TAG_FEED = "feed";

-

-    // entry

-    public static final String TAG_ENTRY = "entry";

-    public static final String TAG_OBJECT = "object";

-    public static final String TAG_NUM_ITEMS = "numItems";

-    public static final String TAG_PATH_SEGMENT = "pathSegment";

-    public static final String TAG_RELATIVE_PATH_SEGMENT = "relativePathSegment";

-    public static final String TAG_TYPE = "type";

-    public static final String TAG_CHILDREN = "children";

-    public static final String TAG_CONTENT = "content";

-    public static final String TAG_CONTENT_MEDIATYPE = "mediatype";

-    public static final String TAG_CONTENT_BASE64 = "base64";

-    public static final String TAG_CONTENT_FILENAME = "filename";

-

-    public static final String ATTR_DOCUMENT_TYPE = "cmisTypeDocumentDefinitionType";

-    public static final String ATTR_FOLDER_TYPE = "cmisTypeFolderDefinitionType";

-    public static final String ATTR_RELATIONSHIP_TYPE = "cmisTypeRelationshipDefinitionType";

-    public static final String ATTR_POLICY_TYPE = "cmisTypePolicyDefinitionType";

-    public static final String ATTR_ITEM_TYPE = "cmisTypeItemDefinitionType";

-    public static final String ATTR_SECONDARY_TYPE = "cmisTypeSecondaryDefinitionType";

-

-    // allowable actions

-    public static final String TAG_ALLOWABLEACTIONS = "allowableActions";

-

-    // ACL

-    public static final String TAG_ACL = "acl";

-

-    // HTML

-    public static final String TAG_HTML = "html";

-

-    // links

-    public static final String LINK_REL = "rel";

-    public static final String LINK_HREF = "href";

-    public static final String LINK_TYPE = "type";

-    public static final String CONTENT_SRC = "src";

-

-    // Android Parser Specific

-    public static final String TAG_PROPERTY = "property";

-    public static final String ATTR_PROPERTY_ID = "id";

-    public static final String ATTR_PROPERTY_LOCALNAME = "localName";

-    public static final String ATTR_PROPERTY_DISPLAYNAME = "displayName";

-    public static final String ATTR_PROPERTY_QUERYNAME = "queryName";

-    public static final String ATTR_PROPERTY_VALUE = "value";

-    public static final String ATTR_PROPERTY_DATATYPE = "type";

-    public static final String ATTR_PROPERTY_CARDINALITY = "cardinality";

-

-    public static final String TAG_REPINFO_ID = "repositoryId";

-    public static final String TAG_REPINFO_NAME = "repositoryName";

-    public static final String TAG_REPINFO_DESCRIPTION = "repositoryDescription";

-    public static final String TAG_REPINFO_VENDOR = "vendorName";

-    public static final String TAG_REPINFO_PRODUCT = "productName";

-    public static final String TAG_REPINFO_PRODUCT_VERSION = "productVersion";

-    public static final String TAG_REPINFO_ROOT_FOLDER_ID = "rootFolderId";

-    public static final String TAG_REPINFO_REPOSITORY_URL = "repositoryUrl";

-    public static final String TAG_REPINFO_ROOT_FOLDER_URL = "rootFolderUrl";

-    public static final String TAG_REPINFO_CAPABILITIES = "capabilities";

-    public static final String TAG_REPINFO_ACL_CAPABILITY = "aclCapability";

-    public static final String TAG_REPINFO_CHANGE_LOCK_TOKEN = "latestChangeLogToken";

-    public static final String TAG_REPINFO_CMIS_VERSION_SUPPORTED = "cmisVersionSupported";

-    public static final String TAG_REPINFO_THIN_CLIENT_URI = "thinClientURI";

-    public static final String TAG_REPINFO_CHANGES_INCOMPLETE = "changesIncomplete";

-    public static final String TAG_REPINFO_CHANGES_ON_TYPE = "changesOnType";

-    public static final String TAG_REPINFO_PRINCIPAL_ANONYMOUS = "principalAnonymous";

-    public static final String TAG_REPINFO_PRINCIPAL_ANYONE = "principalAnyone";

-

-    public static final Set<String> REPINFO_KEYS = new HashSet<String>();

-    static {

-        REPINFO_KEYS.add(TAG_REPINFO_ID);

-        REPINFO_KEYS.add(TAG_REPINFO_NAME);

-        REPINFO_KEYS.add(TAG_REPINFO_DESCRIPTION);

-        REPINFO_KEYS.add(TAG_REPINFO_VENDOR);

-        REPINFO_KEYS.add(TAG_REPINFO_PRODUCT);

-        REPINFO_KEYS.add(TAG_REPINFO_PRODUCT_VERSION);

-        REPINFO_KEYS.add(TAG_REPINFO_ROOT_FOLDER_ID);

-        REPINFO_KEYS.add(TAG_REPINFO_REPOSITORY_URL);

-        REPINFO_KEYS.add(TAG_REPINFO_ROOT_FOLDER_URL);

-        REPINFO_KEYS.add(TAG_REPINFO_CAPABILITIES);

-        REPINFO_KEYS.add(TAG_REPINFO_ACL_CAPABILITY);

-        REPINFO_KEYS.add(TAG_REPINFO_CHANGE_LOCK_TOKEN);

-        REPINFO_KEYS.add(TAG_REPINFO_CMIS_VERSION_SUPPORTED);

-        REPINFO_KEYS.add(TAG_REPINFO_THIN_CLIENT_URI);

-        REPINFO_KEYS.add(TAG_REPINFO_CHANGES_INCOMPLETE);

-        REPINFO_KEYS.add(TAG_REPINFO_CHANGES_ON_TYPE);

-        REPINFO_KEYS.add(TAG_REPINFO_PRINCIPAL_ANONYMOUS);

-        REPINFO_KEYS.add(TAG_REPINFO_PRINCIPAL_ANYONE);

-    }

-

-    public static final String TAG_ACLCAP_ACL_PROPAGATION = "propagation";

-    public static final String TAG_ACLCAP_SUPPORTED_PERMISSIONS = "supportedPermissions";

-    public static final String TAG_ACLCAP_PERMISSIONS = "permissions";

-    public static final String TAG_ACLCAP_PERMISSION_PERMISSION = "permission";

-    public static final String TAG_ACLCAP_PERMISSION_DESCRIPTION = "description";

-    public static final String TAG_ACLCAP_MAPPING = "mapping";

-    public static final String TAG_ACLCAP_MAPPING_KEY = "key";

-    public static final String TAG_ACLCAP_MAPPING_PERMISSION = "permission";

-    public static final String TAG_ACLCAP_DIRECT = "direct";

-

-    public static final String TAG_CAP_CONTENT_STREAM_UPDATES = "capabilityContentStreamUpdatability";

-    public static final String TAG_CAP_CHANGES = "capabilityChanges";

-    public static final String TAG_CAP_RENDITIONS = "capabilityRenditions";

-    public static final String TAG_CAP_GET_DESCENDANTS = "capabilityGetDescendants";

-    public static final String TAG_CAP_GET_FOLDER_TREE = "capabilityGetFolderTree";

-    public static final String TAG_CAP_MULTIFILING = "capabilityMultifiling";

-    public static final String TAG_CAP_UNFILING = "capabilityUnfiling";

-    public static final String TAG_CAP_VERSION_SPECIFIC_FILING = "capabilityVersionSpecificFiling";

-    public static final String TAG_CAP_PWC_SEARCHABLE = "capabilityPWCSearchable";

-    public static final String TAG_CAP_PWC_UPDATABLE = "capabilityPWCUpdatable";

-    public static final String TAG_CAP_ALL_VERSIONS_SEARCHABLE = "capabilityAllVersionsSearchable";

-    public static final String TAG_CAP_QUERY = "capabilityQuery";

-    public static final String TAG_CAP_JOIN = "capabilityJoin";

-    public static final String TAG_CAP_ACL = "capabilityACL";

-

-    public static final String ATTR_PROPERTY_TYPE_ID = "id";

-    public static final String ATTR_PROPERTY_DEFINITION_ID = "propertyDefinitionId";

-    public static final String ATTR_PROPERTY_TYPE_LOCALNAME = "localName";

-    public static final String ATTR_PROPERTY_TYPE_LOCALNAMESPACE = "localNamespace";

-    public static final String ATTR_PROPERTY_TYPE_DISPLAYNAME = "displayName";

-    public static final String ATTR_PROPERTY_TYPE_QUERYNAME = "queryName";

-    public static final String ATTR_PROPERTY_TYPE_DESCRIPTION = "description";

-    public static final String ATTR_PROPERTY_TYPE_PROPERTY_TYPE = "propertyType";

-    public static final String ATTR_PROPERTY_TYPE_CARDINALITY = "cardinality";

-    public static final String ATTR_PROPERTY_TYPE_UPDATABILITY = "updatability";

-    public static final String ATTR_PROPERTY_TYPE_INHERITED = "inherited";

-    public static final String ATTR_PROPERTY_TYPE_REQUIRED = "required";

-    public static final String ATTR_PROPERTY_TYPE_QUERYABLE = "queryable";

-    public static final String ATTR_PROPERTY_TYPE_ORDERABLE = "orderable";

-    public static final String ATTR_PROPERTY_TYPE_OPENCHOICE = "openChoice";

-

-    public static final String ATTR_PROPERTY_TYPE_MAX_LENGTH = "maxLength";

-    public static final String ATTR_PROPERTY_TYPE_MIN_VALUE = "minValue";

-    public static final String ATTR_PROPERTY_TYPE_MAX_VALUE = "maxValue";

-    public static final String ATTR_PROPERTY_TYPE_PRECISION = "precision";

-    public static final String ATTR_PROPERTY_TYPE_RESOLUTION = "resolution";

-

-    public static final String TAG_RENDITION = "rendition";

-    public static final String TAG_RENDITION_STREAM_ID = "streamId";

-    public static final String TAG_RENDITION_MIMETYPE = "mimeType";

-    public static final String TAG_RENDITION_LENGTH = "length";

-    public static final String TAG_RENDITION_KIND = "kind";

-    public static final String TAG_RENDITION_TITLE = "title";

-    public static final String TAG_RENDITION_HEIGHT = "height";

-    public static final String TAG_RENDITION_WIDTH = "width";

-    public static final String TAG_RENDITION_DOCUMENT_ID = "renditionDocumentId";

-

-    public static final String TAG_ACE_PRINCIPAL = "principal";

-    public static final String TAG_ACE_PRINCIPAL_ID = "principalId";

-    public static final String TAG_ACE_DIRECT = "direct";

-

-    public static final String TYPE_ID = "id";

-    public static final String TYPE_LOCALNAME = "localName";

-    public static final String TYPE_LOCALNAMESPACE = "localNamespace";

-    public static final String TYPE_DISPLAYNAME = "displayName";

-    public static final String TYPE_QUERYNAME = "queryName";

-    public static final String TYPE_DESCRIPTION = "description";

-    public static final String TYPE_BASE_ID = "baseId";

-    public static final String TYPE_PARENT_ID = "parentId";

-    public static final String TYPE_CREATABLE = "creatable";

-    public static final String TYPE_FILEABLE = "fileable";

-    public static final String TYPE_QUERYABLE = "queryable";

-    public static final String TYPE_FULLTEXT_INDEXED = "fulltextIndexed";

-    public static final String TYPE_INCLUDE_IN_SUPERTYPE_QUERY = "includedInSupertypeQuery";

-    public static final String TYPE_CONTROLABLE_POLICY = "controllablePolicy";

-    public static final String TYPE_CONTROLABLE_ACL = "controllableACL";

-    public static final String TYPE_PROPERTY_DEFINITIONS = "propertyDefinitions";

-    public static final String TYPE_CONTENTSTREAM_ALLOWED = "contentStreamAllowed"; // document

-    public static final String TYPE_VERSIONABLE = "versionable"; // document

-

-    public static final String TAG_VALUE = "value";

-    public static final String TAG_QUERY = "query";

-    public static final String TAG_QUERY_STATEMENT = "statement";

-

-    public static final String TAG_OBJECT_PROPERTIES = "properties";

-    public static final String TAG_OBJECT_ALLOWABLE_ACTIONS = "allowableActions";

-    public static final String TAG_OBJECT_RELATIONSHIPS = "relationships";

-    public static final String TAG_OBJECT_CHANGE_EVENT_INFO = "changeEventInfo";

-    public static final String TAG_OBJECT_ACL = "acl";

-    public static final String TAG_OBJECT_EXACT_ACL = "exactACL";

-    public static final String TAG_OBJECT_POLICY_IDS = "policyIds";

-    public static final String TAG_OBJECT_RENDITION = "rendition";

-

-    public static final Set<String> OBJECT_KEYS = new HashSet<String>();

-    static {

-        OBJECT_KEYS.add(TAG_OBJECT_PROPERTIES);

-        OBJECT_KEYS.add(TAG_OBJECT_ALLOWABLE_ACTIONS);

-        OBJECT_KEYS.add(TAG_OBJECT_RELATIONSHIPS);

-        OBJECT_KEYS.add(TAG_OBJECT_CHANGE_EVENT_INFO);

-        OBJECT_KEYS.add(TAG_OBJECT_ACL);

-        OBJECT_KEYS.add(TAG_OBJECT_EXACT_ACL);

-        OBJECT_KEYS.add(TAG_OBJECT_POLICY_IDS);

-        OBJECT_KEYS.add(TAG_OBJECT_RENDITION);

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java
deleted file mode 100644
index 684e99b..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;

-import org.apache.chemistry.opencmis.commons.spi.AclService;

-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;

-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;

-import org.apache.chemistry.opencmis.commons.spi.NavigationService;

-import org.apache.chemistry.opencmis.commons.spi.ObjectService;

-import org.apache.chemistry.opencmis.commons.spi.PolicyService;

-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;

-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;

-import org.apache.chemistry.opencmis.commons.spi.VersioningService;

-import org.slf4j.Logger;

-import org.slf4j.LoggerFactory;

-

-/**

- * CMIS AtomPub SPI implementation.

- */

-public class CmisAtomPubSpi implements CmisSpi {

-

-    private static final Logger LOG = LoggerFactory.getLogger(CmisAtomPubSpi.class);

-

-    private final BindingSession session;

-

-    private final RepositoryService repositoryService;

-    private final NavigationService navigationService;

-    private final ObjectService objectService;

-    private final VersioningService versioningService;

-    private final DiscoveryService discoveryService;

-    private final MultiFilingService multiFilingService;

-    private final RelationshipService relationshipService;

-    private final PolicyService policyService;

-    private final AclService aclService;

-

-    /**

-     * Constructor.

-     */

-    public CmisAtomPubSpi(BindingSession session) {

-        if (LOG.isDebugEnabled()) {

-            LOG.debug("Session {}: Initializing AtomPub SPI...", session.getSessionId());

-        }

-

-        this.session = session;

-

-        repositoryService = new RepositoryServiceImpl(session);

-        navigationService = new NavigationServiceImpl(session);

-        objectService = new ObjectServiceImpl(session);

-        versioningService = new VersioningServiceImpl(session);

-        discoveryService = new DiscoveryServiceImpl(session);

-        multiFilingService = new MultiFilingServiceImpl(session);

-        relationshipService = new RelationshipServiceImpl(session);

-        policyService = new PolicyServiceImpl(session);

-        aclService = new AclServiceImpl(session);

-    }

-

-    public RepositoryService getRepositoryService() {

-        return repositoryService;

-    }

-

-    public NavigationService getNavigationService() {

-        return navigationService;

-    }

-

-    public ObjectService getObjectService() {

-        return objectService;

-    }

-

-    public DiscoveryService getDiscoveryService() {

-        return discoveryService;

-    }

-

-    public VersioningService getVersioningService() {

-        return versioningService;

-    }

-

-    public MultiFilingService getMultiFilingService() {

-        return multiFilingService;

-    }

-

-    public RelationshipService getRelationshipService() {

-        return relationshipService;

-    }

-

-    public PolicyService getPolicyService() {

-        return policyService;

-    }

-

-    public AclService getAclService() {

-        return aclService;

-    }

-

-    public void clearAllCaches() {

-        session.remove(SpiSessionParameter.LINK_CACHE);

-    }

-

-    public void clearRepositoryCache(String repositoryId) {

-        LinkCache linkCache = (LinkCache) session.get(SpiSessionParameter.LINK_CACHE);

-        if (linkCache != null) {

-            linkCache.clearRepository(repositoryId);

-        }

-    }

-

-    public void close() {

-        // no-op for AtomPub

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
deleted file mode 100644
index 0250183..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.OutputStream;

-import java.math.BigInteger;

-import java.util.ArrayList;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.ObjectList;

-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;

-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;

-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;

-import org.apache.chemistry.opencmis.commons.spi.ExtendedHolder;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-import org.xmlpull.v1.XmlSerializer;

-

-/**

- * Discovery Service AtomPub client.

- */

-public class DiscoveryServiceImpl extends AbstractAtomPubService implements DiscoveryService {

-

-    /**

-     * Constructor.

-     */

-    public DiscoveryServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,

-            String filter, Boolean includePolicyIds, Boolean includeACL, BigInteger maxItems, ExtensionsData extension) {

-        ObjectListImpl result = new ObjectListImpl();

-

-        // find the link

-        String link = null;

-        UrlBuilder url = null;

-

-        // if the application doesn't know the change log token but the link to

-        // the next Atom feed

-        if (changeLogToken instanceof ExtendedHolder && changeLogToken.getValue() == null) {

-            link = (String) ((ExtendedHolder<String>) changeLogToken).getExtraValue(Constants.REP_REL_CHANGES);

-            if (link != null) {

-                url = new UrlBuilder(link);

-            }

-        }

-

-        // if the application didn't provide a link to next Atom feed

-        if (link == null) {

-            link = loadRepositoryLink(repositoryId, Constants.REP_REL_CHANGES);

-            if (link != null) {

-                url = new UrlBuilder(link);

-                url.addParameter(Constants.PARAM_CHANGE_LOG_TOKEN,

-                        (changeLogToken == null ? null : changeLogToken.getValue()));

-                url.addParameter(Constants.PARAM_PROPERTIES, includeProperties);

-                url.addParameter(Constants.PARAM_FILTER, filter);

-                url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);

-                url.addParameter(Constants.PARAM_ACL, includeACL);

-                url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);

-            }

-        }

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or content changes not supported!");

-        }

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-        String lastChangeLogToken = null;

-

-        // handle top level

-        String nextLink = null;

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                    nextLink = ((AtomLink) element.getObject()).getHref();

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            } else if (isStr("changeLogToken", element)) {

-                lastChangeLogToken = (String) element.getObject();

-            }

-        }

-

-        // get the changes

-        if (!feed.getEntries().isEmpty()) {

-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));

-

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData hit = null;

-

-                // walk through the entry

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof ObjectData) {

-                        hit = (ObjectData) element.getObject();

-                    }

-                }

-

-                if (hit != null) {

-                    result.getObjects().add(hit);

-                }

-            }

-        }

-

-        if (changeLogToken != null) {

-            // the AtomPub binding cannot return a new change log token,

-            // but an OpenCMIS server uses a proprietary tag

-            changeLogToken.setValue(lastChangeLogToken);

-

-            // but we can provide the link to the next Atom feed

-            if (changeLogToken instanceof ExtendedHolder && nextLink != null) {

-                ((ExtendedHolder<String>) changeLogToken).setExtraValue(Constants.REP_REL_CHANGES, nextLink);

-            }

-        }

-

-        return result;

-    }

-

-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,

-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,

-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        ObjectListImpl result = new ObjectListImpl();

-

-        // find the link

-        String link = loadCollection(repositoryId, Constants.COLLECTION_QUERY);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or query not supported!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // compile query request

-        final QueryTypeImpl query = new QueryTypeImpl();

-        query.setStatement(statement);

-        query.setSearchAllVersions(searchAllVersions);

-        query.setIncludeAllowableActions(includeAllowableActions);

-        query.setIncludeRelationships(includeRelationships);

-        query.setRenditionFilter(renditionFilter);

-        query.setMaxItems(maxItems);

-        query.setSkipCount(skipCount);

-

-        final CmisVersion cmisVersion = getCmisVersion(repositoryId);

-

-        // post the query and parse results

-        Response resp = post(url, Constants.MEDIATYPE_QUERY, new Output() {

-            public void write(OutputStream out) throws Exception {

-                XmlSerializer writer = XMLUtils.createWriter(out);

-                XMLUtils.startXmlDocument(writer);

-                XMLConverter.writeQuery(writer, cmisVersion, query);

-                XMLUtils.endXmlDocument(writer);

-            }

-        });

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // handle top level

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            }

-        }

-

-        // get the result set

-        if (!feed.getEntries().isEmpty()) {

-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));

-

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData hit = null;

-

-                // walk through the entry

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof ObjectData) {

-                        hit = (ObjectData) element.getObject();

-                    }

-                }

-

-                if (hit != null) {

-                    result.getObjects().add(hit);

-                }

-            }

-        }

-

-        return result;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java
deleted file mode 100644
index 950c7ff..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.Serializable;

-import java.util.HashSet;

-import java.util.Map;

-import java.util.Set;

-

-import org.apache.chemistry.opencmis.client.bindings.cache.Cache;

-import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;

-import org.apache.chemistry.opencmis.client.bindings.cache.impl.ContentTypeCacheLevelImpl;

-import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;

-import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.commons.SessionParameter;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.IOUtils;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-

-/**

- * Link cache.

- */

-public class LinkCache implements Serializable {

-

-    private static final long serialVersionUID = 1L;

-

-    private static final Set<String> KNOWN_LINKS = new HashSet<String>();

-

-    static {

-        KNOWN_LINKS.add(Constants.REL_ACL);

-        KNOWN_LINKS.add(Constants.REL_DOWN);

-        KNOWN_LINKS.add(Constants.REL_UP);

-        KNOWN_LINKS.add(Constants.REL_FOLDERTREE);

-        KNOWN_LINKS.add(Constants.REL_RELATIONSHIPS);

-        KNOWN_LINKS.add(Constants.REL_SELF);

-        KNOWN_LINKS.add(Constants.REL_ALLOWABLEACTIONS);

-        KNOWN_LINKS.add(Constants.REL_EDITMEDIA);

-        KNOWN_LINKS.add(Constants.REL_POLICIES);

-        KNOWN_LINKS.add(Constants.REL_VERSIONHISTORY);

-        KNOWN_LINKS.add(Constants.REL_WORKINGCOPY);

-        KNOWN_LINKS.add(AtomPubParser.LINK_REL_CONTENT);

-    }

-

-    private static final int CACHE_SIZE_REPOSITORIES = 10;

-    private static final int CACHE_SIZE_TYPES = 100;

-    private static final int CACHE_SIZE_OBJECTS = 400;

-

-    private final Cache linkCache;

-    private final Cache typeLinkCache;

-    private final Cache collectionLinkCache;

-    private final Cache templateCache;

-    private final Cache repositoryLinkCache;

-

-    /**

-     * Constructor.

-     */

-    public LinkCache(BindingSession session) {

-        int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES, CACHE_SIZE_REPOSITORIES);

-        if (repCount < 1) {

-            repCount = CACHE_SIZE_REPOSITORIES;

-        }

-

-        int typeCount = session.get(SessionParameter.CACHE_SIZE_TYPES, CACHE_SIZE_TYPES);

-        if (typeCount < 1) {

-            typeCount = CACHE_SIZE_TYPES;

-        }

-

-        int objCount = session.get(SessionParameter.CACHE_SIZE_LINKS, CACHE_SIZE_OBJECTS);

-        if (objCount < 1) {

-            objCount = CACHE_SIZE_OBJECTS;

-        }

-

-        linkCache = new CacheImpl("Link Cache");

-        linkCache.initialize(new String[] {

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository

-                LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + objCount, // id

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=12", // rel

-                ContentTypeCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=3,"

-                        + MapCacheLevelImpl.SINGLE_VALUE + "=true" // type

-        });

-

-        typeLinkCache = new CacheImpl("Type Link Cache");

-        typeLinkCache.initialize(new String[] {

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository

-                LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + typeCount, // id

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=12", // rel

-                ContentTypeCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=3,"

-                        + MapCacheLevelImpl.SINGLE_VALUE + "=true"// type

-        });

-

-        collectionLinkCache = new CacheImpl("Collection Link Cache");

-        collectionLinkCache.initialize(new String[] {

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=8" // collection

-        });

-

-        templateCache = new CacheImpl("URI Template Cache");

-        templateCache.initialize(new String[] {

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=6" // type

-        });

-

-        repositoryLinkCache = new CacheImpl("Repository Link Cache");

-        repositoryLinkCache.initialize(new String[] {

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository

-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=6" // rel

-        });

-    }

-

-    /**

-     * Adds a link.

-     */

-    public void addLink(String repositoryId, String id, String rel, String type, String link) {

-        if (KNOWN_LINKS.contains(rel)) {

-            linkCache.put(link, repositoryId, id, rel, type);

-        } else if (Constants.REL_ALTERNATE.equals(rel)) {

-            // use streamId instead of type as discriminating parameter

-            String streamId = extractStreamId(link);

-            if (streamId != null) {

-                linkCache.put(link, repositoryId, id, rel, streamId);

-            }

-        }

-    }

-

-    /**

-     * Tries to extract a streamId from an alternate link.

-     */

-    // this is not strictly in the spec

-    protected String extractStreamId(String link) {

-        int i = link.lastIndexOf('?');

-        if (i > 0) {

-            String[] params = link.substring(i + 1).split("&");

-            for (String param : params) {

-                String[] parts = param.split("=", 2);

-                if (parts[0].equals(Constants.PARAM_STREAM_ID) && parts.length == 2) {

-                    return parts[1];

-                }

-            }

-        }

-        return null;

-    }

-

-    /**

-     * Removes all links of an object.

-     */

-    public void removeLinks(String repositoryId, String id) {

-        linkCache.remove(repositoryId, id);

-    }

-

-    /**

-     * Gets a link.

-     */

-    public String getLink(String repositoryId, String id, String rel, String type) {

-        return (String) linkCache.get(repositoryId, id, rel, type);

-    }

-

-    /**

-     * Gets a link.

-     */

-    public String getLink(String repositoryId, String id, String rel) {

-        return getLink(repositoryId, id, rel, null);

-    }

-

-    /**

-     * Checks a link.

-     */

-    public int checkLink(String repositoryId, String id, String rel, String type) {

-        return linkCache.check(repositoryId, id, rel, type);

-    }

-

-    /**

-     * Locks the link cache.

-     */

-    public void lockLinks() {

-        linkCache.writeLock();

-    }

-

-    /**

-     * Unlocks the link cache.

-     */

-    public void unlockLinks() {

-        linkCache.writeUnlock();

-    }

-

-    /**

-     * Adds a type link.

-     */

-    public void addTypeLink(String repositoryId, String id, String rel, String type, String link) {

-        if (KNOWN_LINKS.contains(rel)) {

-            typeLinkCache.put(link, repositoryId, id, rel, type);

-        }

-    }

-

-    /**

-     * Removes all links of a type.

-     */

-    public void removeTypeLinks(String repositoryId, String id) {

-        typeLinkCache.remove(repositoryId, id);

-    }

-

-    /**

-     * Gets a type link.

-     */

-    public String getTypeLink(String repositoryId, String id, String rel, String type) {

-        return (String) typeLinkCache.get(repositoryId, id, rel, type);

-    }

-

-    /**

-     * Locks the type link cache.

-     */

-    public void lockTypeLinks() {

-        typeLinkCache.writeLock();

-    }

-

-    /**

-     * Unlocks the type link cache.

-     */

-    public void unlockTypeLinks() {

-        typeLinkCache.writeUnlock();

-    }

-

-    /**

-     * Adds a collection.

-     */

-    public void addCollection(String repositoryId, String collection, String link) {

-        collectionLinkCache.put(link, repositoryId, collection);

-    }

-

-    /**

-     * Gets a collection.

-     */

-    public String getCollection(String repositoryId, String collection) {

-        return (String) collectionLinkCache.get(repositoryId, collection);

-    }

-

-    /**

-     * Adds an URI template.

-     */

-    public void addTemplate(String repositoryId, String type, String link) {

-        templateCache.put(link, repositoryId, type);

-    }

-

-    /**

-     * Gets an URI template and replaces place holders with the given

-     * parameters.

-     */

-    public String getTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {

-        String template = (String) templateCache.get(repositoryId, type);

-        if (template == null) {

-            return null;

-        }

-

-        StringBuilder result = new StringBuilder();

-        StringBuilder param = new StringBuilder();

-

-        boolean paramMode = false;

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

-            char c = template.charAt(i);

-

-            if (paramMode) {

-                if (c == '}') {

-                    paramMode = false;

-

-                    String paramValue = UrlBuilder.normalizeParameter(parameters.get(param.toString()));

-                    if (paramValue != null) {

-                        result.append(IOUtils.encodeURL(paramValue));

-                    }

-

-                    param = new StringBuilder();

-                } else {

-                    param.append(c);

-                }

-            } else {

-                if (c == '{') {

-                    paramMode = true;

-                } else {

-                    result.append(c);

-                }

-            }

-        }

-

-        return result.toString();

-    }

-

-    /**

-     * Adds a collection.

-     */

-    public void addRepositoryLink(String repositoryId, String rel, String link) {

-        repositoryLinkCache.put(link, repositoryId, rel);

-    }

-

-    /**

-     * Gets a collection.

-     */

-    public String getRepositoryLink(String repositoryId, String rel) {

-        return (String) repositoryLinkCache.get(repositoryId, rel);

-    }

-

-    /**

-     * Removes all entries of the given repository from the caches.

-     */

-    public void clearRepository(String repositoryId) {

-        linkCache.remove(repositoryId);

-        typeLinkCache.remove(repositoryId);

-        collectionLinkCache.remove(repositoryId);

-        templateCache.remove(repositoryId);

-        repositoryLinkCache.remove(repositoryId);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see java.lang.Object#toString()

-     */

-    @Override

-    public String toString() {

-        return "Link Cache [link cache=" + linkCache + ", type link cache=" + typeLinkCache

-                + ", collection link cache=" + collectionLinkCache + ", repository link cache=" + repositoryLinkCache

-                + ",  template cache=" + templateCache + "]";

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
deleted file mode 100644
index da28d14..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.IOException;

-import java.io.OutputStream;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;

-

-/**

- * MultiFiling Service AtomPub client.

- */

-public class MultiFilingServiceImpl extends AbstractAtomPubService implements MultiFilingService {

-

-    /**

-     * Constructor.

-     */

-    public MultiFilingServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,

-            ExtensionsData extension) {

-        if (objectId == null) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);

-

-        // set up object and writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));

-

-        // post addObjectToFolder request

-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-    }

-

-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {

-        if (objectId == null) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        // find the link

-        String link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_REMOVE_FROM, folderId);

-

-        // set up object and writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));

-

-        // post removeObjectFromFolder request

-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
deleted file mode 100644
index f15e159..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.List;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;

-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;

-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;

-import org.apache.chemistry.opencmis.commons.data.ObjectList;

-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;

-import org.apache.chemistry.opencmis.commons.spi.NavigationService;

-

-/**

- * Navigation Service AtomPub client.

- */

-public class NavigationServiceImpl extends AbstractAtomPubService implements NavigationService {

-

-    /**

-     * Constructor.

-     */

-    public NavigationServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,

-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,

-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);

-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);

-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // handle top level

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            }

-        }

-

-        // get the children

-        if (!feed.getEntries().isEmpty()) {

-            result.setObjects(new ArrayList<ObjectInFolderData>(feed.getEntries().size()));

-

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectInFolderDataImpl child = null;

-                String pathSegment = null;

-

-                lockLinks();

-                try {

-                    // clean up cache

-                    removeLinks(repositoryId, entry.getId());

-

-                    // walk through the entry

-                    for (AtomElement element : entry.getElements()) {

-                        if (element.getObject() instanceof AtomLink) {

-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                        } else if (isStr(NAME_PATH_SEGMENT, element)) {

-                            pathSegment = (String) element.getObject();

-                        } else if (element.getObject() instanceof ObjectData) {

-                            child = new ObjectInFolderDataImpl();

-                            child.setObject((ObjectData) element.getObject());

-                        }

-                    }

-                } finally {

-                    unlockLinks();

-                }

-

-                if (child != null) {

-                    child.setPathSegment(pathSegment);

-                    result.getObjects().add(child);

-                }

-            }

-        }

-

-        return result;

-    }

-

-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,

-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,

-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {

-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_DEPTH, depth);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // process tree

-        addDescendantsLevel(repositoryId, feed, result);

-

-        return result;

-    }

-

-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {

-        ObjectData result = null;

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_UP, Constants.MEDIATYPE_ENTRY);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_UP, Constants.MEDIATYPE_ENTRY);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-

-        // read

-        Response resp = read(url);

-

-        AtomBase base = parse(resp.getStream(), AtomBase.class);

-

-        // get the entry

-        AtomEntry entry = null;

-        if (base instanceof AtomFeed) {

-            AtomFeed feed = (AtomFeed) base;

-            if (feed.getEntries().isEmpty()) {

-                throw new CmisRuntimeException("Parent feed is empty!");

-            }

-            entry = feed.getEntries().get(0);

-        } else if (base instanceof AtomEntry) {

-            entry = (AtomEntry) base;

-        } else {

-            throw new CmisRuntimeException("Unexpected document!");

-        }

-

-        lockLinks();

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof ObjectData) {

-                    result = (ObjectData) element.getObject();

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-

-        return result;

-    }

-

-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,

-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,

-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {

-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_DEPTH, depth);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // process tree

-        addDescendantsLevel(repositoryId, feed, result);

-

-        return result;

-    }

-

-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,

-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,

-            Boolean includeRelativePathSegment, ExtensionsData extension) {

-        List<ObjectParentData> result = new ArrayList<ObjectParentData>();

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_UP, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            // root and unfiled objects have no UP link

-            return result;

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-        url.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, includeRelativePathSegment);

-

-        // read and parse

-        Response resp = read(url);

-

-        AtomBase base = parse(resp.getStream(), AtomBase.class);

-

-        if (base instanceof AtomFeed) {

-            // it's a feed

-            AtomFeed feed = (AtomFeed) base;

-

-            // walk through the feed

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectParentDataImpl objectParent = processParentEntry(entry, repositoryId);

-

-                if (objectParent != null) {

-                    result.add(objectParent);

-                }

-            }

-        } else if (base instanceof AtomEntry) {

-            // it's an entry

-            AtomEntry entry = (AtomEntry) base;

-

-            ObjectParentDataImpl objectParent = processParentEntry(entry, repositoryId);

-

-            if (objectParent != null) {

-                result.add(objectParent);

-            }

-        }

-

-        return result;

-    }

-

-    private ObjectParentDataImpl processParentEntry(AtomEntry entry, String repositoryId) {

-        ObjectParentDataImpl result = null;

-        String relativePathSegment = null;

-

-        lockLinks();

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof ObjectData) {

-                    result = new ObjectParentDataImpl((ObjectData) element.getObject());

-                } else if (is(NAME_RELATIVE_PATH_SEGMENT, element)) {

-                    relativePathSegment = (String) element.getObject();

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-

-        if (result != null) {

-            result.setRelativePathSegment(relativePathSegment);

-        }

-

-        return result;

-    }

-

-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,

-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,

-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        ObjectListImpl result = new ObjectListImpl();

-

-        // find the link

-        String link = loadCollection(repositoryId, Constants.COLLECTION_CHECKEDOUT);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or checkedout collection not supported!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FOLDER_ID, folderId);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);

-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);

-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);

-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // handle top level

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            }

-        }

-

-        // get the documents

-        if (!feed.getEntries().isEmpty()) {

-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));

-

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData child = null;

-

-                lockLinks();

-                try {

-                    // clean up cache

-                    removeLinks(repositoryId, entry.getId());

-

-                    // walk through the entry

-                    for (AtomElement element : entry.getElements()) {

-                        if (element.getObject() instanceof AtomLink) {

-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                        } else if (element.getObject() instanceof ObjectData) {

-                            child = (ObjectData) element.getObject();

-                        }

-                    }

-                } finally {

-                    unlockLinks();

-                }

-

-                if (child != null) {

-                    result.getObjects().add(child);

-                }

-            }

-        }

-

-        return result;

-    }

-

-    // ---- internal ----

-

-    /**

-     * Adds descendants level recursively.

-     */

-    private void addDescendantsLevel(String repositoryId, AtomFeed feed, List<ObjectInFolderContainer> containerList) {

-        if ((feed == null) || (feed.getEntries().isEmpty())) {

-            return;

-        }

-

-        // walk through the feed

-        for (AtomEntry entry : feed.getEntries()) {

-            ObjectInFolderDataImpl objectInFolder = null;

-            String pathSegment = null;

-            List<ObjectInFolderContainer> childContainerList = new ArrayList<ObjectInFolderContainer>();

-

-            lockLinks();

-            try {

-                // clean up cache

-                removeLinks(repositoryId, entry.getId());

-

-                // walk through the entry

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof AtomLink) {

-                        addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                    } else if (element.getObject() instanceof ObjectData) {

-                        objectInFolder = new ObjectInFolderDataImpl((ObjectData) element.getObject());

-                    } else if (is(NAME_PATH_SEGMENT, element)) {

-                        pathSegment = (String) element.getObject();

-                    } else if (element.getObject() instanceof AtomFeed) {

-                        addDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), childContainerList);

-                    }

-                }

-            } finally {

-                unlockLinks();

-            }

-

-            if (objectInFolder != null) {

-                objectInFolder.setPathSegment(pathSegment);

-                ObjectInFolderContainerImpl childContainer = new ObjectInFolderContainerImpl(objectInFolder);

-                childContainer.setChildren(childContainerList);

-                containerList.add(childContainer);

-            }

-        }

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
deleted file mode 100644
index a644a86..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
+++ /dev/null
@@ -1,825 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.Collections;

-import java.util.List;

-import java.util.Map;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAllowableActions;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.AllowableActions;

-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.data.PropertyData;

-import org.apache.chemistry.opencmis.commons.data.PropertyId;

-import org.apache.chemistry.opencmis.commons.data.PropertyString;

-import org.apache.chemistry.opencmis.commons.data.RenditionData;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;

-import org.apache.chemistry.opencmis.commons.enums.VersioningState;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.IOUtils;

-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;

-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-import org.apache.chemistry.opencmis.commons.spi.ObjectService;

-

-/**

- * Object Service AtomPub client.

- */

-public class ObjectServiceImpl extends AbstractAtomPubService implements ObjectService {

-

-    /**

-     * Constructor.

-     */

-    public ObjectServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public String createDocument(String repositoryId, Properties properties, String folderId,

-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,

-            Acl removeAces, ExtensionsData extension) {

-        checkCreateProperties(properties);

-

-        // find the link

-        String link = null;

-

-        if (folderId == null) {

-            // Creation of unfiled objects via AtomPub is not defined in the

-            // CMIS 1.0 specification. This implementation follow the CMIS 1.1

-            // draft and POSTs the document to the Unfiled collection.

-

-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);

-

-            if (link == null) {

-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");

-            }

-        } else {

-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-            if (link == null) {

-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-            }

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_VERSIONIG_STATE, versioningState);

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId), contentStream);

-

-        // post the new folder object

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // handle ACL modifications

-        handleAclModifications(repositoryId, entry, addAces, removeAces);

-

-        return entry.getId();

-    }

-

-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,

-            String folderId, VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs,

-            ExtensionsData extension) {

-        throw new CmisNotSupportedException("createDocumentFromSource is not supported by the AtomPub binding!");

-    }

-

-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,

-            Acl addAces, Acl removeAces, ExtensionsData extension) {

-        checkCreateProperties(properties);

-

-        // find the link

-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId));

-

-        // post the new folder object

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // handle ACL modifications

-        handleAclModifications(repositoryId, entry, addAces, removeAces);

-

-        return entry.getId();

-    }

-

-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,

-            Acl addAces, Acl removeAces, ExtensionsData extension) {

-        checkCreateProperties(properties);

-

-        // find the link

-        String link = null;

-

-        if (folderId == null) {

-            // Creation of unfiled objects via AtomPub is not defined in the

-            // CMIS 1.0 specification. This implementation follow the CMIS 1.1

-            // draft and POSTs the policy to the Unfiled collection.

-

-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);

-

-            if (link == null) {

-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");

-            }

-        } else {

-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-            if (link == null) {

-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-            }

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId));

-

-        // post the new folder object

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // handle ACL modifications

-        handleAclModifications(repositoryId, entry, addAces, removeAces);

-

-        return entry.getId();

-    }

-

-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,

-            Acl addAces, Acl removeAces, ExtensionsData extension) {

-        checkCreateProperties(properties);

-

-        // find the link

-        String link = null;

-

-        if (folderId == null) {

-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);

-

-            if (link == null) {

-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");

-            }

-        } else {

-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-            if (link == null) {

-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-            }

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId));

-

-        // post the new folder object

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // handle ACL modifications

-        handleAclModifications(repositoryId, entry, addAces, removeAces);

-

-        return entry.getId();

-    }

-

-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,

-            Acl removeAces, ExtensionsData extension) {

-        checkCreateProperties(properties);

-

-        // find source id

-        PropertyData<?> sourceIdProperty = properties.getProperties().get(PropertyIds.SOURCE_ID);

-        if (!(sourceIdProperty instanceof PropertyId)) {

-            throw new CmisInvalidArgumentException("Source Id is not set!");

-        }

-

-        String sourceId = ((PropertyId) sourceIdProperty).getFirstValue();

-        if (sourceId == null) {

-            throw new CmisInvalidArgumentException("Source Id is not set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, sourceId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, sourceId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId));

-

-        // post the new folder object

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // handle ACL modifications

-        handleAclModifications(repositoryId, entry, addAces, removeAces);

-

-        return entry.getId();

-    }

-

-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,

-            Properties properties, ExtensionsData extension) {

-        // we need an object id

-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        if (changeToken != null) {

-            // not required by the CMIS specification

-            // -> keep for backwards compatibility with older OpenCMIS servers

-            url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());

-        }

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, changeToken == null ? null

-                : changeToken.getValue(), null), getCmisVersion(repositoryId));

-

-        // update

-        Response resp = put(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse new entry

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        // set object id

-        objectId.setValue(entry.getId());

-

-        if (changeToken != null) {

-            changeToken.setValue(null); // just in case

-        }

-

-        lockLinks();

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof ObjectData) {

-                    // extract new change token

-                    if (changeToken != null) {

-                        ObjectData object = (ObjectData) element.getObject();

-

-                        if (object.getProperties() != null) {

-                            Object changeTokenStr = object.getProperties().getProperties()

-                                    .get(PropertyIds.CHANGE_TOKEN);

-                            if (changeTokenStr instanceof PropertyString) {

-                                changeToken.setValue(((PropertyString) changeTokenStr).getFirstValue());

-                            }

-                        }

-                    }

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-    }

-

-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,

-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,

-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {

-        // find link

-        String link = loadCollection(repositoryId, Constants.COLLECTION_BULK_UPDATE);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or bulk update properties is not supported!");

-        }

-

-        // set up writer

-        final BulkUpdateImpl bulkUpdate = new BulkUpdateImpl();

-        bulkUpdate.setObjectIdAndChangeToken(objectIdAndChangeToken);

-        bulkUpdate.setProperties(properties);

-        bulkUpdate.setAddSecondaryTypeIds(addSecondaryTypeIds);

-        bulkUpdate.setRemoveSecondaryTypeIds(removeSecondaryTypeIds);

-

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(bulkUpdate);

-

-        // post the new folder object

-        Response resp = post(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-        List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>(feed

-                .getEntries().size());

-

-        // get the results

-        if (!feed.getEntries().isEmpty()) {

-

-            for (AtomEntry entry : feed.getEntries()) {

-                // walk through the entry

-                // we are not interested in the links this time because they

-                // could belong to a new document version

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof ObjectData) {

-                        ObjectData object = (ObjectData) element.getObject();

-                        String id = object.getId();

-                        if (id != null) {

-                            String changeToken = null;

-                            PropertyData<?> changeTokenProp = object.getProperties().getProperties()

-                                    .get(PropertyIds.CHANGE_TOKEN);

-                            if (changeTokenProp instanceof PropertyString) {

-                                changeToken = ((PropertyString) changeTokenProp).getFirstValue();

-                            }

-

-                            result.add(new BulkUpdateObjectIdAndChangeTokenImpl(id, changeToken));

-                        }

-                    }

-                }

-            }

-        }

-

-        return result;

-    }

-

-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);

-

-        delete(url);

-    }

-

-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,

-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {

-

-        // find the down links

-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, null);

-        String childrenLink = null;

-

-        if (link != null) {

-            // found only a children link, but no descendants link

-            // -> try folder tree link

-            childrenLink = link;

-            link = null;

-        } else {

-            // found no or two down links

-            // -> get only the descendants link

-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        if (link == null) {

-            link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        if (link == null) {

-            link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_FEED);

-        }

-

-        if (link == null) {

-            link = childrenLink;

-        }

-

-        if (link == null) {

-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);

-        url.addParameter(Constants.PARAM_UNFILE_OBJECTS, unfileObjects);

-        url.addParameter(Constants.PARAM_CONTINUE_ON_FAILURE, continueOnFailure);

-

-        // make the call

-        Response resp = getHttpInvoker().invokeDELETE(url, getSession());

-

-        // check response code

-        if (resp.getResponseCode() == 200 || resp.getResponseCode() == 202 || resp.getResponseCode() == 204) {

-            return new FailedToDeleteDataImpl();

-        }

-

-        // If the server returned an internal server error, get the remaining

-        // children of the folder. We only retrieve the first level, since

-        // getDescendants() is not supported by all repositories.

-        if (resp.getResponseCode() == 500) {

-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-            if (link != null) {

-                url = new UrlBuilder(link);

-                // we only want the object ids

-                url.addParameter(Constants.PARAM_FILTER, "cmis:objectId");

-                url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, false);

-                url.addParameter(Constants.PARAM_RELATIONSHIPS, IncludeRelationships.NONE);

-                url.addParameter(Constants.PARAM_RENDITION_FILTER, "cmis:none");

-                url.addParameter(Constants.PARAM_PATH_SEGMENT, false);

-                // 1000 children should be enough to indicate a problem

-                url.addParameter(Constants.PARAM_MAX_ITEMS, 1000);

-                url.addParameter(Constants.PARAM_SKIP_COUNT, 0);

-

-                // read and parse

-                resp = read(url);

-                AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-                // prepare result

-                FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();

-                List<String> ids = new ArrayList<String>();

-                result.setIds(ids);

-

-                // get the children ids

-                for (AtomEntry entry : feed.getEntries()) {

-                    ids.add(entry.getId());

-                }

-

-                return result;

-            }

-        }

-

-        throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-    }

-

-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_ALLOWABLEACTIONS,

-                Constants.MEDIATYPE_ALLOWABLEACTION);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_ALLOWABLEACTIONS,

-                    Constants.MEDIATYPE_ALLOWABLEACTION);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // read and parse

-        Response resp = read(url);

-        AtomAllowableActions allowableActions = parse(resp.getStream(), AtomAllowableActions.class);

-

-        return allowableActions.getAllowableActions();

-    }

-

-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,

-            BigInteger length, ExtensionsData extension) {

-        // find the link

-        String link = null;

-        if (streamId != null) {

-            // use the alternate link per spec

-            link = loadLink(repositoryId, objectId, Constants.REL_ALTERNATE, streamId);

-            if (link != null) {

-                streamId = null; // we have a full URL now

-            }

-        }

-        if (link == null) {

-            link = loadLink(repositoryId, objectId, AtomPubParser.LINK_REL_CONTENT, null);

-        }

-

-        if (link == null) {

-            throw new CmisConstraintException("No content stream");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        // using the content URL and adding a streamId param

-        // is not spec-compliant

-        url.addParameter(Constants.PARAM_STREAM_ID, streamId);

-

-        // get the content

-        Response resp = getHttpInvoker().invokeGET(url, getSession(), offset, length);

-

-        // check response code

-        if ((resp.getResponseCode() != 200) && (resp.getResponseCode() != 206)) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-

-        ContentStreamImpl result;

-        if (resp.getResponseCode() == 206) {

-            result = new PartialContentStreamImpl();

-        } else {

-            result = new ContentStreamImpl();

-        }

-

-        String filename = null;

-        String contentDisposition = resp.getHeader("Content-Disposition");

-        if (contentDisposition != null) {

-            filename = MimeHelper.decodeContentDispositionFilename(contentDisposition);

-        }

-

-        result.setFileName(filename);

-        result.setLength(resp.getContentLength());

-        result.setMimeType(resp.getContentTypeHeader());

-        result.setStream(resp.getStream());

-

-        return result;

-    }

-

-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,

-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,

-            Boolean includeACL, ExtensionsData extension) {

-

-        return getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS, filter,

-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);

-    }

-

-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,

-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,

-            Boolean includeACL, ExtensionsData extension) {

-

-        return getObjectInternal(repositoryId, IdentifierType.PATH, path, ReturnVersion.THIS, filter,

-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);

-    }

-

-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {

-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS, filter,

-                Boolean.FALSE, IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, Boolean.FALSE, extension);

-

-        return object.getProperties();

-    }

-

-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,

-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS,

-                PropertyIds.OBJECT_ID, Boolean.FALSE, IncludeRelationships.NONE, renditionFilter, Boolean.FALSE,

-                Boolean.FALSE, extension);

-

-        List<RenditionData> result = object.getRenditions();

-        if (result == null) {

-            result = Collections.emptyList();

-        }

-

-        return result;

-    }

-

-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,

-            ExtensionsData extension) {

-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        if ((targetFolderId == null) || (targetFolderId.length() == 0) || (sourceFolderId == null)

-                || (sourceFolderId.length() == 0)) {

-            throw new CmisInvalidArgumentException("Source and target folder must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, targetFolderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-        if (link == null) {

-            throwLinkException(repositoryId, targetFolderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_SOURCE_FOLDER_ID, sourceFolderId);

-

-        // set up object and writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId.getValue()),

-                getCmisVersion(repositoryId));

-

-        // post move request

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        objectId.setValue(entry.getId());

-    }

-

-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,

-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {

-        setOrAppendContent(repositoryId, objectId, overwriteFlag, changeToken, contentStream, true, false, extension);

-    }

-

-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,

-            ExtensionsData extension) {

-        // we need an object id

-        if ((objectId == null) || (objectId.getValue() == null)) {

-            throw new CmisInvalidArgumentException("Object ID must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        if (changeToken != null) {

-            url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());

-        }

-

-        delete(url);

-

-        objectId.setValue(null);

-        if (changeToken != null) {

-            changeToken.setValue(null);

-        }

-    }

-

-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,

-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {

-        setOrAppendContent(repositoryId, objectId, null, changeToken, contentStream, isLastChunk, true, extension);

-    }

-

-    // ---- internal ----

-

-    private static void checkCreateProperties(Properties properties) {

-        if ((properties == null) || (properties.getProperties() == null)) {

-            throw new CmisInvalidArgumentException("Properties must be set!");

-        }

-

-        if (!properties.getProperties().containsKey(PropertyIds.OBJECT_TYPE_ID)) {

-            throw new CmisInvalidArgumentException("Property " + PropertyIds.OBJECT_TYPE_ID + " must be set!");

-        }

-

-        if (properties.getProperties().containsKey(PropertyIds.OBJECT_ID)) {

-            throw new CmisInvalidArgumentException("Property " + PropertyIds.OBJECT_ID + " must not be set!");

-        }

-    }

-

-    /**

-     * Handles ACL modifications of newly created objects.

-     */

-    private void handleAclModifications(String repositoryId, AtomEntry entry, Acl addAces, Acl removeAces) {

-        if (!isAclMergeRequired(addAces, removeAces)) {

-            return;

-        }

-

-        Acl originalAces = getAclInternal(repositoryId, entry.getId(), Boolean.FALSE, null);

-

-        if (originalAces != null) {

-            // merge and update ACL

-            Acl newACL = mergeAcls(originalAces, addAces, removeAces);

-            if (newACL != null) {

-                updateAcl(repositoryId, entry.getId(), newACL, null);

-            }

-        }

-    }

-

-    /**

-     * Sets or appends content.

-     */

-    private void setOrAppendContent(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,

-            Holder<String> changeToken, ContentStream contentStream, boolean isLastChunk, boolean append,

-            ExtensionsData extension) {

-        // we need an object id

-        if ((objectId == null) || (objectId.getValue() == null)) {

-            throw new CmisInvalidArgumentException("Object ID must be set!");

-        }

-

-        // we need content

-        if ((contentStream == null) || (contentStream.getStream() == null) || (contentStream.getMimeType() == null)) {

-            throw new CmisInvalidArgumentException("Content must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        if (changeToken != null) {

-            url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());

-        }

-

-        if (append) {

-            url.addParameter(Constants.PARAM_APPEND, Boolean.TRUE);

-            url.addParameter(Constants.PARAM_IS_LAST_CHUNK, isLastChunk);

-        } else {

-            url.addParameter(Constants.PARAM_OVERWRITE_FLAG, overwriteFlag);

-        }

-

-        final InputStream stream = contentStream.getStream();

-

-        // Content-Disposition header for the filename

-        Map<String, String> headers = null;

-        if (contentStream.getFileName() != null) {

-            headers = Collections

-                    .singletonMap(

-                            MimeHelper.CONTENT_DISPOSITION,

-                            MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_ATTACHMENT,

-                                    contentStream.getFileName()));

-        }

-

-        // send content

-        Response resp = put(url, contentStream.getMimeType(), headers, new Output() {

-            public void write(OutputStream out) throws IOException {

-                IOUtils.copy(stream, out);

-            }

-        });

-

-        // check response code further

-        if ((resp.getResponseCode() != 200) && (resp.getResponseCode() != 201) && (resp.getResponseCode() != 204)) {

-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);

-        }

-

-        objectId.setValue(null);

-        if (changeToken != null) {

-            changeToken.setValue(null);

-        }

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
deleted file mode 100644
index f6c6b67..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.IOException;

-import java.io.OutputStream;

-import java.util.ArrayList;

-import java.util.List;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.spi.PolicyService;

-

-/**

- * Policy Service AtomPub client.

- */

-public class PolicyServiceImpl extends AbstractAtomPubService implements PolicyService {

-

-    /**

-     * Constructor.

-     */

-    public PolicyServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up object and writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));

-

-        // post applyPolicy request

-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-    }

-

-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,

-            ExtensionsData extension) {

-        List<ObjectData> result = new ArrayList<ObjectData>();

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // get the policies

-        if (!feed.getEntries().isEmpty()) {

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData policy = null;

-

-                // walk through the entry

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof ObjectData) {

-                        policy = (ObjectData) element.getObject();

-                    }

-                }

-

-                if (policy != null) {

-                    result.add(policy);

-                }

-            }

-        }

-

-        return result;

-    }

-

-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {

-        // we need a policy id

-        if (policyId == null) {

-            throw new CmisInvalidArgumentException("Policy id must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, PropertyIds.OBJECT_ID);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // find the policy

-        String policyLink = null;

-        boolean found = false;

-

-        if (!feed.getEntries().isEmpty()) {

-            for (AtomEntry entry : feed.getEntries()) {

-                // walk through the entry

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof AtomLink) {

-                        AtomLink atomLink = (AtomLink) element.getObject();

-                        if (Constants.REL_SELF.equals(atomLink.getRel())) {

-                            policyLink = atomLink.getHref();

-                        }

-                    } else if (element.getObject() instanceof ObjectData) {

-                        String id = ((ObjectData) element.getObject()).getId();

-                        if (policyId.equals(id)) {

-                            found = true;

-                        }

-                    }

-                }

-

-                if (found) {

-                    break;

-                }

-            }

-        }

-

-        // if found, delete it

-        if (found && (policyLink != null)) {

-            delete(new UrlBuilder(policyLink));

-        }

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
deleted file mode 100644
index f3dee3e..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.math.BigInteger;

-import java.util.ArrayList;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.ObjectList;

-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;

-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;

-

-/**

- * Relationship Service AtomPub client.

- */

-public class RelationshipServiceImpl extends AbstractAtomPubService implements RelationshipService {

-

-    /**

-     * Constructor.

-     */

-    public RelationshipServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,

-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,

-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        ObjectListImpl result = new ObjectListImpl();

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);

-        url.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);

-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);

-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // handle top level

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            }

-        }

-

-        // get the children

-        if (!feed.getEntries().isEmpty()) {

-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));

-

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData relationship = null;

-

-                lockLinks();

-                try {

-                    // clean up cache

-                    removeLinks(repositoryId, entry.getId());

-

-                    // walk through the entry

-                    for (AtomElement element : entry.getElements()) {

-                        if (element.getObject() instanceof AtomLink) {

-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                        } else if (element.getObject() instanceof ObjectData) {

-                            relationship = (ObjectData) element.getObject();

-                        }

-                    }

-                } finally {

-                    unlockLinks();

-                }

-

-                if (relationship != null) {

-                    result.getObjects().add(relationship);

-                }

-            }

-

-        }

-

-        return result;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
deleted file mode 100644
index 978b5fc..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.IOException;

-import java.io.OutputStream;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;

-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;

-

-/**

- * Repository Service AtomPub client.

- */

-public class RepositoryServiceImpl extends AbstractAtomPubService implements RepositoryService {

-

-    /**

-     * Constructor.

-     */

-    public RepositoryServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {

-        return getRepositoriesInternal(null);

-    }

-

-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {

-        List<RepositoryInfo> repositoryInfos = getRepositoriesInternal(repositoryId);

-

-        if (repositoryInfos.size() == 0) {

-            throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");

-        }

-

-        if (repositoryInfos.size() == 1) {

-            return repositoryInfos.get(0);

-        }

-

-        // find the repository

-        for (RepositoryInfo info : repositoryInfos) {

-            if (info.getId() == null) {

-                continue;

-            }

-

-            if (info.getId().equals(repositoryId)) {

-                return info;

-            }

-        }

-

-        throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");

-    }

-

-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {

-        return getTypeDefinitionInternal(repositoryId, typeId);

-    }

-

-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,

-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

-        TypeDefinitionListImpl result = new TypeDefinitionListImpl();

-

-        // find the link

-        String link = null;

-        if (typeId == null) {

-            link = loadCollection(repositoryId, Constants.COLLECTION_TYPES);

-        } else {

-            link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-        }

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or type!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);

-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);

-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // handle top level

-        for (AtomElement element : feed.getElements()) {

-            if (element.getObject() instanceof AtomLink) {

-                if (isNextLink(element)) {

-                    result.setHasMoreItems(Boolean.TRUE);

-                }

-            } else if (isInt(NAME_NUM_ITEMS, element)) {

-                result.setNumItems((BigInteger) element.getObject());

-            }

-        }

-

-        result.setList(new ArrayList<TypeDefinition>(feed.getEntries().size()));

-

-        // get the children

-        if (!feed.getEntries().isEmpty()) {

-            for (AtomEntry entry : feed.getEntries()) {

-                TypeDefinition child = null;

-

-                lockTypeLinks();

-                try {

-                    // walk through the entry

-                    for (AtomElement element : entry.getElements()) {

-                        if (element.getObject() instanceof AtomLink) {

-                            addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                        } else if (element.getObject() instanceof TypeDefinition) {

-                            child = (TypeDefinition) element.getObject();

-                        }

-                    }

-                } finally {

-                    unlockTypeLinks();

-                }

-

-                if (child != null) {

-                    result.getList().add(child);

-                }

-            }

-        }

-

-        return result;

-    }

-

-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,

-            Boolean includePropertyDefinitions, ExtensionsData extension) {

-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();

-

-        // find the link

-        String link = null;

-        if (typeId == null) {

-            link = loadRepositoryLink(repositoryId, Constants.REP_REL_TYPEDESC);

-        } else {

-            link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);

-        }

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or type!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_DEPTH, depth);

-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // process tree

-        addTypeDescendantsLevel(repositoryId, feed, result);

-

-        return result;

-    }

-

-    /**

-     * Adds type descendants level recursively.

-     */

-    private void addTypeDescendantsLevel(String repositoryId, AtomFeed feed, List<TypeDefinitionContainer> containerList) {

-        if ((feed == null) || (feed.getEntries().isEmpty())) {

-            return;

-        }

-

-        // walk through the feed

-        for (AtomEntry entry : feed.getEntries()) {

-            TypeDefinitionContainerImpl childContainer = null;

-            List<TypeDefinitionContainer> childContainerList = new ArrayList<TypeDefinitionContainer>();

-

-            // walk through the entry

-            lockTypeLinks();

-            try {

-                for (AtomElement element : entry.getElements()) {

-                    if (element.getObject() instanceof AtomLink) {

-                        addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                    } else if (element.getObject() instanceof TypeDefinition) {

-                        childContainer = new TypeDefinitionContainerImpl((TypeDefinition) element.getObject());

-                    } else if (element.getObject() instanceof AtomFeed) {

-                        addTypeDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), childContainerList);

-                    }

-                }

-            } finally {

-                unlockTypeLinks();

-            }

-

-            if (childContainer != null) {

-                childContainer.setChildren(childContainerList);

-                containerList.add(childContainer);

-            }

-        }

-    }

-

-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {

-        if (type == null) {

-            throw new CmisInvalidArgumentException("Type definition must be set!");

-        }

-

-        String parentId = type.getParentTypeId();

-        if (parentId == null) {

-            throw new CmisInvalidArgumentException("Type definition has no parent type id!");

-        }

-

-        // find the link

-        String link = loadTypeLink(repositoryId, parentId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or parent type!");

-        }

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(type, getCmisVersion(repositoryId));

-

-        // post the new type definition

-        Response resp = post(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        lockTypeLinks();

-        TypeDefinition result = null;

-        try {

-            // clean up cache

-            removeTypeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof TypeDefinition) {

-                    result = (TypeDefinition) element.getObject();

-                }

-            }

-        } finally {

-            unlockTypeLinks();

-        }

-

-        return result;

-    }

-

-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {

-        if (type == null) {

-            throw new CmisInvalidArgumentException("Type definition must be set!");

-        }

-

-        String typeId = type.getId();

-        if (typeId == null) {

-            throw new CmisInvalidArgumentException("Type definition has no type id!");

-        }

-

-        // find the link

-        Map<String, Object> parameters = new HashMap<String, Object>();

-        parameters.put(Constants.PARAM_ID, typeId);

-

-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or type!");

-        }

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(type, getCmisVersion(repositoryId));

-

-        // post the new type definition

-        Response resp = put(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        lockTypeLinks();

-        TypeDefinition result = null;

-        try {

-            // clean up cache

-            removeTypeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof TypeDefinition) {

-                    result = (TypeDefinition) element.getObject();

-                }

-            }

-        } finally {

-            unlockTypeLinks();

-        }

-

-        return result;

-    }

-

-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {

-        Map<String, Object> parameters = new HashMap<String, Object>();

-        parameters.put(Constants.PARAM_ID, typeId);

-

-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository!");

-        }

-

-        delete(new UrlBuilder(link));

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java
deleted file mode 100644
index 8612f51..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-/**

- * Internal session parameters.

- */

-public final class SpiSessionParameter {

-

-    public static final String LINK_CACHE = "org.apache.chemistry.opencmis.binding.atompub.linkcache";

-

-    private SpiSessionParameter() {

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
deleted file mode 100644
index af7741a..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;

-

-import java.io.IOException;

-import java.io.OutputStream;

-import java.util.ArrayList;

-import java.util.List;

-

-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;

-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;

-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.impl.Constants;

-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;

-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-import org.apache.chemistry.opencmis.commons.spi.VersioningService;

-

-/**

- * Versioning Service AtomPub client.

- */

-public class VersioningServiceImpl extends AbstractAtomPubService implements VersioningService {

-

-    /**

-     * Constructor.

-     */

-    public VersioningServiceImpl(BindingSession session) {

-        setSession(session);

-    }

-

-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,

-            Holder<Boolean> contentCopied) {

-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        // find the link

-        String link = loadCollection(repositoryId, Constants.COLLECTION_CHECKEDOUT);

-

-        if (link == null) {

-            throw new CmisObjectNotFoundException("Unknown repository or checkedout collection not supported!");

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-

-        // set up object and writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId.getValue()),

-                getCmisVersion(repositoryId));

-

-        // post move request

-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse the response

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        objectId.setValue(entry.getId());

-

-        lockLinks();

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-

-        if (contentCopied != null) {

-            contentCopied.setValue(null);

-        }

-    }

-

-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-        }

-

-        // prefer working copy link if available

-        // (workaround for non-compliant repositories)

-        String wcLink = getLink(repositoryId, objectId, Constants.REL_WORKINGCOPY, Constants.MEDIATYPE_ENTRY);

-        if (wcLink != null) {

-            link = wcLink;

-        }

-

-        delete(new UrlBuilder(link));

-    }

-

-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,

-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,

-            ExtensionsData extension) {

-        // we need an object id

-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {

-            throw new CmisInvalidArgumentException("Object id must be set!");

-        }

-

-        // find the link

-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);

-        }

-

-        // prefer working copy link if available

-        // (workaround for non-compliant repositories)

-        String wcLink = getLink(repositoryId, objectId.getValue(), Constants.REL_WORKINGCOPY, Constants.MEDIATYPE_ENTRY);

-        if (wcLink != null) {

-            link = wcLink;

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_CHECKIN_COMMENT, checkinComment);

-        url.addParameter(Constants.PARAM_MAJOR, major);

-        url.addParameter(Constants.PARAM_CHECK_IN, "true");

-

-        // set up writer

-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),

-                getCmisVersion(repositoryId), contentStream);

-

-        // update

-        Response resp = put(url, Constants.MEDIATYPE_ENTRY, new Output() {

-            public void write(OutputStream out) throws IOException {

-                entryWriter.write(out);

-            }

-        });

-

-        // parse new entry

-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);

-

-        // we expect a CMIS entry

-        if (entry.getId() == null) {

-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");

-        }

-

-        // set object id

-        objectId.setValue(entry.getId());

-

-        AccessControlListImpl originalAces = null;

-

-        lockLinks();

-        try {

-            // clean up cache

-            removeLinks(repositoryId, entry.getId());

-

-            // walk through the entry

-            for (AtomElement element : entry.getElements()) {

-                if (element.getObject() instanceof AtomLink) {

-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                } else if (element.getObject() instanceof ObjectData) {

-                    // extract current ACL

-                    ObjectData object = (ObjectData) element.getObject();

-                    if (object.getAcl() != null) {

-                        originalAces = new AccessControlListImpl(object.getAcl().getAces());

-                        originalAces.setExact(object.isExactAcl());

-                    }

-                }

-            }

-        } finally {

-            unlockLinks();

-        }

-

-        // handle ACL modifications

-        if ((originalAces != null) && (isAclMergeRequired(addAces, removeAces))) {

-            // merge and update ACL

-            Acl newACL = mergeAcls(originalAces, addAces, removeAces);

-            if (newACL != null) {

-                updateAcl(repositoryId, entry.getId(), newACL, null);

-            }

-        }

-    }

-

-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,

-            Boolean includeAllowableActions, ExtensionsData extension) {

-        List<ObjectData> result = new ArrayList<ObjectData>();

-

-        // find the link

-        String link = loadLink(repositoryId, objectId, Constants.REL_VERSIONHISTORY, Constants.MEDIATYPE_FEED);

-

-        if (link == null) {

-            throwLinkException(repositoryId, objectId, Constants.REL_VERSIONHISTORY, Constants.MEDIATYPE_FEED);

-        }

-

-        UrlBuilder url = new UrlBuilder(link);

-        url.addParameter(Constants.PARAM_FILTER, filter);

-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);

-

-        // read and parse

-        Response resp = read(url);

-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);

-

-        // get the versions

-        if (!feed.getEntries().isEmpty()) {

-            for (AtomEntry entry : feed.getEntries()) {

-                ObjectData version = null;

-

-                lockLinks();

-                try {

-                    // clean up cache

-                    removeLinks(repositoryId, entry.getId());

-

-                    // walk through the entry

-                    for (AtomElement element : entry.getElements()) {

-                        if (element.getObject() instanceof AtomLink) {

-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());

-                        } else if (element.getObject() instanceof ObjectData) {

-                            version = (ObjectData) element.getObject();

-                        }

-                    }

-                } finally {

-                    unlockLinks();

-                }

-

-                if (version != null) {

-                    result.add(version);

-                }

-            }

-        }

-

-        return result;

-    }

-

-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,

-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,

-            String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {

-

-        ReturnVersion returnVersion = ReturnVersion.LATEST;

-        if ((major != null) && (major.booleanValue())) {

-            returnVersion = ReturnVersion.LASTESTMAJOR;

-        }

-

-        return getObjectInternal(repositoryId, IdentifierType.ID, objectId, returnVersion, filter,

-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);

-    }

-

-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,

-            Boolean major, String filter, ExtensionsData extension) {

-

-        ReturnVersion returnVersion = ReturnVersion.LATEST;

-        if ((major != null) && (major.booleanValue())) {

-            returnVersion = ReturnVersion.LASTESTMAJOR;

-        }

-

-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, returnVersion, filter,

-                Boolean.FALSE, IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, Boolean.FALSE, extension);

-

-        return object.getProperties();

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java
deleted file mode 100644
index 34f711f..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import org.apache.chemistry.opencmis.commons.data.Acl;

-

-/**

- * AtomAcl.

- */

-public class AtomAcl extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private Acl acl;

-

-    public AtomAcl() {

-        super();

-    }

-

-    public AtomAcl(Acl acl) {

-        this();

-        this.acl = acl;

-    }

-

-    @Override

-    public String getType() {

-        return "ACL";

-    }

-

-    public Acl getACL() {

-        return acl;

-    }

-

-    public void setACL(Acl acl) {

-        this.acl = acl;

-    }

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java
deleted file mode 100644
index eef0f25..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import org.apache.chemistry.opencmis.commons.data.AllowableActions;

-

-/**

- * AtomAllowableActions.

- */

-public class AtomAllowableActions extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private AllowableActions allowableActions;

-

-    public AtomAllowableActions() {

-        super();

-    }

-

-    public AtomAllowableActions(AllowableActions allowableActions) {

-        this();

-        this.allowableActions = allowableActions;

-    }

-

-    @Override

-    public String getType() {

-        return "Allowable Actions";

-    }

-

-    public AllowableActions getAllowableActions() {

-        return allowableActions;

-    }

-

-    public void setAllowableActions(AllowableActions allowableActions) {

-        this.allowableActions = allowableActions;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java
deleted file mode 100644
index 5a269c1..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import java.io.Serializable;

-import java.util.ArrayList;

-import java.util.List;

-

-/**

- * Base type for Atom responses.

- */

-public abstract class AtomBase implements Serializable {

-

-    private static final long serialVersionUID = 1L;

-

-    private final List<AtomElement> elements = new ArrayList<AtomElement>();

-

-    protected AtomBase() {

-    }

-

-    public abstract String getType();

-

-    public List<AtomElement> getElements() {

-        return elements;

-    }

-

-    public void addElement(AtomElement element) {

-        if (element != null) {

-            elements.add(element);

-        }

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java
deleted file mode 100644
index 34a5b8d..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import java.io.Serializable;

-

-import javax.xml.namespace.QName;

-

-/**

- * Atom Element.

- */

-public class AtomElement implements Serializable {

-

-    private static final long serialVersionUID = 1L;

-

-    private final QName name;

-    private final Object object;

-

-    public AtomElement(QName name, Object object) {

-        this.name = name;

-        this.object = object;

-    }

-

-    public QName getName() {

-        return name;

-    }

-

-    public Object getObject() {

-        return object;

-    }

-

-    @Override

-    public String toString() {

-        return name + ": " + object;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java
deleted file mode 100644
index 0318f75..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-/**

- * Atom Entry.

- */

-public class AtomEntry extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private String id;

-

-    public AtomEntry() {

-        super();

-    }

-

-    @Override

-    public String getType() {

-        return "Atom Entry";

-    }

-

-    public String getId() {

-        return id;

-    }

-

-    public void setId(String id) {

-        this.id = id;

-    }

-

-    @Override

-    public String toString() {

-        return "Entry \"" + id + "\": " + getElements();

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java
deleted file mode 100644
index 75cad1b..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import java.util.ArrayList;

-import java.util.List;

-

-/**

- * Atom Feed.

- */

-public class AtomFeed extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private final List<AtomEntry> entries = new ArrayList<AtomEntry>();

-

-    public AtomFeed() {

-    }

-

-    @Override

-    public String getType() {

-        return "Atom Feed";

-    }

-

-    public List<AtomEntry> getEntries() {

-        return entries;

-    }

-

-    public void addEntry(AtomEntry entry) {

-        if (entry != null) {

-            entries.add(entry);

-        }

-    }

-

-    @Override

-    public String toString() {

-        return "Feed : " + getElements() + " " + entries;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java
deleted file mode 100644
index 2190f83..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import java.io.Serializable;

-

-/**

- * Atom Link.

- */

-public class AtomLink implements Serializable {

-

-    private static final long serialVersionUID = 1L;

-

-    private String rel;

-    private String type;

-    private String href;

-

-    public AtomLink() {

-    }

-

-    public String getRel() {

-        return rel;

-    }

-

-    public void setRel(String rel) {

-        this.rel = rel;

-    }

-

-    public String getType() {

-        return type;

-    }

-

-    public void setType(String type) {

-        this.type = type;

-    }

-

-    public String getHref() {

-        return href;

-    }

-

-    public void setHref(String href) {

-        this.href = href;

-    }

-

-    @Override

-    public String toString() {

-        return "Link: rel=\"" + rel + "\" type=\"" + type + "\" href=\"" + href + "\"";

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java
deleted file mode 100644
index ab2e83f..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-public class HtmlDoc extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    @Override

-    public String getType() {

-        return "HTML document";

-    }

-

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java
deleted file mode 100644
index 5bd2d43..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-/**

- * Repository workspace.

- */

-public class RepositoryWorkspace extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private String id;

-

-    public RepositoryWorkspace() {

-    }

-

-    @Override

-    public String getType() {

-        return "Repository Workspace";

-    }

-

-    public String getId() {

-        return id;

-    }

-

-    public void setId(String id) {

-        this.id = id;

-    }

-

-    @Override

-    public String toString() {

-        return "Workspace \"" + id + "\": " + getElements();

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java
deleted file mode 100644
index 0a3a5b4..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;

-

-import java.util.ArrayList;

-import java.util.List;

-

-/**

- * Service Doc.

- */

-public class ServiceDoc extends AtomBase {

-

-    private static final long serialVersionUID = 1L;

-

-    private final List<RepositoryWorkspace> workspaces = new ArrayList<RepositoryWorkspace>();

-

-    public ServiceDoc() {

-    }

-

-    @Override

-    public String getType() {

-        return "Service Document";

-    }

-

-    public List<RepositoryWorkspace> getWorkspaces() {

-        return workspaces;

-    }

-

-    public void addWorkspace(RepositoryWorkspace ws) {

-        if (ws != null) {

-            workspaces.add(ws);

-        }

-    }

-

-    @Override

-    public String toString() {

-        return "Service Doc: " + workspaces;

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java
deleted file mode 100644
index 8a738c8..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketTimeoutException;
-import java.util.Collections;
-import java.util.List;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.http.Header;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.params.ConnManagerPNames;
-import org.apache.http.conn.params.ConnPerRouteBean;
-import org.apache.http.conn.scheme.LayeredSocketFactory;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.cookie.Cookie;
-import org.apache.http.cookie.CookieOrigin;
-import org.apache.http.cookie.CookieSpec;
-import org.apache.http.cookie.CookieSpecFactory;
-import org.apache.http.cookie.MalformedCookieException;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.ProxySelectorRoutePlanner;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.impl.cookie.CookieSpecBase;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-
-/**
- * A {@link HttpInvoker} that uses The Apache HTTP client.
- */
-public class ApacheClientHttpInvoker extends AbstractApacheClientHttpInvoker {
-
-    private static final String IGNORE_COOKIES = "ignoreCookies";
-
-    protected DefaultHttpClient createHttpClient(UrlBuilder url, BindingSession session) {
-        // set params
-        HttpParams params = createDefaultHttpParams(session);
-        params.setParameter(ClientPNames.COOKIE_POLICY, IGNORE_COOKIES);
-
-        // set max connection
-        String maxConnStr = System.getProperty("http.maxConnections", "5");
-        int maxConn = 5;
-        try {
-            maxConn = Integer.parseInt(maxConnStr);
-        } catch (NumberFormatException nfe) {
-            // ignore
-        }
-        params.setIntParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, maxConn * 4);
-        params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(maxConn));
-
-        // set up scheme registry
-        SchemeRegistry registry = new SchemeRegistry();
-        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
-        registry.register(new Scheme("https", getSSLSocketFactory(url, session), 443));
-
-        // set up connection manager
-        ThreadSafeClientConnManager connManager = new ThreadSafeClientConnManager(params, registry);
-
-        // set up proxy
-        ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(registry, null);
-
-        // set up client
-        DefaultHttpClient httpclient = new DefaultHttpClient(connManager, params);
-        httpclient.setRoutePlanner(routePlanner);
-        httpclient.getCookieSpecs().register(IGNORE_COOKIES, new IgnoreSpecFactory());
-
-        return httpclient;
-    }
-
-    /**
-     * Builds a SSL Socket Factory for the Apache HTTP Client.
-     */
-    private LayeredSocketFactory getSSLSocketFactory(final UrlBuilder url, final BindingSession session) {
-        // get authentication provider
-        AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-
-        // check SSL Socket Factory
-        final SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-        if (sf == null) {
-            // no custom factory -> return default factory
-            return org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory();
-        }
-
-        // check hostame verifier and use default if not set
-        final HostnameVerifier hv = (authProvider.getHostnameVerifier() == null ? new BrowserCompatHostnameVerifier()
-                : authProvider.getHostnameVerifier());
-
-        // build new socket factory
-        return new LayeredSocketFactory() {
-
-            public boolean isSecure(Socket sock) {
-                return true;
-            }
-
-            public Socket createSocket() throws IOException {
-                return (SSLSocket) sf.createSocket();
-            }
-
-            public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
-                SSLSocket sslSocket = (SSLSocket) sf.createSocket(socket, host, port, autoClose);
-                verify(hv, host, sslSocket);
-
-                return sslSocket;
-            }
-
-            public Socket connectSocket(Socket sock, String host, int port, InetAddress localAddress, int localPort,
-                    HttpParams params) throws IOException {
-                SSLSocket sslSocket = (SSLSocket) (sock != null ? sock : createSocket());
-
-                if (localAddress != null || localPort > 0) {
-                    if (localPort < 0) {
-                        localPort = 0;
-                    }
-
-                    InetSocketAddress isa = new InetSocketAddress(localAddress, localPort);
-                    sslSocket.bind(isa);
-                }
-
-                InetSocketAddress remoteAddress = new InetSocketAddress(host, port);
-
-                int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
-                int soTimeout = HttpConnectionParams.getSoTimeout(params);
-
-                try {
-                    sslSocket.setSoTimeout(soTimeout);
-                    sslSocket.connect(remoteAddress, connTimeout);
-                } catch (SocketTimeoutException ex) {
-                    closeSocket(sock);
-                    throw new ConnectTimeoutException("Connect to " + remoteAddress + " timed out!");
-                }
-
-                verify(hv, host, sslSocket);
-
-                return sslSocket;
-            }
-        };
-    }
-
-    /**
-     * A cookies spec factory that ignores cookies.
-     */
-    private static class IgnoreSpecFactory implements CookieSpecFactory {
-        public CookieSpec newInstance(final HttpParams params) {
-            return new CookieSpecBase() {
-                public int getVersion() {
-                    return 0;
-                }
-
-                public List<Cookie> parse(Header header, CookieOrigin origin) throws MalformedCookieException {
-                    return Collections.emptyList();
-                }
-
-                public List<Header> formatCookies(List<Cookie> cookies) {
-                    return Collections.emptyList();
-                }
-
-                public Header getVersionHeader() {
-                    return null;
-                }
-            };
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java
deleted file mode 100644
index 09380c1..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.GZIPOutputStream;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSocketFactory;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class DefaultHttpInvoker implements HttpInvoker {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpInvoker.class);
-
-    private static final int BUFFER_SIZE = 2 * 1024 * 1024;
-
-    public DefaultHttpInvoker() {
-    }
-
-    public Response invokeGET(UrlBuilder url, BindingSession session) {
-        return invoke(url, "GET", null, null, null, session, null, null);
-    }
-
-    public Response invokeGET(UrlBuilder url, BindingSession session, BigInteger offset, BigInteger length) {
-        return invoke(url, "GET", null, null, null, session, offset, length);
-    }
-
-    public Response invokePOST(UrlBuilder url, String contentType, Output writer, BindingSession session) {
-        return invoke(url, "POST", contentType, null, writer, session, null, null);
-    }
-
-    public Response invokePUT(UrlBuilder url, String contentType, Map<String, String> headers, Output writer,
-            BindingSession session) {
-        return invoke(url, "PUT", contentType, headers, writer, session, null, null);
-    }
-
-    public Response invokeDELETE(UrlBuilder url, BindingSession session) {
-        return invoke(url, "DELETE", null, null, null, session, null, null);
-    }
-
-    private Response invoke(UrlBuilder url, String method, String contentType, Map<String, String> headers,
-            Output writer, BindingSession session, BigInteger offset, BigInteger length) {
-        int respCode = -1;
-
-        try {
-            // log before connect
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Session {}: {} {}", session.getSessionId(), method, url);
-            }
-
-            // connect
-            HttpURLConnection conn = (HttpURLConnection) (new URL(url.toString())).openConnection();
-            conn.setRequestMethod(method);
-            conn.setDoInput(true);
-            conn.setDoOutput(writer != null);
-            conn.setAllowUserInteraction(false);
-            conn.setUseCaches(false);
-            conn.setRequestProperty("User-Agent", ClientVersion.OPENCMIS_CLIENT);
-
-            // timeouts
-            int connectTimeout = session.get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                conn.setConnectTimeout(connectTimeout);
-            }
-
-            int readTimeout = session.get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                conn.setReadTimeout(readTimeout);
-            }
-
-            // set content type
-            if (contentType != null) {
-                conn.setRequestProperty("Content-Type", contentType);
-            }
-            // set other headers
-            if (headers != null) {
-                for (Map.Entry<String, String> header : headers.entrySet()) {
-                    conn.addRequestProperty(header.getKey(), header.getValue());
-                }
-            }
-
-            // authenticate
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-            if (authProvider != null) {
-                Map<String, List<String>> httpHeaders = authProvider.getHTTPHeaders(url.toString());
-                if (httpHeaders != null) {
-                    for (Map.Entry<String, List<String>> header : httpHeaders.entrySet()) {
-                        if (header.getKey() != null && header.getValue() != null && !header.getValue().isEmpty()) {
-                            String key = header.getKey();
-                            if (key.equalsIgnoreCase("user-agent")) {
-                                conn.setRequestProperty("User-Agent", header.getValue().get(0));
-                            } else {
-                                for (String value : header.getValue()) {
-                                    if (value != null) {
-                                        conn.addRequestProperty(key, value);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if (conn instanceof HttpsURLConnection) {
-                    SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-                    if (sf != null) {
-                        ((HttpsURLConnection) conn).setSSLSocketFactory(sf);
-                    }
-
-                    HostnameVerifier hv = authProvider.getHostnameVerifier();
-                    if (hv != null) {
-                        ((HttpsURLConnection) conn).setHostnameVerifier(hv);
-                    }
-                }
-            }
-
-            // range
-            if ((offset != null) || (length != null)) {
-                StringBuilder sb = new StringBuilder("bytes=");
-
-                if ((offset == null) || (offset.signum() == -1)) {
-                    offset = BigInteger.ZERO;
-                }
-
-                sb.append(offset.toString());
-                sb.append('-');
-
-                if ((length != null) && (length.signum() == 1)) {
-                    sb.append(offset.add(length.subtract(BigInteger.ONE)).toString());
-                }
-
-                conn.setRequestProperty("Range", sb.toString());
-            }
-
-            // compression
-            Object compression = session.get(SessionParameter.COMPRESSION);
-            if ((compression != null) && Boolean.parseBoolean(compression.toString())) {
-                conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
-            }
-
-            // locale
-            if (session.get(CmisBindingsHelper.ACCEPT_LANGUAGE) instanceof String) {
-                conn.setRequestProperty("Accept-Language", session.get(CmisBindingsHelper.ACCEPT_LANGUAGE).toString());
-            }
-
-            // send data
-            if (writer != null) {
-                
-                //Not supported with All server.
-                //conn.setChunkedStreamingMode((64 * 1024) - 1);
-
-                OutputStream connOut = null;
-
-                Object clientCompression = session.get(SessionParameter.CLIENT_COMPRESSION);
-                if ((clientCompression != null) && Boolean.parseBoolean(clientCompression.toString())) {
-                    conn.setRequestProperty("Content-Encoding", "gzip");
-                    connOut = new GZIPOutputStream(conn.getOutputStream(), 4096);
-                } else {
-                    connOut = conn.getOutputStream();
-                }
-
-                OutputStream out = new BufferedOutputStream(connOut, BUFFER_SIZE);
-                writer.write(out);
-                out.flush();
-
-                if (connOut instanceof GZIPOutputStream) {
-                    ((GZIPOutputStream) connOut).finish();
-                }
-            }
-
-            // connect
-            conn.connect();
-
-            // get stream, if present
-            respCode = conn.getResponseCode();
-            InputStream inputStream = null;
-            if ((respCode == 200) || (respCode == 201) || (respCode == 203) || (respCode == 206)) {
-                inputStream = conn.getInputStream();
-            }
-
-            // log after connect
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("Session {}: {} {} > Headers: {}", session.getSessionId(), method, url, conn
-                        .getHeaderFields().toString());
-            }
-
-            // forward response HTTP headers
-            if (authProvider != null) {
-                authProvider.putResponseHeaders(url.toString(), respCode, conn.getHeaderFields());
-            }
-
-            // get the response
-            return new Response(respCode, conn.getResponseMessage(), conn.getHeaderFields(), inputStream,
-                    conn.getErrorStream());
-        } catch (Exception e) {
-            String status = (respCode > 0 ? " (HTTP status code " + respCode + ")" : "");
-            throw new CmisConnectionException("Cannot access \"" + url + "\"" + status + ": " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java
deleted file mode 100644
index 9b90e19..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java
+++ /dev/null
@@ -1,2743 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.commons.impl;

-

-import static org.apache.chemistry.opencmis.commons.impl.XMLConstants.*;

-

-import java.io.IOException;

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.GregorianCalendar;

-import java.util.LinkedList;

-import java.util.List;

-import java.util.Map;

-import java.util.Set;

-

-import javax.xml.namespace.QName;

-

-import org.apache.chemistry.opencmis.commons.data.Ace;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;

-import org.apache.chemistry.opencmis.commons.data.AllowableActions;

-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;

-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;

-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;

-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;

-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;

-import org.apache.chemistry.opencmis.commons.data.ObjectData;

-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;

-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;

-import org.apache.chemistry.opencmis.commons.data.Principal;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;

-import org.apache.chemistry.opencmis.commons.data.PropertyData;

-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;

-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;

-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;

-import org.apache.chemistry.opencmis.commons.data.PropertyId;

-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;

-import org.apache.chemistry.opencmis.commons.data.PropertyString;

-import org.apache.chemistry.opencmis.commons.data.PropertyUri;

-import org.apache.chemistry.opencmis.commons.data.RenditionData;

-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.definitions.Choice;

-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.enums.Action;

-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;

-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;

-import org.apache.chemistry.opencmis.commons.enums.Cardinality;

-import org.apache.chemistry.opencmis.commons.enums.ChangeType;

-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;

-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;

-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;

-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;

-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;

-import org.apache.chemistry.opencmis.commons.enums.PropertyType;

-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;

-import org.apache.chemistry.opencmis.commons.enums.Updatability;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;

-import org.slf4j.Logger;

-import org.slf4j.LoggerFactory;

-import org.xmlpull.v1.XmlPullParser;

-import org.xmlpull.v1.XmlPullParserException;

-import org.xmlpull.v1.XmlSerializer;

-

-public final class XMLConverter {

-

-    private static final Logger LOG = LoggerFactory.getLogger(XMLConverter.class);

-

-    private XMLConverter() {

-    }

-

-    // ---------------

-    // --- writers ---

-    // ---------------

-

-    public static void writeRepositoryInfo(XmlSerializer writer, CmisVersion cmisVersion, String namespace,

-            RepositoryInfo source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(namespace, TAG_REPOSITORY_INFO);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_ID, source.getId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_NAME, source.getName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_DESCRIPTION, source.getDescription());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_VENDOR, source.getVendorName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRODUCT, source.getProductName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRODUCT_VERSION, source.getProductVersion());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_ROOT_FOLDER_ID, source.getRootFolderId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGE_LOG_TOKEN,

-                source.getLatestChangeLogToken());

-        writeRepositoryCapabilities(writer, cmisVersion, source.getCapabilities());

-        writeAclCapabilities(writer, cmisVersion, source.getAclCapabilities());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CMIS_VERSION_SUPPORTED,

-                source.getCmisVersionSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_THIN_CLIENT_URI, source.getThinClientUri());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGES_INCOMPLETE,

-                source.getChangesIncomplete());

-        if (source.getChangesOnType() != null) {

-            for (BaseTypeId baseType : source.getChangesOnType()) {

-                if (cmisVersion == CmisVersion.CMIS_1_0 && baseType == BaseTypeId.CMIS_ITEM) {

-                    LOG.warn("Receiver only understands CMIS 1.0 but the Changes On Type list in the Repository info contains the base type Item. "

-                            + "The Item base type has been removed from the list.");

-                    continue;

-                }

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGES_ON_TYPE, baseType);

-            }

-        }

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRINCIPAL_ID_ANONYMOUS,

-                source.getPrincipalIdAnonymous());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRINCIPAL_ID_ANYONE,

-                source.getPrincipalIdAnyone());

-        if (cmisVersion != CmisVersion.CMIS_1_0 && source.getExtensionFeatures() != null) {

-            for (ExtensionFeature feature : source.getExtensionFeatures()) {

-                writeExtendedFeatures(writer, cmisVersion, feature);

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(namespace, TAG_REPOSITORY_INFO);

-    }

-

-    public static void writeRepositoryCapabilities(XmlSerializer writer, CmisVersion cmisVersion,

-            RepositoryCapabilities source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(NAMESPACE_CMIS, TAG_REPINFO_CAPABILITIES);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ACL, source.getAclCapability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ALL_VERSIONS_SEARCHABLE,

-                source.isAllVersionsSearchableSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CHANGES, source.getChangesCapability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CONTENT_STREAM_UPDATABILITY,

-                source.getContentStreamUpdatesCapability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_GET_DESCENDANTS, source.isGetDescendantsSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_GET_FOLDER_TREE, source.isGetFolderTreeSupported());

-        if (cmisVersion != CmisVersion.CMIS_1_0) {

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ORDER_BY, source.getOrderByCapability());

-        }

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_MULTIFILING, source.isMultifilingSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_PWC_SEARCHABLE, source.isPwcSearchableSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_PWC_UPDATABLE, source.isPwcUpdatableSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_QUERY, source.getQueryCapability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_RENDITIONS, source.getRenditionsCapability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_UNFILING, source.isUnfilingSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_VERSION_SPECIFIC_FILING,

-                source.isVersionSpecificFilingSupported());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_JOIN, source.getJoinCapability());

-        if (cmisVersion != CmisVersion.CMIS_1_0) {

-            if (source.getCreatablePropertyTypes() != null) {

-                CreatablePropertyTypes creatablePropertyTypes = source.getCreatablePropertyTypes();

-

-                writer.startTag(NAMESPACE_CMIS, TAG_CAP_CREATABLE_PROPERTY_TYPES);

-

-                if (creatablePropertyTypes.canCreate() != null) {

-                    for (PropertyType pt : creatablePropertyTypes.canCreate()) {

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE,

-                                pt);

-                    }

-                }

-

-                writeExtensions(writer, creatablePropertyTypes);

-                writer.endTag(NAMESPACE_CMIS, TAG_CAP_CREATABLE_PROPERTY_TYPES);

-            }

-            if (source.getNewTypeSettableAttributes() != null) {

-                NewTypeSettableAttributes newTypeSettableAttributes = source.getNewTypeSettableAttributes();

-

-                writer.startTag(NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES);

-

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID,

-                        newTypeSettableAttributes.canSetId());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME,

-                        newTypeSettableAttributes.canSetLocalName());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,

-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE,

-                        newTypeSettableAttributes.canSetLocalNamespace());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME,

-                        newTypeSettableAttributes.canSetDisplayName());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME,

-                        newTypeSettableAttributes.canSetQueryName());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION,

-                        newTypeSettableAttributes.canSetDescription());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE,

-                        newTypeSettableAttributes.canSetCreatable());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE,

-                        newTypeSettableAttributes.canSetFileable());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE,

-                        newTypeSettableAttributes.canSetQueryable());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,

-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED,

-                        newTypeSettableAttributes.canSetFulltextIndexed());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,

-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY,

-                        newTypeSettableAttributes.canSetIncludedInSupertypeQuery());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,

-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY,

-                        newTypeSettableAttributes.canSetControllablePolicy());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,

-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL,

-                        newTypeSettableAttributes.canSetControllableAcl());

-

-                writeExtensions(writer, newTypeSettableAttributes);

-                writer.endTag(NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES);

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_REPINFO_CAPABILITIES);

-    }

-

-    public static void writeAclCapabilities(XmlSerializer writer, CmisVersion cmisVersion, AclCapabilities source)

-            throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(NAMESPACE_CMIS, TAG_REPINFO_ACL_CAPABILITIES);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_SUPPORTED_PERMISSIONS,

-                source.getSupportedPermissions());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_ACL_PROPAGATION, source.getAclPropagation());

-        if (source.getPermissions() != null) {

-            for (PermissionDefinition pd : source.getPermissions()) {

-                writer.startTag(NAMESPACE_CMIS, TAG_ACLCAP_PERMISSIONS);

-

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_PERMISSION, pd.getId());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_DESCRIPTION,

-                        pd.getDescription());

-

-                writeExtensions(writer, pd);

-                writer.endTag(NAMESPACE_CMIS, TAG_ACLCAP_PERMISSIONS);

-            }

-        }

-        if (source.getPermissionMapping() != null) {

-            for (PermissionMapping pm : source.getPermissionMapping().values()) {

-                writer.startTag(NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_MAPPING);

-

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_MAPPING_KEY, pm.getKey());

-                if (pm.getPermissions() != null) {

-                    for (String perm : pm.getPermissions()) {

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_MAPPING_PERMISSION, perm);

-                    }

-                }

-

-                writeExtensions(writer, pm);

-                writer.endTag(NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_MAPPING);

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_REPINFO_ACL_CAPABILITIES);

-    }

-

-    public static void writeExtendedFeatures(XmlSerializer writer, CmisVersion cmisVersion, ExtensionFeature source)

-            throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(NAMESPACE_CMIS, TAG_REPINFO_EXTENDED_FEATURES);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_ID, source.getId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_URL, source.getUrl());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_COMMON_NAME, source.getCommonName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_VERSION_LABEL, source.getVersionLabel());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DESCRIPTION, source.getDescription());

-        if (source.getFeatureData() != null) {

-            for (Map.Entry<String, String> data : source.getFeatureData().entrySet()) {

-                writer.startTag(NAMESPACE_CMIS, TAG_FEATURE_DATA);

-

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DATA_KEY, data.getKey());

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DATA_VALUE, data.getValue());

-

-                writer.endTag(NAMESPACE_CMIS, TAG_FEATURE_DATA);

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_REPINFO_EXTENDED_FEATURES);

-    }

-

-    // --------------------------

-    // --- definition writers ---

-    // --------------------------

-

-    public static void writeTypeDefinition(XmlSerializer writer, CmisVersion cmisVersion, String namespace,

-            TypeDefinition source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        if (cmisVersion == CmisVersion.CMIS_1_0) {

-            if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {

-                LOG.warn("Receiver only understands CMIS 1.0. It may not able to handle an Item type definition.");

-            } else if (source.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY) {

-                LOG.warn("Receiver only understands CMIS 1.0. It may not able to handle a Secondary type definition.");

-            }

-        }

-

-        writer.setPrefix(PREFIX_XSI, NAMESPACE_XSI);

-        writer.startTag(namespace, TAG_TYPE);

-        writer.attribute("", XMLConstants.PREFIX_XSI, XMLConstants.NAMESPACE_XSI);

-

-        if (source.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_DOCUMENT_TYPE);

-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_FOLDER_TYPE);

-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_RELATIONSHIP) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_RELATIONSHIP_TYPE);

-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_POLICY) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_POLICY_TYPE);

-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_ITEM_TYPE);

-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY) {

-            writer.attribute(NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_SECONDARY_TYPE);

-        } else {

-            throw new CmisRuntimeException("Type definition has no base type id!");

-        }

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ID, source.getId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_LOCALNAME, source.getLocalName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_LOCALNAMESPACE, source.getLocalNamespace());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_DISPLAYNAME, source.getDisplayName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_QUERYNAME, source.getQueryName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_DESCRIPTION, source.getDescription());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_BASE_ID, source.getBaseTypeId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_PARENT_ID, source.getParentTypeId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CREATABLE, source.isCreatable());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_FILEABLE, source.isFileable());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_QUERYABLE, source.isQueryable());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_FULLTEXT_INDEXED, source.isFulltextIndexed());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_INCLUDE_IN_SUPERTYPE_QUERY,

-                source.isIncludedInSupertypeQuery());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTROLABLE_POLICY, source.isControllablePolicy());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTROLABLE_ACL, source.isControllableAcl());

-        if (cmisVersion != CmisVersion.CMIS_1_0 && source.getTypeMutability() != null) {

-            TypeMutability tm = source.getTypeMutability();

-

-            writer.startTag(NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY);

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_CREATE, tm.canCreate());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_UPDATE, tm.canUpdate());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_DELETE, tm.canDelete());

-

-            writeExtensions(writer, tm);

-            writer.endTag(NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY);

-        }

-        if (source.getPropertyDefinitions() != null) {

-            for (PropertyDefinition<?> pd : source.getPropertyDefinitions().values()) {

-                writePropertyDefinition(writer, cmisVersion, pd);

-            }

-        }

-

-        if (source instanceof DocumentTypeDefinition) {

-            DocumentTypeDefinition docDef = (DocumentTypeDefinition) source;

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_VERSIONABLE, docDef.isVersionable());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTENTSTREAM_ALLOWED,

-                    docDef.getContentStreamAllowed());

-        }

-

-        if (source instanceof RelationshipTypeDefinition) {

-            RelationshipTypeDefinition relDef = (RelationshipTypeDefinition) source;

-            if (relDef.getAllowedSourceTypeIds() != null) {

-                for (String id : relDef.getAllowedSourceTypeIds()) {

-                    if (id != null) {

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ALLOWED_SOURCE_TYPES, id);

-                    }

-                }

-            }

-            if (relDef.getAllowedTargetTypeIds() != null) {

-                for (String id : relDef.getAllowedTargetTypeIds()) {

-                    if (id != null) {

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ALLOWED_TARGET_TYPES, id);

-                    }

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(namespace, TAG_TYPE);

-    }

-

-    public static void writePropertyDefinition(XmlSerializer writer, CmisVersion cmisVersion,

-            PropertyDefinition<?> source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        if (source.getPropertyType() == null) {

-            throw new CmisRuntimeException("Property type for property definition '" + source.getId() + "' is not set!");

-        }

-

-        String tagName = "";

-        switch (source.getPropertyType()) {

-        case STRING:

-            tagName = TAG_TYPE_PROP_DEF_STRING;

-            break;

-        case ID:

-            tagName = TAG_TYPE_PROP_DEF_ID;

-            break;

-        case INTEGER:

-            tagName = TAG_TYPE_PROP_DEF_INTEGER;

-            break;

-        case BOOLEAN:

-            tagName = TAG_TYPE_PROP_DEF_BOOLEAN;

-            break;

-        case DATETIME:

-            tagName = TAG_TYPE_PROP_DEF_DATETIME;

-            break;

-        case DECIMAL:

-            tagName = TAG_TYPE_PROP_DEF_DECIMAL;

-            break;

-        case HTML:

-            tagName = TAG_TYPE_PROP_DEF_HTML;

-            break;

-        case URI:

-            tagName = TAG_TYPE_PROP_DEF_URI;

-            break;

-        default:

-            throw new CmisRuntimeException("Property defintion has no property type!");

-        }

-        writer.startTag(NAMESPACE_CMIS, tagName);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_ID, source.getId());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_LOCALNAME, source.getLocalName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_LOCALNAMESPACE,

-                source.getLocalNamespace());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_DISPLAYNAME, source.getDisplayName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_QUERYNAME, source.getQueryName());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_DESCRIPTION, source.getDescription());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_PROPERTY_TYPE, source.getPropertyType());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CARDINALITY, source.getCardinality());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_UPDATABILITY, source.getUpdatability());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_INHERITED, source.isInherited());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_REQUIRED, source.isRequired());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_QUERYABLE, source.isQueryable());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_ORDERABLE, source.isOrderable());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_OPENCHOICE, source.isOpenChoice());

-

-        if (source instanceof PropertyStringDefinition) {

-            PropertyStringDefinition def = (PropertyStringDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyStringImpl((String) null, def.getDefaultValue()), true);

-            }

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_LENGTH, def.getMaxLength());

-        } else if (source instanceof PropertyIdDefinition) {

-            PropertyIdDefinition def = (PropertyIdDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyIdImpl((String) null, def.getDefaultValue()), true);

-            }

-        } else if (source instanceof PropertyIntegerDefinition) {

-            PropertyIntegerDefinition def = (PropertyIntegerDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyIntegerImpl((String) null, def.getDefaultValue()), true);

-            }

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_VALUE, def.getMaxValue());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MIN_VALUE, def.getMinValue());

-        } else if (source instanceof PropertyBooleanDefinition) {

-            PropertyBooleanDefinition def = (PropertyBooleanDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyBooleanImpl((String) null, def.getDefaultValue()), true);

-            }

-        } else if (source instanceof PropertyDateTimeDefinition) {

-            PropertyDateTimeDefinition def = (PropertyDateTimeDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyDateTimeImpl((String) null, def.getDefaultValue()), true);

-            }

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_RESOLUTION,

-                    def.getDateTimeResolution());

-        } else if (source instanceof PropertyDecimalDefinition) {

-            PropertyDecimalDefinition def = (PropertyDecimalDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyDecimalImpl((String) null, def.getDefaultValue()), true);

-            }

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_VALUE, def.getMaxValue());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MIN_VALUE, def.getMinValue());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_PRECISION, def.getPrecision());

-        } else if (source instanceof PropertyHtmlDefinition) {

-            PropertyHtmlDefinition def = (PropertyHtmlDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyHtmlImpl((String) null, def.getDefaultValue()), true);

-            }

-        } else if (source instanceof PropertyUriDefinition) {

-            PropertyUriDefinition def = (PropertyUriDefinition) source;

-

-            if (def.getDefaultValue() != null) {

-                writeProperty(writer, new PropertyUriImpl((String) null, def.getDefaultValue()), true);

-            }

-        }

-

-        if (source.getChoices() != null) {

-            for (Choice<?> c : source.getChoices()) {

-                if (c != null) {

-                    writeChoice(writer, source.getPropertyType(), c);

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, tagName);

-    }

-

-    @SuppressWarnings("unchecked")

-    public static void writeChoice(XmlSerializer writer, PropertyType propType, Choice<?> source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE);

-

-        if (source.getDisplayName() != null) {

-            writer.attribute("", ATTR_PROPERTY_TYPE_CHOICE_DISPLAYNAME, source.getDisplayName());

-        }

-

-        if (source.getValue() != null) {

-            switch (propType) {

-            case STRING:

-            case ID:

-            case HTML:

-            case URI:

-                for (String value : (List<String>) source.getValue()) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);

-                }

-                break;

-            case INTEGER:

-                for (BigInteger value : (List<BigInteger>) source.getValue()) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);

-                }

-                break;

-            case BOOLEAN:

-                for (Boolean value : (List<Boolean>) source.getValue()) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);

-                }

-                break;

-            case DATETIME:

-                for (GregorianCalendar value : (List<GregorianCalendar>) source.getValue()) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);

-                }

-                break;

-            case DECIMAL:

-                for (BigDecimal value : (List<BigDecimal>) source.getValue()) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);

-                }

-                break;

-            default:

-            }

-        }

-

-        if (source.getChoice() != null) {

-            for (Choice<?> c : source.getChoice()) {

-                if (c != null) {

-                    writeChoice(writer, propType, c);

-                }

-            }

-        }

-

-        writer.endTag(NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE);

-    }

-

-    // -----------------------

-    // --- object writers ---

-    // -----------------------

-

-    public static void writeObject(XmlSerializer writer, CmisVersion cmisVersion, String namespace, ObjectData source)

-            throws IOException {

-        writeObject(writer, cmisVersion, false, TAG_OBJECT, namespace, source);

-    }

-

-    public static void writeObject(XmlSerializer writer, CmisVersion cmisVersion, boolean root, String name,

-            String namespace, ObjectData source) throws IOException {

-

-        if (source == null) {

-            return;

-        }

-

-        if (cmisVersion == CmisVersion.CMIS_1_0) {

-            if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {

-                LOG.warn("Receiver only understands CMIS 1.0. It may not be able to handle an Item object.");

-            }

-        }

-

-        if (root) {

-            writer.startTag(NAMESPACE_CMIS, name);

-            writer.attribute("", PREFIX_CMIS, NAMESPACE_CMIS);

-            namespace = NAMESPACE_CMIS;

-        } else {

-            writer.startTag(namespace, name);

-        }

-

-        if (source.getProperties() != null) {

-            Properties properties = source.getProperties();

-

-            writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_PROPERTIES);

-

-            if (properties.getPropertyList() != null) {

-                for (PropertyData<?> property : properties.getPropertyList()) {

-                    writeProperty(writer, property, false);

-                }

-            }

-

-            writeExtensions(writer, properties);

-            writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_PROPERTIES);

-        }

-        if (source.getAllowableActions() != null) {

-            writeAllowableActions(writer, cmisVersion, false, source.getAllowableActions());

-        }

-        if (source.getRelationships() != null) {

-            for (ObjectData rel : source.getRelationships()) {

-                if (rel != null) {

-                    writeObject(writer, cmisVersion, false, TAG_OBJECT_RELATIONSHIP, NAMESPACE_CMIS, rel);

-                }

-            }

-        }

-        if (source.getChangeEventInfo() != null) {

-            ChangeEventInfo info = source.getChangeEventInfo();

-

-            writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_CHANGE_EVENT_INFO);

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CHANGE_EVENT_TYPE, info.getChangeType());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CHANGE_EVENT_TIME, info.getChangeTime());

-

-            writeExtensions(writer, info);

-            writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_CHANGE_EVENT_INFO);

-        }

-        if (source.getAcl() != null) {

-            writeAcl(writer, cmisVersion, false, source.getAcl());

-        }

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_OBJECT_EXACT_ACL, source.isExactAcl());

-        if (source.getPolicyIds() != null) {

-            PolicyIdList pids = source.getPolicyIds();

-

-            writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_POLICY_IDS);

-

-            if (pids.getPolicyIds() != null) {

-                for (String id : pids.getPolicyIds()) {

-                    if (id != null) {

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_POLICY_ID, id);

-                    }

-                }

-            }

-

-            writeExtensions(writer, pids);

-            writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_POLICY_IDS);

-        }

-        if (source.getRenditions() != null) {

-            for (RenditionData rend : source.getRenditions()) {

-                if (rend != null) {

-                    writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_RENDITION);

-

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_STREAM_ID, rend.getStreamId());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_MIMETYPE, rend.getMimeType());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_LENGTH, rend.getBigLength());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_KIND, rend.getKind());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_TITLE, rend.getTitle());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_HEIGHT, rend.getBigHeight());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_WIDTH, rend.getBigWidth());

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_DOCUMENT_ID,

-                            rend.getRenditionDocumentId());

-

-                    writeExtensions(writer, rend);

-                    writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_RENDITION);

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(namespace, name);

-    }

-

-    @SuppressWarnings("unchecked")

-    public static void writeProperty(XmlSerializer writer, PropertyData<?> source, boolean isDefaultValue)

-            throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        String tagName = TAG_PROPERTY_TYPE_DEAULT_VALUE;

-        if (isDefaultValue) {

-            tagName = TAG_PROPERTY_TYPE_DEAULT_VALUE;

-        } else {

-            if (source instanceof PropertyString) {

-                tagName = TAG_PROP_STRING;

-            } else if (source instanceof PropertyId) {

-                tagName = TAG_PROP_ID;

-            } else if (source instanceof PropertyInteger) {

-                tagName = TAG_PROP_INTEGER;

-            } else if (source instanceof PropertyBoolean) {

-                tagName = TAG_PROP_BOOLEAN;

-            } else if (source instanceof PropertyDateTime) {

-                tagName = TAG_PROP_DATETIME;

-            } else if (source instanceof PropertyDecimal) {

-                tagName = TAG_PROP_DECIMAL;

-            } else if (source instanceof PropertyHtml) {

-                tagName = TAG_PROP_HTML;

-            } else if (source instanceof PropertyUri) {

-                tagName = TAG_PROP_URI;

-            } else {

-                throw new CmisRuntimeException("Invalid property!");

-            }

-        }

-

-        writer.startTag(NAMESPACE_CMIS, tagName);

-

-        if (source.getId() != null) {

-            writer.attribute(null, ATTR_PROPERTY_ID, source.getId());

-        }

-        if (source.getDisplayName() != null) {

-            writer.attribute(null, ATTR_PROPERTY_DISPLAYNAME, source.getDisplayName());

-        }

-        if (source.getLocalName() != null) {

-            writer.attribute(null, ATTR_PROPERTY_LOCALNAME, source.getLocalName());

-        }

-        if (source.getQueryName() != null) {

-            writer.attribute(null, ATTR_PROPERTY_QUERYNAME, source.getQueryName());

-        }

-

-        if ((source instanceof PropertyString) || (source instanceof PropertyId) || (source instanceof PropertyHtml)

-                || (source instanceof PropertyUri)) {

-            List<String> values = (List<String>) source.getValues();

-            if (values != null) {

-                for (String value : values) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);

-                }

-            }

-        } else if (source instanceof PropertyInteger) {

-            List<BigInteger> values = ((PropertyInteger) source).getValues();

-            if (values != null) {

-                for (BigInteger value : values) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);

-                }

-            }

-        } else if (source instanceof PropertyBoolean) {

-            List<Boolean> values = ((PropertyBoolean) source).getValues();

-            if (values != null) {

-                for (Boolean value : values) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);

-                }

-            }

-        } else if (source instanceof PropertyDateTime) {

-            List<GregorianCalendar> values = ((PropertyDateTime) source).getValues();

-            if (values != null) {

-                for (GregorianCalendar value : values) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);

-                }

-            }

-        } else if (source instanceof PropertyDecimal) {

-            List<BigDecimal> values = ((PropertyDecimal) source).getValues();

-            if (values != null) {

-                for (BigDecimal value : values) {

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, tagName);

-    }

-

-    public static void writeAllowableActions(XmlSerializer writer, CmisVersion cmisVersion, boolean root,

-            AllowableActions source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        if (root) {

-            writer.startTag(NAMESPACE_CMIS, "allowableActions");

-            writer.attribute("", PREFIX_CMIS, NAMESPACE_CMIS);

-        } else {

-            writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_ALLOWABLE_ACTIONS);

-        }

-

-        if (source.getAllowableActions() != null) {

-            for (Action action : Action.values()) {

-                if (source.getAllowableActions().contains(action)) {

-                    if (action == Action.CAN_CREATE_ITEM && cmisVersion == CmisVersion.CMIS_1_0) {

-                        LOG.warn("Receiver only understands CMIS 1.0 but the Allowable Actions contain the canCreateItem action. "

-                                + "The canCreateItem action has been removed from the Allowable Actions.");

-                        continue;

-                    }

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, action.value(), Boolean.TRUE);

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_ALLOWABLE_ACTIONS);

-    }

-

-    public static void writeAcl(XmlSerializer writer, CmisVersion cmisVersion, boolean root, Acl source)

-            throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        if (root) {

-            writer.startTag(NAMESPACE_CMIS, "acl");

-            writer.attribute("", PREFIX_CMIS, NAMESPACE_CMIS);

-        } else {

-            writer.startTag(NAMESPACE_CMIS, TAG_OBJECT_ACL);

-        }

-

-        if (source.getAces() != null) {

-            for (Ace ace : source.getAces()) {

-                if (ace != null) {

-                    writer.startTag(NAMESPACE_CMIS, TAG_ACL_PERMISSISONS);

-

-                    if (ace.getPrincipal() != null) {

-                        Principal principal = ace.getPrincipal();

-

-                        writer.startTag(NAMESPACE_CMIS, TAG_ACE_PRINCIPAL);

-

-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_PRINCIPAL_ID, principal.getId());

-

-                        writeExtensions(writer, principal);

-                        writer.endTag(NAMESPACE_CMIS, TAG_ACE_PRINCIPAL);

-                    }

-                    if (ace.getPermissions() != null) {

-                        for (String perm : ace.getPermissions()) {

-                            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_PERMISSIONS, perm);

-                        }

-                    }

-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_IS_DIRECT, ace.isDirect());

-

-                    writeExtensions(writer, ace);

-                    writer.endTag(NAMESPACE_CMIS, TAG_ACL_PERMISSISONS);

-                }

-            }

-        }

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_OBJECT_ACL);

-    }

-

-    // -------------

-    // --- query ---

-    // -------------

-

-    public static void writeQuery(XmlSerializer writer, CmisVersion cmisVersion, QueryTypeImpl source)

-            throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        writer.startTag(NAMESPACE_CMIS, TAG_QUERY);

-        writer.attribute(null, XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);

-

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_STATEMENT, source.getStatement());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_SEARCHALLVERSIONS, source.getSearchAllVersions());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_INCLUDEALLOWABLEACTIONS,

-                source.getIncludeAllowableActions());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_INCLUDERELATIONSHIPS,

-                source.getIncludeRelationships());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_RENDITIONFILTER, source.getRenditionFilter());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_MAXITEMS, source.getMaxItems());

-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_SKIPCOUNT, source.getSkipCount());

-

-        writeExtensions(writer, source);

-        writer.endTag(NAMESPACE_CMIS, TAG_QUERY);

-    }

-

-    // -------------------

-    // --- bulk update ---

-    // -------------------

-

-    public static void writeBulkUpdate(XmlSerializer writer, String namespace, BulkUpdateImpl bulkUpdate)

-            throws IOException {

-        if (bulkUpdate == null || bulkUpdate.getObjectIdAndChangeToken() == null) {

-            return;

-        }

-

-        writer.startTag(namespace, TAG_BULK_UPDATE);

-

-        for (BulkUpdateObjectIdAndChangeToken idAndToken : bulkUpdate.getObjectIdAndChangeToken()) {

-            if (idAndToken == null) {

-                continue;

-            }

-

-            writer.startTag(NAMESPACE_CMIS, TAG_BULK_UPDATE_ID_AND_TOKEN);

-

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_IDANDTOKEN_ID, idAndToken.getId());

-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_IDANDTOKEN_CHANGETOKEN, idAndToken.getChangeToken());

-

-            writeExtensions(writer, idAndToken);

-            writer.endTag(NAMESPACE_CMIS, TAG_BULK_UPDATE_ID_AND_TOKEN);

-        }

-

-        if (bulkUpdate.getProperties() != null) {

-            Properties properties = bulkUpdate.getProperties();

-            writer.startTag(NAMESPACE_CMIS, TAG_BULK_UPDATE_PROPERTIES);

-

-            if (properties.getPropertyList() != null) {

-                for (PropertyData<?> property : properties.getPropertyList()) {

-                    writeProperty(writer, property, false);

-                }

-            }

-

-            writeExtensions(writer, properties);

-            writer.endTag(NAMESPACE_CMIS, TAG_BULK_UPDATE_PROPERTIES);

-        }

-

-        if (bulkUpdate.getAddSecondaryTypeIds() != null) {

-            for (String id : bulkUpdate.getAddSecondaryTypeIds()) {

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_BULK_UPDATE_ADD_SECONDARY_TYPES, id);

-            }

-        }

-

-        if (bulkUpdate.getRemoveSecondaryTypeIds() != null) {

-            for (String id : bulkUpdate.getRemoveSecondaryTypeIds()) {

-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_BULK_UPDATE_REMOVE_SECONDARY_TYPES, id);

-            }

-        }

-

-        writer.endTag(namespace, TAG_BULK_UPDATE);

-    }

-

-    // -------------------------

-    // --- extension writers ---

-    // -------------------------

-

-    public static void writeExtensions(XmlSerializer writer, ExtensionsData source) throws IOException {

-        if (source == null) {

-            return;

-        }

-

-        LinkedList<String> ns = new LinkedList<String>();

-

-        if (source.getExtensions() != null) {

-            for (CmisExtensionElement element : source.getExtensions()) {

-                if (element == null) {

-                    continue;

-                }

-

-                writeExtensionElement(writer, element, ns);

-            }

-        }

-    }

-

-    private static void writeExtensionElement(XmlSerializer writer, CmisExtensionElement source, LinkedList<String> ns)

-            throws IOException {

-        if (source == null || source.getName() == null) {

-            return;

-        }

-

-        String namespace = null;

-        // boolean addedNamespace = false;

-

-        if (source.getNamespace() != null) {

-            /*

-             * String prefix = writer.getPrefix(source.getNamespace(), false);

-             * if (prefix == null) { int p = ns.indexOf(source.getNamespace());

-             * 

-             * if (p == -1) { prefix = "e" + (ns.size() + 1);

-             * ns.add(source.getNamespace()); addedNamespace = true; } else {

-             * prefix = "e" + (p + 1); } }

-             */

-

-            namespace = source.getNamespace();

-            writer.startTag(source.getNamespace(), source.getName());

-

-            /*

-             * if (addedNamespace) { writer.attribute("", prefix,

-             * source.getNamespace()); }

-             */

-        } else {

-            writer.startTag(null, source.getName());

-        }

-

-        if (source.getAttributes() != null) {

-            for (Map.Entry<String, String> attr : source.getAttributes().entrySet()) {

-                writer.attribute(null, attr.getKey(), attr.getValue());

-            }

-        }

-

-        if (source.getValue() != null) {

-            writer.text(source.getValue());

-        } else {

-            if (source.getChildren() != null) {

-                for (CmisExtensionElement child : source.getChildren()) {

-                    writeExtensionElement(writer, child, ns);

-                }

-            }

-        }

-

-        writer.endTag(namespace, source.getName());

-

-        /*

-         * if (addedNamespace) { ns.removeLast(); }

-         */

-    }

-

-    // ---------------

-    // --- parsers ---

-    // ---------------

-

-    public static RepositoryInfo convertRepositoryInfo(XmlPullParser parser) throws XmlPullParserException {

-        return REPOSITORY_INFO_PARSER.walk(parser);

-    }

-

-    public static TypeDefinition convertTypeDefinition(XmlPullParser parser) throws XmlPullParserException {

-        return TYPE_DEF_PARSER.walk(parser);

-    }

-

-    public static ObjectData convertObject(XmlPullParser parser) throws XmlPullParserException {

-        return OBJECT_PARSER.walk(parser);

-    }

-

-    public static QueryTypeImpl convertQuery(XmlPullParser parser) throws XmlPullParserException {

-        return QUERY_PARSER.walk(parser);

-    }

-

-    public static AllowableActions convertAllowableActions(XmlPullParser parser) throws XmlPullParserException {

-        return ALLOWABLE_ACTIONS_PARSER.walk(parser);

-    }

-

-    public static Acl convertAcl(XmlPullParser parser) throws XmlPullParserException {

-        return ACL_PARSER.walk(parser);

-    }

-

-    public static BulkUpdateImpl convertBulkUpdate(XmlPullParser parser) throws XmlPullParserException {

-        return BULK_UPDATE_PARSER.walk(parser);

-    }

-

-    // ------------------------------

-    // --- repository info parser ---

-    // ------------------------------

-

-    private static final XMLWalker<RepositoryInfoImpl> REPOSITORY_INFO_PARSER = new XMLWalker<RepositoryInfoImpl>() {

-        @Override

-        protected RepositoryInfoImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new RepositoryInfoImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, RepositoryInfoImpl target)

-                throws XmlPullParserException {

-

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_REPINFO_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_NAME)) {

-                    target.setName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_DESCRIPTION)) {

-                    target.setDescription(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_VENDOR)) {

-                    target.setVendorName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_PRODUCT)) {

-                    target.setProductName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_PRODUCT_VERSION)) {

-                    target.setProductVersion(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_ROOT_FOLDER_ID)) {

-                    target.setRootFolder(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_CHANGE_LOG_TOKEN)) {

-                    target.setLatestChangeLogToken(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_CAPABILITIES)) {

-                    target.setCapabilities(CAPABILITIES_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_ACL_CAPABILITIES)) {

-                    target.setAclCapabilities(ACL_CAPABILITIES_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_CMIS_VERSION_SUPPORTED)) {

-                    target.setCmisVersionSupported(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_THIN_CLIENT_URI)) {

-                    target.setThinClientUri(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_CHANGES_INCOMPLETE)) {

-                    target.setChangesIncomplete(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_CHANGES_ON_TYPE)) {

-                    target.setChangesOnType(addToList(target.getChangesOnType(), readEnum(parser, BaseTypeId.class)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_PRINCIPAL_ID_ANONYMOUS)) {

-                    target.setPrincipalAnonymous(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_PRINCIPAL_ID_ANYONE)) {

-                    target.setPrincipalAnyone(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_REPINFO_EXTENDED_FEATURES)) {

-                    target.setExtensionFeature(addToList(target.getExtensionFeatures(),

-                            EXTENDED_FEATURES_PARSER.walk(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<RepositoryCapabilitiesImpl> CAPABILITIES_PARSER = new XMLWalker<RepositoryCapabilitiesImpl>() {

-        @Override

-        protected RepositoryCapabilitiesImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new RepositoryCapabilitiesImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, RepositoryCapabilitiesImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_CAP_ACL)) {

-                    target.setCapabilityAcl(readEnum(parser, CapabilityAcl.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_ALL_VERSIONS_SEARCHABLE)) {

-                    target.setAllVersionsSearchable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_CHANGES)) {

-                    target.setCapabilityChanges(readEnum(parser, CapabilityChanges.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_CONTENT_STREAM_UPDATABILITY)) {

-                    target.setCapabilityContentStreamUpdates(readEnum(parser, CapabilityContentStreamUpdates.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_GET_DESCENDANTS)) {

-                    target.setSupportsGetDescendants(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_GET_FOLDER_TREE)) {

-                    target.setSupportsGetFolderTree(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_ORDER_BY)) {

-                    target.setCapabilityOrderBy(readEnum(parser, CapabilityOrderBy.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_MULTIFILING)) {

-                    target.setSupportsMultifiling(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_PWC_SEARCHABLE)) {

-                    target.setIsPwcSearchable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_PWC_UPDATABLE)) {

-                    target.setIsPwcUpdatable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_QUERY)) {

-                    target.setCapabilityQuery(readEnum(parser, CapabilityQuery.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_RENDITIONS)) {

-                    target.setCapabilityRendition(readEnum(parser, CapabilityRenditions.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_UNFILING)) {

-                    target.setSupportsUnfiling(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_VERSION_SPECIFIC_FILING)) {

-                    target.setSupportsVersionSpecificFiling(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_JOIN)) {

-                    target.setCapabilityJoin(readEnum(parser, CapabilityJoin.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_CREATABLE_PROPERTY_TYPES)) {

-                    target.setCreatablePropertyTypes(CREATABLE_PROPERTY_TYPES_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES)) {

-                    target.setNewTypeSettableAttributes(NEW_TYPES_SETTABLE_ATTRIBUTES_PARSER.walk(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<CreatablePropertyTypesImpl> CREATABLE_PROPERTY_TYPES_PARSER = new XMLWalker<CreatablePropertyTypesImpl>() {

-        @Override

-        protected CreatablePropertyTypesImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new CreatablePropertyTypesImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, CreatablePropertyTypesImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE)) {

-                    target.canCreate().add(readEnum(parser, PropertyType.class));

-                    return true;

-                }

-            }

-            return false;

-        }

-    };

-

-    private static final XMLWalker<NewTypeSettableAttributesImpl> NEW_TYPES_SETTABLE_ATTRIBUTES_PARSER = new XMLWalker<NewTypeSettableAttributesImpl>() {

-        @Override

-        protected NewTypeSettableAttributesImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new NewTypeSettableAttributesImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, NewTypeSettableAttributesImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID)) {

-                    target.setCanSetId(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME)) {

-                    target.setCanSetLocalName(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE)) {

-                    target.setCanSetLocalNamespace(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME)) {

-                    target.setCanSetDisplayName(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME)) {

-                    target.setCanSetQueryName(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION)) {

-                    target.setCanSetDescription(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE)) {

-                    target.setCanSetCreatable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE)) {

-                    target.setCanSetFileable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE)) {

-                    target.setCanSetQueryable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED)) {

-                    target.setCanSetFulltextIndexed(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY)) {

-                    target.setCanSetIncludedInSupertypeQuery(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY)) {

-                    target.setCanSetControllablePolicy(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL)) {

-                    target.setCanSetControllableAcl(readBoolean(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AclCapabilitiesDataImpl> ACL_CAPABILITIES_PARSER = new XMLWalker<AclCapabilitiesDataImpl>() {

-        @Override

-        protected AclCapabilitiesDataImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new AclCapabilitiesDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AclCapabilitiesDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACLCAP_SUPPORTED_PERMISSIONS)) {

-                    target.setSupportedPermissions(readEnum(parser, SupportedPermissions.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACLCAP_ACL_PROPAGATION)) {

-                    target.setAclPropagation(readEnum(parser, AclPropagation.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACLCAP_PERMISSIONS)) {

-                    target.setPermissionDefinitionData(addToList(target.getPermissions(),

-                            PERMISSION_DEFINITION_PARSER.walk(parser)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACLCAP_PERMISSION_MAPPING)) {

-                    PermissionMapping pm = PERMISSION_MAPPING_PARSER.walk(parser);

-

-                    Map<String, PermissionMapping> mapping = target.getPermissionMapping();

-                    mapping.put(pm.getKey(), pm);

-

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<PermissionDefinitionDataImpl> PERMISSION_DEFINITION_PARSER = new XMLWalker<PermissionDefinitionDataImpl>() {

-        @Override

-        protected PermissionDefinitionDataImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new PermissionDefinitionDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, PermissionDefinitionDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACLCAP_PERMISSION_PERMISSION)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACLCAP_PERMISSION_DESCRIPTION)) {

-                    target.setDescription(readText(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<PermissionMappingDataImpl> PERMISSION_MAPPING_PARSER = new XMLWalker<PermissionMappingDataImpl>() {

-        @Override

-        protected PermissionMappingDataImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new PermissionMappingDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, PermissionMappingDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACLCAP_MAPPING_KEY)) {

-                    target.setKey(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACLCAP_MAPPING_PERMISSION)) {

-                    target.setPermissions(addToList(target.getPermissions(), readText(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<ExtensionFeatureImpl> EXTENDED_FEATURES_PARSER = new XMLWalker<ExtensionFeatureImpl>() {

-        @Override

-        protected ExtensionFeatureImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new ExtensionFeatureImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, ExtensionFeatureImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_FEATURE_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_URL)) {

-                    target.setUrl(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_COMMON_NAME)) {

-                    target.setCommonName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_VERSION_LABEL)) {

-                    target.setVersionLabel(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_DESCRIPTION)) {

-                    target.setDescription(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_DATA)) {

-                    String[] data = FEATURE_DATA_PARSER.walk(parser);

-

-                    Map<String, String> featureData = target.getFeatureData();

-                    featureData.put(data[0], data[1]);

-

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<String[]> FEATURE_DATA_PARSER = new XMLWalker<String[]>() {

-        @Override

-        protected String[] prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new String[2];

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, String[] target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_FEATURE_DATA_KEY)) {

-                    target[0] = readText(parser);

-                    return true;

-                }

-

-                if (isTag(name, TAG_FEATURE_DATA_VALUE)) {

-                    target[1] = readText(parser);

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    // --------------------------

-    // --- definition parsers ---

-    // --------------------------

-

-    private static final XMLWalker<AbstractTypeDefinition> TYPE_DEF_PARSER = new XMLWalker<AbstractTypeDefinition>() {

-        @Override

-        protected AbstractTypeDefinition prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-

-            AbstractTypeDefinition result = null;

-

-            String typeAttr = parser.getAttributeValue(NAMESPACE_XSI, "type");

-            if (typeAttr != null) {

-                if (typeAttr.endsWith(ATTR_DOCUMENT_TYPE)) {

-                    result = new DocumentTypeDefinitionImpl();

-                } else if (typeAttr.endsWith(ATTR_FOLDER_TYPE)) {

-                    result = new FolderTypeDefinitionImpl();

-                } else if (typeAttr.endsWith(ATTR_RELATIONSHIP_TYPE)) {

-                    result = new RelationshipTypeDefinitionImpl();

-                    ((RelationshipTypeDefinitionImpl) result).setAllowedSourceTypes(new ArrayList<String>());

-                    ((RelationshipTypeDefinitionImpl) result).setAllowedTargetTypes(new ArrayList<String>());

-                } else if (typeAttr.endsWith(ATTR_POLICY_TYPE)) {

-                    result = new PolicyTypeDefinitionImpl();

-                } else if (typeAttr.endsWith(ATTR_ITEM_TYPE)) {

-                    result = new ItemTypeDefinitionImpl();

-                } else if (typeAttr.endsWith(ATTR_SECONDARY_TYPE)) {

-                    result = new SecondaryTypeDefinitionImpl();

-                }

-            }

-

-            if (result == null) {

-                throw new CmisInvalidArgumentException("Cannot read type definition!");

-            }

-

-            return result;

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AbstractTypeDefinition target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_TYPE_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_LOCALNAME)) {

-                    target.setLocalName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_LOCALNAMESPACE)) {

-                    target.setLocalNamespace(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_DISPLAYNAME)) {

-                    target.setDisplayName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_QUERYNAME)) {

-                    target.setQueryName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_DESCRIPTION)) {

-                    target.setDescription(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_BASE_ID)) {

-                    BaseTypeId baseType = readEnum(parser, BaseTypeId.class);

-                    if (baseType == null) {

-                        throw new CmisInvalidArgumentException("Invalid base type!");

-                    }

-

-                    target.setBaseTypeId(baseType);

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_PARENT_ID)) {

-                    target.setParentTypeId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_CREATABLE)) {

-                    target.setIsCreatable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_FILEABLE)) {

-                    target.setIsFileable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_QUERYABLE)) {

-                    target.setIsQueryable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_FULLTEXT_INDEXED)) {

-                    target.setIsFulltextIndexed(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_INCLUDE_IN_SUPERTYPE_QUERY)) {

-                    target.setIsIncludedInSupertypeQuery(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_CONTROLABLE_POLICY)) {

-                    target.setIsControllablePolicy(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_CONTROLABLE_ACL)) {

-                    target.setIsControllableAcl(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY)) {

-                    target.setTypeMutability(TYPE_MUTABILITY_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_PROP_DEF_STRING) || isTag(name, TAG_TYPE_PROP_DEF_ID)

-                        || isTag(name, TAG_TYPE_PROP_DEF_BOOLEAN) || isTag(name, TAG_TYPE_PROP_DEF_INTEGER)

-                        || isTag(name, TAG_TYPE_PROP_DEF_DATETIME) || isTag(name, TAG_TYPE_PROP_DEF_DECIMAL)

-                        || isTag(name, TAG_TYPE_PROP_DEF_HTML) || isTag(name, TAG_TYPE_PROP_DEF_URI)) {

-                    target.addPropertyDefinition(PROPERTY_TYPE_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (target instanceof DocumentTypeDefinitionImpl) {

-                    if (isTag(name, TAG_TYPE_VERSIONABLE)) {

-                        ((DocumentTypeDefinitionImpl) target).setIsVersionable(readBoolean(parser));

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_TYPE_CONTENTSTREAM_ALLOWED)) {

-                        ((DocumentTypeDefinitionImpl) target).setContentStreamAllowed(readEnum(parser,

-                                ContentStreamAllowed.class));

-                        return true;

-                    }

-                }

-

-                if (target instanceof RelationshipTypeDefinitionImpl) {

-                    if (isTag(name, TAG_TYPE_ALLOWED_SOURCE_TYPES)) {

-                        RelationshipTypeDefinitionImpl relTarget = (RelationshipTypeDefinitionImpl) target;

-                        relTarget

-                                .setAllowedSourceTypes(addToList(relTarget.getAllowedSourceTypeIds(), readText(parser)));

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_TYPE_ALLOWED_TARGET_TYPES)) {

-                        RelationshipTypeDefinitionImpl relTarget = (RelationshipTypeDefinitionImpl) target;

-                        relTarget

-                                .setAllowedTargetTypes(addToList(relTarget.getAllowedTargetTypeIds(), readText(parser)));

-                        return true;

-                    }

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<TypeMutabilityImpl> TYPE_MUTABILITY_PARSER = new XMLWalker<TypeMutabilityImpl>() {

-        @Override

-        protected TypeMutabilityImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new TypeMutabilityImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, TypeMutabilityImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_CREATE)) {

-                    target.setCanCreate(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_UPDATE)) {

-                    target.setCanUpdate(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_DELETE)) {

-                    target.setCanDelete(readBoolean(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AbstractPropertyDefinition<?>> PROPERTY_TYPE_PARSER = new XMLWalker<AbstractPropertyDefinition<?>>() {

-        @Override

-        protected AbstractPropertyDefinition<?> prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            AbstractPropertyDefinition<?> result = null;

-

-            if (isTag(name, TAG_TYPE_PROP_DEF_STRING)) {

-                result = new PropertyStringDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_ID)) {

-                result = new PropertyIdDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_BOOLEAN)) {

-                result = new PropertyBooleanDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_INTEGER)) {

-                result = new PropertyIntegerDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_DATETIME)) {

-                result = new PropertyDateTimeDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_DECIMAL)) {

-                result = new PropertyDecimalDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_HTML)) {

-                result = new PropertyHtmlDefinitionImpl();

-            } else if (isTag(name, TAG_TYPE_PROP_DEF_URI)) {

-                result = new PropertyUriDefinitionImpl();

-            }

-

-            if (result == null) {

-                throw new CmisInvalidArgumentException("Cannot read property type definition!");

-            }

-

-            return result;

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AbstractPropertyDefinition<?> target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_PROPERTY_TYPE_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_LOCALNAME)) {

-                    target.setLocalName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_LOCALNAMESPACE)) {

-                    target.setLocalNamespace(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_DISPLAYNAME)) {

-                    target.setDisplayName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_QUERYNAME)) {

-                    target.setQueryName(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_DESCRIPTION)) {

-                    target.setDescription(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_PROPERTY_TYPE)) {

-                    PropertyType propType = readEnum(parser, PropertyType.class);

-                    if (propType == null) {

-                        throw new CmisInvalidArgumentException("Invalid property type!");

-                    }

-

-                    target.setPropertyType(propType);

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_CARDINALITY)) {

-                    Cardinality cardinality = readEnum(parser, Cardinality.class);

-                    if (cardinality == null) {

-                        throw new CmisInvalidArgumentException("Invalid cardinality!");

-                    }

-

-                    target.setCardinality(cardinality);

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_UPDATABILITY)) {

-                    Updatability updatability = readEnum(parser, Updatability.class);

-                    if (updatability == null) {

-                        throw new CmisInvalidArgumentException("Invalid updatability!");

-                    }

-

-                    target.setUpdatability(updatability);

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_INHERITED)) {

-                    target.setIsInherited(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_REQUIRED)) {

-                    target.setIsRequired(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_QUERYABLE)) {

-                    target.setIsQueryable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_ORDERABLE)) {

-                    target.setIsOrderable(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_OPENCHOICE)) {

-                    target.setIsOpenChoice(readBoolean(parser));

-                    return true;

-                }

-

-                if (target instanceof PropertyStringDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyString prop = PROPERTY_STRING_PARSER.walk(parser);

-                        ((PropertyStringDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyStringDefinitionImpl) target);

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_LENGTH)) {

-                        ((PropertyStringDefinitionImpl) target).setMaxLength(readInteger(parser));

-                        return true;

-                    }

-                } else if (target instanceof PropertyIdDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyId prop = PROPERTY_ID_PARSER.walk(parser);

-                        ((PropertyIdDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyIdDefinitionImpl) target);

-                        return true;

-                    }

-                } else if (target instanceof PropertyBooleanDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyBoolean prop = PROPERTY_BOOLEAN_PARSER.walk(parser);

-                        ((PropertyBooleanDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_BOOLEAN_PARSER.addToChoiceList(parser, (PropertyBooleanDefinitionImpl) target);

-                        return true;

-                    }

-                } else if (target instanceof PropertyIntegerDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyInteger prop = PROPERTY_INTEGER_PARSER.walk(parser);

-                        ((PropertyIntegerDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_INTEGER_PARSER.addToChoiceList(parser, (PropertyIntegerDefinitionImpl) target);

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_VALUE)) {

-                        ((PropertyIntegerDefinitionImpl) target).setMaxValue(readInteger(parser));

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_MIN_VALUE)) {

-                        ((PropertyIntegerDefinitionImpl) target).setMinValue(readInteger(parser));

-                        return true;

-                    }

-                } else if (target instanceof PropertyDateTimeDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyDateTime prop = PROPERTY_DATETIME_PARSER.walk(parser);

-                        ((PropertyDateTimeDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_DATETIME_PARSER.addToChoiceList(parser, (PropertyDateTimeDefinitionImpl) target);

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_RESOLUTION)) {

-                        ((PropertyDateTimeDefinitionImpl) target).setDateTimeResolution(readEnum(parser,

-                                DateTimeResolution.class));

-                        return true;

-                    }

-                } else if (target instanceof PropertyDecimalDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyDecimal prop = PROPERTY_DECIMAL_PARSER.walk(parser);

-                        ((PropertyDecimalDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_DECIMAL_PARSER.addToChoiceList(parser, (PropertyDecimalDefinitionImpl) target);

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_VALUE)) {

-                        ((PropertyDecimalDefinitionImpl) target).setMaxValue(readDecimal(parser));

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_MIN_VALUE)) {

-                        ((PropertyDecimalDefinitionImpl) target).setMinValue(readDecimal(parser));

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_PRECISION)) {

-                        try {

-                            ((PropertyDecimalDefinitionImpl) target).setPrecision(DecimalPrecision

-                                    .fromValue(readInteger(parser)));

-                        } catch (IllegalArgumentException e) {

-                            // invalid enum value - ignore

-                        }

-                        return true;

-                    }

-                } else if (target instanceof PropertyHtmlDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyHtml prop = PROPERTY_HTML_PARSER.walk(parser);

-                        ((PropertyHtmlDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyHtmlDefinitionImpl) target);

-                        return true;

-                    }

-                } else if (target instanceof PropertyUriDefinitionImpl) {

-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {

-                        PropertyUri prop = PROPERTY_URI_PARSER.walk(parser);

-                        ((PropertyUriDefinitionImpl) target).setDefaultValue(prop.getValues());

-                        return true;

-                    }

-

-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {

-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyUriDefinitionImpl) target);

-                        return true;

-                    }

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final ChoiceAtomPubXMLWalker<String> CHOICE_STRING_PARSER = new ChoiceAtomPubXMLWalker<String>() {

-        @Override

-        protected ChoiceImpl<String> createTarget(XmlPullParser parser, QName name) {

-            return new ChoiceImpl<String>();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, ChoiceImpl<String> target) throws XmlPullParserException {

-            target.setValue(addToList(target.getValue(), readText(parser)));

-        }

-

-        protected void addChoice(XmlPullParser parser, ChoiceImpl<String> target) throws XmlPullParserException {

-            target.setChoice(addToList(target.getChoice(), CHOICE_STRING_PARSER.walk(parser)));

-        }

-    };

-

-    private static final ChoiceAtomPubXMLWalker<Boolean> CHOICE_BOOLEAN_PARSER = new ChoiceAtomPubXMLWalker<Boolean>() {

-        @Override

-        protected ChoiceImpl<Boolean> createTarget(XmlPullParser parser, QName name) {

-            return new ChoiceImpl<Boolean>();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, ChoiceImpl<Boolean> target) throws XmlPullParserException {

-            target.setValue(addToList(target.getValue(), readBoolean(parser)));

-        }

-

-        protected void addChoice(XmlPullParser parser, ChoiceImpl<Boolean> target) throws XmlPullParserException {

-            target.setChoice(addToList(target.getChoice(), CHOICE_BOOLEAN_PARSER.walk(parser)));

-        }

-    };

-

-    private static final ChoiceAtomPubXMLWalker<BigInteger> CHOICE_INTEGER_PARSER = new ChoiceAtomPubXMLWalker<BigInteger>() {

-        @Override

-        protected ChoiceImpl<BigInteger> createTarget(XmlPullParser parser, QName name) {

-            return new ChoiceImpl<BigInteger>();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, ChoiceImpl<BigInteger> target) throws XmlPullParserException {

-            target.setValue(addToList(target.getValue(), readInteger(parser)));

-        }

-

-        protected void addChoice(XmlPullParser parser, ChoiceImpl<BigInteger> target) throws XmlPullParserException {

-            target.setChoice(addToList(target.getChoice(), CHOICE_INTEGER_PARSER.walk(parser)));

-        }

-    };

-

-    private static final ChoiceAtomPubXMLWalker<GregorianCalendar> CHOICE_DATETIME_PARSER = new ChoiceAtomPubXMLWalker<GregorianCalendar>() {

-        @Override

-        protected ChoiceImpl<GregorianCalendar> createTarget(XmlPullParser parser, QName name) {

-            return new ChoiceImpl<GregorianCalendar>();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, ChoiceImpl<GregorianCalendar> target)

-                throws XmlPullParserException {

-            target.setValue(addToList(target.getValue(), readDateTime(parser)));

-        }

-

-        protected void addChoice(XmlPullParser parser, ChoiceImpl<GregorianCalendar> target)

-                throws XmlPullParserException {

-            target.setChoice(addToList(target.getChoice(), CHOICE_DATETIME_PARSER.walk(parser)));

-        }

-    };

-

-    private static final ChoiceAtomPubXMLWalker<BigDecimal> CHOICE_DECIMAL_PARSER = new ChoiceAtomPubXMLWalker<BigDecimal>() {

-        @Override

-        protected ChoiceImpl<BigDecimal> createTarget(XmlPullParser parser, QName name) {

-            return new ChoiceImpl<BigDecimal>();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, ChoiceImpl<BigDecimal> target) throws XmlPullParserException {

-            target.setValue(addToList(target.getValue(), readDecimal(parser)));

-        }

-

-        protected void addChoice(XmlPullParser parser, ChoiceImpl<BigDecimal> target) throws XmlPullParserException {

-            target.setChoice(addToList(target.getChoice(), CHOICE_DECIMAL_PARSER.walk(parser)));

-        }

-    };

-

-    private abstract static class ChoiceAtomPubXMLWalker<T> extends XMLWalker<ChoiceImpl<T>> {

-

-        public void addToChoiceList(XmlPullParser parser, AbstractPropertyDefinition<T> propDef)

-                throws XmlPullParserException {

-            propDef.setChoices(addToList(propDef.getChoices(), walk(parser)));

-        }

-

-        protected abstract ChoiceImpl<T> createTarget(XmlPullParser parser, QName name);

-

-        @Override

-        protected ChoiceImpl<T> prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            ChoiceImpl<T> result = createTarget(parser, name);

-

-            if (parser.getAttributeCount() > 0) {

-                for (int i = 0; i < parser.getAttributeCount(); i++) {

-                    String attr = parser.getAttributeName(i);

-                    if (ATTR_PROPERTY_TYPE_CHOICE_DISPLAYNAME.equals(attr)) {

-                        result.setDisplayName(parser.getAttributeValue(i));

-                    }

-                }

-            }

-

-            return result;

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, ChoiceImpl<T> target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_PROPERTY_TYPE_CHOICE_VALUE)) {

-                    addValue(parser, target);

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROPERTY_TYPE_CHOICE_CHOICE)) {

-                    addChoice(parser, target);

-                    return true;

-                }

-            }

-

-            return false;

-        }

-

-        protected abstract void addValue(XmlPullParser parser, ChoiceImpl<T> target) throws XmlPullParserException;

-

-        protected abstract void addChoice(XmlPullParser parser, ChoiceImpl<T> target) throws XmlPullParserException;

-    }

-

-    // ---------------------------------

-    // --- objects and lists parsers ---

-    // ---------------------------------

-

-    private static final XMLWalker<ObjectDataImpl> OBJECT_PARSER = new XMLWalker<ObjectDataImpl>() {

-        @Override

-        protected ObjectDataImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new ObjectDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, ObjectDataImpl target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_OBJECT_PROPERTIES)) {

-                    target.setProperties(PROPERTIES_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_ALLOWABLE_ACTIONS)) {

-                    target.setAllowableActions(ALLOWABLE_ACTIONS_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_RELATIONSHIP)) {

-                    target.setRelationships(addToList(target.getRelationships(), OBJECT_PARSER.walk(parser)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_CHANGE_EVENT_INFO)) {

-                    target.setChangeEventInfo(CHANGE_EVENT_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_ACL)) {

-                    target.setAcl(ACL_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_EXACT_ACL)) {

-                    target.setIsExactAcl(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_POLICY_IDS)) {

-                    target.setPolicyIds(POLICY_IDS_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_OBJECT_RENDITION)) {

-                    target.setRenditions(addToList(target.getRenditions(), RENDITION_PARSER.walk(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<PropertiesImpl> PROPERTIES_PARSER = new XMLWalker<PropertiesImpl>() {

-        @Override

-        protected PropertiesImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new PropertiesImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, PropertiesImpl target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_PROP_STRING)) {

-                    target.addProperty(PROPERTY_STRING_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_ID)) {

-                    target.addProperty(PROPERTY_ID_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_BOOLEAN)) {

-                    target.addProperty(PROPERTY_BOOLEAN_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_INTEGER)) {

-                    target.addProperty(PROPERTY_INTEGER_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_DATETIME)) {

-                    target.addProperty(PROPERTY_DATETIME_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_DECIMAL)) {

-                    target.addProperty(PROPERTY_DECIMAL_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_HTML)) {

-                    target.addProperty(PROPERTY_HTML_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_PROP_URI)) {

-                    target.addProperty(PROPERTY_URI_PARSER.walk(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AllowableActionsImpl> ALLOWABLE_ACTIONS_PARSER = new XMLWalker<AllowableActionsImpl>() {

-        @Override

-        protected AllowableActionsImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new AllowableActionsImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AllowableActionsImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                try {

-                    Action action = Action.fromValue(name.getLocalPart());

-

-                    Set<Action> actions = target.getAllowableActions();

-

-                    if (Boolean.TRUE.equals(readBoolean(parser))) {

-                        actions.add(action);

-                    }

-

-                    return true;

-                } catch (IllegalArgumentException e) {

-                    // extension tag -> ignore

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<ChangeEventInfoDataImpl> CHANGE_EVENT_PARSER = new XMLWalker<ChangeEventInfoDataImpl>() {

-        @Override

-        protected ChangeEventInfoDataImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new ChangeEventInfoDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, ChangeEventInfoDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_CHANGE_EVENT_TYPE)) {

-                    target.setChangeType(readEnum(parser, ChangeType.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_CHANGE_EVENT_TIME)) {

-                    target.setChangeTime(readDateTime(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AccessControlListImpl> ACL_PARSER = new XMLWalker<AccessControlListImpl>() {

-        @Override

-        protected AccessControlListImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new AccessControlListImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AccessControlListImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACL_PERMISSISONS)) {

-                    target.setAces(addToList(target.getAces(), ACE_PARSER.walk(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AccessControlEntryImpl> ACE_PARSER = new XMLWalker<AccessControlEntryImpl>() {

-        @Override

-        protected AccessControlEntryImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new AccessControlEntryImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AccessControlEntryImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACE_PRINCIPAL)) {

-                    target.setPrincipal(PRINCIPAL_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACE_PERMISSIONS)) {

-                    target.setPermissions(addToList(target.getPermissions(), readText(parser)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_ACE_IS_DIRECT)) {

-                    target.setDirect(readBoolean(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<AccessControlPrincipalDataImpl> PRINCIPAL_PARSER = new XMLWalker<AccessControlPrincipalDataImpl>() {

-        @Override

-        protected AccessControlPrincipalDataImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new AccessControlPrincipalDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, AccessControlPrincipalDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_ACE_PRINCIPAL_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<PolicyIdListImpl> POLICY_IDS_PARSER = new XMLWalker<PolicyIdListImpl>() {

-        @Override

-        protected PolicyIdListImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new PolicyIdListImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, PolicyIdListImpl target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_POLICY_ID)) {

-                    target.setPolicyIds(addToList(target.getPolicyIds(), readText(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<RenditionDataImpl> RENDITION_PARSER = new XMLWalker<RenditionDataImpl>() {

-        @Override

-        protected RenditionDataImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new RenditionDataImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, RenditionDataImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_RENDITION_STREAM_ID)) {

-                    target.setStreamId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_MIMETYPE)) {

-                    target.setMimeType(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_LENGTH)) {

-                    target.setBigLength(readInteger(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_KIND)) {

-                    target.setKind(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_TITLE)) {

-                    target.setTitle(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_HEIGHT)) {

-                    target.setBigHeight(readInteger(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_WIDTH)) {

-                    target.setBigWidth(readInteger(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_RENDITION_DOCUMENT_ID)) {

-                    target.setRenditionDocumentId(readText(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    // ------------------------

-    // --- property parsers ---

-    // ------------------------

-

-    private static final PropertyAtomPubXMLWalker<PropertyStringImpl> PROPERTY_STRING_PARSER = new PropertyStringAtomPubXMLWalker<PropertyStringImpl>() {

-        @Override

-        protected PropertyStringImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyStringImpl();

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyIdImpl> PROPERTY_ID_PARSER = new PropertyStringAtomPubXMLWalker<PropertyIdImpl>() {

-        @Override

-        protected PropertyIdImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyIdImpl();

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyHtmlImpl> PROPERTY_HTML_PARSER = new PropertyStringAtomPubXMLWalker<PropertyHtmlImpl>() {

-        @Override

-        protected PropertyHtmlImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyHtmlImpl();

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyUriImpl> PROPERTY_URI_PARSER = new PropertyStringAtomPubXMLWalker<PropertyUriImpl>() {

-        @Override

-        protected PropertyUriImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyUriImpl();

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyBooleanImpl> PROPERTY_BOOLEAN_PARSER = new PropertyAtomPubXMLWalker<PropertyBooleanImpl>() {

-        @Override

-        protected PropertyBooleanImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyBooleanImpl();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, PropertyBooleanImpl target) throws XmlPullParserException {

-            target.setValues(addToList(target.getValues(), readBoolean(parser)));

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyIntegerImpl> PROPERTY_INTEGER_PARSER = new PropertyAtomPubXMLWalker<PropertyIntegerImpl>() {

-        @Override

-        protected PropertyIntegerImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyIntegerImpl();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, PropertyIntegerImpl target) throws XmlPullParserException {

-            target.setValues(addToList(target.getValues(), readInteger(parser)));

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyDecimalImpl> PROPERTY_DECIMAL_PARSER = new PropertyAtomPubXMLWalker<PropertyDecimalImpl>() {

-        @Override

-        protected PropertyDecimalImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyDecimalImpl();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, PropertyDecimalImpl target) throws XmlPullParserException {

-            target.setValues(addToList(target.getValues(), readDecimal(parser)));

-        }

-    };

-

-    private static final PropertyAtomPubXMLWalker<PropertyDateTimeImpl> PROPERTY_DATETIME_PARSER = new PropertyAtomPubXMLWalker<PropertyDateTimeImpl>() {

-        @Override

-        protected PropertyDateTimeImpl createTarget(XmlPullParser parser, QName name) {

-            return new PropertyDateTimeImpl();

-        }

-

-        @Override

-        protected void addValue(XmlPullParser parser, PropertyDateTimeImpl target) throws XmlPullParserException {

-            target.setValues(addToList(target.getValues(), readDateTime(parser)));

-        }

-    };

-

-    private abstract static class PropertyAtomPubXMLWalker<T extends AbstractPropertyData<?>> extends XMLWalker<T> {

-

-        protected abstract T createTarget(XmlPullParser parser, QName name);

-

-        @Override

-        protected T prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            T result = createTarget(parser, name);

-

-            if (parser.getAttributeCount() > 0) {

-                for (int i = 0; i < parser.getAttributeCount(); i++) {

-                    String attr = parser.getAttributeName(i);

-                    if (ATTR_PROPERTY_ID.equals(attr)) {

-                        result.setId(parser.getAttributeValue(i));

-                    } else if (ATTR_PROPERTY_LOCALNAME.equals(attr)) {

-                        result.setLocalName(parser.getAttributeValue(i));

-                    } else if (ATTR_PROPERTY_DISPLAYNAME.equals(attr)) {

-                        result.setDisplayName(parser.getAttributeValue(i));

-                    } else if (ATTR_PROPERTY_QUERYNAME.equals(attr)) {

-                        result.setQueryName(parser.getAttributeValue(i));

-                    }

-                }

-            }

-

-            return result;

-        }

-

-        protected abstract void addValue(XmlPullParser parser, T target) throws XmlPullParserException;

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, T target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_PROPERTY_VALUE)) {

-                    addValue(parser, target);

-                    return true;

-                }

-            }

-

-            return false;

-        }

-

-    }

-

-    private abstract static class PropertyStringAtomPubXMLWalker<T extends AbstractPropertyData<String>> extends

-            PropertyAtomPubXMLWalker<T> {

-        @Override

-        protected void addValue(XmlPullParser parser, T target) throws XmlPullParserException {

-            target.setValues(addToList(target.getValues(), readText(parser)));

-        }

-    }

-

-    // --------------------

-    // --- query parser ---

-    // --------------------

-

-    private static final XMLWalker<QueryTypeImpl> QUERY_PARSER = new XMLWalker<QueryTypeImpl>() {

-        @Override

-        protected QueryTypeImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new QueryTypeImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, QueryTypeImpl target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_QUERY_STATEMENT)) {

-                    target.setStatement(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_SEARCHALLVERSIONS)) {

-                    target.setSearchAllVersions(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_INCLUDEALLOWABLEACTIONS)) {

-                    target.setIncludeAllowableActions(readBoolean(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_INCLUDERELATIONSHIPS)) {

-                    target.setIncludeRelationships(readEnum(parser, IncludeRelationships.class));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_RENDITIONFILTER)) {

-                    target.setRenditionFilter(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_MAXITEMS)) {

-                    target.setMaxItems(readInteger(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_QUERY_SKIPCOUNT)) {

-                    target.setSkipCount(readInteger(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    // --------------------------

-    // --- bulk update parser ---

-    // --------------------------

-

-    private static final XMLWalker<BulkUpdateImpl> BULK_UPDATE_PARSER = new XMLWalker<BulkUpdateImpl>() {

-        @Override

-        protected BulkUpdateImpl prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException {

-            return new BulkUpdateImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, BulkUpdateImpl target) throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_BULK_UPDATE_ID_AND_TOKEN)) {

-                    target.setObjectIdAndChangeToken(addToList(target.getObjectIdAndChangeToken(),

-                            ID_AND_TOKEN_PARSER.walk(parser)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_BULK_UPDATE_PROPERTIES)) {

-                    target.setProperties(PROPERTIES_PARSER.walk(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_BULK_UPDATE_ADD_SECONDARY_TYPES)) {

-                    target.setAddSecondaryTypeIds(addToList(target.getAddSecondaryTypeIds(), readText(parser)));

-                    return true;

-                }

-

-                if (isTag(name, TAG_BULK_UPDATE_REMOVE_SECONDARY_TYPES)) {

-                    target.setRemoveSecondaryTypeIds(addToList(target.getRemoveSecondaryTypeIds(), readText(parser)));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-

-    private static final XMLWalker<BulkUpdateObjectIdAndChangeTokenImpl> ID_AND_TOKEN_PARSER = new XMLWalker<BulkUpdateObjectIdAndChangeTokenImpl>() {

-        @Override

-        protected BulkUpdateObjectIdAndChangeTokenImpl prepareTarget(XmlPullParser parser, QName name)

-                throws XmlPullParserException {

-            return new BulkUpdateObjectIdAndChangeTokenImpl();

-        }

-

-        @Override

-        protected boolean read(XmlPullParser parser, QName name, BulkUpdateObjectIdAndChangeTokenImpl target)

-                throws XmlPullParserException {

-            if (isCmisNamespace(name)) {

-                if (isTag(name, TAG_IDANDTOKEN_ID)) {

-                    target.setId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_IDANDTOKEN_NEWID)) {

-                    target.setNewId(readText(parser));

-                    return true;

-                }

-

-                if (isTag(name, TAG_IDANDTOKEN_CHANGETOKEN)) {

-                    target.setChangeToken(readText(parser));

-                    return true;

-                }

-            }

-

-            return false;

-        }

-    };

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java
deleted file mode 100644
index 019ad28..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.commons.impl;

-

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.util.GregorianCalendar;

-

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;

-import org.w3c.dom.Document;

-import org.xmlpull.v1.XmlPullParser;

-import org.xmlpull.v1.XmlPullParserException;

-import org.xmlpull.v1.XmlSerializer;

-

-import android.util.Xml;

-

-public final class XMLUtils {

-

-    private XMLUtils() {

-    }

-

-    // --------------

-    // --- writer ---

-    // --------------

-

-    /**

-     * Creates a new XML writer.

-     */

-    public static XmlSerializer createWriter(OutputStream out) throws IOException {

-        assert out != null;

-

-        XmlSerializer writer = Xml.newSerializer();

-        writer.setOutput(out, IOUtils.UTF8);

-        

-        return writer;

-    }

-

-    /**

-     * Starts a XML document.

-     */

-    public static void startXmlDocument(XmlSerializer writer) throws IOException {

-        assert writer != null;

-        

-        writer.setPrefix(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);

-        writer.setPrefix(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);

-        writer.setPrefix(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);

-        writer.setPrefix(XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY);

-

-        writer.startDocument("UTF-8", false);

-    }

-

-    /**

-     * Ends a XML document.

-     */

-    public static void endXmlDocument(XmlSerializer writer) throws IOException {

-        assert writer != null;

-        

-        // end document

-        writer.endDocument();

-        writer.flush();

-        writer.toString();

-    }

-

-    /**

-     * Writes a String tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, String value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        if (namespace == null) {

-            writer.startTag(null, tag);

-        } else {

-            writer.startTag(namespace, tag);

-        }

-        writer.text(value);

-        writer.endTag(namespace, tag);

-    }

-

-    /**

-     * Writes an Integer tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, BigInteger value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        write(writer, prefix, namespace, tag, value.toString());

-    }

-

-    /**

-     * Writes a Decimal tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, BigDecimal value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        write(writer, prefix, namespace, tag, value.toString());

-    }

-

-    /**

-     * Writes a DateTime tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, GregorianCalendar value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        write(writer, prefix, namespace, tag, DateTimeHelper.formatXmlDateTime(value));

-    }

-

-    /**

-     * Writes a Boolean tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, Boolean value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        write(writer, prefix, namespace, tag, value ? "true" : "false");

-    }

-

-    /**

-     * Writes an Enum tag.

-     */

-    public static void write(XmlSerializer writer, String prefix, String namespace, String tag, Enum<?> value)

-            throws IOException {

-        assert writer != null;

-

-        if (value == null) {

-            return;

-        }

-

-        Object enumValue;

-        try {

-            enumValue = value.getClass().getMethod("value", new Class[0]).invoke(value, new Object[0]);

-        } catch (Exception e) {

-            throw new IllegalStateException("Cannot get enum value", e);

-        }

-

-        write(writer, prefix, namespace, tag, enumValue.toString());

-    }

-

-    // ---------------

-    // ---- parser ---

-    // ---------------

-

-    /**

-     * Creates a new XML parser with OpenCMIS default settings.

-     */

-    public static XmlPullParser createParser(InputStream stream) throws XmlPullParserException {

-        XmlPullParser parser = Xml.newPullParser();

-        parser.setInput(stream, IOUtils.UTF8);

-        return parser;

-    }

-

-    /**

-     * Moves the parser to the next element.

-     */

-    public static boolean next(XmlPullParser parser) {

-        assert parser != null;

-

-        try {

-            if (hasNext(parser)) {

-                parser.next();

-                return true;

-            }

-            return false;

-        } catch (Exception e) {

-            // EOF exceptions

-            return false;

-        }

-    }

-

-    public static boolean hasNext(XmlPullParser parser) throws XmlPullParserException {

-        assert parser != null;

-

-        return parser.getEventType() != XmlPullParser.END_DOCUMENT;

-    }

-

-    /**

-     * Skips a tag or subtree.

-     */

-    public static void skip(XmlPullParser parser) throws XmlPullParserException {

-        assert parser != null;

-

-        int level = 1;

-        while (next(parser)) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                level++;

-            } else if (event == XmlPullParser.END_TAG) {

-                level--;

-                if (level == 0) {

-                    break;

-                }

-            }

-        }

-

-        next(parser);

-    }

-

-    /**

-     * Moves the parser to the next start element.

-     * 

-     * @return <code>true</code> if another start element has been found,

-     *         <code>false</code> otherwise

-     */

-    public static boolean findNextStartElemenet(XmlPullParser parser) throws XmlPullParserException, IOException {

-        assert parser != null;

-

-        while (true) {

-            int event = parser.getEventType();

-

-            if (event == XmlPullParser.START_TAG) {

-                return true;

-            }

-

-            if (hasNext(parser)) {

-                parser.next();

-            } else {

-                return false;

-            }

-        }

-    }

-

-    /**

-     * Parses a tag that contains text.

-     */

-    public static String readText(XmlPullParser parser, int maxLength) throws XmlPullParserException {

-        assert parser != null;

-        assert maxLength >= 0;

-

-        StringBuilder sb = new StringBuilder();

-

-        next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.END_TAG) {

-                break;

-            } else if (event == XmlPullParser.TEXT) {

-                int len = 0;

-                if (parser.getText() != null) {

-                    len = parser.getText().length();

-                }

-                if (len > 0) {

-                    if (sb.length() + len > maxLength) {

-                        throw new CmisInvalidArgumentException("String limit exceeded!");

-                    }

-                    sb.append(parser.getText());

-                }

-            } else if (event == XmlPullParser.START_TAG) {

-                throw new XmlPullParserException("Unexpected tag: " + parser.getName());

-            }

-

-            if (!next(parser)) {

-                break;

-            }

-        }

-

-        next(parser);

-

-        return sb.toString();

-    }

-

-    // ------------------

-    // ---- DOM stuff ---

-    // ------------------

-    

-    public static Document newDomDocument() {

-        throw new CmisRuntimeException("This method should never be used on Android!");

-    }

-}

diff --git a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java b/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
deleted file mode 100644
index 71e9b7f..0000000
--- a/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.commons.impl;

-

-import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.next;

-import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.skip;

-

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.GregorianCalendar;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import javax.xml.namespace.QName;

-

-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;

-import org.xmlpull.v1.XmlPullParser;

-import org.xmlpull.v1.XmlPullParserException;

-

-public abstract class XMLWalker<T> {

-    public T walk(XmlPullParser parser) throws XmlPullParserException {

-        final T result = prepareTarget(parser, new QName(parser.getNamespace(), parser.getName()));

-

-        next(parser);

-

-        // walk through all tags

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.START_TAG) {

-                QName name = new QName(parser.getNamespace(), parser.getName());

-                if (!read(parser, name, result)) {

-                    if (result instanceof ExtensionsData) {

-                        handleExtension(parser, (ExtensionsData) result);

-                    } else {

-                        skip(parser);

-                    }

-                }

-            } else if (event == XmlPullParser.END_TAG) {

-                break;

-            } else {

-                if (!next(parser)) {

-                    break;

-                }

-            }

-        }

-

-        next(parser);

-

-        return result;

-    }

-

-    protected boolean isCmisNamespace(QName name) {

-        return XMLConstants.NAMESPACE_CMIS.hashCode() == name.getNamespaceURI().hashCode()

-                && XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI());

-    }

-

-    protected boolean isAtomNamespace(QName name) {

-        return XMLConstants.NAMESPACE_ATOM.hashCode() == name.getNamespaceURI().hashCode()

-                && XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI());

-    }

-

-    protected boolean isTag(QName name, String tag) {

-        return tag.hashCode() == name.getLocalPart().hashCode() && tag.equals(name.getLocalPart());

-    }

-

-    protected void handleExtension(XmlPullParser parser, ExtensionsData extData) throws XmlPullParserException {

-        List<CmisExtensionElement> extensions = extData.getExtensions();

-        if (extensions == null) {

-            extensions = new ArrayList<CmisExtensionElement>();

-            extData.setExtensions(extensions);

-        }

-

-        if (extensions.size() + 1 > XMLConstraints.MAX_EXTENSIONS_WIDTH) {

-            throw new CmisInvalidArgumentException("Too many extensions!");

-        }

-

-        extensions.add(handleExtensionLevel(parser, 0));

-    }

-

-    private CmisExtensionElement handleExtensionLevel(final XmlPullParser parser, final int level)

-            throws XmlPullParserException {

-        final QName name = new QName(parser.getNamespace(), parser.getName());

-        Map<String, String> attributes = null;

-        StringBuilder sb = new StringBuilder();

-        List<CmisExtensionElement> children = null;

-

-        if (parser.getAttributeCount() > 0) {

-            attributes = new HashMap<String, String>();

-

-            for (int i = 0; i < parser.getAttributeCount(); i++) {

-                attributes.put(parser.getAttributeName(i), parser.getAttributeValue(i));

-            }

-        }

-

-        next(parser);

-

-        while (true) {

-            int event = parser.getEventType();

-            if (event == XmlPullParser.END_TAG) {

-                break;

-            } else if (event == XmlPullParser.TEXT) {

-                String s = parser.getText();

-                if (s != null) {

-                    if (sb.length() + s.length() > XMLConstraints.MAX_STRING_LENGTH) {

-                        throw new CmisInvalidArgumentException("String limit exceeded!");

-                    }

-                    sb.append(s);

-                }

-            } else if (event == XmlPullParser.START_TAG) {

-                if (level + 1 > XMLConstraints.MAX_EXTENSIONS_DEPTH) {

-                    throw new CmisInvalidArgumentException("Extensions tree too deep!");

-                }

-

-                if (children == null) {

-                    children = new ArrayList<CmisExtensionElement>();

-                }

-

-                if (children.size() + 1 > XMLConstraints.MAX_EXTENSIONS_WIDTH) {

-                    throw new CmisInvalidArgumentException("Extensions tree too wide!");

-                }

-

-                children.add(handleExtensionLevel(parser, level + 1));

-

-                continue;

-            }

-

-            if (!next(parser)) {

-                break;

-            }

-        }

-

-        next(parser);

-

-        if (children != null) {

-            return new CmisExtensionElementImpl(name.getNamespaceURI(), name.getLocalPart(), attributes, children);

-        } else {

-            return new CmisExtensionElementImpl(name.getNamespaceURI(), name.getLocalPart(), attributes, sb.toString());

-        }

-    }

-

-    protected <S> List<S> addToList(List<S> list, S value) {

-        if (list == null || list.isEmpty()) {

-            list = new ArrayList<S>();

-        }

-        list.add(value);

-

-        return list;

-    }

-

-    protected String readText(final XmlPullParser parser) throws XmlPullParserException {

-        return XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH);

-    }

-

-    protected Boolean readBoolean(final XmlPullParser parser) throws XmlPullParserException {

-        String value = readText(parser);

-

-        if ("true".equals(value) || "1".equals(value)) {

-            return Boolean.TRUE;

-        }

-

-        if ("false".equals(value) || "0".equals(value)) {

-            return Boolean.FALSE;

-        }

-

-        throw new CmisInvalidArgumentException("Invalid boolean value!");

-    }

-

-    protected BigInteger readInteger(final XmlPullParser parser) throws XmlPullParserException {

-        String value = readText(parser);

-        

-        try {

-            return new BigInteger(value);

-        } catch (NumberFormatException e) {

-            throw new CmisInvalidArgumentException("Invalid integer value!", e);

-        }

-    }

-

-    protected BigDecimal readDecimal(final XmlPullParser parser) throws XmlPullParserException {

-        String value = readText(parser);

-

-        try {

-            return new BigDecimal(value);

-        } catch (NumberFormatException e) {

-            throw new CmisInvalidArgumentException("Invalid decimal value!", e);

-        }

-    }

-

-    protected GregorianCalendar readDateTime(final XmlPullParser parser) throws XmlPullParserException {

-        String value = readText(parser);

-

-        GregorianCalendar result = DateTimeHelper.parseXmlDateTime(value);

-        if (result == null) {

-            throw new CmisInvalidArgumentException("Invalid datetime value!");

-        }

-

-        return result;

-    }

-

-    @SuppressWarnings("unchecked")

-    public <E extends Enum<E>> E readEnum(final XmlPullParser parser, final Class<E> clazz)

-            throws XmlPullParserException {

-

-        return CmisEnumHelper.fromValue(readText(parser), clazz);

-    }

-

-    protected abstract T prepareTarget(XmlPullParser parser, QName name) throws XmlPullParserException;

-

-    protected abstract boolean read(XmlPullParser parser, QName name, T target) throws XmlPullParserException;

-}

diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/pom.xml b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/pom.xml
deleted file mode 100644
index 0b11763..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/pom.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-bridge</artifactId>
-    <name>OpenCMIS Bridge WAR packaging</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Bundle-Name>org.apache.chemistry.opencmis.bridge</Bundle-Name>
-                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.bridge</Bundle-SymbolicName>
-                            <Bundle-Version>0.0.1</Bundle-Version>
-                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
-                            <Bundle-Classpath>.</Bundle-Classpath>
-                            <Web-ContextPath>bridge</Web-ContextPath>
-                        </manifestEntries>
-                    </archive>
-                    <overlays>
-                        <overlay>
-                        </overlay>
-                        <overlay>
-                            <groupId>${project.groupId}</groupId>
-                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-                            <includes>
-                                <include>**</include>
-                                <include>META-INF/THIRD-PARTY-LICENSES</include>
-                            </includes>
-                        </overlay>
-                    </overlays>
-                    <archiveClasses>true</archiveClasses>
-                    <attachClasses>true</attachClasses>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-eclipse-plugin</artifactId>
-                <version>2.9</version>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-            <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <!-- copy the dependencies from the server bindings here, because mvn eclipse ignores them from a .war -->
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.6</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/AbstractBridgeServiceFactory.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/AbstractBridgeServiceFactory.java
deleted file mode 100644
index 93036bd..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/AbstractBridgeServiceFactory.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.ConformanceCmisServiceWrapper;
-
-public abstract class AbstractBridgeServiceFactory extends AbstractServiceFactory {
-
-    public static final String BRIDGE_TEMP_DIRECTORY = "bridge.tempDirectory";
-    public static final String BRIDGE_MEMORY_THERESHOLD = "bridge.memoryThreshold";
-    public static final String BRIDGE_MAX_CONTENT_SIZE = "bridge.maxContentSize";
-
-    public static final String SERVICE_CLASS = "service.class";
-    public static final String SERVICE_DEFAULT_MAX_ITEMS_OBJECTS = "service.defaultMaxItems";
-    public static final String SERVICE_DEFAULT_DEPTH_OBJECTS = "service.defaultDepth";
-    public static final String SERVICE_DEFAULT_MAX_ITEMS_TYPES = "service.defaultTypesMaxItems";
-    public static final String SERVICE_DEFAULT_DEPTH_TYPES = "service.defaultTypesDepth";
-
-    private static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(100000);
-    private static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(100);
-    private static final BigInteger DEFAULT_MAX_ITEMS_TYPES = BigInteger.valueOf(1000);
-    private static final BigInteger DEFAULT_DEPTH_TYPES = BigInteger.valueOf(10);
-
-    private ThreadLocal<CallContextAwareCmisService> threadLocalService = new ThreadLocal<CallContextAwareCmisService>();
-
-    private Map<String, String> parameters;
-
-    private Class<?> serviceClass;
-
-    private BigInteger defaultMaxItems;
-    private BigInteger defaultDepth;
-    private BigInteger defaultTypesMaxItems;
-    private BigInteger defaultTypesDepth;
-
-    private File tempDirectory;
-    private int memoryThreshold;
-    private long maxContentSize;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        this.parameters = parameters;
-
-        // get bridge configuration
-        String tempDirectoryStr = parameters.get(BRIDGE_TEMP_DIRECTORY);
-        tempDirectory = (tempDirectoryStr == null || tempDirectoryStr.trim().length() == 0 ? super.getTempDirectory()
-                : new File(tempDirectoryStr.trim()));
-
-        try {
-            String memoryThresholdStr = parameters.get(BRIDGE_MEMORY_THERESHOLD);
-            memoryThreshold = (memoryThresholdStr == null || memoryThresholdStr.trim().length() == 0 ? super
-                    .getMemoryThreshold() : Integer.parseInt(memoryThresholdStr.trim()));
-
-            String maxContentSizeStr = parameters.get(BRIDGE_MAX_CONTENT_SIZE);
-            maxContentSize = (maxContentSizeStr == null || maxContentSizeStr.trim().length() == 0 ? super
-                    .getMaxContentSize() : Long.parseLong(maxContentSizeStr.trim()));
-        } catch (NumberFormatException e) {
-            throw new RuntimeException("Could not parse bride configuration values: " + e.getMessage(), e);
-        }
-
-        // find service class
-        String className = parameters.get(SERVICE_CLASS);
-        if (className == null || className.trim().length() == 0) {
-            throw new RuntimeException("Service class name is not set!");
-        }
-
-        try {
-            serviceClass = ClassLoaderUtil.loadClass(className);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException("Service class name cannot be found: " + e.getMessage(), e);
-        }
-
-        if (serviceClass.isAssignableFrom(FilterCmisService.class)) {
-            throw new RuntimeException("Service class is not a sub class of FilterCmisService!");
-        }
-
-        // get service defaults
-        try {
-            defaultMaxItems = getBigIntegerParameter(SERVICE_DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_MAX_ITEMS_OBJECTS);
-            defaultDepth = getBigIntegerParameter(SERVICE_DEFAULT_DEPTH_OBJECTS, DEFAULT_DEPTH_OBJECTS);
-            defaultTypesMaxItems = getBigIntegerParameter(SERVICE_DEFAULT_MAX_ITEMS_TYPES, DEFAULT_MAX_ITEMS_TYPES);
-            defaultTypesDepth = getBigIntegerParameter(SERVICE_DEFAULT_DEPTH_TYPES, DEFAULT_DEPTH_TYPES);
-        } catch (NumberFormatException e) {
-            throw new RuntimeException("Could not parse service default values: " + e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        CallContextAwareCmisService service = threadLocalService.get();
-        if (service == null) {
-            service = new ConformanceCmisServiceWrapper(createService(context), defaultTypesMaxItems,
-                    defaultTypesDepth, defaultMaxItems, defaultDepth);
-            threadLocalService.set(service);
-        }
-
-        service.setCallContext(context);
-
-        return service;
-    }
-
-    /**
-     * Creates a new service instance.
-     */
-    protected abstract FilterCmisService createService(CallContext context);
-
-    protected Class<?> getServiceClass() {
-        return serviceClass;
-    }
-
-    protected Map<String, String> getParameters() {
-        return parameters;
-    }
-
-    @Override
-    public File getTempDirectory() {
-        return tempDirectory;
-    }
-
-    @Override
-    public int getMemoryThreshold() {
-        return memoryThreshold;
-    }
-
-    @Override
-    public long getMaxContentSize() {
-        return maxContentSize;
-    }
-
-    /**
-     * Gets a BigInteger parameter from the parameters.
-     */
-    protected BigInteger getBigIntegerParameter(String key, BigInteger def) {
-        String value = parameters.get(key);
-        if (value == null || value.trim().length() == 0) {
-            return def;
-        }
-
-        return new BigInteger(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/CachedBindingCmisService.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/CachedBindingCmisService.java
deleted file mode 100644
index e331c99..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/CachedBindingCmisService.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * Provides a framework to cache a {@link CmisBinding} object for a
- * {@link FilterCmisService}.
- */
-public abstract class CachedBindingCmisService extends FilterCmisService {
-
-    private static final long serialVersionUID = 1L;
-
-    private CmisBinding clientBinding;
-
-    @Override
-    public void setCallContext(CallContext context) {
-        super.setCallContext(context);
-
-        clientBinding = getCmisBindingFromCache();
-        if (clientBinding == null) {
-            clientBinding = putCmisBindingIntoCache(createCmisBinding());
-        }
-    }
-
-    /**
-     * Returns a cached {@link CmisBinding} object or <code>null</code> if no
-     * appropriate object can be found in the cache.
-     */
-    public abstract CmisBinding getCmisBindingFromCache();
-
-    /**
-     * Puts the provided {@link CmisBinding} object into the cache and
-     * associates it somehow with the current {@link CallContext}.
-     * 
-     * The implementation may return another {@link CmisBinding} object if
-     * another thread has already added an object for the current
-     * {@link CallContext}.
-     */
-    public abstract CmisBinding putCmisBindingIntoCache(CmisBinding binding);
-
-    /**
-     * Creates a new {@link CmisBinding} object based on the current
-     * {@link CallContext}.
-     */
-    public abstract CmisBinding createCmisBinding();
-
-    /**
-     * Returns the current {@link CmisBinding} object.
-     */
-    public CmisBinding getCmisBinding() {
-        return clientBinding;
-    }
-
-    /**
-     * Returns the current {@link HttpServletRequest}.
-     */
-    public HttpServletRequest getHttpServletRequest() {
-        return (HttpServletRequest) getCallContext().get(CallContext.HTTP_SERVLET_REQUEST);
-    }
-
-    @Override
-    public RepositoryService getRepositoryService() {
-        return clientBinding.getRepositoryService();
-    }
-
-    @Override
-    public NavigationService getNavigationService() {
-        return clientBinding.getNavigationService();
-    }
-
-    @Override
-    public ObjectService getObjectService() {
-        return clientBinding.getObjectService();
-    }
-
-    @Override
-    public VersioningService getVersioningService() {
-        return clientBinding.getVersioningService();
-    }
-
-    @Override
-    public DiscoveryService getDiscoveryService() {
-        return clientBinding.getDiscoveryService();
-    }
-
-    @Override
-    public MultiFilingService getMultiFilingService() {
-        return clientBinding.getMultiFilingService();
-    }
-
-    @Override
-    public RelationshipService getRelationshipService() {
-        return clientBinding.getRelationshipService();
-    }
-
-    @Override
-    public AclService getAclService() {
-        return clientBinding.getAclService();
-    }
-
-    @Override
-    public PolicyService getPolicyService() {
-        return clientBinding.getPolicyService();
-    }
-
-    @Override
-    public void close() {
-        super.close();
-        clientBinding = null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/FilterCmisService.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/FilterCmisService.java
deleted file mode 100644
index 8cf466f..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/FilterCmisService.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
-
-/**
- * Forwards incoming calls to a CMIS repository.
- */
-public abstract class FilterCmisService extends AbstractCmisService implements CallContextAwareCmisService,
-        Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private CallContext context;
-
-    /**
-     * Called after the object has been created.
-     * 
-     * @param parameters
-     *            the parameters provided to bridge service factory
-     * @param lock
-     *            a lock object shared by all service instances
-     */
-    public void init(Map<String, String> parameters) {
-    }
-
-    /**
-     * Called at the beginning of a request.
-     */
-    public void setCallContext(CallContext context) {
-        this.context = context;
-    }
-
-    /**
-     * Returns the current call context.
-     */
-    public CallContext getCallContext() {
-        return context;
-    }
-
-    /**
-     * Returns a client repository service.
-     */
-    public abstract RepositoryService getRepositoryService();
-
-    /**
-     * Returns a client navigation service.
-     */
-    public abstract NavigationService getNavigationService();
-
-    /**
-     * Returns a client object service.
-     */
-    public abstract ObjectService getObjectService();
-
-    /**
-     * Returns a client versioning service.
-     */
-    public abstract VersioningService getVersioningService();
-
-    /**
-     * Returns a client discovery service.
-     */
-    public abstract DiscoveryService getDiscoveryService();
-
-    /**
-     * Returns a client multifiling service.
-     */
-    public abstract MultiFilingService getMultiFilingService();
-
-    /**
-     * Returns a client relationship service.
-     */
-    public abstract RelationshipService getRelationshipService();
-
-    /**
-     * Returns a client ACL service.
-     */
-    public abstract AclService getAclService();
-
-    /**
-     * Returns a client policy service.
-     */
-    public abstract PolicyService getPolicyService();
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        return getRepositoryService().getRepositoryInfo(repositoryId, extension);
-    }
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return getRepositoryService().getRepositoryInfos(extension);
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getRepositoryService().getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems,
-                skipCount, extension);
-    }
-
-    @Override
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        return getRepositoryService().getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions,
-                extension);
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return getRepositoryService().getTypeDefinition(repositoryId, typeId, extension);
-    }
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getNavigationService().getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return getNavigationService().getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return getNavigationService().getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        return getNavigationService().getObjectParents(repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includeRelativePathSegment, extension);
-    }
-
-    @Override
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        return getNavigationService().getFolderParent(repositoryId, folderId, filter, extension);
-    }
-
-    @Override
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getNavigationService().getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    @Override
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        return super.create(repositoryId, properties, folderId, contentStream, versioningState, policies, extension);
-    }
-
-    @Override
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return getObjectService().createDocument(repositoryId, properties, folderId, contentStream, versioningState,
-                policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        return getObjectService().createDocumentFromSource(repositoryId, sourceId, properties, folderId,
-                versioningState, policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return getObjectService().createFolder(repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    @Override
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return getObjectService()
-                .createRelationship(repositoryId, properties, policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return getObjectService().createPolicy(repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    @Override
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return getObjectService().getAllowableActions(repositoryId, objectId, extension);
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return getObjectService().getObject(repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    @Override
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        return getObjectService().getProperties(repositoryId, objectId, filter, extension);
-    }
-
-    @Override
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getObjectService()
-                .getRenditions(repositoryId, objectId, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    @Override
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return getObjectService().getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    @Override
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        return getObjectService().getContentStream(repositoryId, objectId, streamId, offset, length, extension);
-    }
-
-    @Override
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        getObjectService().updateProperties(repositoryId, objectId, changeToken, properties, extension);
-    }
-
-    @Override
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        getObjectService().moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-    }
-
-    @Override
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        getObjectService().deleteObject(repositoryId, objectId, allVersions, extension);
-    }
-
-    @Override
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        // TODO: rework -> object cache
-        getObjectService().deleteObject(repositoryId, objectId, allVersions, extension);
-    }
-
-    @Override
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        return getObjectService().deleteTree(repositoryId, folderId, allVersions, unfileObjects, continueOnFailure,
-                extension);
-    }
-
-    @Override
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        getObjectService().setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream,
-                extension);
-    }
-
-    @Override
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        getObjectService().deleteContentStream(repositoryId, objectId, changeToken, extension);
-    }
-
-    @Override
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        getVersioningService().checkOut(repositoryId, objectId, extension, contentCopied);
-    }
-
-    @Override
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        getVersioningService().cancelCheckOut(repositoryId, objectId, extension);
-    }
-
-    @Override
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        getVersioningService().checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment,
-                policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        return getVersioningService()
-                .getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter,
-                        includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
-                        extension);
-    }
-
-    @Override
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        return getVersioningService().getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId, major,
-                filter, extension);
-    }
-
-    @Override
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        return getVersioningService().getAllVersions(repositoryId, objectId, versionSeriesId, filter,
-                includeAllowableActions, extension);
-    }
-
-    @Override
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        return getDiscoveryService().getContentChanges(repositoryId, changeLogToken, includeProperties, filter,
-                includePolicyIds, includeAcl, maxItems, extension);
-    }
-
-    @Override
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getDiscoveryService().query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    @Override
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        getMultiFilingService().addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-    }
-
-    @Override
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        getMultiFilingService().removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-    }
-
-    @Override
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getRelationshipService().getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes,
-                relationshipDirection, typeId, filter, includeAllowableActions, maxItems, skipCount, extension);
-    }
-
-    @Override
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        return getAclService().applyAcl(repositoryId, objectId, addAces, removeAces, aclPropagation, extension);
-    }
-
-    @Override
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        Acl orgAcl = getAclService().getAcl(repositoryId, objectId, Boolean.FALSE, null);
-
-        Acl removeAces = null;
-        if (orgAcl != null && orgAcl.getAces() != null && !orgAcl.getAces().isEmpty()) {
-            List<Ace> directAces = new ArrayList<Ace>();
-
-            for (Ace ace : orgAcl.getAces()) {
-                if (ace.isDirect()) {
-                    directAces.add(ace);
-                }
-            }
-
-            if (!directAces.isEmpty()) {
-                removeAces = new AccessControlListImpl(directAces);
-            }
-        }
-
-        return getAclService().applyAcl(repositoryId, objectId, aces, removeAces, aclPropagation, null);
-    }
-
-    @Override
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        return getAclService().getAcl(repositoryId, objectId, onlyBasicPermissions, extension);
-    }
-
-    @Override
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        getPolicyService().applyPolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    @Override
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        return getPolicyService().getAppliedPolicies(repositoryId, objectId, filter, extension);
-    }
-
-    @Override
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        getPolicyService().removePolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    @Override
-    public ObjectInfo getObjectInfo(String repositoryId, String objectId) {
-        // TODO: add intelligent object info cache
-        return super.getObjectInfo(repositoryId, objectId);
-    }
-
-    @Override
-    protected ObjectInfo getObjectInfoIntern(String repositoryId, ObjectData object) {
-        // TODO: add intelligent object info cache
-        return super.getObjectInfoIntern(repositoryId, object);
-    }
-
-    @Override
-    public void close() {
-        super.close();
-        context = null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/client/SimpleCmisBindingFactory.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/client/SimpleCmisBindingFactory.java
deleted file mode 100644
index 040121b..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/client/SimpleCmisBindingFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.client;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Creates a {@link CmisBinding} object for a set of parameters and a
- * {@link CallContext}.
- */
-public class SimpleCmisBindingFactory {
-
-    private static final CmisBindingFactory BINDING_FACTORY = CmisBindingFactory.newInstance();
-
-    public static CmisBinding createCmisBinding(CallContext context, Map<String, String> bindingParameters) {
-        Map<String, String> parameters = new HashMap<String, String>(bindingParameters);
-
-        // forward user name and password
-        parameters.put(SessionParameter.USER, context.getUsername());
-        parameters.put(SessionParameter.PASSWORD, context.getPassword());
-
-        // create the binding object
-        String bindingTypeStr = parameters.get(SessionParameter.BINDING_TYPE);
-        BindingType bindingType = BindingType.fromValue(bindingTypeStr);
-
-        CmisBinding binding = null;
-        switch (bindingType) {
-        case WEBSERVICES:
-            binding = BINDING_FACTORY.createCmisWebServicesBinding(parameters);
-            break;
-        case BROWSER:
-            binding = BINDING_FACTORY.createCmisBrowserBinding(parameters);
-            break;
-        default:
-            binding = BINDING_FACTORY.createCmisAtomPubBinding(parameters);
-            break;
-        }
-
-        return binding;
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionBridgeServiceFactory.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionBridgeServiceFactory.java
deleted file mode 100644
index fd8df18..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionBridgeServiceFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.httpsession;
-
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.bridge.AbstractBridgeServiceFactory;
-import org.apache.chemistry.opencmis.bridge.FilterCmisService;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-public class HttpSessionBridgeServiceFactory extends AbstractBridgeServiceFactory {
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    @Override
-    protected FilterCmisService createService(CallContext context) {
-        HttpSessionCmisService service = null;
-        try {
-            service = (HttpSessionCmisService) getServiceClass().newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Could not create service instance: " + e, e);
-        }
-
-        service.init(getParameters(), lock);
-
-        return service;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionCmisService.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionCmisService.java
deleted file mode 100644
index aea3916..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/HttpSessionCmisService.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.httpsession;
-
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.chemistry.opencmis.bridge.CachedBindingCmisService;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Uses HTTP sessions to cache {@link CmisBinding} objects.
- */
-public abstract class HttpSessionCmisService extends CachedBindingCmisService {
-
-    private static final long serialVersionUID = 1L;
-
-    /** Key in the HTTP session. **/
-    public static final String CMIS_BINDING = "org.apache.chemistry.opencmis.bridge.binding";
-
-    private ReentrantReadWriteLock lock;
-
-    public void init(Map<String, String> parameters, ReentrantReadWriteLock lock) {
-        init(parameters);
-        this.lock = lock;
-    }
-
-    @Override
-    public CmisBinding getCmisBindingFromCache() {
-        HttpSession httpSession = getHttpSession(false);
-        if (httpSession == null) {
-            return null;
-        }
-
-        lock.readLock().lock();
-        try {
-            return (CmisBinding) httpSession.getAttribute(CMIS_BINDING);
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    @Override
-    public CmisBinding putCmisBindingIntoCache(CmisBinding binding) {
-        HttpSession httpSession = getHttpSession(true);
-
-        lock.writeLock().lock();
-        try {
-            CmisBinding existingBinding = (CmisBinding) httpSession.getAttribute(CMIS_BINDING);
-            if (existingBinding == null) {
-                httpSession.setAttribute(CMIS_BINDING, binding);
-            } else {
-                binding = existingBinding;
-            }
-
-            return binding;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Returns the current {@link HttpSession}.
-     * 
-     * @param create
-     *            <code>true</code> to create a new session, <code>false</code>
-     *            to return <code>null</code> if there is no current session
-     */
-    public HttpSession getHttpSession(boolean create) {
-        return getHttpServletRequest().getSession(create);
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/sample/SimpleForwardingCmisService.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/sample/SimpleForwardingCmisService.java
deleted file mode 100644
index 9efbf1e..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/httpsession/sample/SimpleForwardingCmisService.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.httpsession.sample;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.bridge.FilterCmisService;
-import org.apache.chemistry.opencmis.bridge.client.SimpleCmisBindingFactory;
-import org.apache.chemistry.opencmis.bridge.httpsession.HttpSessionCmisService;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Very simple example of a concrete {@link FilterCmisService} implementation.
- */
-public class SimpleForwardingCmisService extends HttpSessionCmisService {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String BINDING_PARAMETERS_PREFIX = "forwarding.binding.";
-
-    private Map<String, String> bindingParameters;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-
-        // gather binding parameters
-        bindingParameters = new HashMap<String, String>();
-
-        for (Map.Entry<String, String> p : parameters.entrySet()) {
-            if (p.getKey().startsWith(BINDING_PARAMETERS_PREFIX)) {
-                bindingParameters.put(p.getKey().substring(BINDING_PARAMETERS_PREFIX.length()), p.getValue());
-            }
-        }
-    }
-
-    @Override
-    public CmisBinding createCmisBinding() {
-        return SimpleCmisBindingFactory.createCmisBinding(getCallContext(), bindingParameters);
-    }
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-
-        RepositoryInfo repInfo = getCmisBinding().getRepositoryService().getRepositoryInfo(repositoryId, extension);
-
-        RepositoryInfoImpl newRepInfo = new RepositoryInfoImpl(repInfo);
-        newRepInfo.setDescription(repInfo.getDescription() + " (forwarded by the OpenCMIS Bridge)");
-
-        return newRepInfo;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/CmisBindingCache.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/CmisBindingCache.java
deleted file mode 100644
index 2494230..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/CmisBindingCache.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.lrucache;
-
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Simple LRU cache for {@link CmisBinding} objects. The cache key is consists
- * of the repository id and the user.
- */
-public class CmisBindingCache implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-    private final LinkedHashMap<String, CmisBinding> cache;
-
-    public CmisBindingCache(final int size) {
-        cache = new LinkedHashMap<String, CmisBinding>(size + 1, 0.70f, true) {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public boolean removeEldestEntry(Map.Entry<String, CmisBinding> eldest) {
-                return size() > size;
-            }
-        };
-    }
-
-    public CmisBinding getCmisBinding(CallContext context) {
-        lock.writeLock().lock();
-        try {
-            return cache.get(getCacheKey(context));
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public CmisBinding putCmisBinding(CallContext context, CmisBinding binding) {
-        lock.writeLock().lock();
-        try {
-            String key = getCacheKey(context);
-            CmisBinding extistingBinding = cache.get(getCacheKey(context));
-            if (extistingBinding == null) {
-                cache.put(key, binding);
-            } else {
-                binding = extistingBinding;
-            }
-
-            return binding;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    protected String getCacheKey(CallContext context) {
-        String repositoryId = context.getRepositoryId();
-        String user = context.getUsername();
-
-        String key = (repositoryId == null ? "" : repositoryId);
-        if (user != null) {
-            key = key + "\n" + user;
-        }
-
-        return key;
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheBridgeServiceFactory.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheBridgeServiceFactory.java
deleted file mode 100644
index 7343e7e..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheBridgeServiceFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.lrucache;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.bridge.AbstractBridgeServiceFactory;
-import org.apache.chemistry.opencmis.bridge.FilterCmisService;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-public class LruCacheBridgeServiceFactory extends AbstractBridgeServiceFactory {
-
-    public static final String CACHE_SIZE = "cache.size";
-    public static final int DEFAULT_CACHE_SIZE = 1000;
-
-    private CmisBindingCache cache;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-
-        // initialize LRU cache
-        int size = 0;
-        try {
-            String sizeStr = parameters.get(CACHE_SIZE);
-            size = (sizeStr == null || sizeStr.trim().length() == 0 ? DEFAULT_CACHE_SIZE : Integer.parseInt(sizeStr
-                    .trim()));
-        } catch (NumberFormatException e) {
-            throw new RuntimeException("Could not parse cache configuration values: " + e.getMessage(), e);
-        }
-
-        cache = new CmisBindingCache(size);
-    }
-
-    @Override
-    protected FilterCmisService createService(CallContext context) {
-        LruCacheCmisService service = null;
-        try {
-            service = (LruCacheCmisService) getServiceClass().newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Could not create service instance: " + e, e);
-        }
-
-        service.init(getParameters(), cache);
-
-        return service;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheCmisService.java b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheCmisService.java
deleted file mode 100644
index 9c09b19..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/java/org/apache/chemistry/opencmis/bridge/lrucache/LruCacheCmisService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.bridge.lrucache;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.bridge.CachedBindingCmisService;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Uses a LRU cache to cache {@link CmisBinding} objects.
- */
-public abstract class LruCacheCmisService extends CachedBindingCmisService {
-
-    private static final long serialVersionUID = 1L;
-
-    private CmisBindingCache cache;
-
-    public void init(Map<String, String> parameters, CmisBindingCache cache) {
-        init(parameters);
-        this.cache = cache;
-    }
-
-    @Override
-    public CmisBinding getCmisBindingFromCache() {
-        return cache.getCmisBinding(getCallContext());
-    }
-
-    @Override
-    public CmisBinding putCmisBindingIntoCache(CmisBinding binding) {
-        return cache.putCmisBinding(getCallContext(), binding);
-    }
-}
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/LICENSE b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/LICENSE
deleted file mode 100644
index c34e7b9..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/LICENSE
+++ /dev/null
@@ -1,206 +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.
-
----
-
-Please see also THRID-PARTY-LICENSES.
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/NOTICE b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/NOTICE
deleted file mode 100644
index a4fbbe2..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS Bridge
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index 2ac5d7e..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-###########################################################
-#
-# Bridge configuration
-#
-# Note: class MUST be set
-#
-###########################################################
-
-class=org.apache.chemistry.opencmis.bridge.httpsession.HttpSessionBridgeServiceFactory
-# bridge.tempDirectory=/tmp
-# bridge.memoryThreshold=4194304
-# bridge.maxContentSize=4294967296
-
-# cache.size=1000
-
-
-###########################################################
-#
-# Service configuration
-#
-# Note: service.class MUST be set
-#
-###########################################################
-
-service.class=org.apache.chemistry.opencmis.bridge.httpsession.sample.SimpleForwardingCmisService
-# service.defaultMaxItems=100000
-# service.defaultDepth=-1
-# service.defaultTypesMaxItems=1000
-# service.defaultTypesDepth=10
-
-
-###########################################################
-#
-# Sample configuration for the SimpleForwardingCmisService
-#
-# Note: user name and password are added on-the-fly
-#
-###########################################################
-
-forwarding.binding.org.apache.chemistry.opencmis.binding.spi.type=browser
-forwarding.binding.org.apache.chemistry.opencmis.binding.browser.url=http://localhost:8080/inmemory/browser
-forwarding.binding.org.apache.chemistry.opencmis.binding.compression=true
-forwarding.binding.org.apache.chemistry.opencmis.binding.cookies=true
diff --git a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/web.xml b/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 729d73e..0000000
--- a/trunk/chemistry-opencmis-bridge/chemistry-opencmis-bridge/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.  
--->
-<web-app version="2.4"
-	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-	<display-name>OpenCMIS Bridge</display-name>
-
-	<listener>
-		<listener-class>org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener</listener-class>
-	</listener>
-	
-	<listener>
-		<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
-	</listener>
-	
-	<servlet>
-		<servlet-name>cmisws</servlet-name>
-		<servlet-class>org.apache.chemistry.opencmis.server.impl.webservices.CmisWebServicesServlet</servlet-class>
-		<load-on-startup>1</load-on-startup>
-	</servlet>
-
-	<servlet>
-		<servlet-name>cmisatom</servlet-name>
-		<servlet-class>org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet</servlet-class>
-		<init-param>
-			<param-name>callContextHandler</param-name>
-			<param-value>org.apache.chemistry.opencmis.server.shared.BasicAuthCallContextHandler</param-value>
-		</init-param>
-		<load-on-startup>2</load-on-startup>
-	</servlet>
-	
-	<servlet>
-		<servlet-name>cmisbrowser</servlet-name>
-		<servlet-class>org.apache.chemistry.opencmis.server.impl.browser.CmisBrowserBindingServlet</servlet-class>
-		<init-param>
-			<param-name>callContextHandler</param-name>
-			<param-value>org.apache.chemistry.opencmis.server.shared.BasicAuthCallContextHandler</param-value>
-		</init-param>
-		<load-on-startup>2</load-on-startup>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>cmisws</servlet-name>
-		<url-pattern>/services/*</url-pattern>
-	</servlet-mapping>
-
-	<servlet-mapping>
-		<servlet-name>cmisatom</servlet-name>
-		<url-pattern>/atom/*</url-pattern>
-	</servlet-mapping>
-
-	<servlet-mapping>
-		<servlet-name>cmisbrowser</servlet-name>
-		<url-pattern>/browser/*</url-pattern>
-	</servlet-mapping>
-
-	<session-config>
-		<session-timeout>60</session-timeout>
-	</session-config>
-</web-app>
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/pom.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/pom.xml
deleted file mode 100644
index 83a8007..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/pom.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-client-api</artifactId>
-    <name>OpenCMIS Client API</name>
-    <packaging>jar</packaging>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>    
-                            <goal>manifest</goal>
-                        </goals>   
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                          org.apache.chemistry.opencmis.client;version=${project.version},
-                          org.apache.chemistry.opencmis.client.api.*;version=${project.version}
-                        </Export-Package>
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionFactoryFinder.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionFactoryFinder.java
deleted file mode 100644
index ecf4c25..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionFactoryFinder.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.reflect.Method;
-
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-
-/**
- * Finds a {@link SessionFactory} implementation and creates a factory object.
- * <p>
- * Sample code:
- * <p>
- * 
- * <pre>
- * SessionFactory factory = SessionFactoryFinder.find();
- * 
- * Map&lt;String, String> parameter = new HashMap&lt;String, String>();
- * parameter.put(SessionParameter.USER, "Otto");
- * parameter.put(SessionParameter.PASSWORD, "****");
- * 
- * parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost/cmis/atom");
- * parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
- * parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
- * ...
- * Session session = factory.createSession(parameter);
- * </pre>
- * 
- * @see SessionFactory
- */
-public final class SessionFactoryFinder {
-
-    /**
-     * Private constructor.
-     */
-    private SessionFactoryFinder() {
-    }
-
-    /**
-     * Creates a default {@link SessionFactory} object.
-     * 
-     * @return the newly created {@link SessionFactory} object
-     * 
-     * @throws ClassNotFoundException
-     *             if the session factory class cannot be found
-     * @throws InstantiationException
-     *             if the session factory object cannot be instantiated
-     */
-    public static SessionFactory find() throws ClassNotFoundException, InstantiationException {
-        return find("org.apache.chemistry.opencmis.client.SessionFactory", null);
-    }
-
-    /**
-     * Creates a {@link SessionFactory} object.
-     * 
-     * @param factoryId
-     *            the factory ID of the {@link SessionFactory}
-     * 
-     * @return the newly created {@link SessionFactory} object
-     * 
-     * @throws ClassNotFoundException
-     *             if the session factory class cannot be found
-     * @throws InstantiationException
-     *             if the session factory object cannot be instantiated
-     */
-    public static SessionFactory find(String factoryId) throws ClassNotFoundException, InstantiationException {
-        return find(factoryId, null);
-    }
-
-    /**
-     * Creates a {@link SessionFactory} object.
-     * 
-     * @param factoryId
-     *            the factory ID of the {@link SessionFactory}
-     * @param classLoader
-     *            the class loader to use
-     * 
-     * @return the newly created {@link SessionFactory} object
-     * 
-     * @throws ClassNotFoundException
-     *             if the session factory class cannot be found
-     * @throws InstantiationException
-     *             if the session factory object cannot be instantiated
-     */
-    public static SessionFactory find(String factoryId, ClassLoader classLoader) throws ClassNotFoundException,
-            InstantiationException {
-        return find(factoryId, classLoader, "org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl");
-    }
-
-    /**
-     * Creates a {@link SessionFactory} object.
-     * 
-     * @param factoryId
-     *            the factory ID of the {@link SessionFactory}
-     * @param classLoader
-     *            the class loader to use
-     * @param fallbackClassName
-     *            the name of the class to use if no other class name has been
-     *            provided
-     * 
-     * @return the newly created {@link SessionFactory} object
-     * 
-     * @throws ClassNotFoundException
-     *             if the session factory class cannot be found
-     * @throws InstantiationException
-     *             if the session factory object cannot be instantiated
-     */
-    private static SessionFactory find(String factoryId, ClassLoader classLoader, String fallbackClassName)
-            throws ClassNotFoundException, InstantiationException {
-        ClassLoader cl = classLoader;
-        if (cl == null) {
-            cl = Thread.currentThread().getContextClassLoader();
-            if (cl == null) {
-                cl = SessionFactoryFinder.class.getClassLoader();
-            }
-        }
-
-        String factoryClassName = null;
-
-        if (factoryId != null) {
-            factoryClassName = System.getProperty(factoryId);
-
-            if (factoryClassName == null) {
-                String serviceId = "META-INF/services/" + factoryId;
-                InputStream stream = cl.getResourceAsStream(serviceId);
-                if (stream != null) {
-                    BufferedReader reader = null;
-                    try {
-                        reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
-                        factoryClassName = reader.readLine();
-                    } catch (IOException e) {
-                        factoryClassName = null;
-                    } finally {
-                        try {
-                            if (reader != null) {
-                                reader.close();
-                            } else {
-                                stream.close();
-                            }
-                        } catch (IOException e) {
-                            // ignore
-                        }
-                    }
-                }
-            }
-        }
-
-        if (factoryClassName == null) {
-            factoryClassName = fallbackClassName;
-        }
-
-        Class<?> clazz = cl.loadClass(factoryClassName);
-
-        SessionFactory result = null;
-        try {
-            Method newInstanceMethod = clazz.getMethod("newInstance", new Class[0]);
-
-            if (!SessionFactory.class.isAssignableFrom(newInstanceMethod.getReturnType())) {
-                throw new ClassNotFoundException("newInstance() method does not return a SessionFactory object!");
-            }
-
-            try {
-                result = (SessionFactory) newInstanceMethod.invoke(null, new Object[0]);
-            } catch (Exception e) {
-                throw new InstantiationException("Could not create SessionFactory object!");
-            }
-        } catch (NoSuchMethodException nsme) {
-            if (!SessionFactory.class.isAssignableFrom(clazz)) {
-                throw new ClassNotFoundException("The class does not implemnt the SessionFactory interface!", nsme);
-            }
-
-            try {
-                result = (SessionFactory) clazz.newInstance();
-            } catch (Exception e) {
-                throw new InstantiationException("Could not create SessionFactory object!");
-            }
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionParameterMap.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionParameterMap.java
deleted file mode 100644
index 47031d3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/SessionParameterMap.java
+++ /dev/null
@@ -1,843 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-
-/**
- * A map with convenience methods to set session parameters.
- * <p>
- * Sample code:
- * <p>
- * 
- * <pre>
- * SessionFactory factory = ...
- * 
- * SessionParameterMap parameter = new SessionParameterMap();
- * 
- * parameter.setBasicAuthentication("Otto", "****");
- * parameter.setAtomPubBindingUrl("http://localhost/cmis/atom");
- * parameter.setRepositoryId("myRepository");
- * ...
- * Session session = factory.createSession(parameter);
- * </pre>
- * 
- * @see SessionParameter
- * @see SessionFactory
- */
-public class SessionParameterMap extends LinkedHashMap<String, String> {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Creates an empty map.
-     */
-    public SessionParameterMap() {
-        super();
-    }
-
-    /**
-     * Creates a map with the same mappings as the specified map.
-     * 
-     * @param map
-     *            the map whose mappings are to be placed in this map
-     */
-    public SessionParameterMap(Map<? extends String, ? extends String> map) {
-        super(map);
-    }
-
-    /**
-     * Sets a long value.
-     * 
-     * @param key
-     *            the key
-     * @param value
-     *            the value
-     * 
-     * @return the previous value for this key or {@code null}
-     */
-    public String put(String key, long value) {
-        return put(key, Long.toString(value));
-    }
-
-    /**
-     * Sets a boolean value.
-     * 
-     * @param key
-     *            the key
-     * @param value
-     *            the value
-     * 
-     * @return the previous value for this key or {@code null}
-     */
-    public String put(String key, boolean value) {
-        return put(key, value ? "true" : "false");
-    }
-
-    /**
-     * Sets the AtomPub URL and sets the binding to AtomPub.
-     * 
-     * @param url
-     *            the AtomPub binding URL
-     */
-    public void setAtomPubBindingUrl(String url) {
-        if (url == null) {
-            remove(SessionParameter.BINDING_TYPE);
-            remove(SessionParameter.ATOMPUB_URL);
-        } else {
-            put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
-            put(SessionParameter.ATOMPUB_URL, url);
-        }
-    }
-
-    /**
-     * Sets the Web Services WSDL URL and sets the binding to Web Services.
-     * Assumes that all CMIS services have the same WSDL URL.
-     * 
-     * @param url
-     *            the Web Services WSDL URL
-     */
-    public void setWebServicesBindingUrl(String url) {
-        if (url == null) {
-            remove(SessionParameter.BINDING_TYPE);
-            remove(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE);
-            remove(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE);
-            remove(SessionParameter.WEBSERVICES_OBJECT_SERVICE);
-            remove(SessionParameter.WEBSERVICES_VERSIONING_SERVICE);
-            remove(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE);
-            remove(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE);
-            remove(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE);
-            remove(SessionParameter.WEBSERVICES_ACL_SERVICE);
-            remove(SessionParameter.WEBSERVICES_POLICY_SERVICE);
-        } else {
-            put(SessionParameter.BINDING_TYPE, BindingType.WEBSERVICES.value());
-            put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_ACL_SERVICE, url);
-            put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url);
-        }
-    }
-
-    /**
-     * Sets the Web Service memory threshold.
-     * 
-     * @param threshold
-     *            the threshold in bytes
-     */
-    public void setWebServicesMemoryThreshold(long threshold) {
-        put(SessionParameter.WEBSERVICES_MEMORY_THRESHOLD, threshold);
-    }
-
-    /**
-     * Sets the Browser URL and sets the binding to Browser.
-     * 
-     * @param url
-     *            the Browser binding URL
-     */
-    public void setBrowserBindingUrl(String url) {
-        if (url == null) {
-            remove(SessionParameter.BINDING_TYPE);
-            remove(SessionParameter.BROWSER_URL);
-        } else {
-            put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value());
-            put(SessionParameter.BROWSER_URL, url);
-        }
-    }
-
-    /**
-     * Sets whether properties should be sent in the succinct format or not.
-     * Only relevant for the browser binding.
-     * 
-     * @param succinct
-     *            {@code true} if properties should be sent in the succinct
-     *            format, {@code false} otherwise
-     */
-    public void setBrowserBindingSuccinct(boolean succinct) {
-        put(SessionParameter.BROWSER_SUCCINCT, succinct);
-    }
-
-    /**
-     * Sets the local service factory and sets the binding to Local.
-     * 
-     * @param serviceFactoryClass
-     *            the local service factory class
-     */
-    public void setLocalBindingClass(Class<? extends CmisServiceFactory> serviceFactoryClass) {
-        if (serviceFactoryClass == null) {
-            remove(SessionParameter.BINDING_TYPE);
-            remove(SessionParameter.LOCAL_FACTORY);
-        } else {
-            put(SessionParameter.BINDING_TYPE, BindingType.LOCAL.value());
-            put(SessionParameter.LOCAL_FACTORY, serviceFactoryClass.getName());
-        }
-    }
-
-    /**
-     * Sets the repository ID.
-     * 
-     * @param repositoryId
-     *            the repository ID
-     */
-    public void setRepositoryId(String repositoryId) {
-        if (repositoryId == null) {
-            remove(SessionParameter.REPOSITORY_ID);
-        } else {
-            put(SessionParameter.REPOSITORY_ID, repositoryId);
-        }
-    }
-
-    /**
-     * Sets user and password.
-     * 
-     * @param user
-     *            the user
-     * @param password
-     *            the password
-     */
-    public void setUserAndPassword(String user, String password) {
-        if (user == null) {
-            remove(SessionParameter.USER);
-            remove(SessionParameter.PASSWORD);
-        } else {
-            put(SessionParameter.USER, user);
-            put(SessionParameter.PASSWORD, password);
-        }
-    }
-
-    /**
-     * Sets bearer token.
-     * 
-     * @param token
-     *            the bearer token
-     */
-    public void setBearerToken(String token) {
-        if (token == null) {
-            remove(SessionParameter.OAUTH_ACCESS_TOKEN);
-        } else {
-            put(SessionParameter.OAUTH_ACCESS_TOKEN, token);
-        }
-    }
-
-    /**
-     * Turns all authentication off if the standard authentication provider is
-     * used.
-     */
-    public void setNoAuthentication() {
-        put(SessionParameter.AUTH_HTTP_BASIC, false);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-
-        remove(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-    }
-
-    /**
-     * Turns basic authentication on and UsernameToken authentication off if the
-     * standard authentication provider is used.
-     * 
-     * @param user
-     *            the user
-     * 
-     * @param password
-     *            the password
-     */
-    public void setBasicAuthentication(String user, String password) {
-        if (user == null) {
-            throw new IllegalArgumentException("User must be set!");
-        }
-
-        setUserAndPassword(user, password);
-
-        put(SessionParameter.AUTH_HTTP_BASIC, true);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-
-        remove(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-    }
-
-    /**
-     * Turns UsernameToken authentication on for the Web Services binding if the
-     * standard authentication provider is used.
-     * 
-     * @param user
-     *            the user
-     * @param password
-     *            the password
-     * @param basicAuth
-     *            {@code true} if basic authentication should be used in
-     *            addition to the UsernameToken authentication (required by some
-     *            servers), {@code false} otherwise
-     */
-    public void setUsernameTokenAuthentication(String user, String password, boolean basicAuth) {
-        if (user == null) {
-            throw new IllegalArgumentException("User must be set!");
-        }
-
-        setUserAndPassword(user, password);
-
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, true);
-        put(SessionParameter.AUTH_HTTP_BASIC, basicAuth);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-
-        remove(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-    }
-
-    /**
-     * Turns NTLM authentication on and basic authentication and UsernameToken
-     * authentication off.
-     * <p>
-     * <em>Works only in single user environments and only with NTLMv1!</em>
-     * 
-     * @param user
-     *            the user
-     * @param password
-     *            the password
-     */
-    public void setNtlmAuthentication(String user, String password) {
-        if (user == null) {
-            throw new IllegalArgumentException("User must be set!");
-        }
-
-        setUserAndPassword(user, password);
-
-        put(SessionParameter.AUTH_HTTP_BASIC, false);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-        put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
-                "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider");
-    }
-
-    /**
-     * Turns simple OAuth 2.0 bearer token authentication on and basic
-     * authentication and UsernameToken authentication off.
-     * <p>
-     * This authentication method does not refresh the token when it expires.
-     * 
-     * @param token
-     *            the bearer token
-     */
-    public void setOAuthBearerTokenAuthentication(String token) {
-        if (token == null) {
-            throw new IllegalArgumentException("Token must be set!");
-        }
-
-        setBearerToken(token);
-
-        put(SessionParameter.AUTH_HTTP_BASIC, false);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, true);
-        put(SessionParameter.OAUTH_ACCESS_TOKEN, token);
-
-        remove(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-    }
-
-    /**
-     * Turns OAuth 2.0 authentication on and basic authentication and
-     * UsernameToken authentication off.
-     * <p>
-     * This authentication method requests a new token and refreshes the token
-     * when it expires.
-     * 
-     * @param tokenEntpoint
-     *            the token endpoint URL
-     * @param clientId
-     *            the client ID
-     * @param clientSecret
-     *            the client secret if required, {@code null} otherwise
-     * @param code
-     *            the authorization code
-     * @param redirectUri
-     *            the redirect URI if required, {@code null} otherwise
-     */
-    public void setOAuthAuthentication(String tokenEntpoint, String clientId, String clientSecret, String code,
-            String redirectUri) {
-        if (tokenEntpoint == null || tokenEntpoint.length() == 0) {
-            throw new IllegalArgumentException("Token endpoint must be set!");
-        }
-
-        if (clientId == null || clientId.length() == 0) {
-            throw new IllegalArgumentException("Client ID must be set!");
-        }
-
-        put(SessionParameter.AUTH_HTTP_BASIC, false);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-
-        put(SessionParameter.OAUTH_TOKEN_ENDPOINT, tokenEntpoint);
-        put(SessionParameter.OAUTH_CLIENT_ID, clientId);
-
-        if (clientSecret == null) {
-            remove(SessionParameter.OAUTH_CLIENT_SECRET);
-        } else {
-            put(SessionParameter.OAUTH_CLIENT_SECRET, clientSecret);
-        }
-
-        if (code == null) {
-            remove(SessionParameter.OAUTH_CODE);
-        } else {
-            put(SessionParameter.OAUTH_CODE, code);
-        }
-
-        if (redirectUri == null) {
-            remove(SessionParameter.OAUTH_REDIRECT_URI);
-        } else {
-            put(SessionParameter.OAUTH_REDIRECT_URI, redirectUri);
-        }
-
-        put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
-                "org.apache.chemistry.opencmis.client.bindings.spi.OAuthAuthenticationProvider");
-    }
-
-    /**
-     * Turns OAuth 2.0 authentication on and basic authentication and
-     * UsernameToken authentication off.
-     * <p>
-     * This authentication method uses the provided token and refreshes the
-     * token when it expires.
-     * 
-     * @param tokenEntpoint
-     *            the token endpoint URL
-     * @param clientId
-     *            the client ID
-     * @param clientSecret
-     *            the client secret if required, {@code null} otherwise
-     * @param accessToken
-     *            the bearer access token
-     * @param refreshToken
-     *            the refresh token
-     * @param expirationTimestamp
-     *            the timestamp when the access token expires
-     */
-    public void setOAuthAuthentication(String tokenEntpoint, String clientId, String clientSecret, String accessToken,
-            String refreshToken, long expirationTimestamp) {
-        if (tokenEntpoint == null || tokenEntpoint.length() == 0) {
-            throw new IllegalArgumentException("Token endpoint must be set!");
-        }
-
-        if (clientId == null || clientId.length() == 0) {
-            throw new IllegalArgumentException("Client ID must be set!");
-        }
-
-        put(SessionParameter.AUTH_HTTP_BASIC, false);
-        put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-        put(SessionParameter.AUTH_OAUTH_BEARER, false);
-
-        put(SessionParameter.OAUTH_TOKEN_ENDPOINT, tokenEntpoint);
-        put(SessionParameter.OAUTH_CLIENT_ID, clientId);
-
-        if (clientSecret == null) {
-            remove(SessionParameter.OAUTH_CLIENT_SECRET);
-        } else {
-            put(SessionParameter.OAUTH_CLIENT_SECRET, clientSecret);
-        }
-
-        if (accessToken == null) {
-            remove(SessionParameter.OAUTH_ACCESS_TOKEN);
-        } else {
-            put(SessionParameter.OAUTH_ACCESS_TOKEN, accessToken);
-        }
-
-        if (refreshToken == null) {
-            remove(SessionParameter.OAUTH_REFRESH_TOKEN);
-        } else {
-            put(SessionParameter.OAUTH_REFRESH_TOKEN, refreshToken);
-        }
-
-        if (expirationTimestamp < 0) {
-            remove(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP);
-        } else {
-            put(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP, expirationTimestamp);
-        }
-
-        put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
-                "org.apache.chemistry.opencmis.client.bindings.spi.OAuthAuthenticationProvider");
-    }
-
-    /**
-     * Sets the locale of the session.
-     * 
-     * @param locale
-     *            the locale
-     */
-    public void setLocale(Locale locale) {
-        if (locale == null) {
-            remove(SessionParameter.LOCALE_ISO639_LANGUAGE);
-            remove(SessionParameter.LOCALE_ISO3166_COUNTRY);
-            remove(SessionParameter.LOCALE_VARIANT);
-        } else {
-            if (locale.getLanguage().length() == 0) {
-                remove(SessionParameter.LOCALE_ISO639_LANGUAGE);
-            } else {
-                put(SessionParameter.LOCALE_ISO639_LANGUAGE, locale.getLanguage());
-            }
-            if (locale.getCountry().length() == 0) {
-                remove(SessionParameter.LOCALE_ISO3166_COUNTRY);
-            } else {
-                put(SessionParameter.LOCALE_ISO3166_COUNTRY, locale.getCountry());
-            }
-            if (locale.getVariant().length() == 0) {
-                remove(SessionParameter.LOCALE_VARIANT);
-            } else {
-                put(SessionParameter.LOCALE_VARIANT, locale.getVariant());
-            }
-        }
-    }
-
-    /**
-     * Sets the locale of the session.
-     * 
-     * @param language
-     *            ISO 639 language code
-     * @param country
-     *            ISO 3166 country code
-     */
-    public void setLocale(String language, String country) {
-        setLocale(new Locale(language, country));
-    }
-
-    /**
-     * Sets the locale of the session.
-     * 
-     * @param language
-     *            ISO 639 language code
-     */
-    public void setLocale(String language) {
-        setLocale(new Locale(language));
-    }
-
-    /**
-     * Sets whether cookies should be managed or not.
-     * 
-     * @param cookies
-     *            {@code true} if cookies should be managed, {@code false}
-     *            otherwise
-     */
-    public void setCookies(boolean cookies) {
-        put(SessionParameter.COOKIES, cookies);
-    }
-
-    /**
-     * Sets if the server should be asked to use compression.
-     * 
-     * @param compression
-     *            {@code true} if the server should be asked to use compression,
-     *            {@code false} otherwise
-     */
-    public void setCompression(boolean compression) {
-        put(SessionParameter.COMPRESSION, compression);
-    }
-
-    /**
-     * Sets whether requests to the server should be compressed or not.
-     * 
-     * @param compression
-     *            {@code true} if requests should be compressed, {@code false}
-     *            otherwise
-     */
-    public void setClientCompression(boolean compression) {
-        put(SessionParameter.CLIENT_COMPRESSION, compression);
-    }
-
-    /**
-     * Sets the HTTP connection timeout.
-     * 
-     * @param timeout
-     *            the connection timeout in milliseconds
-     */
-    public void setConnectionTimeout(long timeout) {
-        put(SessionParameter.CONNECT_TIMEOUT, timeout);
-    }
-
-    /**
-     * Sets the HTTP read timeout.
-     * 
-     * @param timeout
-     *            the read timeout in milliseconds
-     */
-    public void setReadTimeout(long timeout) {
-        put(SessionParameter.READ_TIMEOUT, timeout);
-    }
-
-    /**
-     * Sets the HTTP invoker class.
-     * 
-     * @param httpInvokerClass
-     *            the HTTP invoker class
-     */
-    public void setHttpInvoker(Class<?> httpInvokerClass) {
-        if (httpInvokerClass == null) {
-            remove(SessionParameter.HTTP_INVOKER_CLASS);
-        } else {
-            put(SessionParameter.HTTP_INVOKER_CLASS, httpInvokerClass.getName());
-        }
-    }
-
-    /**
-     * Adds a HTTP header.
-     * 
-     * @param header
-     *            the header name
-     * @param value
-     *            the header value
-     */
-    public void addHeader(String header, String value) {
-        if (header == null || header.trim().length() == 0) {
-            return;
-        }
-
-        int x = 0;
-        while (containsKey(SessionParameter.HEADER + "." + x)) {
-            x++;
-        }
-
-        put(SessionParameter.HEADER + "." + x, header + ":" + value);
-    }
-
-    /**
-     * Sets HTTP proxy user and password.
-     * 
-     * @param user
-     *            the user
-     * @param password
-     *            the password
-     */
-    public void setProxyUserAndPassword(String user, String password) {
-        if (user == null) {
-            remove(SessionParameter.PROXY_USER);
-            remove(SessionParameter.PROXY_PASSWORD);
-        } else {
-            put(SessionParameter.PROXY_USER, user);
-            put(SessionParameter.PROXY_PASSWORD, password);
-        }
-    }
-
-    /**
-     * Sets the authentication provider class.
-     * 
-     * @param authenticationProviderClass
-     *            the authentication provider class
-     */
-    public void setAuthenticationProvider(Class<? extends AuthenticationProvider> authenticationProviderClass) {
-        if (authenticationProviderClass == null) {
-            remove(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-        } else {
-            put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, authenticationProviderClass.getName());
-        }
-    }
-
-    /**
-     * Sets the object factory class.
-     * 
-     * @param objectFactoryClass
-     *            the object factory class
-     */
-    public void setObjectFactory(Class<? extends ObjectFactory> objectFactoryClass) {
-        if (objectFactoryClass == null) {
-            remove(SessionParameter.OBJECT_FACTORY_CLASS);
-        } else {
-            put(SessionParameter.OBJECT_FACTORY_CLASS, objectFactoryClass.getName());
-        }
-    }
-
-    // --- load and save ---
-
-    /**
-     * Loads entries from the given UTF-8 encoded file.
-     * 
-     * @param file
-     *            the file
-     * 
-     * @throws IOException
-     *             if the entries cannot be read
-     * 
-     * @see #load(InputStream)
-     */
-    public void load(File file) throws IOException {
-        if (file == null) {
-            throw new IllegalArgumentException("File must be set!");
-        }
-
-        FileInputStream stream = new FileInputStream(file);
-        try {
-            load(stream);
-        } finally {
-            stream.close();
-        }
-    }
-
-    /**
-     * Loads entries from the given, UTF-8 encoded stream and leaves the stream
-     * open. Empty lines and lines starting with '#' are ignored. Entries are
-     * added and replaced.
-     * 
-     * @param stream
-     *            the stream
-     * 
-     * @throws IOException
-     *             if the entries cannot be read
-     */
-    public void load(InputStream stream) throws IOException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream must be set!");
-        }
-
-        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF8"));
-
-        String line;
-        while ((line = reader.readLine()) != null) {
-            putLine(line);
-        }
-    }
-
-    /**
-     * Parses a string that contains key-value pairs.
-     * 
-     * @param parameters
-     *            the parameters string
-     */
-    public void parse(String parameters) {
-        if (parameters == null) {
-            throw new IllegalArgumentException("Parameters string must be set!");
-        }
-
-        for (String line : parameters.split("\n")) {
-            putLine(line);
-        }
-    }
-
-    protected void putLine(String line) {
-        assert line != null;
-
-        String lineTrim = line.trim();
-        if (lineTrim.length() == 0 || lineTrim.charAt(0) == '#') {
-            return;
-        }
-
-        int sep = lineTrim.indexOf('=');
-        if (sep == -1) {
-            sep = lineTrim.indexOf(':');
-        }
-
-        if (sep == -1) {
-            put(lineTrim, null);
-        } else {
-            put(lineTrim.substring(0, sep).trim(), lineTrim.substring(sep + 1).trim());
-        }
-    }
-
-    /**
-     * Writes all entries to the given file.
-     * 
-     * @param file
-     *            the file
-     * 
-     * @throws IOException
-     *             if the entries cannot be written
-     * 
-     * @see #store(OutputStream)
-     */
-    public final void store(File file) throws IOException {
-        if (file == null) {
-            throw new IllegalArgumentException("File must be set!");
-        }
-
-        FileOutputStream stream = new FileOutputStream(file);
-        try {
-            store(stream);
-        } finally {
-            stream.close();
-        }
-    }
-
-    /**
-     * Writes all entries UTF-8 encoded to the given stream and leaves the
-     * stream open.
-     * 
-     * @param stream
-     *            the stream
-     * 
-     * @throws IOException
-     *             if the entries cannot be written
-     */
-    public void store(final OutputStream stream) throws IOException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream must be set!");
-        }
-
-        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream, "UTF-8"));
-
-        List<String> keys = new ArrayList<String>(keySet());
-        Collections.sort(keys);
-
-        for (String key : keys) {
-            String value = get(key);
-            if (value == null) {
-                value = "";
-            }
-
-            writer.write(key);
-            writer.write('=');
-            writer.write(value);
-            writer.newLine();
-        }
-
-        writer.flush();
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        for (Map.Entry<String, String> entry : entrySet()) {
-            sb.append(entry.getKey());
-            sb.append('=');
-            sb.append(entry.getValue());
-            sb.append('\n');
-        }
-
-        return sb.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvent.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvent.java
deleted file mode 100644
index e2ab8f1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-
-/**
- * Change event in the change log.
- * 
- * @cmis 1.0
- */
-public interface ChangeEvent extends ChangeEventInfo {
-
-    /**
-     * Gets the ID of the object.
-     * 
-     * @return the object ID, not {@code null}
-     */
-    String getObjectId();
-
-    /**
-     * Returns the properties.
-     * 
-     * @return the properties
-     */
-    Map<String, List<?>> getProperties();
-
-    /**
-     * Returns the policy IDs.
-     * 
-     * @return the policy IDs
-     */
-    List<String> getPolicyIds();
-
-    /**
-     * Returns the ACL.
-     * 
-     * @return the ACL
-     */
-    Acl getAcl();
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvents.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvents.java
deleted file mode 100644
index 79212cd..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ChangeEvents.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-/**
- * Change event list.
- * 
- * @cmis 1.0
- */
-public interface ChangeEvents {
-
-    /**
-     * Returns the change log token if available.
-     * 
-     * @return the latest change log token or {@code null} if it is not
-     *         available.
-     */
-    String getLatestChangeLogToken();
-
-    /**
-     * Returns the change event list.
-     * 
-     * @return the list of change events, not {@code null}
-     */
-    List<ChangeEvent> getChangeEvents();
-
-    /**
-     * Indicates whether are more change events or not.
-     * 
-     * @return {@code true} is there are more change events, {@code false}
-     *         otherwise
-     */
-    boolean getHasMoreItems();
-
-    /**
-     * Returns the total number of change events if available.
-     * 
-     * @return the total number of change events or -1 if the total number is
-     *         not available
-     */
-    long getTotalNumItems();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
deleted file mode 100644
index 07baa70..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-
-/**
- * Base interface for all CMIS objects.
- */
-public interface CmisObject extends ObjectId, CmisObjectProperties {
-
-    // object
-
-    /**
-     * Returns the allowable actions if they have been fetched for this object.
-     * 
-     * @cmis 1.0
-     */
-    AllowableActions getAllowableActions();
-
-    /**
-     * Returns if a given action in the Allowable Actions.
-     * 
-     * @param action
-     *            the action to test, must not be {@code null}
-     * @return {@code true} if the action was found in the Allowable Actions,
-     *         {@code false} if the action was not found in the Allowable
-     *         Actions
-     * @throws IllegalStateException
-     *             if the Allowable Actions haven't been fetched or provided by
-     *             the repository
-     * 
-     * @cmis 1.0
-     */
-    boolean hasAllowableAction(Action action);
-
-    /**
-     * Returns the relationships if they have been fetched for this object.
-     * 
-     * @cmis 1.0
-     */
-    List<Relationship> getRelationships();
-
-    /**
-     * Returns the ACL if it has been fetched for this object.
-     * 
-     * @cmis 1.0
-     */
-    Acl getAcl();
-
-    /**
-     * Returns all permissions for the given principal from the ACL.
-     * 
-     * @param principalId
-     *            the principal ID, must not be {@code null}
-     * @return the set of permissions for this user, or an empty set if
-     *         principal is not in the ACL
-     * @throws IllegalStateException
-     *             if the ACL hasn't been fetched or provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    Set<String> getPermissionsForPrincipal(String principalId);
-
-    /**
-     * @deprecated use {@link #getPermissionsForPrincipal(String)} instead.
-     */
-    @Deprecated
-    Set<String> getPermissonsForPrincipal(String principalId);
-
-    // object service
-
-    /**
-     * Deletes this object. If this object is a document, the whole version
-     * series is deleted.
-     * 
-     * @cmis 1.0
-     */
-    void delete();
-
-    /**
-     * Deletes this object.
-     * 
-     * @param allVersions
-     *            if this object is a document this parameter defines whether
-     *            only this version ({@code false}) or all versions ({@code true}
-     *            ) should be deleted, the parameter is ignored for all other
-     *            object types
-     * 
-     * @cmis 1.0
-     */
-    void delete(boolean allVersions);
-
-    /**
-     * Updates the provided properties and refreshes this object afterwards. If
-     * the repository created a new object, for example a new version, this new
-     * object is returned. Otherwise the current object is returned.
-     * 
-     * @param properties
-     *            the properties to update
-     * 
-     * @return the updated object
-     * 
-     * @cmis 1.0
-     */
-    CmisObject updateProperties(Map<String, ?> properties);
-
-    /**
-     * Updates the provided properties. If the repository created a new object,
-     * for example a new version, the object ID of the new object is returned.
-     * Otherwise the object ID of the current object is returned.
-     * 
-     * @param properties
-     *            the properties to update
-     * @param refresh
-     *            {@code true} if this object should be refreshed after the
-     *            update, {@code false} if not
-     * 
-     * @return the object ID of the updated object
-     * 
-     * @cmis 1.0
-     */
-    ObjectId updateProperties(Map<String, ?> properties, boolean refresh);
-
-    /**
-     * Renames this object (changes the value of {@code cmis:name}). If the
-     * repository created a new object, for example a new version, this new
-     * object is returned. Otherwise the current object is returned.
-     * 
-     * @param newName
-     *            the new name, not {@code null} or empty
-     * 
-     * @return the updated object
-     * 
-     * @cmis 1.0
-     */
-    CmisObject rename(String newName);
-
-    /**
-     * Renames this object (changes the value of {@code cmis:name}). If the
-     * repository created a new object, for example a new version, the object id
-     * of the new object is returned. Otherwise the object id of the current
-     * object is returned.
-     * 
-     * @param newName
-     *            the new name, not {@code null} or empty
-     * @param refresh
-     *            {@code true} if this object should be refreshed after the
-     *            update, {@code false} if not
-     * 
-     * @return the object ID of the updated object
-     * 
-     * @cmis 1.0
-     */
-    ObjectId rename(String newName, boolean refresh);
-
-    // renditions
-
-    /**
-     * Returns the renditions if they have been fetched for this object.
-     * 
-     * @cmis 1.0
-     */
-    List<Rendition> getRenditions();
-
-    // policy service
-
-    /**
-     * Applies the provided policies and refreshes this object afterwards.
-     * 
-     * @param policyIds
-     *            the IDs of the policies to be applied
-     * 
-     * @cmis 1.0
-     */
-    void applyPolicy(ObjectId... policyIds);
-
-    /**
-     * Removes the provided policies and refreshes this object afterwards.
-     * 
-     * @param policyIds
-     *            the IDs of the policies to be removed
-     * 
-     * @cmis 1.0
-     */
-    void removePolicy(ObjectId... policyIds);
-
-    /**
-     * Returns the applied policies if they have been fetched for this object.
-     * 
-     * @cmis 1.0
-     */
-    List<Policy> getPolicies();
-
-    // ACL service
-
-    /**
-     * Adds and removes ACEs to the object and refreshes this object afterwards.
-     * 
-     * @return the new ACL of this object
-     * 
-     * @cmis 1.0
-     */
-    Acl applyAcl(List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation);
-
-    /**
-     * Adds ACEs to the object and refreshes this object afterwards.
-     * 
-     * @return the new ACL of this object
-     * 
-     * @cmis 1.0
-     */
-    Acl addAcl(List<Ace> addAces, AclPropagation aclPropagation);
-
-    /**
-     * Removes ACEs to the object and refreshes this object afterwards.
-     * 
-     * @return the new ACL of this object
-     * 
-     * @cmis 1.0
-     */
-    Acl removeAcl(List<Ace> removeAces, AclPropagation aclPropagation);
-
-    /**
-     * Removes the direct ACE of this object, sets the provided ACEs to the
-     * object and refreshes this object afterwards.
-     * 
-     * @return the new ACL of this object
-     * 
-     * @cmis 1.0
-     */
-    Acl setAcl(List<Ace> aces);
-
-    // extensions
-
-    /**
-     * Returns the extensions for the given level.
-     * 
-     * @param level
-     *            the level
-     * 
-     * @return the extensions at that level or {@code null} if there no
-     *         extensions
-     * 
-     * @cmis 1.0
-     */
-    List<CmisExtensionElement> getExtensions(ExtensionLevel level);
-
-    // adapters
-
-    /**
-     * Returns an adapter based on the given interface.
-     * 
-     * @return an adapter object or {@code null} if no adapter object could be
-     *         created
-     */
-    <T> T getAdapter(Class<T> adapterInterface);
-
-    // session handling
-
-    /**
-     * Returns the timestamp of the last refresh.
-     * 
-     * @return the difference, measured in milliseconds, between the last
-     *         refresh time and midnight, January 1, 1970 UTC.
-     */
-    long getRefreshTimestamp();
-
-    /**
-     * Reloads this object from the repository.
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if the object doesn't exist anymore in the repository
-     */
-    void refresh();
-
-    /**
-     * Reloads the data from the repository if the last refresh did not occur
-     * within {@code durationInMillis}.
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if the object doesn't exist anymore in the repository
-     */
-    void refreshIfOld(long durationInMillis);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObjectProperties.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObjectProperties.java
deleted file mode 100644
index e5a3980..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObjectProperties.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * Accessors to CMIS object properties.
- * <p>
- * A property might not be available because either the repository didn't
- * provide it or a property filter was used to retrieve this object.
- * <p>
- * The property values represent a snapshot of the object when it was loaded.
- * The object and its properties may be out-of-date if the object has been
- * modified in the repository.
- */
-public interface CmisObjectProperties {
-
-    /**
-     * Returns a list of all available CMIS properties.
-     * 
-     * @return all available CMIS properties
-     */
-    List<Property<?>> getProperties();
-
-    /**
-     * Returns a property.
-     * 
-     * @param id
-     *            the ID of the property
-     * 
-     * @return the property or {@code null} if the property hasn't been
-     *         requested or hasn't been provided by the repository
-     */
-    <T> Property<T> getProperty(String id);
-
-    /**
-     * Returns the value of a property.
-     * 
-     * @param id
-     *            the ID of the property
-     * 
-     * @return the property value or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the
-     *         property value isn't set
-     */
-    <T> T getPropertyValue(String id);
-
-    // convenience accessors
-
-    /**
-     * Returns the name of this CMIS object (CMIS property {@code cmis:name}).
-     * 
-     * @return the name of the object or {@code null} if the property hasn't
-     *         been requested or hasn't been provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    String getName();
-
-    /**
-     * Returns the description of this CMIS object (CMIS property
-     * {@code cmis:description}).
-     * 
-     * @return the description of the object or {@code null} if the property
-     *         hasn't been requested, hasn't been provided by the repository, or
-     *         the property value isn't set
-     * 
-     * @cmis 1.1
-     */
-    String getDescription();
-
-    /**
-     * Returns the user who created this CMIS object (CMIS property
-     * {@code cmis:createdBy}).
-     * 
-     * @return the creator of the object or {@code null} if the property hasn't
-     *         been requested or hasn't been provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    String getCreatedBy();
-
-    /**
-     * Returns the timestamp when this CMIS object has been created (CMIS
-     * property {@code cmis:creationDate}).
-     * 
-     * @return the creation time of the object or {@code null} if the property
-     *         hasn't been requested or hasn't been provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    GregorianCalendar getCreationDate();
-
-    /**
-     * Returns the user who modified this CMIS object (CMIS property
-     * {@code cmis:lastModifiedBy}).
-     * 
-     * @return the last modifier of the object or {@code null} if the property
-     *         hasn't been requested or hasn't been provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    String getLastModifiedBy();
-
-    /**
-     * Returns the timestamp when this CMIS object has been modified (CMIS
-     * property {@code cmis:lastModificationDate}).
-     * 
-     * @return the last modification date of the object or {@code null} if the
-     *         property hasn't been requested or hasn't been provided by the
-     *         repository
-     * 
-     * @cmis 1.0
-     */
-    GregorianCalendar getLastModificationDate();
-
-    /**
-     * Returns the id of the base type of this CMIS object (CMIS property
-     * {@code cmis:baseTypeId}).
-     * 
-     * @return the base type id of the object or {@code null} if the property
-     *         hasn't been requested or hasn't been provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    BaseTypeId getBaseTypeId();
-
-    /**
-     * Returns the base type of this CMIS object (object type identified by
-     * {@code cmis:baseTypeId}).
-     * 
-     * @return the base type of the object or {@code null} if the property
-     *         {@code cmis:baseTypeId} hasn't been requested or hasn't been
-     *         provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getBaseType();
-
-    /**
-     * Returns the type of this CMIS object (object type identified by
-     * {@code cmis:objectTypeId}).
-     * 
-     * @return the type of the object or {@code null} if the property
-     *         {@code cmis:objectTypeId} hasn't been requested or hasn't been
-     *         provided by the repository
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getType();
-
-    /**
-     * Returns the secondary types of this CMIS object (object types identified
-     * by {@code cmis:secondaryObjectTypeIds}).
-     * 
-     * @return the secondary types of the object or {@code null} if the property
-     *         {@code cmis:secondaryObjectTypeIds} hasn't been requested or
-     *         hasn't been provided by the repository
-     * @cmis 1.1
-     */
-    List<SecondaryType> getSecondaryTypes();
-
-    /**
-     * Returns a list of primary and secondary object types that define the
-     * given property.
-     * 
-     * @param id
-     *            the ID of the property
-     * 
-     * @return a list of object types that define the given property or
-     *         {@code null} if the property couldn't be found in the object
-     *         types that are attached to this object
-     * 
-     */
-    List<ObjectType> findObjectType(String id);
-
-    /**
-     * Returns the change token (CMIS property {@code cmis:changeToken}).
-     * 
-     * @return the change token of the object or {@code null} if the property
-     *         hasn't been requested or hasn't been provided or isn't supported
-     *         by the repository
-     * 
-     * @cmis 1.0
-     */
-    String getChangeToken();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java
deleted file mode 100644
index 4646b7f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-
-/**
- * CMIS document interface.
- * 
- * @cmis 1.0
- */
-public interface Document extends FileableCmisObject, DocumentProperties {
-
-    // object service
-
-    /**
-     * Deletes this document and all its versions.
-     * 
-     * @cmis 1.0
-     */
-    void deleteAllVersions();
-
-    /**
-     * Retrieves the content stream of this document.
-     * 
-     * @return the content stream, or {@code null} if the document has no
-     *         content
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream();
-
-    /**
-     * Retrieves the content stream of this document.
-     * 
-     * @param offset
-     *            the offset of the stream or {@code null} to read the stream
-     *            from the beginning
-     * @param length
-     *            the maximum length of the stream or {@code null} to read to
-     *            the end of the stream
-     * 
-     * @return the content stream, or {@code null} if the document has no
-     *         content
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream(BigInteger offset, BigInteger length);
-
-    /**
-     * Retrieves the content stream that is associated with the given stream ID.
-     * This is usually a rendition of the document.
-     * 
-     * @param streamId
-     *            the stream ID
-     * 
-     * @return the content stream, or {@code null} if no content is associated
-     *         with this stream ID
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream(String streamId);
-
-    /**
-     * Retrieves the content stream that is associated with the given stream ID.
-     * This is usually a rendition of the document.
-     * 
-     * @param streamId
-     *            the stream ID
-     * @param offset
-     *            the offset of the stream or {@code null} to read the stream
-     *            from the beginning
-     * @param length
-     *            the maximum length of the stream or {@code null} to read to
-     *            the end of the stream
-     * 
-     * @return the content stream, or {@code null} if no content is associated
-     *         with this stream ID
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream(String streamId, BigInteger offset, BigInteger length);
-
-    /**
-     * Returns the content URL of the document if the binding supports content
-     * URLs.
-     * 
-     * Depending on the repository and the binding, the server might not return
-     * the content but an error message. Authentication data is not attached.
-     * That is, a user may have to re-authenticate to get the content.
-     * 
-     * @return the content URL of the document or {@code null} if the binding
-     *         does not support content URLs
-     */
-    public String getContentUrl();
-
-    /**
-     * Returns the content URL of the document or a rendition if the binding
-     * supports content URLs.
-     * 
-     * Depending on the repository and the binding, the server might not return
-     * the content but an error message. Authentication data is not attached.
-     * That is, a user may have to re-authenticate to get the content.
-     * 
-     * @param streamId
-     *            the ID of the rendition or {@code null} for the document
-     * 
-     * @return the content URL of the document or rendition or {@code null} if
-     *         the binding does not support content URLs
-     */
-    public String getContentUrl(String streamId);
-
-    /**
-     * Sets a new content stream for the document and refreshes this object
-     * afterwards. If the repository created a new version, this new document is
-     * returned. Otherwise the current document is returned.
-     * <p>
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @param contentStream
-     *            the content stream
-     * @param overwrite
-     *            if this parameter is set to {@code false} and the document
-     *            already has content, the repository throws a
-     *            {@link CmisContentAlreadyExistsException}
-     * 
-     * @return the updated document, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @see ObjectFactory#createContentStream(String, long, String,
-     *      java.io.InputStream)
-     * 
-     * @cmis 1.0
-     */
-    Document setContentStream(ContentStream contentStream, boolean overwrite);
-
-    /**
-     * Sets a new content stream for the document. If the repository created a
-     * new version, the object ID of this new version is returned. Otherwise the
-     * object ID of the current document is returned.
-     * <p>
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @param contentStream
-     *            the content stream
-     * @param overwrite
-     *            if this parameter is set to {@code false} and the document
-     *            already has content, the repository throws a
-     *            {@link CmisContentAlreadyExistsException}
-     * @param refresh
-     *            if this parameter is set to {@code true}, this object will be
-     *            refreshed after the new content has been set
-     * 
-     * @return the updated object ID, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @see ObjectFactory#createContentStream(String, long, String,
-     *      java.io.InputStream)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId setContentStream(ContentStream contentStream, boolean overwrite, boolean refresh);
-
-    /**
-     * Appends a content stream to the content stream of the document and
-     * refreshes this object afterwards. If the repository created a new
-     * version, this new document is returned. Otherwise the current document is
-     * returned.
-     * <p>
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @param contentStream
-     *            the content stream
-     * @param isLastChunk
-     *            indicates if this stream is the last chunk of the content
-     * 
-     * @return the updated document, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @see ObjectFactory#createContentStream(String, long, String,
-     *      java.io.InputStream)
-     * 
-     * @cmis 1.1
-     */
-    Document appendContentStream(ContentStream contentStream, boolean isLastChunk);
-
-    /**
-     * Appends a content stream to the content stream of the document. If the
-     * repository created a new version, the object ID of this new version is
-     * returned. Otherwise the object ID of the current document is returned.
-     * <p>
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @param contentStream
-     *            the content stream
-     * @param isLastChunk
-     *            indicates if this stream is the last chunk of the content
-     * @param refresh
-     *            if this parameter is set to {@code true}, this object will be
-     *            refreshed after the content stream has been appended
-     * 
-     * @return the updated object ID, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @cmis 1.1
-     */
-    ObjectId appendContentStream(ContentStream contentStream, boolean isLastChunk, boolean refresh);
-
-    /**
-     * Removes the current content stream from the document and refreshes this
-     * object afterwards. If the repository created a new version, this new
-     * document is returned. Otherwise the current document is returned.
-     * 
-     * @return the updated document, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @cmis 1.0
-     */
-    Document deleteContentStream();
-
-    /**
-     * Removes the current content stream from the document. If the repository
-     * created a new version, the object ID of this new version is returned.
-     * Otherwise the object ID of the current document is returned.
-     * 
-     * @param refresh
-     *            if this parameter is set to {@code true}, this object will be
-     *            refreshed after the content stream has been deleted
-     * 
-     * @return the updated document, or {@code null} if the repository did not
-     *         return an object ID
-     * 
-     * @cmis 1.0
-     */
-    ObjectId deleteContentStream(boolean refresh);
-
-    // versioning service
-
-    /**
-     * Checks out the document and returns the object ID of the PWC (private
-     * working copy).
-     * 
-     * @return PWC object ID
-     * 
-     * @cmis 1.0
-     */
-    ObjectId checkOut();
-
-    /**
-     * If this is a PWC (private working copy) the check out will be reversed.
-     * If this is not a PWC it an exception will be thrown.
-     * 
-     * @cmis 1.0
-     */
-    void cancelCheckOut();
-
-    /**
-     * If this is a PWC (private working copy) it performs a check in. If this
-     * is not a PWC it an exception will be thrown.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return new document ID
-     * 
-     * @cmis 1.0
-     */
-    ObjectId checkIn(boolean major, Map<String, ?> properties, ContentStream contentStream, String checkinComment,
-            List<Policy> policies, List<Ace> addAces, List<Ace> removeAces);
-
-    /**
-     * If this is a PWC (private working copy) it performs a check in. If this
-     * is not a PWC it an exception will be thrown.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return new document ID
-     * 
-     * @cmis 1.0
-     */
-    ObjectId checkIn(boolean major, Map<String, ?> properties, ContentStream contentStream, String checkinComment);
-
-    /**
-     * Fetches the latest major or minor version of this document.
-     * 
-     * @param major
-     *            if {@code true} the latest major version will be returned,
-     *            otherwise the very last version will be returned
-     * 
-     * @return the latest document object
-     * 
-     * @cmis 1.0
-     */
-    Document getObjectOfLatestVersion(boolean major);
-
-    /**
-     * Fetches the latest major or minor version of this document using the
-     * given {@link OperationContext}.
-     * 
-     * @param major
-     *            if {@code true} the latest major version will be returned,
-     *            otherwise the very last version will be returned
-     * 
-     * @return the latest document object
-     * 
-     * @cmis 1.0
-     */
-    Document getObjectOfLatestVersion(boolean major, OperationContext context);
-
-    /**
-     * Fetches all versions of this document.
-     * <p>
-     * The behavior of this method is undefined if the document is not
-     * versionable and can be different for each repository.
-     * 
-     * @return all versions of the version series, sorted by
-     *         {@code cmis:creationDate} descending and preceded by the PWC, if
-     *         one exists, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    List<Document> getAllVersions();
-
-    /**
-     * Fetches all versions of this document using the given
-     * {@link OperationContext}.
-     * <p>
-     * The behavior of this method is undefined if the document is not
-     * versionable and can be different for each repository.
-     * 
-     * @return all versions of the version series, sorted by
-     *         {@code cmis:creationDate} descending and preceded by the PWC, if
-     *         one exists, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    List<Document> getAllVersions(OperationContext context);
-
-    /**
-     * Creates a copy of this document, including content.
-     * 
-     * @param targetFolderId
-     *            the ID of the target folder, {@code null} to create an unfiled
-     *            document
-     * 
-     * @return the new document object
-     * 
-     * @cmis 1.0
-     */
-    Document copy(ObjectId targetFolderId);
-
-    /**
-     * Creates a copy of this document, including content.
-     * 
-     * @param targetFolderId
-     *            the ID of the target folder, {@code null} to create an unfiled
-     *            document
-     * 
-     * @return the new document object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Document copy(ObjectId targetFolderId, Map<String, ?> properties, VersioningState versioningState,
-            List<Policy> policies, List<Ace> addACEs, List<Ace> removeACEs, OperationContext context);
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
deleted file mode 100644
index f0bc0f6..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
-
-/**
- * Accessors to CMIS document properties.
- * 
- * @see CmisObjectProperties
- */
-public interface DocumentProperties {
-
-    /**
-     * Returns {@code true} if this document is immutable (CMIS property
-     * {@code cmis:isImmutable}).
-     * 
-     * @return the immutable flag of the document or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    Boolean isImmutable();
-
-    /**
-     * Returns {@code true} if this document is the latest version (CMIS
-     * property {@code cmis:isLatestVersion}).
-     * 
-     * @return the latest version flag of the document or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    Boolean isLatestVersion();
-
-    /**
-     * Returns {@code true} if this document is a major version (CMIS property
-     * {@code cmis:isMajorVersion}).
-     * 
-     * @return the major version flag of the document or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    Boolean isMajorVersion();
-
-    /**
-     * Returns {@code true} if this document is the latest major version (CMIS
-     * property {@code cmis:isLatestMajorVersion}).
-     * 
-     * @return the latest major version flag of the document or {@code null} if
-     *         the property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    Boolean isLatestMajorVersion();
-
-    /**
-     * Returns {@code true} if this document is the PWC (CMIS property
-     * {@code cmis:isPrivateWorkingCopy}).
-     * 
-     * @return the PWC flag of the document or {@code null} if the property
-     *         hasn't been requested, hasn't been provided by the repository, or
-     *         the property value isn't set
-     * 
-     * @cmis 1.1
-     */
-    Boolean isPrivateWorkingCopy();
-
-    /**
-     * Returns the version label (CMIS property {@code cmis:versionLabel}).
-     * 
-     * @return the version label of the document or {@code null} if the property
-     *         hasn't been requested, hasn't been provided by the repository, or
-     *         the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getVersionLabel();
-
-    /**
-     * Returns the version series ID (CMIS property {@code cmis:versionSeriesId}
-     * ).
-     * 
-     * @return the version series ID of the document or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getVersionSeriesId();
-
-    /**
-     * Returns {@code true} if this version series is checked out (CMIS property
-     * {@code cmis:isVersionSeriesCheckedOut}).
-     * 
-     * @return the version series checked out flag of the document or
-     *         {@code null} if the property hasn't been requested, hasn't been
-     *         provided by the repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    Boolean isVersionSeriesCheckedOut();
-
-    /**
-     * Returns the user who checked out this version series (CMIS property
-     * {@code cmis:versionSeriesCheckedOutBy}).
-     * 
-     * @return the user who checked out this version series or {@code null} if
-     *         the property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getVersionSeriesCheckedOutBy();
-
-    /**
-     * Returns the PWC ID of this version series (CMIS property
-     * {@code cmis:versionSeriesCheckedOutId}).
-     * <p>
-     * Some repositories provided this value only to the user who checked out
-     * the version series.
-     * 
-     * @return the PWC ID of this version series or {@code null} if the property
-     *         hasn't been requested, hasn't been provided by the repository, or
-     *         the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getVersionSeriesCheckedOutId();
-
-    /**
-     * Returns the checkin comment (CMIS property {@code cmis:checkinComment}).
-     * 
-     * @return the checkin comment of this version or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getCheckinComment();
-
-    /**
-     * Returns the content stream length or -1 if the document has no content
-     * (CMIS property {@code cmis:contentStreamLength}).
-     * 
-     * @return the content stream length of this document or -1 if the property
-     *         hasn't been requested, hasn't been provided by the repository, or
-     *         the document has no content
-     * 
-     * @cmis 1.0
-     */
-    long getContentStreamLength();
-
-    /**
-     * Returns the content stream MIME type or {@code null} if the document has
-     * no content (CMIS property {@code cmis:contentStreamMimeType}).
-     * 
-     * @return the content stream MIME type of this document or {@code null} if
-     *         the property hasn't been requested, hasn't been provided by the
-     *         repository, or the document has no content
-     * 
-     * @cmis 1.0
-     */
-    String getContentStreamMimeType();
-
-    /**
-     * Returns the content stream filename or {@code null} if the document has
-     * no content (CMIS property {@code cmis:contentStreamFileName}).
-     * 
-     * @return the content stream filename of this document or {@code null} if
-     *         the property hasn't been requested, hasn't been provided by the
-     *         repository, or the document has no content
-     * @cmis 1.0
-     */
-    String getContentStreamFileName();
-
-    /**
-     * Returns the content stream ID or {@code null} if the document has no
-     * content (CMIS property {@code cmis:contentStreamId}).
-     * 
-     * @return the content stream ID of this document or {@code null} if the
-     *         property hasn't been requested, hasn't been provided by the
-     *         repository, or the document has no content
-     * 
-     * @cmis 1.0
-     */
-    String getContentStreamId();
-
-    /**
-     * Returns the content hashes or {@code null} if the document has no content
-     * (CMIS property {@code cmis:contentStreamHash}).
-     * 
-     * @return the list of content hashes or {@code null} if the property hasn't
-     *         been requested, hasn't been provided by the repository, or the
-     *         document has no content
-     * 
-     * @cmis Extension
-     */
-    List<ContentStreamHash> getContentStreamHashes();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentType.java
deleted file mode 100644
index 38301d1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-
-/**
- * Document Object Type.
- * 
- * @cmis 1.0
- */
-public interface DocumentType extends ObjectType {
-
-    /**
-     * Gets the {@code isVersionable} flag.
-     * 
-     * @return {@code true} if this document type is versionable, {@code false}
-     *         if documents of this type cannot be versioned.
-     * 
-     * @cmis 1.0
-     */
-    Boolean isVersionable();
-
-    /**
-     * Gets the enum that describes, how content streams have to be handled with
-     * this document type.
-     * 
-     * @return the mode of content stream support ({@code notallowed},
-     *         {@code allowed}, or {@code required})
-     * 
-     * @cmis 1.0
-     */
-    ContentStreamAllowed getContentStreamAllowed();
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FileableCmisObject.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FileableCmisObject.java
deleted file mode 100644
index ae7e65c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FileableCmisObject.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-/**
- * Fileable CMIS object.
- * 
- * A fileable object is an object that can reside in a folder.
- */
-public interface FileableCmisObject extends CmisObject {
-
-    // object service
-
-    /**
-     * Moves this object.
-     * 
-     * @param sourceFolderId
-     *            the object ID of the source folder
-     * @param targetFolderId
-     *            the object ID of the target folder
-     * 
-     * @return the moved object
-     * 
-     * @cmis 1.0
-     */
-    FileableCmisObject move(ObjectId sourceFolderId, ObjectId targetFolderId);
-
-    /**
-     * Moves this object.
-     * 
-     * @param sourceFolderId
-     *            the object ID of the source folder
-     * @param targetFolderId
-     *            the object ID of the target folder
-     * @param context
-     *            the {@link OperationContext} to use to fetch the moved object
-     * 
-     * @return the moved object
-     * 
-     * @cmis 1.0
-     */
-    FileableCmisObject move(ObjectId sourceFolderId, ObjectId targetFolderId, OperationContext context);
-
-    // navigation service
-
-    /**
-     * Returns the parents of this object.
-     * 
-     * @return the list of parent folders of this object or an empty list if
-     *         this object is unfiled or if this object is the root folder
-     * 
-     * @cmis 1.0
-     */
-    List<Folder> getParents();
-
-    /**
-     * Returns the parents of this object.
-     * 
-     * @param context
-     *            the {@link OperationContext} to use to fetch the parent folder
-     *            objects
-     * 
-     * @return the list of parent folders of this object or an empty list if
-     *         this object is unfiled or if this object is the root folder
-     * 
-     * @cmis 1.0
-     */
-    List<Folder> getParents(OperationContext context);
-
-    /**
-     * Returns the paths of this object.
-     * 
-     * @return the list of paths of this object or an empty list if this object
-     *         is unfiled or if this object is the root folder
-     * 
-     * @cmis 1.0
-     */
-    List<String> getPaths();
-
-    // multifiling service
-
-    /**
-     * Adds this object to a folder.
-     * 
-     * @param folderId
-     *            the object ID of the folder to which this object should be
-     *            added
-     * @param allVersions
-     *            if this parameter is {@code true} and this object is a
-     *            document, all versions of the version series are added to the
-     *            folder
-     * 
-     * @cmis 1.0
-     */
-    void addToFolder(ObjectId folderId, boolean allVersions);
-
-    /**
-     * Removes this object from a folder.
-     * 
-     * @param folderId
-     *            the object ID of the folder from which this object should be
-     *            removed
-     * 
-     * @cmis 1.0
-     */
-    void removeFromFolder(ObjectId folderId);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
deleted file mode 100644
index 2a1bc9d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-
-/**
- * CMIS folder interface.
- * 
- * @cmis 1.0
- */
-public interface Folder extends FileableCmisObject, FolderProperties {
-
-    // object service
-
-    /**
-     * Creates a new document in this folder.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return the new document object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Document createDocument(Map<String, ?> properties, ContentStream contentStream, VersioningState versioningState,
-            List<Policy> policies, List<Ace> addAces, List<Ace> removeAces, OperationContext context);
-
-    /**
-     * Creates a new document in this folder.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return the new document object
-     * 
-     * @cmis 1.0
-     */
-    Document createDocument(Map<String, ?> properties, ContentStream contentStream, VersioningState versioningState);
-
-    /**
-     * Creates a new document from a source document in this folder.
-     * 
-     * @return the new document object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Document createDocumentFromSource(ObjectId source, Map<String, ?> properties, VersioningState versioningState,
-            List<Policy> policies, List<Ace> addAces, List<Ace> removeAces, OperationContext context);
-
-    /**
-     * Creates a new document from a source document in this folder.
-     * 
-     * @return the new document object
-     * 
-     * @cmis 1.0
-     */
-    Document createDocumentFromSource(ObjectId source, Map<String, ?> properties, VersioningState versioningState);
-
-    /**
-     * Creates a new subfolder in this folder.
-     * 
-     * @return the new folder object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Folder createFolder(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context);
-
-    /**
-     * Creates a new subfolder in this folder.
-     * 
-     * @return the new folder object
-     * 
-     * @cmis 1.0
-     */
-    Folder createFolder(Map<String, ?> properties);
-
-    /**
-     * Creates a new policy in this folder.
-     * 
-     * @return the new policy object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Policy createPolicy(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context);
-
-    /**
-     * Creates a new item in this folder.
-     * 
-     * @return the new item object
-     * 
-     * @cmis 1.1
-     */
-    Item createItem(Map<String, ?> properties);
-
-    /**
-     * Creates a new item in this folder.
-     * 
-     * @return the new item object or {@code null} if the parameter
-     *         {@code context} was set to {@code null}
-     * 
-     * @cmis 1.1
-     */
-    Item createItem(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context);
-
-    /**
-     * Creates a new policy in this folder.
-     * 
-     * @return the new policy object
-     * 
-     * @cmis 1.0
-     */
-    Policy createPolicy(Map<String, ?> properties);
-
-    /**
-     * Deletes this folder and all subfolders.
-     * 
-     * @return a list of object IDs which failed to be deleted
-     * 
-     * @cmis 1.0
-     */
-    List<String> deleteTree(boolean allversions, UnfileObject unfile, boolean continueOnFailure);
-
-    // navigation service
-
-    /**
-     * Gets the folder tree starting with this folder.
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<FileableCmisObject>> getFolderTree(int depth);
-
-    /**
-     * Gets the folder tree starting with this folder using the given
-     * {@link OperationContext}.
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext context);
-
-    /**
-     * Gets the folder descendants starting with this folder.
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<FileableCmisObject>> getDescendants(int depth);
-
-    /**
-     * Gets the folder descendants starting with this folder using the given
-     * {@link OperationContext}.
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext context);
-
-    /**
-     * Returns the children of this folder.
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<CmisObject> getChildren();
-
-    /**
-     * Returns the children of this folder using the given
-     * {@link OperationContext}.
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<CmisObject> getChildren(OperationContext context);
-
-    /**
-     * Returns if the folder is the root folder.
-     * 
-     * @return {@code true} if the folder is the root folder, {@code false}
-     *         otherwise
-     * 
-     * @cmis 1.0
-     */
-    boolean isRootFolder();
-
-    /**
-     * Gets the parent folder object.
-     * 
-     * @return the parent folder object or {@code null} if the folder is the
-     *         root folder.
-     * 
-     * @cmis 1.0
-     */
-    Folder getFolderParent();
-
-    /**
-     * Returns the path of the folder.
-     * 
-     * @return the absolute folder path
-     * 
-     * @cmis 1.0
-     */
-    String getPath();
-
-    /**
-     * Returns all checked out documents in this folder.
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<Document> getCheckedOutDocs();
-
-    /**
-     * Returns all checked out documents in this folder using the given
-     * {@link OperationContext}.
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<Document> getCheckedOutDocs(OperationContext context);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderProperties.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderProperties.java
deleted file mode 100644
index c5fc0eb..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderProperties.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-/**
- * Accessors to CMIS folder properties.
- * 
- * @see CmisObjectProperties
- */
-public interface FolderProperties {
-
-    /**
-     * Returns the parent id or {@code null} if the folder is the root folder
-     * (CMIS property {@code cmis:parentId}).
-     * 
-     * @return the property value or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the folder
-     *         is the root folder
-     * 
-     * @cmis 1.0
-     */
-    String getParentId();
-
-    /**
-     * Returns the list of the allowed object types in this folder (CMIS
-     * property {@code cmis:allowedChildObjectTypeIds}). If the list is empty or
-     * {@code null} all object types are allowed.
-     * 
-     * @return the property value or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the
-     *         property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    List<ObjectType> getAllowedChildObjectTypes();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderType.java
deleted file mode 100644
index 90fd231..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/FolderType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Folder Object Type.
- * 
- * @cmis 1.0
- */
-public interface FolderType extends ObjectType {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java
deleted file mode 100644
index 7ce1cf2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * CMIS item interface.
- * 
- * @cmis 1.1
- */
-public interface Item extends FileableCmisObject {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemIterable.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemIterable.java
deleted file mode 100644
index 26ec95c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemIterable.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.Iterator;
-
-/**
- * Iterable for CMIS collections that allows ability to skip to specific
- * position or return a subcollection.
- * 
- * @param <T>
- *            the type of the items
- */
-public interface ItemIterable<T> extends Iterable<T> {
-
-    /**
-     * Skips to position within CMIS collection.
-     * 
-     * @param position
-     * 
-     * @return iterable whose starting point is the specified skip to position.
-     *         This iterable <em>may</em> be the same as {@code this}
-     */
-    ItemIterable<T> skipTo(long position);
-
-    /**
-     * Gets an iterable for the current sub collection within the CMIS
-     * collection using default maximum number of items.
-     * 
-     * @return iterable for current page
-     */
-    ItemIterable<T> getPage();
-
-    /**
-     * Gets an iterable for the current sub collection within the CMIS
-     * collection.
-     * 
-     * @param maxNumItems
-     *            maximum number of items the sub collection will contain
-     * 
-     * @return iterable for current page
-     */
-    ItemIterable<T> getPage(int maxNumItems);
-
-    Iterator<T> iterator();
-
-    /**
-     * Returns the number of items fetched for the current page.
-     * 
-     * @return number of items for currently fetched collection
-     */
-    long getPageNumItems();
-
-    /**
-     * Returns whether the repository contains additional items beyond the page
-     * of items already fetched.
-     * 
-     * @return true => further page requests will be made to the repository
-     */
-    boolean getHasMoreItems();
-
-    /**
-     * Returns the total number of items. If the repository knows the total
-     * number of items in a result set, the repository SHOULD include the number
-     * here. If the repository does not know the number of items in a result
-     * set, this parameter SHOULD not be set. The value in the parameter MAY NOT
-     * be accurate the next time the client retrieves the result set or the next
-     * page in the result set.
-     * 
-     * @return total number of items or (-1)
-     */
-    long getTotalNumItems();
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemType.java
deleted file mode 100644
index 136ed4a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ItemType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Item Object Type.
- * 
- * @cmis 1.1
- */
-public interface ItemType extends ObjectType {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectFactory.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectFactory.java
deleted file mode 100644
index b2789b0..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectFactory.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-
-/**
- * A factory to create and convert CMIS objects.
- * 
- * Custom {@link ObjectFactory} implementations may use the convert methods to
- * inject specific implementations of the interfaces when the data is transfered
- * from the low level API to the high level API.
- * 
- * @see org.apache.chemistry.opencmis.client.api.Session#getObjectFactory()
- */
-public interface ObjectFactory {
-
-    void initialize(Session session, Map<String, String> parameters);
-
-    // repository info
-
-    RepositoryInfo convertRepositoryInfo(RepositoryInfo repositoryInfo);
-
-    // ACL and ACE
-
-    Acl convertAces(List<Ace> aces);
-
-    Acl createAcl(List<Ace> aces);
-
-    Ace createAce(String principal, List<String> permissions);
-
-    // policies
-
-    List<String> convertPolicies(List<Policy> policies);
-
-    // renditions
-
-    Rendition convertRendition(String objectId, RenditionData rendition);
-
-    // content stream
-
-    /**
-     * Creates an object that implements the {@link ContentStream} interface.
-     * 
-     * @param filename
-     *            the filename, should be set
-     * @param length
-     *            the length of the stream or -1 if the length is unknown
-     * @param mimetype
-     *            the MIME type, if unknown "application/octet-stream" should be
-     *            used
-     * @param stream
-     *            the stream, should not be <code>null</code>
-     * 
-     * @return the {@link ContentStream} object
-     */
-    ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream);
-
-    /**
-     * Creates an object that implements the {@link ContentStream} interface.
-     * 
-     * @param filename
-     *            the filename, should be set
-     * @param length
-     *            the length of the stream or -1 if the length is unknown
-     * @param mimetype
-     *            the MIME type, if unknown "application/octet-stream" should be
-     *            used
-     * @param stream
-     *            the stream, should not be <code>null</code>
-     * @param partial
-     *            if <code>false</code> the stream represents the full content,
-     *            if <code>true</code> the stream is only a part of the content
-     * 
-     * @return the {@link ContentStream} object
-     */
-    ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream, boolean partial);
-
-    /**
-     * Converts a high level {@link ContentStream} object into a low level
-     * {@link ContentStream} object.
-     * 
-     * @param contentStream
-     *            the original {@link ContentStream} object
-     * @return the {@link ContentStream} object
-     */
-    ContentStream convertContentStream(ContentStream contentStream);
-
-    // types
-
-    ObjectType convertTypeDefinition(TypeDefinition typeDefinition);
-
-    ObjectType getTypeFromObjectData(ObjectData objectData);
-
-    // properties
-
-    <T> Property<T> createProperty(PropertyDefinition<T> type, List<T> values);
-
-    Map<String, Property<?>> convertProperties(ObjectType objectType, Collection<SecondaryType> secondaryTypes,
-            Properties properties);
-
-    Properties convertProperties(Map<String, ?> properties, ObjectType type, Collection<SecondaryType> secondaryTypes,
-            Set<Updatability> updatabilityFilter);
-
-    List<PropertyData<?>> convertQueryProperties(Properties properties);
-
-    // objects
-
-    CmisObject convertObject(ObjectData objectData, OperationContext context);
-
-    QueryResult convertQueryResult(ObjectData objectData);
-
-    ChangeEvent convertChangeEvent(ObjectData objectData);
-
-    ChangeEvents convertChangeEvents(String changeLogToken, ObjectList objectList);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectId.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectId.java
deleted file mode 100644
index 4987e69..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectId.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Holds an object ID.
- */
-public interface ObjectId {
-
-    /**
-     * Returns the object ID.
-     * 
-     * @return the object ID
-     */
-    String getId();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java
deleted file mode 100644
index 87c4005..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * Object Type.
- * 
- * @cmis 1.0
- */
-public interface ObjectType extends TypeDefinition {
-
-    /**
-     * Indicates whether this is base object type or not.
-     * 
-     * @return {@code true} if this type is a base type, {@code false} if this
-     *         type is a derived type
-     * 
-     * @cmis 1.0
-     */
-    boolean isBaseType();
-
-    /**
-     * Gets the types base type, if the type is a derived (non-base) type.
-     * 
-     * @return the base type this type is derived from, or {@code null} if it is
-     *         a base type
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getBaseType();
-
-    /**
-     * Gets the types parent type, if the type is a derived (non-base) type.
-     * 
-     * @return the parent type from which this type is derived, or {@code null}
-     *         if it is a base type
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getParentType();
-
-    /**
-     * Gets the list of types directly derived from this type (which will return
-     * this type on {@code getParent()}).
-     * 
-     * @return list of types which are directly derived from this type
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<ObjectType> getChildren();
-
-    /**
-     * Gets the list of all types somehow derived from this type.
-     * 
-     * @param depth
-     *            the tree depth, must be greater than 0 or -1 for infinite
-     *            depth
-     * 
-     * @return a list of trees of types which are derived from this type (direct
-     *         and via their parents)
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<ObjectType>> getDescendants(int depth);
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/OperationContext.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/OperationContext.java
deleted file mode 100644
index 81b2640..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/OperationContext.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.io.Serializable;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * An <code>OperationContext</code> object defines the filtering, paging and
- * caching of an operation.
- */
-public interface OperationContext extends Serializable {
-
-    /**
-     * Returns the current filter.
-     * 
-     * @return a set of <em>query names</em>
-     */
-    Set<String> getFilter();
-
-    /**
-     * Sets the current filter.
-     * 
-     * @param propertyFilter
-     *            a set of <em>query names</em>
-     */
-    void setFilter(Set<String> propertyFilter);
-
-    /**
-     * Sets the current filter.
-     * 
-     * @param propertyFilter
-     *            a comma separated string of <em>query names</em> or "*" for
-     *            all properties or {@code null} to let the repository determine
-     *            a set of properties
-     */
-    void setFilterString(String propertyFilter);
-
-    /**
-     * Returns the filter extended by cmis:objectId, cmis:objectTypeId and
-     * cmis:baseTypeId.
-     */
-    String getFilterString();
-
-    /**
-     * Sets if secondary type properties should be loaded.
-     * 
-     * @cmis 1.1
-     */
-    void setLoadSecondaryTypeProperties(boolean load);
-
-    /**
-     * Returns is secondary type properties should be loaded.
-     * 
-     * @cmis 1.1
-     */
-    boolean loadSecondaryTypeProperties();
-
-    /**
-     * Returns if allowable actions should returned.
-     */
-    boolean isIncludeAllowableActions();
-
-    /**
-     * Sets if allowable actions should returned.
-     */
-    void setIncludeAllowableActions(boolean include);
-
-    /**
-     * Returns if ACLs should returned.
-     */
-    boolean isIncludeAcls();
-
-    /**
-     * Sets if ACLs should returned.
-     */
-    void setIncludeAcls(boolean include);
-
-    /**
-     * Returns which relationships should be returned.
-     */
-    IncludeRelationships getIncludeRelationships();
-
-    /**
-     * Sets which relationships should be returned.
-     */
-    void setIncludeRelationships(IncludeRelationships include);
-
-    /**
-     * Returns if policies should returned.
-     */
-    boolean isIncludePolicies();
-
-    /**
-     * Sets if policies should returned.
-     */
-    void setIncludePolicies(boolean include);
-
-    /**
-     * Returns the current rendition filter. (See CMIS spec
-     * "2.2.1.2.4.1 Rendition Filter Grammar")
-     * 
-     * @return a set of rendition filter terms
-     */
-    Set<String> getRenditionFilter();
-
-    /**
-     * Sets the current rendition filter. (See CMIS spec
-     * "2.2.1.2.4.1 Rendition Filter Grammar")
-     * 
-     * @param renditionFilter
-     *            a set of rendition filter terms
-     */
-    void setRenditionFilter(Set<String> renditionFilter);
-
-    /**
-     * Sets the current rendition filter. (See CMIS spec
-     * "2.2.1.2.4.1 Rendition Filter Grammar")
-     * 
-     * @param renditionFilter
-     *            a comma separated list of rendition filter terms
-     */
-    void setRenditionFilterString(String renditionFilter);
-
-    /**
-     * Returns the current rendition filter. (See CMIS spec
-     * "2.2.1.2.4.1 Rendition Filter Grammar")
-     * 
-     * @return a comma separated list of rendition filter terms
-     */
-    String getRenditionFilterString();
-
-    /**
-     * Returns if path segments should returned.
-     */
-    boolean isIncludePathSegments();
-
-    /**
-     * Sets if path segments should returned.
-     */
-    void setIncludePathSegments(boolean include);
-
-    /**
-     * Returns the order by rule for operations that return lists.
-     * 
-     * @return a comma-separated list of <em>query names</em> and the ascending
-     *         modifier "ASC" or the descending modifier "DESC" for each query
-     *         name
-     */
-    String getOrderBy();
-
-    /**
-     * Sets the order by rule for operations that return lists.
-     * 
-     * @param orderBy
-     *            a comma-separated list of <em>query names</em> and the
-     *            ascending modifier "ASC" or the descending modifier "DESC" for
-     *            each query name
-     */
-    void setOrderBy(String orderBy);
-
-    /**
-     * Return if caching is enabled.
-     */
-    boolean isCacheEnabled();
-
-    /**
-     * Enables or disables the cache.
-     */
-    void setCacheEnabled(boolean cacheEnabled);
-
-    /**
-     * Returns a key for this OperationContext object that is used for caching.
-     */
-    String getCacheKey();
-
-    /**
-     * Set the max number of items per batch for operations that return lists.
-     * 
-     * This option does not restrict the number of returned items. To retrieve
-     * an excerpt (page) of a list, see {@link ItemIterable#getPage(int)}.
-     * 
-     * @param maxItemsPerPage
-     *            max number of items (must be >0)
-     */
-    void setMaxItemsPerPage(int maxItemsPerPage);
-
-    /**
-     * Returns the current max number of items per batch.
-     */
-    int getMaxItemsPerPage();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java
deleted file mode 100644
index 09baa0a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * CMIS policy interface.
- * 
- * @cmis 1.0
- */
-public interface Policy extends FileableCmisObject, PolicyProperties {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyProperties.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyProperties.java
deleted file mode 100644
index cc31a3f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyProperties.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Accessors to CMIS policy properties.
- * 
- * @see CmisObjectProperties
- */
-public interface PolicyProperties {
-
-    /**
-     * Returns the policy text of this CMIS policy (CMIS property
-     * {@code cmis:policyText}).
-     * 
-     * @return the policy text or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the
-     *         property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    String getPolicyText();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyType.java
deleted file mode 100644
index a69a61b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PolicyType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Policy Object Type.
- * 
- * @cmis 1.0
- */
-public interface PolicyType extends ObjectType {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Property.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Property.java
deleted file mode 100644
index b6eba9f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Property.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-
-/**
- * CMIS Property.
- */
-public interface Property<T> extends PropertyData<T> {
-
-    /**
-     * Returns if the property is a multi-value property.
-     * 
-     * @return {@code true} if the property is multi-value property,
-     *         {@code false} if the property is single-value property,
-     */
-    boolean isMultiValued();
-
-    /**
-     * Returns the property data type.
-     * 
-     * @return the data type of the property, not {@code null}
-     */
-    PropertyType getType();
-
-    /**
-     * Returns the property definition.
-     * 
-     * @return the property definition, not {@code null}
-     */
-    PropertyDefinition<T> getDefinition();
-
-    /**
-     * Returns the property value (single or multiple).
-     * 
-     * @return the property value or {@code null} if the property value isn't
-     *         set
-     */
-    <U> U getValue();
-
-    /**
-     * Returns a human readable representation of the property value. If the
-     * property is multi-value property, only the first value will be returned.
-     * 
-     * @return the (first) property value as a string or {@code null} if the
-     *         property value isn't set
-     */
-    String getValueAsString();
-
-    /**
-     * Returns a human readable representation of the property values.
-     * 
-     * @return the property value as a string or {@code null} if the property
-     *         value isn't set
-     */
-    String getValuesAsString();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryResult.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryResult.java
deleted file mode 100644
index 5add3dd..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryResult.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-
-/**
- * Query result.
- */
-public interface QueryResult {
-
-    /**
-     * Returns the list of all properties in this query result.
-     * 
-     * @return all properties, not {@code null}
-     */
-    List<PropertyData<?>> getProperties();
-
-    /**
-     * Returns a property by ID.
-     * <p>
-     * Because repositories are not obligated to add property IDs to their query
-     * result properties, this method might not always work as expected with
-     * some repositories. Use {@link #getPropertyByQueryName(String)} instead.
-     * 
-     * @param id
-     *            the property ID
-     * 
-     * @return the property or {@code null} if the property doesn't exist or
-     *         hasn't been requested
-     */
-    <T> PropertyData<T> getPropertyById(String id);
-
-    /**
-     * Returns a property by query name or alias.
-     * 
-     * @param queryName
-     *            the property query name or alias
-     * 
-     * @return the property or {@code null} if the property doesn't exist or
-     *         hasn't been requested
-     * 
-     */
-    <T> PropertyData<T> getPropertyByQueryName(String queryName);
-
-    /**
-     * Returns a property (single) value by ID.
-     * 
-     * @param id
-     *            the property ID
-     * 
-     * @see #getPropertyById(String)
-     */
-    <T> T getPropertyValueById(String id);
-
-    /**
-     * Returns a property (single) value by query name or alias.
-     * 
-     * @param queryName
-     *            the property query name or alias
-     * 
-     * @return the property value or {@code null} if the property doesn't exist,
-     *         hasn't been requested, or the property value isn't set
-     * 
-     * @see #getPropertyByQueryName(String)
-     */
-    <T> T getPropertyValueByQueryName(String queryName);
-
-    /**
-     * Returns a property multi-value by ID.
-     * 
-     * @param id
-     *            the property ID
-     * 
-     * @return the property value or {@code null} if the property doesn't exist,
-     *         hasn't been requested, or the property value isn't set
-     * 
-     * @see #getPropertyById(String)
-     */
-    <T> List<T> getPropertyMultivalueById(String id);
-
-    /**
-     * Returns a property multi-value by query name or alias.
-     * 
-     * @param queryName
-     *            the property query name or alias
-     * 
-     * @return the property value or {@code null} if the property doesn't exist,
-     *         hasn't been requested, or the property value isn't set
-     * 
-     * @see #getPropertyByQueryName(String)
-     */
-    <T> List<T> getPropertyMultivalueByQueryName(String queryName);
-
-    /**
-     * Returns the allowable actions if they have been requested.
-     * 
-     * @return the allowable actions if they have been requested, {@code null}
-     *         otherwise
-     */
-    AllowableActions getAllowableActions();
-
-    /**
-     * Returns the relationships if they have been requested.
-     * 
-     * @returns the relationships if they have been requested, {@code null}
-     *          otherwise
-     */
-    List<Relationship> getRelationships();
-
-    /**
-     * Returns the renditions if they have been requested.
-     * 
-     * @eturns the rendition if they have been requested, {@code null} otherwise
-     */
-    List<Rendition> getRenditions();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java
deleted file mode 100644
index fcae193..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.net.URI;
-import java.net.URL;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Query Statement.
- * <p>
- * Sample code:
- * 
- * <pre>
- * Calendar cal = ...
- * Folder folder = ...
- * 
- * QueryStatement qs = 
- *   session.createQueryStatement("SELECT ?, ? FROM ? WHERE ? > TIMESTAMP ? AND IN_FOLDER(?) OR ? IN (?)");
- * 
- * qs.setProperty(1, "cmis:document", "cmis:name");
- * qs.setProperty(2, "cmis:document", "cmis:objectId");
- * qs.setType(3, "cmis:document");
- * 
- * qs.setProperty(4, "cmis:document", "cmis:creationDate");
- * qs.setDateTime(5, cal);
- * 
- * qs.setId(6, folder);
- * 
- * qs.setProperty(7, "cmis:document", "cmis:createdBy");
- * qs.setString(8, "bob", "tom", "lisa"); 
- * 
- * String statement = qs.toQueryString();
- * </pre>
- */
-public interface QueryStatement extends Cloneable {
-
-    /**
-     * Sets the designated parameter to the query name of the given type ID.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param typeId
-     *            the type ID
-     */
-    void setType(int parameterIndex, String typeId);
-
-    /**
-     * Sets the designated parameter to the query name of the given type.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param type
-     *            the object type
-     */
-    void setType(int parameterIndex, ObjectType type);
-
-    /**
-     * Sets the designated parameter to the query name of the given property.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param propertyId
-     *            the property ID
-     */
-    void setProperty(int parameterIndex, String typeId, String propertyId);
-
-    /**
-     * Sets the designated parameter to the query name of the given property.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param propertyDefinition
-     *            the property definition
-     */
-    void setProperty(int parameterIndex, PropertyDefinition<?> propertyDefinition);
-
-    /**
-     * Sets the designated parameter to the given number.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param num
-     *            the number
-     */
-    void setNumber(int parameterIndex, Number... num);
-
-    /**
-     * Sets the designated parameter to the given string.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param str
-     *            the string
-     */
-    void setString(int parameterIndex, String... str);
-
-    /**
-     * Sets the designated parameter to the given string. It does not escape
-     * backslashes ('\') in front of '%' and '_'.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param str
-     *            the LIKE string
-     */
-    void setStringLike(int parameterIndex, String str);
-
-    /**
-     * Sets the designated parameter to the given string in a CMIS contains
-     * statement.
-     * <p>
-     * Note that the CMIS specification requires two levels of escaping. The
-     * first level escapes ', ", \ characters to \', \" and \\. The characters
-     * *, ? and - are interpreted as text search operators and are not escaped
-     * on first level. If *, ?, - shall be used as literals, they must be passed
-     * escaped with \*, \? and \- to this method.
-     * <p>
-     * For all statements in a CONTAINS() clause it is required to isolate those
-     * from a query statement. Therefore a second level escaping is performed.
-     * On the second level grammar ", ', - and \ are escaped with a \. See the
-     * spec for further details.
-     * <p>
-     * Summary (input --> first level escaping --> second level escaping and
-     * output): * --> * --> * ? --> ? --> ? - --> - --> - \ --> \\ --> \\\\ (for
-     * any other character following other than * ? -) \* --> \* --> \\* \? -->
-     * \? --> \\? \- --> \- --> \\- ' --> \' --> \\\' " --> \" --> \\\"
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param str
-     *            the CONTAINS string
-     */
-    void setStringContains(int parameterIndex, String str);
-
-    /**
-     * Sets the designated parameter to the given object ID.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param id
-     *            the object ID
-     */
-    void setId(int parameterIndex, ObjectId... id);
-
-    /**
-     * Sets the designated parameter to the given URI.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param uri
-     *            the URI
-     */
-    void setUri(int parameterIndex, URI... uri);
-
-    /**
-     * Sets the designated parameter to the given URL.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param url
-     *            the URL
-     */
-    void setUrl(int parameterIndex, URL... url);
-
-    /**
-     * Sets the designated parameter to the given boolean.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param bool
-     *            the boolean
-     */
-    void setBoolean(int parameterIndex, boolean... bool);
-
-    /**
-     * Sets the designated parameter to the given DateTime value.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value as Calendar object
-     */
-    void setDateTime(int parameterIndex, Calendar... cal);
-
-    /**
-     * Sets the designated parameter to the given DateTime value.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value as Date object
-     */
-    void setDateTime(int parameterIndex, Date... date);
-
-    /**
-     * Sets the designated parameter to the given DateTime value.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value in milliseconds from midnight, January 1,
-     *            1970 UTC.
-     */
-    void setDateTime(int parameterIndex, long... ms);
-
-    /**
-     * Sets the designated parameter to the given DateTime value with the prefix
-     * 'TIMESTAMP '.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value as Calendar object
-     */
-    void setDateTimeTimestamp(int parameterIndex, Calendar... cal);
-
-    /**
-     * Sets the designated parameter to the given DateTime value with the prefix
-     * 'TIMESTAMP '.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value as Date object
-     */
-    void setDateTimeTimestamp(int parameterIndex, Date... date);
-
-    /**
-     * Sets the designated parameter to the given DateTime value with the prefix
-     * 'TIMESTAMP '.
-     * 
-     * @param parameterIndex
-     *            the parameter index (one-based)
-     * @param cal
-     *            the DateTime value in milliseconds from midnight, January 1,
-     *            1970 UTC.
-     */
-    void setDateTimeTimestamp(int parameterIndex, long... ms);
-
-    /**
-     * Returns the query statement.
-     * 
-     * @return the query statement, not {@code null}
-     */
-    String toQueryString();
-
-    /**
-     * Executes the query.
-     * 
-     * @param searchAllVersions
-     *            {@code true} if all document versions should be included in
-     *            the search results, {@code false} if only the latest document
-     *            versions should be included in the search results
-     * 
-     * 
-     * @see Session#query(String, boolean)
-     */
-    ItemIterable<QueryResult> query(boolean searchAllVersions);
-
-    /**
-     * Executes the query.
-     * 
-     * @param searchAllVersions
-     *            {@code true} if all document versions should be included in
-     *            the search results, {@code false} if only the latest document
-     *            versions should be included in the search results
-     * @param context
-     *            the operation context to use
-     * 
-     * @see Session#query(String, boolean, OperationContext)
-     */
-    ItemIterable<QueryResult> query(boolean searchAllVersions, OperationContext context);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java
deleted file mode 100644
index 2c117e2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * CMIS relationship interface.
- * 
- * @cmis 1.0
- */
-public interface Relationship extends CmisObject, RelationshipProperties {
-
-    /**
-     * Gets the source object. If the source object ID is invalid,
-     * {@code null} will be returned.
-     */
-    CmisObject getSource();
-
-    /**
-     * Gets the source object using the given {@link OperationContext}. If the
-     * source object ID is invalid, {@code null} will be returned.
-     */
-    CmisObject getSource(OperationContext context);
-
-    /**
-     * Gets the target object. If the target object ID is invalid,
-     * {@code null} will be returned.
-     */
-    CmisObject getTarget();
-
-    /**
-     * Gets the target object using the given {@link OperationContext}. If the
-     * target object ID is invalid, {@code null} will be returned.
-     */
-    CmisObject getTarget(OperationContext context);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipProperties.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipProperties.java
deleted file mode 100644
index 9f8e017..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipProperties.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Accessors to CMIS relationship properties.
- * 
- * @see CmisObjectProperties
- */
-public interface RelationshipProperties {
-
-    /**
-     * Returns the source ID of this CMIS relationship (CMIS property
-     * {@code cmis:sourceId}).
-     * 
-     * @return the source ID or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the
-     *         property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    ObjectId getSourceId();
-
-    /**
-     * Returns the target ID of this CMIS relationship (CMIS property
-     * {@code cmis:targetId}).
-     * 
-     * @return the target ID or {@code null} if the property hasn't been
-     *         requested, hasn't been provided by the repository, or the
-     *         property value isn't set
-     * 
-     * @cmis 1.0
-     */
-    ObjectId getTargetId();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipType.java
deleted file mode 100644
index 7795f93..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/RelationshipType.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-/**
- * Relationship Object Type.
- * 
- * @cmis 1.0
- */
-public interface RelationshipType extends ObjectType {
-
-    /**
-     * Get the list of object types, allowed as source for relationships of this
-     * type.
-     * 
-     * @return the allowed source types for this relationship type
-     * 
-     * @cmis 1.0
-     */
-    List<ObjectType> getAllowedSourceTypes();
-
-    /**
-     * Get the list of object types, allowed as target for relationships of this
-     * type.
-     * 
-     * @return the allowed target types for this relationship type
-     * 
-     * @cmis 1.0
-     */
-    List<ObjectType> getAllowedTargetTypes();
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Rendition.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Rendition.java
deleted file mode 100644
index 2998e85..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Rendition.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-
-/**
- * Rendition.
- * 
- * @cmis 1.0
- */
-public interface Rendition extends RenditionData {
-
-    /**
-     * Returns the size of the rendition in bytes if available.
-     * 
-     * @return the size of the rendition in bytes or -1 if the size is not
-     *         available
-     */
-    long getLength();
-
-    /**
-     * Returns the height in pixels if the rendition is an image.
-     * 
-     * @return the height in pixels or -1 if the height is not available or the
-     *         rendition is not an image
-     */
-    long getHeight();
-
-    /**
-     * Returns the width in pixels if the rendition is an image.
-     * 
-     * @return the width in pixels or -1 if the width is not available or the
-     *         rendition is not an image
-     */
-    long getWidth();
-
-    /**
-     * Returns the rendition document if the rendition is a stand-alone
-     * document.
-     * 
-     * @return the rendition document or {@code null} if there is no rendition
-     *         document
-     */
-    Document getRenditionDocument();
-
-    /**
-     * Returns the rendition document using the provides
-     * {@link OperationContext} if the rendition is a stand-alone document.
-     * 
-     * @return the rendition document or {@code null} if there is no rendition
-     *         document
-     */
-    Document getRenditionDocument(OperationContext context);
-
-    /**
-     * Returns the content stream of the rendition.
-     * 
-     * @return the content stream of the rendition or {@code null} if the
-     *         rendition has no content
-     */
-    ContentStream getContentStream();
-
-    /**
-     * Returns the content URL of the rendition if the binding supports content
-     * URLs.
-     * 
-     * Depending on the repository and the binding, the server might not return
-     * the content but an error message. Authentication data is not attached.
-     * That is, a user may have to re-authenticate to get the content.
-     * 
-     * @return the content URL of the rendition or {@code null} if the binding
-     *         does not support content URLs
-     */
-    String getContentUrl();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Repository.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Repository.java
deleted file mode 100644
index 391037e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Repository.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-
-/**
- * Represents a repository.
- */
-public interface Repository extends RepositoryInfo {
-
-    /**
-     * Creates a session for this repository.
-     * 
-     * @return the created session object
-     */
-    <T extends Session> T createSession();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SecondaryType.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SecondaryType.java
deleted file mode 100644
index e5dc363..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SecondaryType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-/**
- * Secondary type.
- * 
- * @cmis 1.1
- */
-public interface SecondaryType extends ObjectType {
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
deleted file mode 100644
index 2299ed1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
+++ /dev/null
@@ -1,1166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * A session is a connection to a CMIS repository with a specific user.
- * <p>
- * CMIS itself is stateless. OpenCMIS uses the concept of a session to cache
- * data across calls and to deal with user authentication. The session object is
- * also used as entry point to all CMIS operations and objects. Because a
- * session is only a client side concept, the session object needs not to be
- * closed or released when it's not needed anymore.
- * <p>
- * Not all operations provided by this API might be supported by the connected
- * repository. Either OpenCMIS or the repository will throw an exception if an
- * unsupported operation is called. The capabilities of the repository can be
- * discovered by evaluating the repository info (see
- * {@link #getRepositoryInfo()}).
- * <p>
- * Almost all methods might throw exceptions derived from
- * {@link CmisBaseException} which is a runtime exception. See the CMIS
- * specification for a list of all operations and their exceptions. Note that
- * some incompliant repositories might throw other exception than you expect.
- * <p>
- * Refer to the <a href="http://docs.oasis-open.org/cmis/CMIS/v1.0/os/">CMIS 1.0
- * specification</a> or the <a
- * href="http://docs.oasis-open.org/cmis/CMIS/v1.0/os/">CMIS 1.1
- * specification</a> for details about the domain model, terms, concepts, base
- * types, properties, IDs and query names, query language, etc.
- * </p>
- */
-public interface Session extends Serializable {
-
-    /**
-     * Clears all cached data.
-     */
-    void clear();
-
-    // session context
-
-    /**
-     * Returns the underlying binding object.
-     * 
-     * @return the binding object, not {@code null}
-     */
-    CmisBinding getBinding();
-
-    /**
-     * Returns the current default operation parameters for filtering, paging
-     * and caching.
-     * 
-     * <p>
-     * <em>Please note:</em> The returned object is not thread-safe and should
-     * only be modified right after the session has been created and before the
-     * session object has been used. In order to change the default context in
-     * thread-safe manner, create a new {@link OperationContext} object and use
-     * {@link #setDefaultContext(OperationContext)} to apply it.
-     * </p>
-     * 
-     * @return the default operation context, not {@code null}
-     */
-    OperationContext getDefaultContext();
-
-    /**
-     * Sets the current session parameters for filtering, paging and caching.
-     * 
-     * @param context
-     *            the {@code OperationContext} to be used for the session; if
-     *            {@code null}, a default context is used
-     */
-    void setDefaultContext(OperationContext context);
-
-    /**
-     * Creates a new operation context object.
-     * 
-     * @return the newly created operation context object
-     */
-    OperationContext createOperationContext();
-
-    /**
-     * Creates a new operation context object with the given properties.
-     * 
-     * @param filter
-     *            the property filter, a comma separated string of
-     *            <em>query names</em> or "*" for all properties or {@code null}
-     *            to let the repository determine a set of properties
-     * @param includeAcls
-     *            indicates whether ACLs should be included or not
-     * @param includeAllowableActions
-     *            indicates whether Allowable Actions should be included or not
-     * @param includePolicies
-     *            indicates whether policies should be included or not
-     * @param includeRelationships
-     *            enum that indicates if and which relationships should be
-     *            includes
-     * @param renditionFilter
-     *            the rendition filter or {@code null} for no renditions
-     * @param includePathSegments
-     *            indicates whether path segment or the relative path segment
-     *            should be included or not
-     * @param orderBy
-     *            the object order, a comma-separated list of
-     *            <em>query names</em> and the ascending modifier "ASC" or the
-     *            descending modifier "DESC" for each query name
-     * @param cacheEnabled
-     *            flag that indicates if the object cache should be used
-     * @param maxItemsPerPage
-     *            the max items per batch
-     * 
-     * @return the newly created operation context object
-     * 
-     * @see OperationContext
-     */
-    OperationContext createOperationContext(Set<String> filter, boolean includeAcls, boolean includeAllowableActions,
-            boolean includePolicies, IncludeRelationships includeRelationships, Set<String> renditionFilter,
-            boolean includePathSegments, String orderBy, boolean cacheEnabled, int maxItemsPerPage);
-
-    /**
-     * Creates an object ID from a String.
-     * 
-     * @return the object ID object
-     */
-    ObjectId createObjectId(String id);
-
-    // localization
-
-    /**
-     * Get the current locale to be used for this session.
-     * 
-     * @return the current locale, may be {@code null}
-     */
-    Locale getLocale();
-
-    // services
-
-    /**
-     * Returns the repository info of the repository associated with this
-     * session.
-     * 
-     * @return the repository info, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    RepositoryInfo getRepositoryInfo();
-
-    /**
-     * Gets a factory object that provides methods to create the objects used by
-     * this API.
-     * 
-     * @return the repository info, not {@code null}
-     */
-    ObjectFactory getObjectFactory();
-
-    // types
-
-    /**
-     * Gets the definition of a type.
-     * 
-     * @param typeId
-     *            the ID of the type
-     * 
-     * @return the type definition
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if a type with the given type ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getTypeDefinition(String typeId);
-
-    /**
-     * Gets the definition of a type.
-     * 
-     * @param typeId
-     *            the ID of the type
-     * @param useCache
-     *            specifies if the type definition should be first looked up in
-     *            the type definition cache, if it is set to {@code false} or
-     *            the type definition is not in the cache, the type definition
-     *            is loaded from the repository
-     * 
-     * @return the type definition
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if a type with the given type ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    ObjectType getTypeDefinition(String typeId, boolean useCache);
-
-    /**
-     * Gets the type children of a type.
-     * 
-     * @param typeId
-     *            the type ID or {@code null} to request the base types
-     * @param includePropertyDefinitions
-     *            indicates whether the property definitions should be included
-     *            or not
-     * @return the type iterator, not {@code null}
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if a type with the given type ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<ObjectType> getTypeChildren(String typeId, boolean includePropertyDefinitions);
-
-    /**
-     * Gets the type descendants of a type.
-     * 
-     * @param typeId
-     *            the type ID or {@code null} to request the base types
-     * @param includePropertyDefinitions
-     *            indicates whether the property definitions should be included
-     *            or not
-     * @param depth
-     *            the tree depth, must be greater than 0 or -1 for infinite
-     *            depth
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if a type with the given type ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions);
-
-    /**
-     * Creates a new type.
-     * 
-     * @param type
-     *            the type definition
-     * 
-     * @return the new type definition
-     * 
-     * @cmis 1.1
-     */
-    ObjectType createType(TypeDefinition type);
-
-    /**
-     * Updates an existing type.
-     * 
-     * @param type
-     *            the type definition updates
-     * 
-     * @return the updated type definition
-     * 
-     * @cmis 1.1
-     */
-    ObjectType updateType(TypeDefinition type);
-
-    /**
-     * Deletes a type.
-     * 
-     * @param typeId
-     *            the ID of the type to delete
-     * 
-     * @cmis 1.1
-     */
-    void deleteType(String typeId);
-
-    // navigation
-
-    /**
-     * Gets the root folder of the repository.
-     * 
-     * @return the root folder object, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Folder getRootFolder();
-
-    /**
-     * Gets the root folder of the repository with the given
-     * {@link OperationContext}.
-     * 
-     * @return the root folder object, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Folder getRootFolder(OperationContext context);
-
-    /**
-     * Returns all checked out documents.
-     * 
-     * @see Folder#getCheckedOutDocs()
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<Document> getCheckedOutDocs();
-
-    /**
-     * Returns all checked out documents with the given {@link OperationContext}
-     * .
-     * 
-     * @see Folder#getCheckedOutDocs(OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<Document> getCheckedOutDocs(OperationContext context);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the cache is turned off per default {@link OperationContext}, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param objectId
-     *            the object ID
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @see #getObject(String)
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObject(ObjectId objectId);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the given {@link OperationContext} has caching turned off, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param objectId
-     *            the object ID
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @see #getObject(String, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObject(ObjectId objectId, OperationContext context);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the cache is turned off per default {@link OperationContext}, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param objectId
-     *            the object ID
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @see #getObject(ObjectId)
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObject(String objectId);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the given {@link OperationContext} has caching turned off, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param objectId
-     *            the object ID
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @see #getObject(ObjectId, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObject(String objectId, OperationContext context);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the cache is turned off per default {@link OperationContext}, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param path
-     *            the object path
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObjectByPath(String path);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the given {@link OperationContext} has caching turned off, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param path
-     *            the object path
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObjectByPath(String path, OperationContext context);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the cache is turned off per default {@link OperationContext}, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param parentPath
-     *            the path of the parent folder
-     * @param name
-     *            the (path segment) name of the object in the folder
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObjectByPath(String parentPath, String name);
-
-    /**
-     * Returns a CMIS object from the session cache. If the object is not in the
-     * cache or the given {@link OperationContext} has caching turned off, it
-     * will load the object from the repository and puts it into the cache.
-     * <p>
-     * This method might return a stale object if the object has been found in
-     * the cache and has been changed in or removed from the repository. Use
-     * {@link CmisObject#refresh()} and {@link CmisObject#refreshIfOld(long)} to
-     * update the object if necessary.
-     * 
-     * @param parentPath
-     *            the path of the parent folder
-     * @param name
-     *            the (path segment) name of the object in the folder
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the requested object
-     * 
-     * @throws CmisObjectNotFoundException
-     *             if an object with the given ID doesn't exist
-     * 
-     * @cmis 1.0
-     */
-    CmisObject getObjectByPath(String parentPath, String name, OperationContext context);
-
-    /**
-     * Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(ObjectId objectId);
-
-    /**
-     * Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(ObjectId objectId, OperationContext context);
-
-    /**
-     * Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * @param major
-     *            if {@code true} the latest major version will be returned,
-     *            otherwise the very last version will be returned
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(ObjectId objectId, boolean major, OperationContext context);
-
-    /**
-     * /** Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(String objectId);
-
-    /**
-     * Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(String objectId, OperationContext context);
-
-    /**
-     * Returns the latest version in a version series.
-     * 
-     * @param objectId
-     *            the document ID of an arbitrary version in the version series
-     * @param major
-     *            if {@code true} the latest major version will be returned,
-     *            otherwise the very last version will be returned
-     * @param context
-     *            the {@link OperationContext} to use
-     * 
-     * @return the latest document version
-     * 
-     * @cmis 1.0
-     */
-    Document getLatestDocumentVersion(String objectId, boolean major, OperationContext context);
-
-    /**
-     * Removes the given object from the cache.
-     * 
-     * @param objectId
-     *            object ID
-     * 
-     * @see #removeObjectFromCache(String)
-     */
-    void removeObjectFromCache(ObjectId objectId);
-
-    /**
-     * Removes the given object from the cache.
-     * 
-     * @param objectId
-     *            object ID
-     */
-    void removeObjectFromCache(String objectId);
-
-    // discovery
-
-    /**
-     * Sends a query to the repository. Refer to the CMIS specification for the
-     * CMIS query language syntax.
-     * 
-     * @param statement
-     *            the query statement (CMIS query language)
-     * @param searchAllVersions
-     *            specifies whether non-latest document versions should be
-     *            included or not, {@code true} searches all document versions,
-     *            {@code false} only searches latest document versions
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<QueryResult> query(String statement, boolean searchAllVersions);
-
-    /**
-     * Sends a query to the repository using the given {@link OperationContext}.
-     * (See CMIS spec "2.1.10 Query".)
-     * 
-     * @param statement
-     *            the query statement (CMIS query language)
-     * @param searchAllVersions
-     *            specifies whether non-latest document versions should be
-     *            included or not, {@code true} searches all document versions,
-     *            {@code false} only searches latest document versions
-     * @param context
-     *            the operation context to use
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<QueryResult> query(String statement, boolean searchAllVersions, OperationContext context);
-
-    /**
-     * Builds a CMIS query and returns the query results as an iterator of
-     * {@link CmisObject} objects.
-     * 
-     * @param type
-     *            the ID of the object type
-     * @param where
-     *            the WHERE part of the query
-     * @param searchAllVersions
-     *            specifies whether non-latest document versions should be
-     *            included or not, {@code true} searches all document versions,
-     *            {@code false} only searches latest document versions
-     * @param context
-     *            the operation context to use
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<CmisObject> queryObjects(String typeId, String where, boolean searchAllVersions,
-            OperationContext context);
-
-    /**
-     * Creates a query statement.
-     * <p>
-     * Sample code:
-     * 
-     * <pre>
-     * QueryStatement stmt = session
-     *         .createQueryStatement(&quot;SELECT ?, ? FROM ? WHERE ? &gt; TIMESTAMP ? AND IN_FOLDER(?) OR ? IN (?)&quot;);
-     * </pre>
-     * 
-     * @param statement
-     *            the query statement with placeholders ('?'), see
-     *            {@link QueryStatement} for details
-     * 
-     * @return a new query statement object
-     * 
-     * @see QueryStatement
-     * 
-     * @cmis 1.0
-     */
-    QueryStatement createQueryStatement(String statement);
-
-    /**
-     * Creates a query statement for a query of one primary type joined by zero
-     * or more secondary types.
-     * <p>
-     * Sample code:
-     * 
-     * <pre>
-     * List&lt;String&gt; select = new ArrayList&lt;String&gt;();
-     * select.add(&quot;cmis:name&quot;);
-     * select.add(&quot;SecondaryStringProp&quot;);
-     * 
-     * Map&lt;String, String&gt; from = new HashMap&lt;String, String&gt;();
-     * from.put(&quot;d&quot;, &quot;cmis:document&quot;);
-     * from.put(&quot;s&quot;, &quot;MySecondaryType&quot;);
-     * 
-     * String where = &quot;d.cmis:name LIKE ?&quot;;
-     * 
-     * List&lt;String&gt; orderBy = new ArrayList&lt;String&gt;();
-     * orderBy.add(&quot;cmis:name&quot;);
-     * orderBy.add(&quot;SecondaryIntegerProp&quot;);
-     * 
-     * QueryStatement stmt = session.createQueryStatement(select, from, where, orderBy);
-     * </pre>
-     * 
-     * Generates something like this:
-     * 
-     * <pre>
-     * SELECT d.cmis:name,s.SecondaryStringProp FROM cmis:document AS d JOIN MySecondaryType AS s ON d.cmis:objectId=s.cmis:objectId WHERE d.cmis:name LIKE ? ORDER BY d.cmis:name,s.SecondaryIntegerProp
-     * </pre>
-     * 
-     * @param selectPropertyIds
-     *            the property IDs in the SELECT statement, if {@code null} all
-     *            properties are selected
-     * @param fromTypes
-     *            a Map of type aliases (keys) and type IDs (values), the Map
-     *            must contain exactly one primary type and zero or more
-     *            secondary types
-     * @param whereClause
-     *            an optional WHERE clause with placeholders ('?'), see
-     *            {@link QueryStatement} for details
-     * @param orderByPropertyIds
-     *            an optional list of properties IDs for the ORDER BY clause
-     * 
-     * @return a new query statement object
-     * 
-     * @see QueryStatement
-     * 
-     * @cmis 1.0
-     */
-    QueryStatement createQueryStatement(Collection<String> selectPropertyIds, Map<String, String> fromTypes,
-            String whereClause, List<String> orderByPropertyIds);
-
-    /**
-     * Returns the content changes.
-     * 
-     * @param changeLogToken
-     *            the change log token to start from or {@code null} to start
-     *            from the first available event in the repository
-     * @param includeProperties
-     *            indicates whether changed properties should be included in the
-     *            result or not
-     * @param maxNumItems
-     *            maximum numbers of events
-     * 
-     * @return the change events
-     * 
-     * @cmis 1.0
-     */
-    ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems);
-
-    /**
-     * Returns the content changes.
-     * 
-     * @param changeLogToken
-     *            the change log token to start from or {@code null} to start
-     *            from the first available event in the repository
-     * @param includeProperties
-     *            indicates whether changed properties should be included in the
-     *            result or not
-     * @param maxNumItems
-     *            maximum numbers of events
-     * @param context
-     *            the OperationContext
-     * 
-     * @return the change events
-     * 
-     * @cmis 1.0
-     */
-    ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems,
-            OperationContext context);
-
-    /**
-     * Returns an iterator of content changes, starting from the given change
-     * log token to the latest entry in the change log.
-     * <p>
-     * Note: Paging and skipping are not supported.
-     * 
-     * @param changeLogToken
-     *            the change log token to start from or {@code null} to start
-     *            from the first available event in the repository
-     * @param includeProperties
-     *            indicates whether changed properties should be included in the
-     *            result or not
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<ChangeEvent> getContentChanges(String changeLogToken, boolean includeProperties);
-
-    /**
-     * Returns an iterator of content changes, starting from the given change
-     * log token to the latest entry in the change log.
-     * <p>
-     * Note: Paging and skipping are not supported.
-     * 
-     * @param changeLogToken
-     *            the change log token to start from or {@code null} to start
-     *            from the first available event in the repository
-     * @param includeProperties
-     *            indicates whether changed properties should be included in the
-     *            result or not
-     * @param context
-     *            the OperationContext
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<ChangeEvent> getContentChanges(final String changeLogToken, final boolean includeProperties,
-            OperationContext context);
-
-    /**
-     * Returns the latest change log token.
-     * <p>
-     * In contrast to the repository info, this change log token is not cached.
-     * This method requests the token from the repository every single time it
-     * is called.
-     * 
-     * @return the latest change log token or {@code null} if the repository
-     *         doesn't provide one
-     * 
-     * @cmis 1.0
-     */
-    String getLatestChangeLogToken();
-
-    // create
-
-    /**
-     * Creates a new document.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return the object ID of the new document
-     * 
-     * @see Folder#createDocument(Map, ContentStream, VersioningState, List,
-     *      List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces);
-
-    /**
-     * Creates a new document.
-     * 
-     * The stream in {@code contentStream} is consumed but not closed by this
-     * method.
-     * 
-     * @return the object ID of the new document
-     * 
-     * @see Folder#createDocument(Map, ContentStream, VersioningState, List,
-     *      List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
-            VersioningState versioningState);
-
-    /**
-     * Creates a new document from a source document.
-     * 
-     * @return the object ID of the new document
-     * 
-     * @see Folder#createDocumentFromSource(ObjectId, Map, VersioningState,
-     *      List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces);
-
-    /**
-     * Creates a new document from a source document.
-     * 
-     * @return the object ID of the new document
-     * 
-     * @see Folder#createDocumentFromSource(ObjectId, Map, VersioningState,
-     *      List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
-            VersioningState versioningState);
-
-    /**
-     * Creates a new folder.
-     * 
-     * @return the object ID of the new folder
-     * 
-     * @see Folder#createFolder(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces);
-
-    /**
-     * Creates a new folder.
-     * 
-     * @return the object ID of the new folder
-     * 
-     * @see Folder#createFolder(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createFolder(Map<String, ?> properties, ObjectId folderId);
-
-    /**
-     * Creates a new policy.
-     * 
-     * @return the object ID of the new policy
-     * 
-     * @see Folder#createPolicy(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces);
-
-    /**
-     * Creates a new policy.
-     * 
-     * @return the object ID of the new policy
-     * 
-     * @see Folder#createPolicy(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId);
-
-    /**
-     * Creates a new item.
-     * 
-     * @return the object ID of the new policy
-     * 
-     * @see Folder#createItem(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.1
-     */
-    ObjectId createItem(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces);
-
-    /**
-     * Creates a new item.
-     * 
-     * @return the object ID of the new item
-     * 
-     * @see Folder#createItem(Map, List, List, List, OperationContext)
-     * 
-     * @cmis 1.1
-     */
-    ObjectId createItem(Map<String, ?> properties, ObjectId folderId);
-
-    /**
-     * Creates a new relationship.
-     * 
-     * @return the object ID of the new relationship
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces);
-
-    /**
-     * Creates a new relationship.
-     * 
-     * @return the object ID of the new relationship
-     * 
-     * @cmis 1.0
-     */
-    ObjectId createRelationship(Map<String, ?> properties);
-
-    /**
-     * Fetches the relationships from or to an object from the repository.
-     * 
-     * @cmis 1.0
-     */
-    ItemIterable<Relationship> getRelationships(ObjectId objectId, boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, ObjectType type, OperationContext context);
-
-    /**
-     * Updates multiple objects in one request.
-     * 
-     * @cmis 1.0
-     */
-    List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(List<CmisObject> objects, Map<String, ?> properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds);
-
-    /**
-     * Deletes an object and, if it is a document, all versions in the version
-     * series.
-     * 
-     * @param objectId
-     *            the ID of the object
-     * 
-     * @cmis 1.0
-     */
-    void delete(ObjectId objectId);
-
-    /**
-     * Deletes an object.
-     * 
-     * @param objectId
-     *            the ID of the object
-     * @param allVersions
-     *            if this object is a document this parameter defines if only
-     *            this version or all versions should be deleted
-     * 
-     * @cmis 1.0
-     */
-    void delete(ObjectId objectId, boolean allVersions);
-
-    /**
-     * Retrieves the main content stream of a document.
-     * 
-     * @param docId
-     *            the ID of the document
-     * 
-     * @return the content stream or {@code null} if the document has no content
-     *         stream
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream(ObjectId docId);
-
-    /**
-     * Retrieves the content stream of a document.
-     * 
-     * @param docId
-     *            the ID of the document
-     * @param streamId
-     *            the stream ID
-     * @param offset
-     *            the offset of the stream or {@code null} to read the stream
-     *            from the beginning
-     * @param length
-     *            the maximum length of the stream or {@code null} to read to
-     *            the end of the stream
-     * 
-     * @return the content stream or {@code null} if the document has no content
-     *         stream
-     * 
-     * @cmis 1.0
-     */
-    ContentStream getContentStream(ObjectId docId, String streamId, BigInteger offset, BigInteger length);
-
-    /**
-     * Fetches the ACL of an object from the repository.
-     * 
-     * @param objectId
-     *            the ID the object
-     * @param onlyBasicPermissions
-     *            if {@code true} the repository should express the ACL only
-     *            with the basic permissions defined in the CMIS specification;
-     *            if {@code false} the repository can express the ACL with basic
-     *            and repository specific permissions
-     * 
-     * @return the ACL of the object
-     * 
-     * @cmis 1.0
-     */
-    Acl getAcl(ObjectId objectId, boolean onlyBasicPermissions);
-
-    /**
-     * Applies ACL changes to an object and dependent objects.
-     * 
-     * Only direct ACEs can be added and removed.
-     * 
-     * @param objectId
-     *            the ID the object
-     * @param addAces
-     *            list of ACEs to be added or {@code null} if no ACEs should be
-     *            added
-     * @param removeAces
-     *            list of ACEs to be removed or {@code null} if no ACEs should
-     *            be removed
-     * @param aclPropagation
-     *            value that defines the propagation of the ACE changes;
-     *            {@code null} is equal to
-     *            {@link AclPropagation#REPOSITORYDETERMINED}
-     * 
-     * @return the new ACL of the object
-     * 
-     * @cmis 1.0
-     */
-    Acl applyAcl(ObjectId objectId, List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation);
-
-    /**
-     * Removes the direct ACEs of an object and sets the provided ACEs.
-     * 
-     * The changes are local to the given object and are not propagated to
-     * dependent objects.
-     * 
-     * @param objectId
-     *            the ID the object
-     * @param aces
-     *            list of ACEs to be set
-     * 
-     * @return the new ACL of the object
-     * 
-     * @cmis 1.0
-     */
-    Acl setAcl(ObjectId objectId, List<Ace> aces);
-
-    /**
-     * Applies a set of policies to an object.
-     * 
-     * This operation is not atomic. If it fails some policies might already be
-     * applied.
-     * 
-     * @param objectId
-     *            the ID the object
-     * @param policyIds
-     *            the IDs of the policies to be applied
-     * 
-     * @cmis 1.0
-     */
-    void applyPolicy(ObjectId objectId, ObjectId... policyIds);
-
-    /**
-     * Removes a set of policies from an object.
-     * 
-     * This operation is not atomic. If it fails some policies might already be
-     * removed.
-     * 
-     * @param objectId
-     *            the ID the object
-     * @param policyIds
-     *            the IDs of the policies to be removed
-     * 
-     * @cmis 1.0
-     */
-    void removePolicy(ObjectId objectId, ObjectId... policyIds);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SessionFactory.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SessionFactory.java
deleted file mode 100644
index 598bfb2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/SessionFactory.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Entry point into the OpenCMIS Client API.
- * <p>
- * There might be different ways to get a {@code SessionFactory} instance. For
- * example it could be retrieved via a J2EE JNDI lookup or an OSGi service
- * lookup. Clients outside a container might use the
- * {@link org.apache.chemistry.opencmis.client.SessionFactoryFinder} class.
- * <p>
- * The entries of the parameter map are defined by
- * {@link org.apache.chemistry.opencmis.commons.SessionParameter} class which is
- * part of the commons package. Parameters specify connection settings (user
- * name, authentication, connection URL, binding type, etc.).
- * <p>
- * The {@link Session} class which is constructed is either the {@code session}
- * base class which is the default implementation or it can be derived from that
- * implementing special behavior for the session.
- * <p>
- * Sample code:
- * <p>
- * 
- * <pre>
- * SessionFactory factory = ...
- * 
- * Map&lt;String, String> parameter = new HashMap&lt;String, String>();
- * 
- * parameter.put(SessionParameter.USER, "Otto");
- * parameter.put(SessionParameter.PASSWORD, "****");
- * 
- * parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost/cmis/atom");
- * parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
- * parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
- * ...
- * Session session = factory.createSession(parameter);
- * </pre>
- * 
- * @see org.apache.chemistry.opencmis.client.SessionFactoryFinder
- * @see org.apache.chemistry.opencmis.commons.SessionParameter
- * @see org.apache.chemistry.opencmis.client.SessionParameterMap
- * @see Session
- */
-public interface SessionFactory {
-
-    /**
-     * Creates a new session.
-     * 
-     * @param parameters
-     *            a map of name/value pairs with parameters for the session, see
-     *            {@link org.apache.chemistry.opencmis.commons.SessionParameter}
-     *            for parameters supported by OpenCMIS
-     * 
-     * 
-     * @return a {@link Session} connected to the CMIS repository
-     * 
-     * @see org.apache.chemistry.opencmis.commons.SessionParameter
-     */
-    Session createSession(Map<String, String> parameters);
-
-    /**
-     * Returns all repositories that are available at the endpoint.
-     * 
-     * 
-     * @param parameters
-     *            a map of name/value pairs with parameters for the session, see
-     *            {@link org.apache.chemistry.opencmis.commons.SessionParameter}
-     *            for parameters supported by OpenCMIS, the parameter
-     *            {@link org.apache.chemistry.opencmis.commons.SessionParameter.REPOSITORY_ID}
-     *            should not be set
-     * 
-     * @return a list of all available repositories
-     * 
-     * @see org.apache.chemistry.opencmis.commons.SessionParameter
-     */
-    List<Repository> getRepositories(Map<String, String> parameters);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Tree.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Tree.java
deleted file mode 100644
index 0ed3c6b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Tree.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.api;
-
-import java.util.List;
-
-/**
- * Basic tree structure.
- */
-public interface Tree<T> {
-
-    /**
-     * Returns the item on this level.
-     */
-    T getItem();
-
-    /**
-     * Returns the children.
-     */
-    List<Tree<T>> getChildren();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/package.html b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/package.html
deleted file mode 100644
index 5445582..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/package.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-<!--
- JavaDoc package.html
--->
-</head>
-<body>
-The OpenCMIS Client API.
-<p>
-This package provides interfaces and classes for accessing CMIS repositories
-via an object oriented API.
-<br/>
-Interfaces in this package are implemented by the OpenCMIS runtime and must not be
-implemented by applications.
-The OpenCMIS client API depends on the OpenCMIS commons API. 
-</p>
-<p>
-To use the OpenCMIS client API, a client needs to get a reference to the entry interface
-{@link org.apache.chemistry.opencmis.client.api.SessionFactory} and then connect to the 
-CMIS repository by obtaining a session to the repository from  the {@code SessionFactory}.
-The way to get a {@code SessionFactory} instance depends on the clients runtime:
-Usually this will be done via JNDI lookup in a J2EE runtime or a service lookup in a OSGi Runtime.
-</p>
-<p>
-All operations that require a round-trip to the back-end will do that synchronously,
-causing the client to be blocked during that call.</p>
-
-<h2>Usage of the API</h2>
-<p>
-See <a href="http://chemistry.apache.org/java/developing/guide.html">OpenCMIS Client API Developer's Guide</a>.
-</p>
-<p>
-@see org.apache.chemistry.opencmis.client.api.SessionFactory
-@see org.apache.chemistry.opencmis.client.api.Session
-</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionFactoryFinderTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionFactoryFinderTest.java
deleted file mode 100644
index 086fcf2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionFactoryFinderTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client;
-
-import org.junit.Test;
-
-public class SessionFactoryFinderTest {
-
-    @Test(expected = ClassNotFoundException.class)
-    public void testFind() throws ClassNotFoundException, InstantiationException {
-        SessionFactoryFinder.find();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionParameterMapTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionParameterMapTest.java
deleted file mode 100644
index 991fad9..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/test/java/org/apache/chemistry/opencmis/client/SessionParameterMapTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocketFactory;
-import javax.xml.ws.handler.HandlerResolver;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.junit.Test;
-import org.w3c.dom.Element;
-
-public class SessionParameterMapTest {
-
-    @Test
-    public void testMap() throws IOException {
-        SessionParameterMap map = new SessionParameterMap();
-
-        // bindings
-        map.setAtomPubBindingUrl("http://atomoub/url");
-        assertEquals(BindingType.ATOMPUB.value(), map.get(SessionParameter.BINDING_TYPE));
-        assertEquals("http://atomoub/url", map.get(SessionParameter.ATOMPUB_URL));
-
-        map.setWebServicesBindingUrl("http://webservices/url");
-        assertEquals(BindingType.WEBSERVICES.value(), map.get(SessionParameter.BINDING_TYPE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_OBJECT_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_VERSIONING_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_ACL_SERVICE));
-        assertEquals("http://webservices/url", map.get(SessionParameter.WEBSERVICES_POLICY_SERVICE));
-
-        map.setBrowserBindingUrl("http://browser/url");
-        assertEquals(BindingType.BROWSER.value(), map.get(SessionParameter.BINDING_TYPE));
-        assertEquals("http://browser/url", map.get(SessionParameter.BROWSER_URL));
-
-        map.setLocalBindingClass(TestLocalSessionFactory.class);
-        assertEquals(BindingType.LOCAL.value(), map.get(SessionParameter.BINDING_TYPE));
-        assertEquals(TestLocalSessionFactory.class.getName(), map.get(SessionParameter.LOCAL_FACTORY));
-
-        map.setAtomPubBindingUrl(null);
-        assertNull(map.get(SessionParameter.BINDING_TYPE));
-        assertNull(map.get(SessionParameter.ATOMPUB_URL));
-
-        // user and password
-        map.setUserAndPassword("user", "password");
-        assertEquals("user", map.get(SessionParameter.USER));
-        assertEquals("password", map.get(SessionParameter.PASSWORD));
-
-        map.setUserAndPassword(null, "password");
-        assertFalse(map.containsKey(SessionParameter.USER));
-        assertFalse(map.containsKey(SessionParameter.PASSWORD));
-
-        map.setProxyUserAndPassword("user", "password");
-        assertEquals("user", map.get(SessionParameter.PROXY_USER));
-        assertEquals("password", map.get(SessionParameter.PROXY_PASSWORD));
-
-        // repository id
-        map.setRepositoryId("repid");
-        assertEquals("repid", map.get(SessionParameter.REPOSITORY_ID));
-        map.setRepositoryId(null);
-        assertFalse(map.containsKey(SessionParameter.REPOSITORY_ID));
-
-        // authentication
-        map.setAuthenticationProvider(TestAuthenticationProvider.class);
-        assertEquals(TestAuthenticationProvider.class.getName(),
-                map.get(SessionParameter.AUTHENTICATION_PROVIDER_CLASS));
-
-        map.setAuthenticationProvider(null);
-        assertNull(map.get(SessionParameter.AUTHENTICATION_PROVIDER_CLASS));
-
-        map.setNtlmAuthentication("user", "password");
-        assertEquals("user", map.get(SessionParameter.USER));
-        assertEquals("password", map.get(SessionParameter.PASSWORD));
-        assertEquals("false", map.get(SessionParameter.AUTH_HTTP_BASIC));
-        assertEquals("false", map.get(SessionParameter.AUTH_SOAP_USERNAMETOKEN));
-        assertNotNull(map.get(SessionParameter.AUTHENTICATION_PROVIDER_CLASS));
-
-        map.setBasicAuthentication("user1", "password1");
-        assertEquals("user1", map.get(SessionParameter.USER));
-        assertEquals("password1", map.get(SessionParameter.PASSWORD));
-        assertEquals("true", map.get(SessionParameter.AUTH_HTTP_BASIC));
-        assertEquals("false", map.get(SessionParameter.AUTH_SOAP_USERNAMETOKEN));
-
-        map.setUsernameTokenAuthentication("user2", "password2", true);
-        assertEquals("user2", map.get(SessionParameter.USER));
-        assertEquals("password2", map.get(SessionParameter.PASSWORD));
-        assertEquals("true", map.get(SessionParameter.AUTH_HTTP_BASIC));
-        assertEquals("true", map.get(SessionParameter.AUTH_SOAP_USERNAMETOKEN));
-
-        map.setNoAuthentication();
-        assertEquals("false", map.get(SessionParameter.AUTH_HTTP_BASIC));
-        assertEquals("false", map.get(SessionParameter.AUTH_SOAP_USERNAMETOKEN));
-
-        // locale
-        map.setLocale(new Locale("de", "DE"));
-        assertEquals("de", map.get(SessionParameter.LOCALE_ISO639_LANGUAGE));
-        assertEquals("DE", map.get(SessionParameter.LOCALE_ISO3166_COUNTRY));
-
-        // HTTP related
-        map.setCookies(true);
-        assertEquals("true", map.get(SessionParameter.COOKIES));
-        map.setCookies(false);
-        assertEquals("false", map.get(SessionParameter.COOKIES));
-
-        map.setCompression(true);
-        assertEquals("true", map.get(SessionParameter.COMPRESSION));
-
-        map.setClientCompression(false);
-        assertEquals("false", map.get(SessionParameter.CLIENT_COMPRESSION));
-
-        map.setConnectionTimeout(12345);
-        assertEquals("12345", map.get(SessionParameter.CONNECT_TIMEOUT));
-
-        map.setReadTimeout(98765);
-        assertEquals("98765", map.get(SessionParameter.READ_TIMEOUT));
-
-        // header
-        map.addHeader(null, "value");
-        map.addHeader("header0", "value0");
-        map.addHeader("header1", "value1");
-        map.addHeader("header2", "value2");
-
-        assertEquals("header0:value0", map.get(SessionParameter.HEADER + ".0"));
-        assertEquals("header1:value1", map.get(SessionParameter.HEADER + ".1"));
-        assertEquals("header2:value2", map.get(SessionParameter.HEADER + ".2"));
-
-        // store and load
-        File tmp = File.createTempFile("session", "parameters");
-        try {
-            map.store(tmp);
-
-            SessionParameterMap map2 = new SessionParameterMap();
-            map2.load(tmp);
-
-            assertEquals(map.size(), map2.size());
-            for (String key : map.keySet()) {
-                assertEquals(map.get(key), map2.get(key));
-            }
-        } finally {
-            tmp.delete();
-        }
-
-        // parse
-        String parameters = map.toString();
-        SessionParameterMap map2 = new SessionParameterMap();
-        map2.parse(parameters);
-
-        assertEquals(map.size(), map2.size());
-        for (String key : map.keySet()) {
-            assertEquals(map.get(key), map2.get(key));
-        }
-    }
-
-    private class TestAuthenticationProvider implements AuthenticationProvider {
-
-        private static final long serialVersionUID = 1L;
-
-        public Map<String, List<String>> getHTTPHeaders(String url) {
-            return null;
-        }
-
-        public Element getSOAPHeaders(Object portObject) {
-            return null;
-        }
-
-        public HandlerResolver getHandlerResolver() {
-            return null;
-        }
-
-        public SSLSocketFactory getSSLSocketFactory() {
-            return null;
-        }
-
-        public HostnameVerifier getHostnameVerifier() {
-            return null;
-        }
-
-        public void putResponseHeaders(String url, int statusCode, Map<String, List<String>> headers) {
-        }
-    }
-
-    private class TestLocalSessionFactory implements CmisServiceFactory {
-
-        @Override
-        public void init(Map<String, String> parameters) {
-        }
-
-        @Override
-        public void destroy() {
-        }
-
-        @Override
-        public CmisService getService(CallContext context) {
-            return null;
-        }
-
-        @Override
-        public File getTempDirectory() {
-            return null;
-        }
-
-        @Override
-        public boolean encryptTempFiles() {
-            return false;
-        }
-
-        @Override
-        public int getMemoryThreshold() {
-            return 0;
-        }
-
-        @Override
-        public long getMaxContentSize() {
-            return 0;
-        }
-
-        @Override
-        public TempStoreOutputStream getTempFileOutputStream(String repositoryId) {
-            return null;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/pom.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/pom.xml
deleted file mode 100644
index 0772891..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/pom.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-client-bindings</artifactId>
-    <name>OpenCMIS Client Bindings Implementation</name>
-    <packaging>jar</packaging>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <testResources>
-            <!-- Added to avoid logging in the base project folder and filter log4j.properties  -->
-            <testResource>
-                <directory>src/test/resources</directory>
-                <filtering>true</filtering>
-            </testResource>
-        </testResources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>    
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>    
-                            <goal>manifest</goal>
-                        </goals>   
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                          org.apache.chemistry.opencmis.client.bindings;version=${project.version},
-                          org.apache.chemistry.opencmis.client.bindings.spi.*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                          com.sun.xml.ws.*;version="[2.1.7,3.0)";resolution:=optional,
-                          org.apache.cxf.*;resolution:=optional,
-                          org.apache.http.*;resolution:=optional,
-                          org.apache.axis2.*;resolution:=optional,
-                          *
-                        </Import-Package>
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                    </instructions>
-                </configuration>
-            </plugin>
-            
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>${log4j.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>
-            <scope>test</scope>            
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>${apacheclient.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jvnet.mimepull</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>${mimepull.version}</version>
-            <scope>provided</scope>
-        </dependency> 
-        <dependency>
-            <groupId>com.sun.xml.ws</groupId>
-            <artifactId>jaxws-rt</artifactId>
-            <version>${jaxws-rt.version}</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>stax</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion>	 
-                    <groupId>org.codehaus.woodstox</groupId>	 
-                    <artifactId>wstx-asl</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>junit</groupId>	 
-                    <artifactId>junit</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>org.jvnet</groupId>	 
-                    <artifactId>mimepull</artifactId>	 
-                </exclusion>	 
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxws</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-transports-http</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-jaxws</artifactId>
-            <version>${axis2.version}</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-    
-</project>
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
deleted file mode 100644
index 8171531..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Default factory for a CMIS binding instance.
- */
-public class CmisBindingFactory {
-
-    /** Default CMIS AtomPub binding SPI implementation. */
-    public static final String BINDING_SPI_ATOMPUB = "org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubSpi";
-    /** Default CMIS Web Services binding SPI implementation. */
-    public static final String BINDING_SPI_WEBSERVICES = "org.apache.chemistry.opencmis.client.bindings.spi.webservices.CmisWebServicesSpi";
-    /** Default CMIS Browser binding SPI implementation. */
-    public static final String BINDING_SPI_BROWSER = "org.apache.chemistry.opencmis.client.bindings.spi.browser.CmisBrowserBindingSpi";
-    /** Default CMIS local binding SPI implementation. */
-    public static final String BINDING_SPI_LOCAL = "org.apache.chemistry.opencmis.client.bindings.spi.local.CmisLocalSpi";
-
-    /** Default type definition cache class */
-    public static final String DEFAULT_TYPE_DEFINITION_CACHE_CLASS = "org.apache.chemistry.opencmis.client.bindings.impl.TypeDefinitionCacheImpl";
-    /** Default HTTP invoker class */
-    public static final String DEFAULT_HTTP_INVOKER = "org.apache.chemistry.opencmis.client.bindings.spi.http.DefaultHttpInvoker";
-    /** Standard authentication provider class. */
-    public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
-    /** NTLM authentication provider class. */
-    public static final String NTLM_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
-
-    private Map<String, String> defaults;
-
-    /**
-     * Constructor.
-     */
-    public CmisBindingFactory() {
-        defaults = createNewDefaultParameters();
-    }
-
-    /**
-     * Creates a new factory instance.
-     */
-    public static CmisBindingFactory newInstance() {
-        return new CmisBindingFactory();
-    }
-
-    /**
-     * Returns the default session parameters.
-     */
-    public Map<String, String> getDefaultSessionParameters() {
-        return defaults;
-    }
-
-    /**
-     * Sets the default session parameters.
-     */
-    public void setDefaultSessionParameters(Map<String, String> sessionParameters) {
-        if (sessionParameters == null) {
-            defaults = createNewDefaultParameters();
-        } else {
-            defaults = sessionParameters;
-        }
-    }
-
-    /**
-     * Creates a CMIS binding instance. A binding class has to be provided in
-     * the session parameters.
-     */
-    public CmisBinding createCmisBinding(Map<String, String> sessionParameters) {
-        return createCmisBinding(sessionParameters, null, null);
-    }
-
-    /**
-     * Creates a CMIS binding instance. A binding class has to be provided in
-     * the session parameters.
-     */
-    public CmisBinding createCmisBinding(Map<String, String> sessionParameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        checkSessionParameters(sessionParameters, true);
-
-        addDefaultParameters(sessionParameters);
-
-        return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
-    }
-
-    /**
-     * Creates a default CMIS AtomPub binding instance.
-     */
-    public CmisBinding createCmisAtomPubBinding(Map<String, String> sessionParameters) {
-        return createCmisAtomPubBinding(sessionParameters, null, null);
-    }
-
-    /**
-     * Creates a default CMIS AtomPub binding instance with a custom
-     * authentication provider.
-     */
-    public CmisBinding createCmisAtomPubBinding(Map<String, String> sessionParameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        checkSessionParameters(sessionParameters, false);
-
-        sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_ATOMPUB);
-        if (!sessionParameters.containsKey(SessionParameter.HTTP_INVOKER_CLASS)) {
-            sessionParameters.put(SessionParameter.HTTP_INVOKER_CLASS, DEFAULT_HTTP_INVOKER);
-        }
-        if (authenticationProvider == null) {
-            if (!sessionParameters.containsKey(SessionParameter.AUTHENTICATION_PROVIDER_CLASS)) {
-                sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
-            }
-        }
-        if (typeDefCache == null) {
-            if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
-                sessionParameters
-                        .put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
-            }
-        }
-        if (!sessionParameters.containsKey(SessionParameter.AUTH_HTTP_BASIC)) {
-            sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
-        }
-        sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "false");
-        addDefaultParameters(sessionParameters);
-
-        check(sessionParameters, SessionParameter.ATOMPUB_URL);
-
-        return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
-    }
-
-    /**
-     * Creates a default CMIS Web Services binding instance.
-     */
-    public CmisBinding createCmisWebServicesBinding(Map<String, String> sessionParameters) {
-        return createCmisWebServicesBinding(sessionParameters, null, null);
-    }
-
-    /**
-     * Creates a default CMIS Web Services binding instance with a custom
-     * authentication provider.
-     */
-    public CmisBinding createCmisWebServicesBinding(Map<String, String> sessionParameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        checkSessionParameters(sessionParameters, false);
-
-        sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_WEBSERVICES);
-        if (!sessionParameters.containsKey(SessionParameter.HTTP_INVOKER_CLASS)) {
-            sessionParameters.put(SessionParameter.HTTP_INVOKER_CLASS, DEFAULT_HTTP_INVOKER);
-        }
-        if (authenticationProvider == null) {
-            if (!sessionParameters.containsKey(SessionParameter.AUTHENTICATION_PROVIDER_CLASS)) {
-                sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
-            }
-        }
-        if (typeDefCache == null) {
-            if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
-                sessionParameters
-                        .put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
-            }
-        }
-        if (!sessionParameters.containsKey(SessionParameter.AUTH_SOAP_USERNAMETOKEN)) {
-            sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "true");
-        }
-        if (!sessionParameters.containsKey(SessionParameter.AUTH_HTTP_BASIC)) {
-            sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
-        }
-        addDefaultParameters(sessionParameters);
-
-        check(sessionParameters, SessionParameter.WEBSERVICES_ACL_SERVICE,
-                SessionParameter.WEBSERVICES_ACL_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_DISCOVERY_SERVICE,
-                SessionParameter.WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_MULTIFILING_SERVICE,
-                SessionParameter.WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_NAVIGATION_SERVICE,
-                SessionParameter.WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_OBJECT_SERVICE,
-                SessionParameter.WEBSERVICES_OBJECT_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_POLICY_SERVICE,
-                SessionParameter.WEBSERVICES_POLICY_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE,
-                SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_REPOSITORY_SERVICE,
-                SessionParameter.WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT);
-        check(sessionParameters, SessionParameter.WEBSERVICES_VERSIONING_SERVICE,
-                SessionParameter.WEBSERVICES_VERSIONING_SERVICE_ENDPOINT);
-
-        return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
-    }
-
-    /**
-     * Creates a default CMIS Browser binding instance.
-     */
-    public CmisBinding createCmisBrowserBinding(Map<String, String> sessionParameters) {
-        return createCmisBrowserBinding(sessionParameters, null, null);
-    }
-
-    /**
-     * Creates a default CMIS Browser binding instance with a custom
-     * authentication provider.
-     */
-    public CmisBinding createCmisBrowserBinding(Map<String, String> sessionParameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        checkSessionParameters(sessionParameters, false);
-
-        sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_BROWSER);
-        if (!sessionParameters.containsKey(SessionParameter.HTTP_INVOKER_CLASS)) {
-            sessionParameters.put(SessionParameter.HTTP_INVOKER_CLASS, DEFAULT_HTTP_INVOKER);
-        }
-        if (authenticationProvider == null) {
-            if (!sessionParameters.containsKey(SessionParameter.AUTHENTICATION_PROVIDER_CLASS)) {
-                sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
-            }
-        }
-        if (typeDefCache == null) {
-            if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
-                sessionParameters
-                        .put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
-            }
-        }
-        if (!sessionParameters.containsKey(SessionParameter.BROWSER_SUCCINCT)) {
-            sessionParameters.put(SessionParameter.BROWSER_SUCCINCT, "true");
-        }
-        if (!sessionParameters.containsKey(SessionParameter.AUTH_HTTP_BASIC)) {
-            sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
-        }
-        sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "false");
-        addDefaultParameters(sessionParameters);
-
-        check(sessionParameters, SessionParameter.BROWSER_URL);
-
-        return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
-    }
-
-    /**
-     * Creates a default CMIS local binding instance.
-     */
-    public CmisBinding createCmisLocalBinding(Map<String, String> sessionParameters) {
-        return createCmisLocalBinding(sessionParameters, null);
-    }
-
-    /**
-     * Creates a default CMIS local binding instance.
-     */
-    public CmisBinding createCmisLocalBinding(Map<String, String> sessionParameters, TypeDefinitionCache typeDefCache) {
-        checkSessionParameters(sessionParameters, false);
-
-        sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_LOCAL);
-        if (typeDefCache == null) {
-            if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
-                sessionParameters
-                        .put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
-            }
-        }
-        addDefaultParameters(sessionParameters);
-
-        check(sessionParameters, SessionParameter.LOCAL_FACTORY);
-
-        return new CmisBindingImpl(sessionParameters);
-    }
-
-    // ---- internal ----
-
-    /**
-     * Checks the passed session parameters.
-     */
-    private static void checkSessionParameters(Map<String, String> sessionParameters, boolean mustContainSPI) {
-        // don't accept null
-        if (sessionParameters == null) {
-            throw new IllegalArgumentException("Session parameter map not set!");
-        }
-
-        // check binding entry
-        final String spiClass = sessionParameters.get(SessionParameter.BINDING_SPI_CLASS);
-        if (mustContainSPI) {
-            if ((spiClass == null) || (spiClass.trim().length() == 0)) {
-                throw new IllegalArgumentException("SPI class entry (" + SessionParameter.BINDING_SPI_CLASS
-                        + ") is missing!");
-            }
-        }
-    }
-
-    /**
-     * Checks if the given parameter is present. If not, throw an
-     * <code>IllegalArgumentException</code>.
-     */
-    private static void check(Map<String, String> sessionParameters, String... parameters) {
-        for (String parameter : parameters) {
-            if (sessionParameters.containsKey(parameter)) {
-                return;
-            }
-        }
-
-        if (parameters.length == 1) {
-            throw new IllegalArgumentException("Parameter '" + parameters[0] + "' is missing!");
-        } else {
-            throw new IllegalArgumentException("One of the following parameters must be set: "
-                    + Arrays.asList(parameters).toString());
-        }
-    }
-
-    /**
-     * Add the default session parameters to the given map without override
-     * existing entries.
-     */
-    private void addDefaultParameters(Map<String, String> sessionParameters) {
-        for (String key : defaults.keySet()) {
-            if (!sessionParameters.containsKey(key)) {
-                sessionParameters.put(key, defaults.get(key));
-            }
-        }
-    }
-
-    /**
-     * Creates a default session parameters map with some reasonable defaults.
-     */
-    private static Map<String, String> createNewDefaultParameters() {
-        Map<String, String> result = new HashMap<String, String>();
-
-        result.put(SessionParameter.CACHE_SIZE_REPOSITORIES,
-                String.valueOf(SessionParameterDefaults.CACHE_SIZE_REPOSITORIES));
-        result.put(SessionParameter.CACHE_SIZE_TYPES, String.valueOf(SessionParameterDefaults.CACHE_SIZE_TYPES));
-        result.put(SessionParameter.CACHE_SIZE_LINKS, String.valueOf(SessionParameterDefaults.CACHE_SIZE_LINKS));
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
deleted file mode 100644
index 01cfec5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache;
-
-import java.io.Serializable;
-
-/**
- * An interface for an hierarchical cache.
- * 
- * <p>
- * Each level of the hierarchy could use a different caching strategy. The cache
- * is initialize by defining the classes that handle the caching for one level.
- * These classes must implement the {@link CacheLevel} interface.<br/>
- * <br/>
- * Level configuration string format: "
- * <code>&lt;class name&gt; [param1=value1,param2=value2,...]</code>".<br/>
- * For example:
- * <code>org.apache.opencmis.client.bindings.cache.impl.MapCacheLevelImpl capacity=10</code>
- * <br/>
- * </p>
- * 
- * @see CacheLevel
- */
-public interface Cache extends Serializable {
-
-    /**
-     * Initializes the cache.
-     * 
-     * @param cacheLevelConfig
-     *            the level configuration strings from the root to the leafs
-     */
-    void initialize(String[] cacheLevelConfig);
-
-    /**
-     * Adds an object to the cache.
-     * 
-     * @param value
-     *            the object
-     * @param keys
-     *            the keys for this object
-     */
-    void put(Object value, String... keys);
-
-    /**
-     * Retrieves an object from the cache.
-     * 
-     * @param keys
-     *            the keys
-     * @return the object or
-     *         <code>null</code> if the branch or leaf doesn't exist
-     */
-    Object get(String... keys);
-
-    /**
-     * Removes a branch or leaf from the cache.
-     * 
-     * @param keys
-     *            the keys of the branch or leaf
-     */
-    void remove(String... keys);
-
-    /**
-     * Removes all entries from the cache.
-     */
-    void removeAll();
-    
-    /**
-     * Checks if a given key is in the cache.
-     * 
-     * @param keys
-     *            the keys of the branch or leaf
-     * 
-     * @return the index of the first key part that is not in the cache or
-     *         <code>keys.length</code> if the object is in the cache
-     */
-    int check(String... keys);
-
-    /**
-     * Applies a write lock.
-     */
-    void writeLock();
-
-    /**
-     * Releases a write lock.
-     */
-    void writeUnlock();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
deleted file mode 100644
index b7c26f0..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache;
-
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * Interface for a level of an hierarchical cache.
- * 
- * @see Cache
- */
-public interface CacheLevel extends Serializable {
-
-    /**
-     * Initialize the cache level.
-     * 
-     * @param parameters
-     *            level parameters
-     */
-    void initialize(Map<String, String> parameters);
-
-    /**
-     * Adds an object to the cache level.
-     * 
-     * @param value
-     *            the object
-     * @param key
-     *            the key at this level
-     */
-    void put(Object value, String key);
-
-    /**
-     * Retrieves an object from the cache level.
-     * 
-     * @param key
-     *            the key at this cache level
-     * @return the object or <code>null</code> if the object doesn't exist
-     */
-    Object get(String key);
-
-    /**
-     * Removes an object from this cache level.
-     * 
-     * @param key
-     *            the key at this cache level
-     */
-    void remove(String key);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java
deleted file mode 100644
index 8041a5c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * A cache for type definition objects.
- * <p>
- * Implementations of this interface have to be tread-safe.
- */
-public interface TypeDefinitionCache extends Serializable {
-
-    /**
-     * Initializes the cache.
-     */
-    void initialize(BindingSession session);
-
-    /**
-     * Adds a type definition object to the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     * @param typeDefinition
-     *            the type definition object
-     */
-    void put(String repositoryId, TypeDefinition typeDefinition);
-
-    /**
-     * Retrieves a type definition object from the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     * @param typeId
-     *            the type id
-     * @return the type definition object or <code>null</code> if the object is
-     *         not in the cache
-     */
-    TypeDefinition get(String repositoryId, String typeId);
-
-    /**
-     * Removes a type definition object from the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     * @param typeId
-     *            the type id
-     */
-    void remove(String repositoryId, String typeId);
-
-    /**
-     * Removes all type definition objects of a repository from the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     */
-    void remove(String repositoryId);
-
-    /**
-     * Removes all cache entries.
-     */
-    void removeAll();
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
deleted file mode 100644
index ed9f3df..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache.impl;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.CacheLevel;
-
-/**
- * Abstract Map cache.
- */
-public abstract class AbstractMapCacheLevel implements CacheLevel {
-
-    private static final long serialVersionUID = 1L;
-
-    private Map<String, Object> fMap;
-    private boolean fFallbackEnabled = false;
-    private String fFallbackKey;
-    private boolean fSingleValueEnabled = false;
-
-    public abstract void initialize(Map<String, String> parameters);
-
-    public Object get(String key) {
-        Object value = fMap.get(key);
-
-        if ((value == null) && fFallbackEnabled) {
-            value = fMap.get(fFallbackKey);
-        }
-
-        if ((value == null) && fSingleValueEnabled) {
-            if (fMap.size() == 1) {
-                value = fMap.values().iterator().next();
-            }
-        }
-
-        return value;
-    }
-
-    public void put(Object value, String key) {
-        fMap.put(key, value);
-    }
-
-    public void remove(String key) {
-        fMap.remove(key);
-    }
-
-    /**
-     * Returns the internal map.
-     */
-    protected Map<String, Object> getMap() {
-        return fMap;
-    }
-
-    /**
-     * Sets the internal map.
-     */
-    protected void setMap(Map<String, Object> map) {
-        fMap = map;
-    }
-
-    /**
-     * Enables a fallback key if no value was found for a requested key.
-     */
-    protected void enableKeyFallback(String key) {
-        fFallbackKey = key;
-        fFallbackEnabled = true;
-    }
-
-    /**
-     * Disables the fallback key.
-     */
-    protected void disableKeyFallback() {
-        fFallbackEnabled = false;
-    }
-
-    /**
-     * Enables the single value fallback.
-     */
-    protected void enableSingeValueFallback() {
-        fSingleValueEnabled = true;
-    }
-
-    /**
-     * Disables the single value fallback.
-     */
-    protected void disableSingeValueFallback() {
-        fSingleValueEnabled = false;
-    }
-
-    /**
-     * Extracts an integer parameter from the parameters.
-     * 
-     * @param parameters
-     *            the parameter map
-     * @param name
-     *            the parameter name
-     * @param defValue
-     *            the default value if the parameter can't be found
-     */
-    protected int getIntParameter(Map<String, String> parameters, String name, int defValue) {
-        if (parameters == null) {
-            return defValue;
-        }
-
-        String value = parameters.get(name);
-        if ((value == null) || (value.trim().length() == 0)) {
-            return defValue;
-        }
-
-        try {
-            return Integer.valueOf(value);
-        } catch (NumberFormatException e) {
-            return defValue;
-        }
-    }
-
-    /**
-     * Extracts a float parameter from the parameters.
-     * 
-     * @param parameters
-     *            the parameter map
-     * @param name
-     *            the parameter name
-     * @param defValue
-     *            the default value if the parameter can't be found
-     */
-    protected float getFloatParameter(Map<String, String> parameters, String name, float defValue) {
-        if (parameters == null) {
-            return defValue;
-        }
-
-        String value = parameters.get(name);
-        if ((value == null) || (value.trim().length() == 0)) {
-            return defValue;
-        }
-
-        try {
-            return Float.valueOf(value);
-        } catch (NumberFormatException e) {
-            return defValue;
-        }
-    }
-
-    /**
-     * Extracts a boolean parameter from the parameters.
-     * 
-     * @param parameters
-     *            the parameter map
-     * @param name
-     *            the parameter name
-     * @param defValue
-     *            the default value if the parameter can't be found
-     */
-    protected boolean getBooleanParameter(Map<String, String> parameters, String name, boolean defValue) {
-        if (parameters == null) {
-            return defValue;
-        }
-
-        String value = parameters.get(name);
-        if ((value == null) || (value.trim().length() == 0)) {
-            return defValue;
-        }
-
-        return Boolean.parseBoolean(value);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        return (fMap == null ? "[no map]" : fMap.toString());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
deleted file mode 100644
index 6f8e248..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
-import org.apache.chemistry.opencmis.client.bindings.cache.CacheLevel;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Default cache implementation.
- */
-public class CacheImpl implements Cache {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CacheImpl.class);
-
-    private static final long serialVersionUID = 1L;
-
-    private List<Class<?>> levels;
-    private List<Map<String, String>> levelParameters;
-
-    private final String name;
-
-    private CacheLevel root;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Constructor.
-     */
-    public CacheImpl() {
-        this.name = "Cache";
-    }
-
-    /**
-     * Constructor.
-     */
-    public CacheImpl(String name) {
-        this.name = name;
-    }
-
-    public void initialize(String[] cacheLevelConfig) {
-        if (levels != null) {
-            throw new IllegalStateException("Cache already initialize!");
-        }
-
-        if ((cacheLevelConfig == null) || (cacheLevelConfig.length == 0)) {
-            throw new IllegalArgumentException("Cache config must not be empty!");
-        }
-
-        lock.writeLock().lock();
-        try {
-            levels = new ArrayList<Class<?>>();
-            levelParameters = new ArrayList<Map<String, String>>();
-
-            // build level lists
-            for (String config : cacheLevelConfig) {
-                int x = config.indexOf(' ');
-                if (x == -1) {
-                    addLevel(config, null);
-                } else {
-                    addLevel(config.substring(0, x), config.substring(x + 1));
-                }
-            }
-
-            // create root
-            root = createCacheLevel(0);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    private void addLevel(String className, String parameters) {
-        // get the class
-        Class<?> clazz;
-        try {
-            clazz = ClassLoaderUtil.loadClass(className, this.getClass().getClassLoader());
-        } catch (ClassNotFoundException e) {
-            throw new IllegalArgumentException("Class '" + className + "' not found!", e);
-        }
-
-        // check the class
-        if (!CacheLevel.class.isAssignableFrom(clazz)) {
-            throw new IllegalArgumentException("Class '" + className + "' does not implement the CacheLevel interface!");
-        }
-
-        levels.add(clazz);
-
-        // process parameters
-        if (parameters == null) {
-            levelParameters.add(null);
-        } else {
-            Map<String, String> parameterMap = new HashMap<String, String>();
-            levelParameters.add(parameterMap);
-
-            for (String pair : parameters.split(",")) {
-                String[] keyValue = pair.split("=");
-                if (keyValue.length == 1) {
-                    parameterMap.put(keyValue[0], "");
-                } else {
-                    parameterMap.put(keyValue[0], keyValue[1]);
-                }
-            }
-        }
-    }
-
-    public Object get(String... keys) {
-        // check keys
-        if (keys == null) {
-            return null;
-        }
-
-        // check level depth
-        if (levels.size() != keys.length) {
-            throw new IllegalArgumentException("Wrong number of keys!");
-        }
-
-        Object result = null;
-
-        lock.readLock().lock();
-        try {
-            CacheLevel cacheLevel = root;
-
-            // follow the branch
-            for (int i = 0; i < keys.length - 1; i++) {
-                Object level = cacheLevel.get(keys[i]);
-
-                // does the branch exist?
-                if (level == null) {
-                    return null;
-                }
-
-                // next level
-                cacheLevel = (CacheLevel) level;
-            }
-
-            // get the value
-            result = cacheLevel.get(keys[keys.length - 1]);
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        return result;
-    }
-
-    public void put(Object value, String... keys) {
-        // check keys
-        if (keys == null) {
-            return;
-        }
-
-        // check level depth
-        if (levels.size() != keys.length) {
-            throw new IllegalArgumentException("Wrong number of keys!");
-        }
-
-        lock.writeLock().lock();
-        try {
-            CacheLevel cacheLevel = root;
-
-            // follow the branch
-            for (int i = 0; i < keys.length - 1; i++) {
-                Object level = cacheLevel.get(keys[i]);
-
-                // does the branch exist?
-                if (level == null) {
-                    level = createCacheLevel(i + 1);
-                    cacheLevel.put(level, keys[i]);
-                }
-
-                // next level
-                cacheLevel = (CacheLevel) level;
-            }
-
-            cacheLevel.put(value, keys[keys.length - 1]);
-
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("{}: put [{}] = {}", name, getFormattedKeys(keys), value);
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void remove(String... keys) {
-        if (keys == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            CacheLevel cacheLevel = root;
-
-            // follow the branch
-            for (int i = 0; i < keys.length - 1; i++) {
-                Object level = cacheLevel.get(keys[i]);
-
-                // does the branch exist?
-                if (level == null) {
-                    return;
-                }
-
-                // next level
-                cacheLevel = (CacheLevel) level;
-            }
-
-            cacheLevel.remove(keys[keys.length - 1]);
-
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("{}: removed [{}]", name, getFormattedKeys(keys));
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void removeAll() {
-        lock.writeLock().lock();
-        try {
-            root = createCacheLevel(0);
-
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("{}: removed all", name);
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public int check(String... keys) {
-        if (keys == null) {
-            return -1;
-        }
-
-        lock.readLock().lock();
-        try {
-            CacheLevel cacheLevel = root;
-
-            // follow the branch
-            for (int i = 0; i < keys.length - 1; i++) {
-                Object level = cacheLevel.get(keys[i]);
-
-                // does the branch exist?
-                if (level == null) {
-                    return i;
-                }
-
-                // next level
-                cacheLevel = (CacheLevel) level;
-            }
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        return keys.length;
-    }
-
-    public void writeLock() {
-        lock.writeLock().lock();
-    }
-
-    public void writeUnlock() {
-        lock.writeLock().unlock();
-    }
-
-    // ---- internal ----
-
-    /**
-     * Creates a cache level object.
-     */
-    private CacheLevel createCacheLevel(int level) {
-        if ((level < 0) || (level >= levels.size())) {
-            throw new IllegalArgumentException("Cache level doesn't fit the configuration!");
-        }
-
-        // get the class and create an instance
-        Class<?> clazz = levels.get(level);
-        CacheLevel cacheLevel = null;
-        try {
-            cacheLevel = (CacheLevel) clazz.newInstance();
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Cache level problem?!", e);
-        }
-
-        // initialize it
-        cacheLevel.initialize(levelParameters.get(level));
-
-        return cacheLevel;
-    }
-
-    @Override
-    public String toString() {
-        return (root == null ? "(no cache root)" : root.toString());
-    }
-
-    // ---- internal ----
-
-    private static String getFormattedKeys(String[] keys) {
-        assert keys != null;
-
-        StringBuilder sb = new StringBuilder();
-        for (String k : keys) {
-            if (sb.length() > 0) {
-                sb.append(", ");
-            }
-            sb.append(k);
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
deleted file mode 100644
index ec3c804..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache.impl;
-
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * Content type cache.
- */
-public class ContentTypeCacheLevelImpl extends MapCacheLevelImpl {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public ContentTypeCacheLevelImpl() {
-        super();
-        enableKeyFallback(null);
-    }
-
-    @Override
-    public Object get(String key) {
-        return super.get(normalize(key));
-    }
-
-    @Override
-    public void put(Object value, String key) {
-        super.put(value, normalize(key));
-    }
-
-    @Override
-    public void remove(String key) {
-        super.remove(normalize(key));
-    }
-
-    /**
-     * Normalizes the key which should be a content type. It's quite simple at
-     * the moment but should cover most cases.
-     */
-    private static String normalize(String key) {
-        if (key == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-        int parameterStart = 0;
-
-        // first, get the MIME type
-        for (int i = 0; i < key.length(); i++) {
-            char c = key.charAt(i);
-
-            if (Character.isWhitespace(c)) {
-                continue;
-            } else if (c == ';') {
-                parameterStart = i;
-                break;
-            }
-
-            sb.append(Character.toLowerCase(c));
-        }
-
-        // if parameters have been found, gather them
-        if (parameterStart > 0) {
-            SortedMap<String, String> parameter = new TreeMap<String, String>();
-            StringBuilder ksb = new StringBuilder();
-            StringBuilder vsb = new StringBuilder();
-            boolean isKey = true;
-
-            for (int i = parameterStart + 1; i < key.length(); i++) {
-                char c = key.charAt(i);
-                if (Character.isWhitespace(c)) {
-                    continue;
-                }
-
-                if (isKey) {
-                    if (c == '=') {
-                        // value start
-                        isKey = false;
-                        continue;
-                    }
-
-                    ksb.append(Character.toLowerCase(c));
-                } else {
-                    if (c == ';') {
-                        // next key
-                        isKey = true;
-
-                        parameter.put(ksb.toString(), vsb.toString());
-
-                        ksb = new StringBuilder();
-                        vsb = new StringBuilder();
-
-                        continue;
-                    } else if (c == '"') {
-                        // filter quotes
-                        continue;
-                    }
-
-                    vsb.append(Character.toLowerCase(c));
-                }
-            }
-
-            // add last parameter
-            if (ksb.length() > 0) {
-                parameter.put(ksb.toString(), vsb.toString());
-            }
-
-            // write parameters sorted by key
-            for (Map.Entry<String, String> entry : parameter.entrySet()) {
-                sb.append(';');
-                sb.append(entry.getKey());
-                sb.append('=');
-                sb.append(entry.getValue());
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
deleted file mode 100644
index 338e63b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache.impl;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * LRU cache.
- */
-public class LruCacheLevelImpl extends AbstractMapCacheLevel {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String MAX_ENTRIES = "maxEntries";
-
-    public void initialize(Map<String, String> parameters) {
-        final int maxEntries = getIntParameter(parameters, MAX_ENTRIES, 100);
-
-        setMap(new LinkedHashMap<String, Object>(maxEntries + 1, 0.70f, true) {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public boolean removeEldestEntry(Map.Entry<String, Object> eldest) {
-                return size() > maxEntries;
-            }
-        });
-    }
-
-    @Override
-    public synchronized Object get(String key) {
-        return super.get(key);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
deleted file mode 100644
index 66f0284..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Map cache.
- */
-public class MapCacheLevelImpl extends AbstractMapCacheLevel {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String CAPACITY = "capacity";
-    public static final String LOAD_FACTOR = "loadFactor";
-    public static final String SINGLE_VALUE = "singleValue";
-
-    /**
-     * Constructor.
-     */
-    public MapCacheLevelImpl() {
-    }
-
-    public void initialize(Map<String, String> parameters) {
-        int initialCapacity = getIntParameter(parameters, CAPACITY, 32);
-        float loadFactor = getFloatParameter(parameters, LOAD_FACTOR, 0.75f);
-        boolean singleValue = getBooleanParameter(parameters, SINGLE_VALUE, false);
-
-        setMap(new HashMap<String, Object>(initialCapacity, loadFactor));
-        disableKeyFallback();
-        if (singleValue) {
-            enableSingeValueFallback();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/ClientVersion.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/ClientVersion.java
deleted file mode 100644
index cab8b5a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/ClientVersion.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-public final class ClientVersion {
-
-    public static final String OPENCMIS_VERSION;
-    public static final String OPENCMIS_CLIENT;
-
-    static {
-        Package p = Package.getPackage("org.apache.chemistry.opencmis.client.bindings.impl");
-        if (p == null) {
-            OPENCMIS_VERSION = "?";
-            OPENCMIS_CLIENT = "Apache Chemistry OpenCMIS";
-        } else {
-            OPENCMIS_VERSION = p.getImplementationVersion();
-            OPENCMIS_CLIENT = "Apache Chemistry OpenCMIS/" + (OPENCMIS_VERSION == null ? "?" : OPENCMIS_VERSION);
-        }
-    }
-
-    private ClientVersion() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
deleted file mode 100644
index cc1ca90..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.client.bindings.spi.SessionAwareAuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * CMIS binding implementation.
- */
-public final class CmisBindingImpl implements CmisBinding, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private BindingSession session;
-    private final BindingsObjectFactory objectFactory;
-    private final RepositoryService repositoryServiceWrapper;
-
-    /**
-     * Constructor.
-     * 
-     * @param sessionParameters
-     *            the session parameters
-     */
-    public CmisBindingImpl(Map<String, String> sessionParameters) {
-        this(sessionParameters, null, null);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param sessionParameters
-     *            the session parameters
-     * @param authenticationProvider
-     *            an authentication provider instance
-     */
-    public CmisBindingImpl(final Map<String, String> sessionParameters, AuthenticationProvider authenticationProvider,
-            TypeDefinitionCache typeDefCache) {
-        // some checks first
-        if (sessionParameters == null) {
-            throw new IllegalArgumentException("Session parameters must be set!");
-        }
-        if (!sessionParameters.containsKey(SessionParameter.BINDING_SPI_CLASS)) {
-            throw new IllegalArgumentException("Session parameters do not contain a SPI class name!");
-        }
-
-        // initialize session
-        session = new SessionImpl();
-        for (Map.Entry<String, String> entry : sessionParameters.entrySet()) {
-            session.put(entry.getKey(), entry.getValue());
-        }
-
-        if (authenticationProvider == null) {
-            // create authentication provider and add it session
-            String authProviderClassName = sessionParameters.get(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
-            if (authProviderClassName != null) {
-                Object authProviderObj = null;
-
-                try {
-                    authProviderObj = ClassLoaderUtil.loadClass(authProviderClassName).newInstance();
-                } catch (Exception e) {
-                    throw new IllegalArgumentException("Could not load authentication provider: " + e, e);
-                }
-
-                if (!(authProviderObj instanceof AuthenticationProvider)) {
-                    throw new IllegalArgumentException(
-                            "Authentication provider does not implement AuthenticationProvider!");
-                }
-                authenticationProvider = (AuthenticationProvider) authProviderObj;
-            }
-        }
-
-        // locale
-        String language = sessionParameters.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
-        if (language != null) {
-            language = language.trim();
-            if (language.length() > 0) {
-                String country = sessionParameters.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
-                if (country != null) {
-                    country = country.trim();
-                    if (country.length() > 0) {
-                        country = "-" + country;
-                    }
-                } else {
-                    country = "";
-                }
-
-                String acceptLanguage = language + country;
-                if ((acceptLanguage.indexOf('\n') == -1) && (acceptLanguage.indexOf('\r') == -1)) {
-                    session.put(CmisBindingsHelper.ACCEPT_LANGUAGE, acceptLanguage);
-                }
-            }
-        }
-
-        // force CMIS version
-        String forceCmisVersion = sessionParameters.get(SessionParameter.FORCE_CMIS_VERSION);
-        if (forceCmisVersion != null) {
-            try {
-                session.put(CmisBindingsHelper.FORCE_CMIS_VERSION, CmisVersion.fromValue(forceCmisVersion));
-            } catch (IllegalArgumentException e) {
-                throw new IllegalArgumentException("Invalid CMIS version value: " + forceCmisVersion, e);
-            }
-        }
-
-        // add type definition cache to session
-        if (typeDefCache != null) {
-            session.put(CmisBindingsHelper.TYPE_DEFINTION_CACHE, typeDefCache);
-            typeDefCache.initialize(session);
-        }
-
-        // set up caches
-        clearAllCaches();
-
-        // initialize the SPI
-        CmisBindingsHelper.getSPI(session);
-
-        // set up object factory
-        objectFactory = new BindingsObjectFactoryImpl();
-
-        // set up repository service
-        repositoryServiceWrapper = new RepositoryServiceImpl(session);
-
-        // add authentication provider to session
-        if (authenticationProvider != null) {
-            session.put(CmisBindingsHelper.AUTHENTICATION_PROVIDER_OBJECT, authenticationProvider);
-            if (authenticationProvider instanceof SessionAwareAuthenticationProvider) {
-                ((SessionAwareAuthenticationProvider) authenticationProvider).setSession(session);
-            }
-        }
-    }
-
-    public String getSessionId() {
-        return session.getSessionId();
-    }
-
-    public BindingType getBindingType() {
-        Object bindingType = session.get(SessionParameter.BINDING_TYPE);
-        if (!(bindingType instanceof String)) {
-            return BindingType.CUSTOM;
-        }
-
-        try {
-            return BindingType.fromValue((String) bindingType);
-        } catch (IllegalArgumentException e) {
-            return BindingType.CUSTOM;
-        }
-    }
-
-    public RepositoryService getRepositoryService() {
-        checkSession();
-        return repositoryServiceWrapper;
-    }
-
-    public NavigationService getNavigationService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getNavigationService();
-    }
-
-    public ObjectService getObjectService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getObjectService();
-    }
-
-    public DiscoveryService getDiscoveryService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getDiscoveryService();
-    }
-
-    public RelationshipService getRelationshipService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getRelationshipService();
-    }
-
-    public VersioningService getVersioningService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getVersioningService();
-    }
-
-    public AclService getAclService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getAclService();
-    }
-
-    public MultiFilingService getMultiFilingService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getMultiFilingService();
-    }
-
-    public PolicyService getPolicyService() {
-        checkSession();
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        return spi.getPolicyService();
-    }
-
-    public BindingsObjectFactory getObjectFactory() {
-        return objectFactory;
-    }
-
-    public AuthenticationProvider getAuthenticationProvider() {
-        return CmisBindingsHelper.getAuthenticationProvider(session);
-    }
-
-    public void clearAllCaches() {
-        checkSession();
-
-        session.writeLock();
-        try {
-            session.put(CmisBindingsHelper.REPOSITORY_INFO_CACHE, new RepositoryInfoCache(session));
-            TypeDefinitionCache typeDefCache = CmisBindingsHelper.getTypeDefinitionCache(session);
-            typeDefCache.removeAll();
-
-            CmisSpi spi = CmisBindingsHelper.getSPI(session);
-            spi.clearAllCaches();
-        } finally {
-            session.writeUnlock();
-        }
-    }
-
-    public void clearRepositoryCache(String repositoryId) {
-        checkSession();
-
-        if (repositoryId == null) {
-            return;
-        }
-
-        session.writeLock();
-        try {
-            RepositoryInfoCache repInfoCache = (RepositoryInfoCache) session
-                    .get(CmisBindingsHelper.REPOSITORY_INFO_CACHE);
-            repInfoCache.remove(repositoryId);
-
-            TypeDefinitionCache typeDefCache = CmisBindingsHelper.getTypeDefinitionCache(session);
-            typeDefCache.remove(repositoryId);
-
-            CmisSpi spi = CmisBindingsHelper.getSPI(session);
-            spi.clearRepositoryCache(repositoryId);
-        } finally {
-            session.writeUnlock();
-        }
-    }
-
-    public void close() {
-        checkSession();
-
-        session.writeLock();
-        try {
-            CmisSpi spi = CmisBindingsHelper.getSPI(session);
-            spi.close();
-        } finally {
-            session.writeUnlock();
-            session = null;
-        }
-
-    }
-
-    private void checkSession() {
-        if (session == null) {
-            throw new IllegalStateException("Already closed.");
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
deleted file mode 100644
index 4a71ae7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-
-/**
- * A collection of static methods that are used in multiple places within the
- * bindings implementation.
- */
-public final class CmisBindingsHelper {
-
-    public static final String REPOSITORY_INFO_CACHE = "org.apache.chemistry.opencmis.binding.repositoryInfoCache";
-    public static final String TYPE_DEFINTION_CACHE = "org.apache.chemistry.opencmis.binding.typeDefintionCache";
-    public static final String SPI_OBJECT = "org.apache.chemistry.opencmis.binding.spi.object";
-    public static final String HTTP_INVOKER_OBJECT = "org.apache.chemistry.opencmis.binding.httpinvoker.object";
-    public static final String AUTHENTICATION_PROVIDER_OBJECT = "org.apache.chemistry.opencmis.binding.auth.object";
-    public static final String ACCEPT_LANGUAGE = "org.apache.chemistry.opencmis.binding.acceptLanguage";
-    public static final String FORCE_CMIS_VERSION = "org.apache.chemistry.opencmis.cmisversion";
-
-    /**
-     * Private constructor.
-     */
-    private CmisBindingsHelper() {
-    }
-
-    /**
-     * Gets the SPI object for the given session. If there is already a SPI
-     * object in the session it will be returned. If there is no SPI object it
-     * will be created and put into the session.
-     * 
-     * @param session
-     *            the session object
-     * 
-     * @return the SPI object
-     */
-    public static CmisSpi getSPI(BindingSession session) {
-        assert session != null;
-
-        // fetch from session
-        CmisSpi spi = (CmisSpi) session.get(SPI_OBJECT);
-        if (spi != null) {
-            return spi;
-        }
-
-        session.writeLock();
-        try {
-            // try again
-            spi = (CmisSpi) session.get(SPI_OBJECT);
-            if (spi != null) {
-                return spi;
-            }
-
-            // ok, we have to create it...
-            try {
-                String spiName = (String) session.get(SessionParameter.BINDING_SPI_CLASS);
-                Constructor<?> c = ClassLoaderUtil.loadClass(spiName).getConstructor(BindingSession.class);
-                spi = (CmisSpi) c.newInstance(session);
-            } catch (CmisBaseException e) {
-                throw e;
-            } catch (InvocationTargetException ite) {
-                throw new CmisRuntimeException("SPI cannot be initialized: " + ite.getCause().getMessage(), ite);
-            } catch (Exception e) {
-                throw new CmisRuntimeException("SPI cannot be initialized: " + e.getMessage(), e);
-            }
-
-            // we have a SPI object -> put it into the session
-            session.put(SPI_OBJECT, spi, true);
-        } finally {
-            session.writeUnlock();
-        }
-
-        assert spi != null;
-
-        return spi;
-    }
-
-    /**
-     * Gets the HTTP Invoker object from the session.
-     */
-    public static HttpInvoker getHttpInvoker(BindingSession session) {
-        assert session != null;
-
-        HttpInvoker invoker = (HttpInvoker) session.get(HTTP_INVOKER_OBJECT);
-
-        if (invoker != null) {
-            return invoker;
-        }
-
-        session.writeLock();
-        try {
-            // try again
-            invoker = (HttpInvoker) session.get(HTTP_INVOKER_OBJECT);
-            if (invoker != null) {
-                return invoker;
-            }
-
-            // ok, we have to create it...
-            try {
-                String invokerName = (String) session.get(SessionParameter.HTTP_INVOKER_CLASS);
-                invoker = (HttpInvoker) ClassLoaderUtil.loadClass(invokerName).newInstance();
-            } catch (CmisBaseException e) {
-                throw e;
-            } catch (Exception e) {
-                throw new CmisRuntimeException("HTTP invoker cannot be initialized: " + e.getMessage(), e);
-            }
-
-            // we have an Invoker object -> put it into the session
-            session.put(HTTP_INVOKER_OBJECT, invoker, true);
-        } finally {
-            session.writeUnlock();
-        }
-
-        assert invoker != null;
-
-        return invoker;
-    }
-
-    /**
-     * Returns a CMIS version if the user set one, <code>null</code> otherwise.
-     */
-    public static CmisVersion getForcedCmisVersion(BindingSession session) {
-        assert session != null;
-
-        return (CmisVersion) session.get(FORCE_CMIS_VERSION);
-    }
-
-    /**
-     * Returns the authentication provider from the session or <code>null</code>
-     * if no authentication provider is set.
-     */
-    public static AuthenticationProvider getAuthenticationProvider(BindingSession session) {
-        assert session != null;
-
-        return (AuthenticationProvider) session.get(AUTHENTICATION_PROVIDER_OBJECT);
-    }
-
-    /**
-     * Returns the repository info cache from the session.
-     */
-    public static RepositoryInfoCache getRepositoryInfoCache(BindingSession session) {
-        assert session != null;
-
-        return (RepositoryInfoCache) session.get(REPOSITORY_INFO_CACHE);
-    }
-
-    /**
-     * Returns the type definition cache from the session.
-     */
-    public static TypeDefinitionCache getTypeDefinitionCache(BindingSession session) {
-        assert session != null;
-
-        TypeDefinitionCache cache = (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
-
-        if (cache != null) {
-            return cache;
-        }
-
-        session.writeLock();
-        try {
-            // try again
-            cache = (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
-            if (cache != null) {
-                return cache;
-            }
-
-            // ok, we have to create it...
-            try {
-                String cacheName = (String) session.get(SessionParameter.TYPE_DEFINITION_CACHE_CLASS);
-                cache = (TypeDefinitionCache) ClassLoaderUtil.loadClass(cacheName).newInstance();
-                cache.initialize(session);
-            } catch (CmisBaseException e) {
-                throw e;
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Type definition cache cannot be initialized: " + e.getMessage(), e);
-            }
-
-            // we have a cache object -> put it into the session
-            session.put(TYPE_DEFINTION_CACHE, cache);
-        } finally {
-            session.writeUnlock();
-        }
-
-        assert cache != null;
-
-        return cache;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
deleted file mode 100644
index 1b08ad5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-
-/**
- * A cache for repository info objects.
- */
-public class RepositoryInfoCache implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Cache cache;
-
-    /**
-     * Constructor.
-     * 
-     * @param session
-     *            the session object
-     */
-    public RepositoryInfoCache(BindingSession session) {
-        assert session != null;
-
-        int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES,
-                SessionParameterDefaults.CACHE_SIZE_REPOSITORIES);
-        if (repCount < 1) {
-            repCount = SessionParameterDefaults.CACHE_SIZE_REPOSITORIES;
-        }
-
-        cache = new CacheImpl("Repository Info Cache");
-        cache.initialize(new String[] { MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "="
-                + repCount });
-    }
-
-    /**
-     * Adds a repository info object to the cache.
-     * 
-     * @param repositoryInfo
-     *            the repository info object
-     */
-    public void put(RepositoryInfo repositoryInfo) {
-        if ((repositoryInfo == null) || (repositoryInfo.getId() == null)) {
-            return;
-        }
-
-        cache.put(repositoryInfo, repositoryInfo.getId());
-    }
-
-    /**
-     * Retrieves a repository info object from the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     * @return the repository info object or <code>null</code> if the object is
-     *         not in the cache
-     */
-    public RepositoryInfo get(String repositoryId) {
-        return (RepositoryInfo) cache.get(repositoryId);
-    }
-
-    /**
-     * Removes a repository info object from the cache.
-     * 
-     * @param repositoryId
-     *            the repository id
-     */
-    public void remove(String repositoryId) {
-        cache.remove(repositoryId);
-    }
-
-    @Override
-    public String toString() {
-        return cache.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java
deleted file mode 100644
index 540313f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedRepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Repository Service implementation.
- * 
- * Passes requests to the SPI and handles caching.
- */
-public class RepositoryServiceImpl implements RepositoryService, ExtendedRepositoryService, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final BindingSession session;
-
-    /**
-     * Constructor.
-     */
-    public RepositoryServiceImpl(BindingSession session) {
-        assert session != null;
-
-        this.session = session;
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        RepositoryInfo result = null;
-        boolean hasExtension = (extension != null) && isNotEmpty(extension.getExtensions());
-
-        RepositoryInfoCache cache = CmisBindingsHelper.getRepositoryInfoCache(session);
-
-        // if extension is not set, check the cache first
-        if (!hasExtension) {
-            result = cache.get(repositoryId);
-            if (result != null) {
-                return result;
-            }
-        }
-
-        // it was not in the cache -> get the SPI and fetch the repository info
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        result = spi.getRepositoryService().getRepositoryInfo(repositoryId, extension);
-
-        // put it into the cache
-        if (!hasExtension) {
-            cache.put(result);
-        }
-
-        return result;
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        List<RepositoryInfo> result = null;
-        boolean hasExtension = (extension != null) && isNotEmpty(extension.getExtensions());
-
-        // get the SPI and fetch the repository infos
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        result = spi.getRepositoryService().getRepositoryInfos(extension);
-
-        // put it into the cache
-        if (!hasExtension && (result != null)) {
-            RepositoryInfoCache cache = CmisBindingsHelper.getRepositoryInfoCache(session);
-            for (RepositoryInfo rid : result) {
-                cache.put(rid);
-            }
-        }
-
-        return result;
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        TypeDefinitionList result = null;
-        boolean hasExtension = (extension != null) && isNotEmpty(extension.getExtensions());
-        boolean propDefs = (includePropertyDefinitions == null ? false : includePropertyDefinitions.booleanValue());
-
-        // get the SPI and fetch the type definitions
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        result = spi.getRepositoryService().getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems,
-                skipCount, extension);
-
-        // put it into the cache
-        if (!hasExtension && propDefs && (result != null)) {
-            TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-
-            for (TypeDefinition tdd : result.getList()) {
-                cache.put(repositoryId, tdd);
-            }
-        }
-
-        return result;
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return getTypeDefinition(repositoryId, typeId, extension, true);
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension,
-            boolean useCache) {
-        TypeDefinition result = null;
-        boolean hasExtension = (extension != null) && isNotEmpty(extension.getExtensions());
-
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-
-        // if the cache should be used and the extension is not set,
-        // check the cache first
-        if (useCache && !hasExtension) {
-            result = cache.get(repositoryId, typeId);
-            if (result != null) {
-                return result;
-            }
-        }
-
-        // it was not in the cache -> get the SPI and fetch the type definition
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        result = spi.getRepositoryService().getTypeDefinition(repositoryId, typeId, extension);
-
-        // put it into the cache
-        if (!hasExtension && (result != null)) {
-            cache.put(repositoryId, result);
-        }
-
-        return result;
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        List<TypeDefinitionContainer> result = null;
-        boolean hasExtension = (extension != null) && isNotEmpty(extension.getExtensions());
-        boolean propDefs = (includePropertyDefinitions == null ? false : includePropertyDefinitions.booleanValue());
-
-        // get the SPI and fetch the type definitions
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        result = spi.getRepositoryService().getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions,
-                extension);
-
-        // put it into the cache
-        if (!hasExtension && propDefs && (result != null)) {
-            TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-            addToTypeCache(cache, repositoryId, result);
-        }
-
-        return result;
-    }
-
-    private void addToTypeCache(TypeDefinitionCache cache, String repositoryId, List<TypeDefinitionContainer> containers) {
-        if (containers == null) {
-            return;
-        }
-
-        for (TypeDefinitionContainer container : containers) {
-            cache.put(repositoryId, container.getTypeDefinition());
-            addToTypeCache(cache, repositoryId, container.getChildren());
-        }
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        // get the SPI and create the type definitions
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        TypeDefinition result = spi.getRepositoryService().createType(repositoryId, type, extension);
-
-        // add the type to cache
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-        cache.put(repositoryId, result);
-
-        return result;
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        // get the SPI and update the type definitions
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        TypeDefinition result = spi.getRepositoryService().updateType(repositoryId, type, extension);
-
-        // update the type in cache
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-        cache.put(repositoryId, result);
-
-        return result;
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        // get the SPI and delete the type definitions
-        CmisSpi spi = CmisBindingsHelper.getSPI(session);
-        spi.getRepositoryService().deleteType(repositoryId, typeId, extension);
-
-        // remove the type from cache
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(session);
-        cache.remove(repositoryId, typeId);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/SessionImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/SessionImpl.java
deleted file mode 100644
index d214ede..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/SessionImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-
-/**
- * CMIS binding session implementation.
- */
-public class SessionImpl implements BindingSession {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String id;
-    private final Map<String, Object> data;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Constructor.
-     */
-    public SessionImpl() {
-        id = UUID.randomUUID().toString();
-        data = new HashMap<String, Object>();
-    }
-
-    @Override
-    public String getSessionId() {
-        return id;
-    }
-
-    @Override
-    public Collection<String> getKeys() {
-        return data.keySet();
-    }
-
-    @Override
-    public Object get(String key) {
-        Object value = null;
-
-        lock.readLock().lock();
-        try {
-            value = data.get(key);
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        if (value instanceof TransientWrapper) {
-            return ((TransientWrapper) value).getObject();
-        }
-
-        return value;
-    }
-
-    @Override
-    public Object get(String key, Object defValue) {
-        Object value = get(key);
-        return (value == null ? defValue : value);
-    }
-
-    @Override
-    public int get(String key, int defValue) {
-        Object value = get(key);
-        int intValue = defValue;
-
-        if (value instanceof Integer) {
-            intValue = ((Integer) value).intValue();
-        } else if (value instanceof String) {
-            try {
-                intValue = Integer.valueOf((String) value);
-            } catch (NumberFormatException e) {
-                // invalid number -> return default value
-            }
-        }
-
-        return intValue;
-    }
-
-    @Override
-    public boolean get(String key, boolean defValue) {
-        Object value = get(key);
-
-        if (value instanceof Boolean) {
-            return ((Boolean) value).booleanValue();
-        }
-
-        if (value instanceof String) {
-            return Boolean.parseBoolean((String) value);
-        }
-
-        return defValue;
-    }
-
-    @Override
-    public void put(String key, Serializable obj) {
-        lock.writeLock().lock();
-        try {
-            data.put(key, obj);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    @Override
-    public void put(String key, Object obj, boolean isTransient) {
-        Object value = (isTransient ? new TransientWrapper(obj) : obj);
-        if (!(value instanceof Serializable)) {
-            throw new IllegalArgumentException("Object must be serializable!");
-        }
-
-        lock.writeLock().lock();
-        try {
-            data.put(key, value);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void remove(String key) {
-        lock.writeLock().lock();
-        try {
-            data.remove(key);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void readLock() {
-        lock.readLock().lock();
-    }
-
-    public void readUnlock() {
-        lock.readLock().unlock();
-    }
-
-    public void writeLock() {
-        lock.writeLock().lock();
-    }
-
-    public void writeUnlock() {
-        lock.writeLock().unlock();
-    }
-
-    @Override
-    public String toString() {
-        return "Session " + id + ": " + data.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TransientWrapper.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TransientWrapper.java
deleted file mode 100644
index ad36755..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TransientWrapper.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-/**
- * Wrapper for transient objects in a cache.
- */
-public class TransientWrapper implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-    private transient Object object;
-
-    public TransientWrapper(Object object) {
-        this.object = object;
-    }
-
-    public Object getObject() {
-        return object;
-    }
-
-    @Override
-    public String toString() {
-        return (object == null ? "(no object)" : "(transient) " + object.toString());
-    }
-
-    private void writeObject(ObjectOutputStream out) throws IOException {
-    }
-
-    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-        object = null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java
deleted file mode 100644
index fccace7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.impl;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * A cache for type definition objects.
- */
-public class TypeDefinitionCacheImpl implements TypeDefinitionCache {
-
-    private static final long serialVersionUID = 1L;
-
-    private Cache cache;
-
-    /**
-     * Constructor.
-     */
-    public TypeDefinitionCacheImpl() {
-
-    }
-
-    public void initialize(BindingSession session) {
-        assert session != null;
-
-        int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES,
-                SessionParameterDefaults.CACHE_SIZE_REPOSITORIES);
-        if (repCount < 1) {
-            repCount = SessionParameterDefaults.CACHE_SIZE_REPOSITORIES;
-        }
-
-        int typeCount = session.get(SessionParameter.CACHE_SIZE_TYPES, SessionParameterDefaults.CACHE_SIZE_TYPES);
-        if (typeCount < 1) {
-            typeCount = SessionParameterDefaults.CACHE_SIZE_TYPES;
-        }
-
-        cache = new CacheImpl("Type Definition Cache");
-        cache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + typeCount // type
-        });
-    }
-
-    public void put(String repositoryId, TypeDefinition typeDefinition) {
-        if ((typeDefinition == null) || (typeDefinition.getId() == null)) {
-            return;
-        }
-
-        cache.put(typeDefinition, repositoryId, typeDefinition.getId());
-    }
-
-    public TypeDefinition get(String repositoryId, String typeId) {
-        return (TypeDefinition) cache.get(repositoryId, typeId);
-    }
-
-    public void remove(String repositoryId, String typeId) {
-        cache.remove(repositoryId, typeId);
-    }
-
-    public void remove(String repositoryId) {
-        cache.remove(repositoryId);
-    }
-
-    public void removeAll() {
-        cache.removeAll();
-    }
-
-    @Override
-    public String toString() {
-        return cache.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/AbstractAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/AbstractAuthenticationProvider.java
deleted file mode 100644
index c3160af..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/AbstractAuthenticationProvider.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocketFactory;
-import javax.xml.ws.handler.HandlerResolver;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.w3c.dom.Element;
-
-/**
- * Authentication provider class.
- */
-public abstract class AbstractAuthenticationProvider implements SessionAwareAuthenticationProvider {
-
-    private static final long serialVersionUID = 1L;
-
-    private BindingSession session;
-
-    /**
-     * Sets the {@link BindingSession} the authentication provider lives in.
-     */
-    public void setSession(BindingSession session) {
-        this.session = session;
-    }
-
-    /**
-     * Returns {@link BindingSession}.
-     */
-    public BindingSession getSession() {
-        return session;
-    }
-
-    public Map<String, List<String>> getHTTPHeaders(String url) {
-        return null;
-    }
-
-    public Element getSOAPHeaders(Object portObject) {
-        return null;
-    }
-
-    public HandlerResolver getHandlerResolver() {
-        return null;
-    }
-
-    public void putResponseHeaders(String url, int statusCode, Map<String, List<String>> headers) {
-    }
-
-    public SSLSocketFactory getSSLSocketFactory() {
-        return null;
-    }
-
-    public HostnameVerifier getHostnameVerifier() {
-        return null;
-    }
-
-    /**
-     * Gets the user name from the session.
-     * 
-     * @return the user name or {@code null} if the user name is not set
-     */
-    protected String getUser() {
-        Object userObject = getSession().get(SessionParameter.USER);
-        if (userObject instanceof String) {
-            return (String) userObject;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets the password from the session.
-     * 
-     * @return the password or {@code null} if the password is not set
-     */
-    protected String getPassword() {
-        Object passwordObject = getSession().get(SessionParameter.PASSWORD);
-        if (passwordObject instanceof String) {
-            return (String) passwordObject;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets the bearer token from the session.
-     * 
-     * @return the bearer token or {@code null} if the token is not set
-     */
-    protected String getBearerToken() {
-        Object tokenObject = getSession().get(SessionParameter.OAUTH_ACCESS_TOKEN);
-        if (tokenObject instanceof String) {
-            return (String) tokenObject;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets the proxy user name from the session.
-     * 
-     * @return the proxy user name or {@code null} if the user name is not set
-     */
-    protected String getProxyUser() {
-        Object userObject = getSession().get(SessionParameter.PROXY_USER);
-        if (userObject instanceof String) {
-            return (String) userObject;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets the proxy password from the session.
-     * 
-     * @return the proxy password or {@code null} if the password is not set
-     */
-    protected String getProxyPassword() {
-        Object passwordObject = getSession().get(SessionParameter.PROXY_PASSWORD);
-        if (passwordObject instanceof String) {
-            return (String) passwordObject;
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/BindingSession.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/BindingSession.java
deleted file mode 100644
index 546615f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/BindingSession.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * CMIS provider session interface.
- */
-public interface BindingSession extends Serializable {
-
-    /**
-     * Returns the ID of this session.
-     */
-    String getSessionId();
-
-    /**
-     * Returns all keys.
-     */
-    Collection<String> getKeys();
-
-    /**
-     * Gets a session value.
-     */
-    Object get(String key);
-
-    /**
-     * Returns a session value or the default value if the key doesn't exist.
-     */
-    Object get(String key, Object defValue);
-
-    /**
-     * Returns a session value or the default value if the key doesn't exist.
-     */
-    int get(String key, int defValue);
-
-    /**
-     * Returns a session value or the default value if the key doesn't exist.
-     */
-    boolean get(String key, boolean defValue);
-
-    /**
-     * Adds a non-transient session value.
-     */
-    void put(String key, Serializable object);
-
-    /**
-     * Adds a session value.
-     */
-    void put(String key, Object object, boolean isTransient);
-
-    /**
-     * Removes a session value.
-     */
-    void remove(String key);
-
-    /**
-     * Acquires a read lock.
-     */
-    void readLock();
-
-    /**
-     * Releases a read lock.
-     */
-    void readUnlock();
-
-    /**
-     * Acquires a write lock.
-     */
-    void writeLock();
-
-    /**
-     * Releases a write lock.
-     */
-    void writeUnlock();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/CmisSpi.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/CmisSpi.java
deleted file mode 100644
index 3b901af..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/CmisSpi.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * CMIS SPI interface.
- */
-public interface CmisSpi {
-    /**
-     * Gets a Repository Service interface object.
-     */
-    RepositoryService getRepositoryService();
-
-    /**
-     * Gets a Navigation Service interface object.
-     */
-    NavigationService getNavigationService();
-
-    /**
-     * Gets an Object Service interface object.
-     */
-    ObjectService getObjectService();
-
-    /**
-     * Gets a Versioning Service interface object.
-     */
-    VersioningService getVersioningService();
-
-    /**
-     * Gets a Relationship Service interface object.
-     */
-    RelationshipService getRelationshipService();
-
-    /**
-     * Gets a Discovery Service interface object.
-     */
-    DiscoveryService getDiscoveryService();
-
-    /**
-     * Gets a Multifiling Service interface object.
-     */
-    MultiFilingService getMultiFilingService();
-
-    /**
-     * Gets an ACL Service interface object.
-     */
-    AclService getAclService();
-
-    /**
-     * Gets a Policy Service interface object.
-     */
-    PolicyService getPolicyService();
-
-    /**
-     * Clears all caches of the current session.
-     */
-    void clearAllCaches();
-
-    /**
-     * Clears all caches of the current session that are related to the given
-     * repository.
-     * 
-     * @param repositoryId
-     *            the repository id
-     */
-    void clearRepositoryCache(String repositoryId);
-
-    /**
-     * Releases all resources assigned to this SPI instance.
-     */
-    void close();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LTPAWSSecurityAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LTPAWSSecurityAuthenticationProvider.java
deleted file mode 100644
index e508814..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LTPAWSSecurityAuthenticationProvider.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.text.SimpleDateFormat;
-import java.util.Set;
-import java.util.TimeZone;
-
-import javax.security.auth.Subject;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-public class LTPAWSSecurityAuthenticationProvider extends StandardAuthenticationProvider {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(LTPAWSSecurityAuthenticationProvider.class);
-
-    @Override
-    public Element getSOAPHeaders(Object portObject) {
-
-        String securityToken = getSecurityToken();
-
-        // Exit if no security token found
-        if (securityToken == null) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("securityToken is null");
-            }
-            return null;
-        }
-
-        // Set time
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
-        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-        long created = System.currentTimeMillis();
-        long expires = created + 24 * 60 * 60 * 1000; // 24 hours
-
-        // Create the SOAP WSSecurity header
-        try {
-            Document document = XMLUtils.newDomDocument();
-
-            Element wsseSecurityElement = document.createElementNS(WSSE_NAMESPACE, "Security");
-
-            Element wsuTimestampElement = document.createElementNS(WSU_NAMESPACE, "Timestamp");
-            wsseSecurityElement.appendChild(wsuTimestampElement);
-
-            Element tsCreatedElement = document.createElementNS(WSU_NAMESPACE, "Created");
-            tsCreatedElement.appendChild(document.createTextNode(sdf.format(created)));
-            wsuTimestampElement.appendChild(tsCreatedElement);
-
-            Element tsExpiresElement = document.createElementNS(WSU_NAMESPACE, "Expires");
-            tsExpiresElement.appendChild(document.createTextNode(sdf.format(expires)));
-            wsuTimestampElement.appendChild(tsExpiresElement);
-
-            // Add the BinarySecurityToken (contains the LTPAv2 token)
-            Element wsseBinarySecurityTokenElement = document.createElementNS(WSSE_NAMESPACE, "BinarySecurityToken");
-            wsseBinarySecurityTokenElement.setAttribute("xmlns:wsu", WSU_NAMESPACE);
-            wsseBinarySecurityTokenElement.setAttribute("xmlns:wsst",
-                    "http://www.ibm.com/websphere/appserver/tokentype");
-            wsseBinarySecurityTokenElement.setAttribute("wsu:Id", "ltpa_20");
-            wsseBinarySecurityTokenElement.setAttribute("ValueType", "wsst:LTPAv2");
-            wsseBinarySecurityTokenElement.appendChild(document.createTextNode(securityToken));
-
-            // Append BinarySecurityToken to Security section
-            wsseSecurityElement.appendChild(wsseBinarySecurityTokenElement);
-
-            return wsseSecurityElement;
-        } catch (ParserConfigurationException e) {
-            // shouldn't happen...
-            throw new CmisRuntimeException("Could not build SOAP header: " + e.getMessage(), e);
-        }
-    }
-
-    private String getSecurityToken() {
-        try {
-            Class<?> wsSubjectClass = ClassLoaderUtil.loadClass("com.ibm.websphere.security.auth.WSSubject");
-            Class<?> wsCredentialClass = ClassLoaderUtil.loadClass("com.ibm.websphere.security.cred.WSCredential");
-
-            // Get current security subject
-            Method m = wsSubjectClass.getMethod("getRunAsSubject", new Class[0]);
-            Subject securitySubject = (Subject) m.invoke(null, new Object[0]);
-            if (securitySubject != null) {
-                // Get all security credentials from the security subject
-                Set<?> securityCredentials = securitySubject.getPublicCredentials(wsCredentialClass);
-
-                // Get the first credential
-                Object securityCredential = securityCredentials.iterator().next();
-                String user = invokeSecurityCredentialMethod(wsCredentialClass, securityCredential, "getSecurityName");
-
-                if (user.equalsIgnoreCase("UNAUTHENTICATED")) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("User = UNAUTHENTICATED");
-                    }
-                    return null;
-                }
-
-                byte[] token = invokeSecurityCredentialMethod(wsCredentialClass, securityCredential,
-                        "getCredentialToken");
-                if (token == null) {
-                    return null;
-                }
-
-                return Base64.encodeBytes(token);
-            }
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Could not build SOAP header: " + e.getMessage(), e);
-        }
-
-        return null;
-    }
-
-    @SuppressWarnings("unchecked")
-    private <T> T invokeSecurityCredentialMethod(Class<?> credentialClass, Object securityCredential, String methodName)
-            throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
-        Method m = credentialClass.getMethod(methodName, new Class[0]);
-        return (T) m.invoke(securityCredential, new Object[0]);
-    }
-
-    @Override
-    protected boolean getSendBasicAuth() {
-        return false;
-    }
-
-    @Override
-    protected boolean getSendUsernameToken() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java
deleted file mode 100644
index 9bf4dc7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-/**
- * Provides access to internal links. It bypasses the CMIS domain model. Use
- * with care!
- */
-public interface LinkAccess {
-
-    /**
-     * Gets a link from the cache if it is there or loads it into the cache if
-     * it is not there.
-     */
-    String loadLink(String repositoryId, String objectId, String rel, String type);
-
-    /**
-     * Gets the content link from the cache if it is there or loads it into the
-     * cache if it is not there.
-     */
-    String loadContentLink(String repositoryId, String documentId);
-
-    /**
-     * Gets a rendition content link from the cache if it is there or loads it
-     * into the cache if it is not there.
-     */
-    String loadRenditionContentLink(String repositoryId, String documentId, String streamId);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
deleted file mode 100644
index c0de446..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.net.Authenticator;
-import java.net.PasswordAuthentication;
-import java.util.List;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
-/**
- * NTLM authentication provider class. USE WITH CARE!
- * 
- * This authentication provider sets a {@link java.net.Authenticator} which will
- * replace the current authenticator, if any. It will fail if this authenticator
- * will be replaced by another part of the code.
- * 
- * Since {@link java.net.Authenticator} is a system-wide authenticator, it will
- * not reliably work in multi-user environments! To achieve that you have to
- * wrap OpenCMIS into its own class loader.
- */
-public class NTLMAuthenticationProvider extends AbstractAuthenticationProvider {
-
-    private static final long serialVersionUID = 1L;
-
-    // java.net.Authenticator is static, so this can be static too
-    private static final OpenCMISAuthenticator AUTHENTICATOR = new OpenCMISAuthenticator();
-    static {
-        Authenticator.setDefault(AUTHENTICATOR);
-    }
-
-    @Override
-    public Map<String, List<String>> getHTTPHeaders(String url) {
-        // get user and password
-        String user = getUser();
-        String password = getPassword();
-
-        // if no user is set, reset the authenticator
-        if (user == null) {
-            AUTHENTICATOR.reset();
-            return null;
-        }
-
-        if (password == null) {
-            password = "";
-        }
-
-        // set user and password
-        AUTHENTICATOR.setPasswordAuthentication(user, password);
-
-        // OpenCMIS is not in charge of the authentication
-        // -> no HTTP header to set
-        return null;
-    }
-
-    @Override
-    public Element getSOAPHeaders(Object portObject) {
-        // no SOAP headers to set
-        return null;
-    }
-
-    /**
-     * OpenCMIS Authenticator class.
-     */
-    static class OpenCMISAuthenticator extends Authenticator {
-
-        private PasswordAuthentication passwordAuthentication;
-
-        /**
-         * Resets the user and password. The next request will not be
-         * authenticated.
-         */
-        public synchronized void reset() {
-            passwordAuthentication = null;
-        }
-
-        /**
-         * Sets a new user and password.
-         */
-        public synchronized void setPasswordAuthentication(String user, String password) {
-            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
-        }
-
-        @Override
-        protected synchronized PasswordAuthentication getPasswordAuthentication() {
-            return passwordAuthentication;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/OAuthAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/OAuthAuthenticationProvider.java
deleted file mode 100644
index 138d9d1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/OAuthAuthenticationProvider.java
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * OAuth 2.0 Authentication Provider.
- * <p>
- * This authentication provider implements OAuth 2.0 (RFC 6749) Bearer Tokens
- * (RFC 6750).
- * <p>
- * The provider can be either configured with an authorization code or with an
- * existing bearer token. Token endpoint and client ID are always required. If a
- * client secret is required depends on the authorization server.
- * <p>
- * Configuration with authorization code:
- * 
- * <pre>
- * SessionFactory factory = ...
- * 
- * Map&lt;String, String> parameter = new HashMap&lt;String, String>();
- * 
- * parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost/cmis/atom");
- * parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
- * parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
- * 
- * parameter.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, "org.apache.chemistry.opencmis.client.bindings.spi.OAuthAuthenticationProvider");
- * 
- * parameter.put(SessionParameter.OAUTH_TOKEN_ENDPOINT, "https://example.com/auth/oauth/token");
- * parameter.put(SessionParameter.OAUTH_CLIENT_ID, "s6BhdRkqt3");
- * parameter.put(SessionParameter.OAUTH_CLIENT_SECRET, "7Fjfp0ZBr1KtDRbnfVdmIw");
- * 
- * parameter.put(SessionParameter.OAUTH_CODE, "abc");
- * 
- * ...
- * Session session = factory.createSession(parameter);
- * </pre>
- * 
- * <p>
- * Configuration with existing bearer token:
- * 
- * <pre>
- * SessionFactory factory = ...
- * 
- * Map&lt;String, String> parameter = new HashMap&lt;String, String>();
- * 
- * parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost/cmis/atom");
- * parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
- * parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
- * 
- * parameter.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, "org.apache.chemistry.opencmis.client.bindings.spi.OAuthAuthenticationProvider");
- *  
- * parameter.put(SessionParameter.OAUTH_TOKEN_ENDPOINT, "https://example.com/auth/oauth/token");
- * parameter.put(SessionParameter.OAUTH_CLIENT_ID, "s6BhdRkqt3");
- * parameter.put(SessionParameter.OAUTH_CLIENT_SECRET, "7Fjfp0ZBr1KtDRbnfVdmIw");
- * 
- * parameter.put(SessionParameter.OAUTH_ACCESS_TOKEN, "2YotnFZFEjr1zCsicMWpAA");
- * parameter.put(SessionParameter.OAUTH_REFRESH_TOKEN, "tGzv3JOkF0XG5Qx2TlKWIA");
- * parameter.put(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP, "1388237075127");
- * 
- * ...
- * Session session = factory.createSession(parameter);
- * </pre>
- * 
- * <p>
- * Getting tokens at runtime:
- * 
- * <pre>
- * OAuthAuthenticationProvider authProvider = (OAuthAuthenticationProvider) session.getBinding()
- *         .getAuthenticationProvider();
- * 
- * // get the current token
- * Token token = authProvider.getToken();
- * 
- * // listen for token refreshes
- * authProvider.addTokenListener(new OAuthAuthenticationProvider.TokenListener() {
- *     public void tokenRefreshed(Token token) {
- *         // do something with the new token
- *     }
- * });
- * </pre>
- * 
- * <p>
- * OAuth errors can be handled like this:
- * 
- * <pre>
- *  try {
- *      ...
- *      // CMIS calls
- *      ...
- *  } catch (CmisConnectionException connEx) {
- *      if (connEx.getCause() instanceof CmisOAuthException) {
- *          CmisOAuthException oauthEx = (CmisOAuthException) connEx.getCause();
- * 
- *          if (CmisOAuthException.ERROR_INVALID_GRANT.equals(oauthEx.getError()) ||
- *              CmisOAuthException.ERROR_INVALID_TOKEN.equals(oauthEx.getError())) {
- *              // ask the user to authenticate again
- *          } else {
- *             // a configuration or server problem
- *          }
- *    }
- * }
- * </pre>
- */
-public class OAuthAuthenticationProvider extends StandardAuthenticationProvider {
-
-    private static final Logger LOG = LoggerFactory.getLogger(OAuthAuthenticationProvider.class);
-
-    private static final long serialVersionUID = 1L;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    private Token token = null;
-    private long defaultTokenLifetime = 3600;
-    private List<TokenListener> tokenListeners;
-
-    @Override
-    public void setSession(BindingSession session) {
-        super.setSession(session);
-
-        if (token == null) {
-            // get predefined access token
-            String accessToken = null;
-            if (session.get(SessionParameter.OAUTH_ACCESS_TOKEN) instanceof String) {
-                accessToken = (String) session.get(SessionParameter.OAUTH_ACCESS_TOKEN);
-            }
-
-            // get predefined refresh token
-            String refreshToken = null;
-            if (session.get(SessionParameter.OAUTH_REFRESH_TOKEN) instanceof String) {
-                refreshToken = (String) session.get(SessionParameter.OAUTH_REFRESH_TOKEN);
-            }
-
-            // get predefined expiration timestamp
-            long expirationTimestamp = 0;
-            if (session.get(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP) instanceof String) {
-                try {
-                    expirationTimestamp = Long.parseLong((String) session
-                            .get(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP));
-                } catch (NumberFormatException nfe) {
-                    // ignore
-                }
-            } else if (session.get(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP) instanceof Number) {
-                expirationTimestamp = ((Number) session.get(SessionParameter.OAUTH_EXPIRATION_TIMESTAMP)).longValue();
-            }
-
-            // get default token lifetime
-            if (session.get(SessionParameter.OAUTH_DEFAULT_TOKEN_LIFETIME) instanceof String) {
-                try {
-                    defaultTokenLifetime = Long.parseLong((String) session
-                            .get(SessionParameter.OAUTH_DEFAULT_TOKEN_LIFETIME));
-                } catch (NumberFormatException nfe) {
-                    // ignore
-                }
-            } else if (session.get(SessionParameter.OAUTH_DEFAULT_TOKEN_LIFETIME) instanceof Number) {
-                defaultTokenLifetime = ((Number) session.get(SessionParameter.OAUTH_DEFAULT_TOKEN_LIFETIME))
-                        .longValue();
-            }
-
-            token = new Token(accessToken, refreshToken, expirationTimestamp);
-            fireTokenListner(token);
-        }
-    }
-
-    @Override
-    public Map<String, List<String>> getHTTPHeaders(String url) {
-        Map<String, List<String>> headers = super.getHTTPHeaders(url);
-        if (headers == null) {
-            headers = new HashMap<String, List<String>>();
-        }
-
-        headers.put("Authorization", Collections.singletonList("Bearer " + getAccessToken()));
-
-        return headers;
-    }
-
-    /**
-     * Returns the current token.
-     * 
-     * @return the current token
-     */
-    public Token getToken() {
-        lock.readLock().lock();
-        try {
-            return token;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Adds a token listener.
-     * 
-     * @param listner
-     *            the listener object
-     */
-    public void addTokenListener(TokenListener listner) {
-        if (listner == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            if (tokenListeners == null) {
-                tokenListeners = new ArrayList<OAuthAuthenticationProvider.TokenListener>();
-            }
-
-            tokenListeners.add(listner);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Removes a token listener.
-     * 
-     * @param listner
-     *            the listener object
-     */
-    public void removeTokenListener(TokenListener listner) {
-        if (listner == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            if (tokenListeners != null) {
-                tokenListeners.remove(listner);
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Lets all token listeners know that there is a new token.
-     */
-    protected void fireTokenListner(Token token) {
-        if (tokenListeners == null) {
-            return;
-        }
-
-        for (TokenListener listner : tokenListeners) {
-            listner.tokenRefreshed(token);
-        }
-    }
-
-    @Override
-    protected boolean getSendBearerToken() {
-        // the super class should not handle bearer tokens
-        return false;
-    }
-
-    /**
-     * Gets the access token. If no access token is present or the access token
-     * is expired, a new token is requested.
-     * 
-     * @return the access token
-     */
-    protected String getAccessToken() {
-        lock.writeLock().lock();
-        try {
-            if (token.getAccessToken() == null) {
-                if (token.getRefreshToken() == null) {
-                    requestToken();
-                } else {
-                    refreshToken();
-                }
-            } else if (token.isExpired()) {
-                refreshToken();
-            }
-
-            return token.getAccessToken();
-        } catch (CmisConnectionException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot get OAuth access token: " + e.getMessage(), e);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    private void requestToken() throws IOException {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Requesting new OAuth access token.");
-        }
-
-        makeRequest(false);
-
-        if (LOG.isTraceEnabled()) {
-            LOG.trace(token.toString());
-        }
-    }
-
-    private void refreshToken() throws IOException {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Refreshing OAuth access token.");
-        }
-
-        makeRequest(true);
-
-        if (LOG.isTraceEnabled()) {
-            LOG.trace(token.toString());
-        }
-    }
-
-    private void makeRequest(boolean isRefresh) throws IOException {
-        Object tokenEndpoint = getSession().get(SessionParameter.OAUTH_TOKEN_ENDPOINT);
-        if (!(tokenEndpoint instanceof String)) {
-            throw new CmisConnectionException("Token endpoint not set!");
-        }
-
-        if (isRefresh && token.getRefreshToken() == null) {
-            throw new CmisConnectionException("No refresh token!");
-        }
-
-        // request token
-        HttpURLConnection conn = (HttpURLConnection) (new URL(tokenEndpoint.toString())).openConnection();
-        conn.setRequestMethod("POST");
-        conn.setDoInput(true);
-        conn.setDoOutput(true);
-        conn.setAllowUserInteraction(false);
-        conn.setUseCaches(false);
-        conn.setRequestProperty("User-Agent", ClientVersion.OPENCMIS_CLIENT);
-        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
-
-        // compile request
-        Writer writer = new OutputStreamWriter(conn.getOutputStream(), IOUtils.UTF8);
-
-        if (isRefresh) {
-            writer.write("grant_type=refresh_token");
-
-            writer.write("&refresh_token=");
-            writer.write(IOUtils.encodeURL(token.getRefreshToken()));
-        } else {
-            writer.write("grant_type=authorization_code");
-
-            Object code = getSession().get(SessionParameter.OAUTH_CODE);
-            if (code != null) {
-                writer.write("&code=");
-                writer.write(IOUtils.encodeURL(code.toString()));
-            }
-
-            Object redirectUri = getSession().get(SessionParameter.OAUTH_REDIRECT_URI);
-            if (redirectUri != null) {
-                writer.write("&redirect_uri=");
-                writer.write(IOUtils.encodeURL(redirectUri.toString()));
-            }
-        }
-
-        Object clientId = getSession().get(SessionParameter.OAUTH_CLIENT_ID);
-        if (clientId != null) {
-            writer.write("&client_id=");
-            writer.write(IOUtils.encodeURL(clientId.toString()));
-        }
-
-        Object clientSecret = getSession().get(SessionParameter.OAUTH_CLIENT_SECRET);
-        if (clientSecret != null) {
-            writer.write("&client_secret=");
-            writer.write(IOUtils.encodeURL(clientSecret.toString()));
-        }
-
-        writer.flush();
-
-        // connect
-        conn.connect();
-
-        // check success
-        if (conn.getResponseCode() != 200) {
-            JSONObject jsonResponse = parseResponse(conn);
-
-            Object error = jsonResponse.get("error");
-            String errorStr = (error == null ? null : error.toString());
-
-            Object description = jsonResponse.get("error_description");
-            String descriptionStr = (description == null ? null : description.toString());
-
-            Object uri = jsonResponse.get("error_uri");
-            String uriStr = (uri == null ? null : uri.toString());
-
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("OAuth token request failed: {}", jsonResponse.toJSONString());
-            }
-
-            throw new CmisOAuthException("OAuth token request failed" + (errorStr == null ? "" : ": " + errorStr)
-                    + (descriptionStr == null ? "" : ": " + descriptionStr), errorStr, descriptionStr, uriStr);
-        }
-
-        // parse response
-        JSONObject jsonResponse = parseResponse(conn);
-
-        Object tokenType = jsonResponse.get("token_type");
-        if (!(tokenType instanceof String) || !"bearer".equalsIgnoreCase((String) tokenType)) {
-            throw new CmisOAuthException("Unsupported OAuth token type: " + tokenType);
-        }
-
-        Object jsonAccessToken = jsonResponse.get("access_token");
-        if (!(jsonAccessToken instanceof String)) {
-            throw new CmisOAuthException("Invalid OAuth access_token!");
-        }
-
-        Object jsonRefreshToken = jsonResponse.get("refresh_token");
-        if (jsonRefreshToken != null && !(jsonRefreshToken instanceof String)) {
-            throw new CmisOAuthException("Invalid OAuth refresh_token!");
-        }
-
-        long expiresIn = defaultTokenLifetime;
-        Object jsonExpiresIn = jsonResponse.get("expires_in");
-        if (jsonExpiresIn != null) {
-            if (jsonExpiresIn instanceof Number) {
-                expiresIn = ((Number) jsonExpiresIn).longValue();
-            } else if (jsonExpiresIn instanceof String) {
-                try {
-                    expiresIn = Long.parseLong((String) jsonExpiresIn);
-                } catch (NumberFormatException nfe) {
-                    throw new CmisOAuthException("Invalid OAuth expires_in value!");
-                }
-            } else {
-                throw new CmisOAuthException("Invalid OAuth expires_in value!");
-            }
-
-            if (expiresIn <= 0) {
-                expiresIn = defaultTokenLifetime;
-            }
-        }
-
-        token = new Token(jsonAccessToken.toString(), (jsonRefreshToken == null ? null : jsonRefreshToken.toString()),
-                expiresIn * 1000 + System.currentTimeMillis());
-        fireTokenListner(token);
-    }
-
-    private JSONObject parseResponse(HttpURLConnection conn) {
-        Reader reader = null;
-        try {
-            InputStream stream = null;
-
-            int respCode = conn.getResponseCode();
-            if (respCode == 401) {
-                Map<String, Map<String, String>> challenges = MimeHelper.getChallengesFromAuthenticateHeader(conn
-                        .getHeaderField("WWW-Authenticate"));
-
-                if (challenges != null && challenges.containsKey("bearer")) {
-                    Map<String, String> params = challenges.get("bearer");
-
-                    String errorStr = params.get("error");
-                    String descriptionStr = params.get("error_description");
-                    String uriStr = params.get("error_uri");
-
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("Invalid OAuth token: {}", params.toString());
-                    }
-
-                    throw new CmisOAuthException("Unauthorized" + (errorStr == null ? "" : ": " + errorStr)
-                            + (descriptionStr == null ? "" : ": " + descriptionStr), errorStr, descriptionStr, uriStr);
-                }
-
-                throw new CmisOAuthException("Unauthorized!");
-            }
-
-            if (respCode >= 200 && respCode < 300) {
-                stream = conn.getInputStream();
-            } else {
-                stream = conn.getErrorStream();
-            }
-            if (stream == null) {
-                throw new CmisOAuthException("Invalid OAuth token response!");
-            }
-
-            reader = new InputStreamReader(stream, extractCharset(conn));
-            JSONParser parser = new JSONParser();
-            Object response = parser.parse(reader);
-
-            if (!(response instanceof JSONObject)) {
-                throw new CmisOAuthException("Invalid OAuth token response!");
-            }
-
-            return (JSONObject) response;
-        } catch (CmisConnectionException ce) {
-            throw ce;
-        } catch (Exception pe) {
-            throw new CmisOAuthException("Parsing the OAuth token response failed: " + pe.getMessage(), pe);
-        } finally {
-            IOUtils.consumeAndClose(reader);
-        }
-    }
-
-    private String extractCharset(HttpURLConnection conn) {
-        String charset = IOUtils.UTF8;
-
-        String contentType = conn.getContentType();
-        if (contentType != null) {
-            String[] parts = contentType.split(";");
-            for (int i = 1; i < parts.length; i++) {
-                String part = parts[i].trim().toLowerCase(Locale.ENGLISH);
-                if (part.startsWith("charset")) {
-                    int x = part.indexOf('=');
-                    charset = part.substring(x + 1).trim();
-                    break;
-                }
-            }
-        }
-
-        return charset;
-    }
-
-    /**
-     * Token holder class.
-     */
-    public static class Token {
-        private String accessToken;
-        private String refreshToken;
-        private long expirationTimestamp;
-
-        public Token(String accessToken, String refreshToken, long expirationTimestamp) {
-            this.accessToken = accessToken;
-            this.refreshToken = refreshToken;
-            this.expirationTimestamp = expirationTimestamp;
-        }
-
-        /**
-         * Returns the access token.
-         * 
-         * @return the access token
-         */
-        public String getAccessToken() {
-            return accessToken;
-        }
-
-        /**
-         * Returns the refresh token.
-         * 
-         * @return the refresh token
-         */
-        public String getRefreshToken() {
-            return refreshToken;
-        }
-
-        /**
-         * Returns the timestamp when the access expires.
-         * 
-         * @return the timestamp in milliseconds since midnight, January 1, 1970
-         *         UTC.
-         */
-        public long getExpirationTimestamp() {
-            return expirationTimestamp;
-        }
-
-        /**
-         * Returns whether the access token is expired or not.
-         * 
-         * @return {@code true} if the access token is expired, {@code false}
-         *         otherwise
-         */
-        public boolean isExpired() {
-            return System.currentTimeMillis() >= expirationTimestamp;
-        }
-
-        @Override
-        public String toString() {
-            return "Access token: " + accessToken + " / Refresh token: " + refreshToken + " / Expires : "
-                    + expirationTimestamp;
-        }
-    }
-
-    /**
-     * Listener for OAuth token events.
-     */
-    public interface TokenListener {
-
-        /**
-         * Called when a token is requested of refreshed.
-         * 
-         * @param token
-         *            the new token
-         */
-        void tokenRefreshed(Token token);
-    }
-
-    /**
-     * Exception for OAuth errors.
-     */
-    public static class CmisOAuthException extends CmisConnectionException {
-
-        private static final long serialVersionUID = 1L;
-
-        // general OAuth errors
-        public static final String ERROR_INVALID_REQUEST = "invalid_request";
-        public static final String ERROR_INVALID_CLIENT = "invalid_client";
-        public static final String ERROR_INVALID_GRANT = "invalid_grant";
-        public static final String ERROR_UNAUTHORIZED_CLIENT = "unauthorized_client";
-        public static final String ERROR_UNSUPPORTED_GRANT_TYPE = "unsupported_grant_type";
-        public static final String ERROR_INVALID_SCOPE = "invalid_scope";
-
-        // bearer specific
-        public static final String ERROR_INVALID_TOKEN = "invalid_token";
-
-        private String error;
-        private String errorDescription;
-        private String errorUri;
-
-        public CmisOAuthException() {
-            super();
-        }
-
-        public CmisOAuthException(String message) {
-            super(message);
-        }
-
-        public CmisOAuthException(String message, Throwable cause) {
-            super(message, cause);
-        }
-
-        public CmisOAuthException(String message, String error, String errorDescription, String errorUri) {
-            super(message);
-            this.error = error;
-            this.errorDescription = errorDescription;
-            this.errorUri = errorUri;
-        }
-
-        public String getError() {
-            return error;
-        }
-
-        public String getErrorDescription() {
-            return errorDescription;
-        }
-
-        public String getErrorUri() {
-            return errorUri;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/SessionAwareAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/SessionAwareAuthenticationProvider.java
deleted file mode 100644
index 110981f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/SessionAwareAuthenticationProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-
-/**
- * Authentication provider implementing this interface get the binding session
- * injected.
- */
-public interface SessionAwareAuthenticationProvider extends AuthenticationProvider {
-
-    /**
-     * Sets the binding session.
-     */
-    void setSession(BindingSession session);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/StandardAuthenticationProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/StandardAuthenticationProvider.java
deleted file mode 100644
index 2eed16b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/StandardAuthenticationProvider.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.cookies.CmisCookieManager;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * Standard authentication provider class.
- * 
- * Adds a basic authentication HTTP header and a WS-Security UsernameToken SOAP
- * header.
- */
-public class StandardAuthenticationProvider extends AbstractAuthenticationProvider {
-
-    private static final long serialVersionUID = 1L;
-
-    protected static final String WSSE_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
-    protected static final String WSU_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
-
-    private CmisCookieManager cookieManager;
-    private Map<String, List<String>> fixedHeaders = new HashMap<String, List<String>>();
-
-    @Override
-    public void setSession(BindingSession session) {
-        super.setSession(session);
-
-        boolean sendBasicAuth = getSendBasicAuth();
-
-        if (getHandleCookies() && cookieManager == null) {
-            cookieManager = new CmisCookieManager(session.getSessionId());
-        }
-
-        // basic authentication
-        if (sendBasicAuth) {
-            // get user and password
-            String user = getUser();
-            String password = getPassword();
-
-            // if no user is set, don't set basic auth header
-            if (user != null) {
-                fixedHeaders.put("Authorization", createBasicAuthHeaderValue(user, password));
-            }
-        }
-
-        boolean sendBearerToken = getSendBearerToken();
-
-        // send bearer token
-        if (sendBearerToken) {
-            String token = getBearerToken();
-
-            // if no token is set, don't set bearer header
-            if (token != null) {
-                fixedHeaders.put("Authorization", Collections.singletonList("Bearer " + token));
-            }
-        }
-
-        // proxy authentication
-        if (getProxyUser() != null) {
-            // get proxy user and password
-            String proxyUser = getProxyUser();
-            String proxyPassword = getProxyPassword();
-
-            fixedHeaders.put("Proxy-Authorization", createBasicAuthHeaderValue(proxyUser, proxyPassword));
-        }
-
-        // other headers
-        addSessionParameterHeadersToFixedHeaders();
-    }
-
-    @Override
-    public Map<String, List<String>> getHTTPHeaders(String url) {
-        Map<String, List<String>> result = new HashMap<String, List<String>>(fixedHeaders);
-
-        // cookies
-        if (cookieManager != null) {
-            Map<String, List<String>> cookies = cookieManager.get(url, result);
-            if (!cookies.isEmpty()) {
-                result.putAll(cookies);
-            }
-        }
-
-        return result.isEmpty() ? null : result;
-    }
-
-    @Override
-    public void putResponseHeaders(String url, int statusCode, Map<String, List<String>> headers) {
-        if (cookieManager != null) {
-            cookieManager.put(url, headers);
-        }
-    }
-
-    @Override
-    public Element getSOAPHeaders(Object portObject) {
-        // only send SOAP header if configured
-        if (!getSendUsernameToken()) {
-            return null;
-        }
-
-        // get user and password
-        String user = getUser();
-        String password = getPassword();
-
-        // if no user is set, don't create SOAP header
-        if (user == null) {
-            return null;
-        }
-
-        if (password == null) {
-            password = "";
-        }
-
-        // set time
-        long created = System.currentTimeMillis();
-        long expires = created + 24 * 60 * 60 * 1000; // 24 hours
-
-        // create the SOAP header
-        try {
-            Document document = XMLUtils.newDomDocument();
-
-            Element wsseSecurityElement = document.createElementNS(WSSE_NAMESPACE, "Security");
-
-            Element wsuTimestampElement = document.createElementNS(WSU_NAMESPACE, "Timestamp");
-            wsseSecurityElement.appendChild(wsuTimestampElement);
-
-            Element tsCreatedElement = document.createElementNS(WSU_NAMESPACE, "Created");
-            tsCreatedElement.appendChild(document.createTextNode(DateTimeHelper.formatXmlDateTime(created)));
-            wsuTimestampElement.appendChild(tsCreatedElement);
-
-            Element tsExpiresElement = document.createElementNS(WSU_NAMESPACE, "Expires");
-            tsExpiresElement.appendChild(document.createTextNode(DateTimeHelper.formatXmlDateTime(expires)));
-            wsuTimestampElement.appendChild(tsExpiresElement);
-
-            Element usernameTokenElement = document.createElementNS(WSSE_NAMESPACE, "UsernameToken");
-            wsseSecurityElement.appendChild(usernameTokenElement);
-
-            Element usernameElement = document.createElementNS(WSSE_NAMESPACE, "Username");
-            usernameElement.appendChild(document.createTextNode(user));
-            usernameTokenElement.appendChild(usernameElement);
-
-            Element passwordElement = document.createElementNS(WSSE_NAMESPACE, "Password");
-            passwordElement.appendChild(document.createTextNode(password));
-            passwordElement.setAttribute("Type",
-                    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
-            usernameTokenElement.appendChild(passwordElement);
-
-            Element createdElement = document.createElementNS(WSU_NAMESPACE, "Created");
-            createdElement.appendChild(document.createTextNode(DateTimeHelper.formatXmlDateTime(created)));
-            usernameTokenElement.appendChild(createdElement);
-
-            return wsseSecurityElement;
-        } catch (Exception e) {
-            // shouldn't happen...
-            throw new CmisRuntimeException("Could not build SOAP header: " + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Returns the HTTP headers that are sent with all requests. The returned
-     * map is mutable but not synchronized!
-     */
-    protected Map<String, List<String>> getFixedHeaders() {
-        return fixedHeaders;
-    }
-
-    /**
-     * Adds the {@link SessionParameter.HEADER} to the fixed headers. This
-     * method should only be called from the {@link #setSession(BindingSession)}
-     * method to avoid threading issues.
-     */
-    protected void addSessionParameterHeadersToFixedHeaders() {
-        int x = 0;
-        Object headerParam;
-        while ((headerParam = getSession().get(SessionParameter.HEADER + "." + x)) != null) {
-            String header = headerParam.toString();
-            int colon = header.indexOf(':');
-            if (colon > -1) {
-                String key = header.substring(0, colon).trim();
-                if (key.length() > 0) {
-                    String value = header.substring(colon + 1).trim();
-                    List<String> values = fixedHeaders.get(key);
-                    if (values == null) {
-                        fixedHeaders.put(key, Collections.singletonList(value));
-                    } else {
-                        List<String> newValues = new ArrayList<String>(values);
-                        newValues.add(value);
-                        fixedHeaders.put(key, newValues);
-                    }
-                }
-            }
-            x++;
-        }
-    }
-
-    /**
-     * Creates a basic authentication header value from a username and a
-     * password.
-     */
-    protected List<String> createBasicAuthHeaderValue(String username, String password) {
-        if (password == null) {
-            password = "";
-        }
-
-        Object charset = getSession().get(SessionParameter.AUTH_HTTP_BASIC_CHARSET);
-        if (charset instanceof String) {
-            charset = ((String) charset).trim();
-        } else {
-            charset = IOUtils.UTF8;
-        }
-
-        byte[] usernamePassword;
-        try {
-            usernamePassword = (username + ":" + password).getBytes((String) charset);
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding '" + charset + "'!", e);
-        }
-
-        return Collections.singletonList("Basic " + Base64.encodeBytes(usernamePassword));
-    }
-
-    /**
-     * Returns if a HTTP Basic Authentication header should be sent. (All
-     * bindings.)
-     */
-    protected boolean getSendBasicAuth() {
-        return getSession().get(SessionParameter.AUTH_HTTP_BASIC, false);
-    }
-
-    /**
-     * Returns if an OAuth Bearer token header should be sent. (All bindings.)
-     */
-    protected boolean getSendBearerToken() {
-        return getSession().get(SessionParameter.AUTH_OAUTH_BEARER, false);
-    }
-
-    /**
-     * Returns if a UsernameToken should be sent. (Web Services binding only.)
-     */
-    protected boolean getSendUsernameToken() {
-        return getSession().get(SessionParameter.AUTH_SOAP_USERNAMETOKEN, false);
-    }
-
-    /**
-     * Returns if the authentication provider should handle cookies.
-     */
-    protected boolean getHandleCookies() {
-        return getSession().get(SessionParameter.COOKIES, false);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
deleted file mode 100644
index 52f6927..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
+++ /dev/null
@@ -1,994 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.impl.RepositoryInfoCache;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisServiceUnavailableException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-
-/**
- * Base class for all AtomPub client services.
- */
-public abstract class AbstractAtomPubService implements LinkAccess {
-
-    protected enum IdentifierType {
-        ID, PATH
-    }
-
-    protected static final String NAME_COLLECTION = "collection";
-    protected static final String NAME_URI_TEMPLATE = "uritemplate";
-    protected static final String NAME_PATH_SEGMENT = "pathSegment";
-    protected static final String NAME_RELATIVE_PATH_SEGMENT = "relativePathSegment";
-    protected static final String NAME_NUM_ITEMS = "numItems";
-
-    private BindingSession session;
-
-    /**
-     * Sets the current session.
-     */
-    protected void setSession(BindingSession session) {
-        this.session = session;
-    }
-
-    /**
-     * Gets the current session.
-     */
-    protected BindingSession getSession() {
-        return session;
-    }
-
-    /**
-     * Gets the HTTP Invoker object.
-     */
-    protected HttpInvoker getHttpInvoker() {
-        return CmisBindingsHelper.getHttpInvoker(session);
-    }
-
-    /**
-     * Returns the service document URL of this session.
-     */
-    protected String getServiceDocURL() {
-        Object url = session.get(SessionParameter.ATOMPUB_URL);
-        if (url instanceof String) {
-            return (String) url;
-        }
-
-        return null;
-    }
-
-    /**
-     * Return the CMIS version of the given repository.
-     */
-    protected CmisVersion getCmisVersion(String repositoryId) {
-        if (CmisBindingsHelper.getForcedCmisVersion(session) != null) {
-            return CmisBindingsHelper.getForcedCmisVersion(session);
-        }
-
-        RepositoryInfoCache cache = CmisBindingsHelper.getRepositoryInfoCache(session);
-        RepositoryInfo info = cache.get(repositoryId);
-
-        if (info == null) {
-            List<RepositoryInfo> infoList = getRepositoriesInternal(repositoryId);
-            if (isNotEmpty(infoList)) {
-                info = infoList.get(0);
-                cache.put(info);
-            }
-        }
-
-        return (info == null ? CmisVersion.CMIS_1_0 : info.getCmisVersion());
-    }
-
-    // ---- link cache ----
-
-    /**
-     * Returns the link cache or creates a new cache if it doesn't exist.
-     */
-    protected LinkCache getLinkCache() {
-        LinkCache linkCache = (LinkCache) getSession().get(SpiSessionParameter.LINK_CACHE);
-        if (linkCache == null) {
-            linkCache = new LinkCache(getSession());
-            getSession().put(SpiSessionParameter.LINK_CACHE, linkCache);
-        }
-
-        return linkCache;
-    }
-
-    /**
-     * Gets a link from the cache.
-     */
-    protected String getLink(String repositoryId, String id, String rel, String type) {
-        if (repositoryId == null) {
-            throw new CmisInvalidArgumentException("Repository ID must be set!");
-        }
-
-        if (id == null) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        return getLinkCache().getLink(repositoryId, id, rel, type);
-    }
-
-    /**
-     * Gets a link from the cache.
-     */
-    protected String getLink(String repositoryId, String id, String rel) {
-        return getLink(repositoryId, id, rel, null);
-    }
-
-    /**
-     * Gets a link from the cache if it is there or loads it into the cache if
-     * it is not there.
-     */
-    public String loadLink(String repositoryId, String id, String rel, String type) {
-        String link = getLink(repositoryId, id, rel, type);
-        if (link == null) {
-            getObjectInternal(repositoryId, IdentifierType.ID, id, ReturnVersion.THIS, "cmis:objectId", Boolean.FALSE,
-                    IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, Boolean.FALSE, null);
-            link = getLink(repositoryId, id, rel, type);
-        }
-
-        return link;
-    }
-
-    /**
-     * Gets the content link from the cache if it is there or loads it into the
-     * cache if it is not there.
-     */
-    public String loadContentLink(String repositoryId, String id) {
-        return loadLink(repositoryId, id, AtomPubParser.LINK_REL_CONTENT, null);
-    }
-
-    /**
-     * Gets a rendition content link from the cache if it is there or loads it
-     * into the cache if it is not there.
-     */
-    public String loadRenditionContentLink(String repositoryId, String id, String streamId) {
-        return loadLink(repositoryId, id, Constants.REL_ALTERNATE, streamId);
-    }
-
-    /**
-     * Adds a link to the cache.
-     */
-    protected void addLink(String repositoryId, String id, String rel, String type, String link) {
-        getLinkCache().addLink(repositoryId, id, rel, type, link);
-    }
-
-    /**
-     * Adds a link to the cache.
-     */
-    protected void addLink(String repositoryId, String id, AtomLink link) {
-        getLinkCache().addLink(repositoryId, id, link.getRel(), link.getType(), link.getHref());
-    }
-
-    /**
-     * Removes all links of an object.
-     */
-    protected void removeLinks(String repositoryId, String id) {
-        getLinkCache().removeLinks(repositoryId, id);
-    }
-
-    /**
-     * Locks the link cache.
-     */
-    protected void lockLinks() {
-        getLinkCache().lockLinks();
-    }
-
-    /**
-     * Unlocks the link cache.
-     */
-    protected void unlockLinks() {
-        getLinkCache().unlockLinks();
-    }
-
-    /**
-     * Checks a link throw an appropriate exception.
-     */
-    protected void throwLinkException(String repositoryId, String id, String rel, String type) {
-        int index = getLinkCache().checkLink(repositoryId, id, rel, type);
-
-        switch (index) {
-        case 0:
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        case 1:
-            throw new CmisObjectNotFoundException("Unknown object!");
-        case 2:
-            throw new CmisNotSupportedException("Operation not supported by the repository for this object!");
-        case 3:
-            throw new CmisNotSupportedException("No link with matching media type!");
-        case 4:
-            throw new CmisRuntimeException("Nothing wrong! Either this is a bug or a threading issue.");
-        default:
-            throw new CmisRuntimeException("Unknown error!");
-        }
-    }
-
-    /**
-     * Gets a type link from the cache.
-     */
-    protected String getTypeLink(String repositoryId, String typeId, String rel, String type) {
-        if (repositoryId == null) {
-            throw new CmisInvalidArgumentException("Repository ID must be set!");
-        }
-
-        if (typeId == null) {
-            throw new CmisInvalidArgumentException("Type ID must be set!");
-        }
-
-        return getLinkCache().getTypeLink(repositoryId, typeId, rel, type);
-    }
-
-    /**
-     * Gets a type link from the cache.
-     */
-    protected String getTypeLink(String repositoryId, String typeId, String rel) {
-        return getTypeLink(repositoryId, typeId, rel, null);
-    }
-
-    /**
-     * Gets a link from the cache if it is there or loads it into the cache if
-     * it is not there.
-     */
-    protected String loadTypeLink(String repositoryId, String typeId, String rel, String type) {
-        String link = getTypeLink(repositoryId, typeId, rel, type);
-        if (link == null) {
-            getTypeDefinitionInternal(repositoryId, typeId);
-            link = getTypeLink(repositoryId, typeId, rel, type);
-        }
-
-        return link;
-    }
-
-    /**
-     * Adds a type link to the cache.
-     */
-    protected void addTypeLink(String repositoryId, String typeId, String rel, String type, String link) {
-        getLinkCache().addTypeLink(repositoryId, typeId, rel, type, link);
-    }
-
-    /**
-     * Adds a type link to the cache.
-     */
-    protected void addTypeLink(String repositoryId, String typeId, AtomLink link) {
-        getLinkCache().addTypeLink(repositoryId, typeId, link.getRel(), link.getType(), link.getHref());
-    }
-
-    /**
-     * Removes all links of a type.
-     */
-    protected void removeTypeLinks(String repositoryId, String id) {
-        getLinkCache().removeTypeLinks(repositoryId, id);
-    }
-
-    /**
-     * Locks the type link cache.
-     */
-    protected void lockTypeLinks() {
-        getLinkCache().lockTypeLinks();
-    }
-
-    /**
-     * Unlocks the type link cache.
-     */
-    protected void unlockTypeLinks() {
-        getLinkCache().unlockTypeLinks();
-    }
-
-    /**
-     * Gets a collection from the cache.
-     */
-    protected String getCollection(String repositoryId, String collection) {
-        return getLinkCache().getCollection(repositoryId, collection);
-    }
-
-    /**
-     * Gets a collection from the cache if it is there or loads it into the
-     * cache if it is not there.
-     */
-    protected String loadCollection(String repositoryId, String collection) {
-        String link = getCollection(repositoryId, collection);
-        if (link == null) {
-            // cache repository info
-            getRepositoriesInternal(repositoryId);
-            link = getCollection(repositoryId, collection);
-        }
-
-        return link;
-    }
-
-    /**
-     * Adds a collection to the cache.
-     */
-    protected void addCollection(String repositoryId, String collection, String link) {
-        getLinkCache().addCollection(repositoryId, collection, link);
-    }
-
-    /**
-     * Gets a repository link from the cache.
-     */
-    protected String getRepositoryLink(String repositoryId, String rel) {
-        return getLinkCache().getRepositoryLink(repositoryId, rel);
-    }
-
-    /**
-     * Gets a repository link from the cache if it is there or loads it into the
-     * cache if it is not there.
-     */
-    protected String loadRepositoryLink(String repositoryId, String rel) {
-        String link = getRepositoryLink(repositoryId, rel);
-        if (link == null) {
-            // cache repository info
-            getRepositoriesInternal(repositoryId);
-            link = getRepositoryLink(repositoryId, rel);
-        }
-
-        return link;
-    }
-
-    /**
-     * Adds a repository link to the cache.
-     */
-    protected void addRepositoryLink(String repositoryId, String rel, String link) {
-        getLinkCache().addRepositoryLink(repositoryId, rel, link);
-    }
-
-    /**
-     * Adds a repository link to the cache.
-     */
-    protected void addRepositoryLink(String repositoryId, AtomLink link) {
-        addRepositoryLink(repositoryId, link.getRel(), link.getHref());
-    }
-
-    /**
-     * Gets an URI template from the cache.
-     */
-    protected String getTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {
-        return getLinkCache().getTemplateLink(repositoryId, type, parameters);
-    }
-
-    /**
-     * Gets a template link from the cache if it is there or loads it into the
-     * cache if it is not there.
-     */
-    protected String loadTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {
-        String link = getTemplateLink(repositoryId, type, parameters);
-        if (link == null) {
-            // cache repository info
-            getRepositoriesInternal(repositoryId);
-            link = getTemplateLink(repositoryId, type, parameters);
-        }
-
-        return link;
-    }
-
-    /**
-     * Adds an URI template to the cache.
-     */
-    protected void addTemplate(String repositoryId, String type, String link) {
-        getLinkCache().addTemplate(repositoryId, type, link);
-    }
-
-    // ---- exceptions ----
-
-    /**
-     * Converts a HTTP status code into an Exception.
-     */
-    protected CmisBaseException convertStatusCode(int code, String message, String errorContent, Throwable t) {
-        String exception = extractException(errorContent);
-        message = extractErrorMessage(message, errorContent);
-
-        switch (code) {
-        case 301:
-        case 302:
-        case 303:
-        case 307:
-            return new CmisConnectionException("Redirects are not supported (HTTP status code " + code + "): "
-                    + message, errorContent, t);
-        case 400:
-            if (CmisFilterNotValidException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisFilterNotValidException(message, errorContent, t);
-            }
-            return new CmisInvalidArgumentException(message, errorContent, t);
-        case 401:
-            return new CmisUnauthorizedException(message, errorContent, t);
-        case 403:
-            if (CmisStreamNotSupportedException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisStreamNotSupportedException(message, errorContent, t);
-            }
-            return new CmisPermissionDeniedException(message, errorContent, t);
-        case 404:
-            return new CmisObjectNotFoundException(message, errorContent, t);
-        case 405:
-            return new CmisNotSupportedException(message, errorContent, t);
-        case 407:
-            return new CmisProxyAuthenticationException(message, errorContent, t);
-        case 409:
-            if (CmisContentAlreadyExistsException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisContentAlreadyExistsException(message, errorContent, t);
-            } else if (CmisVersioningException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisVersioningException(message, errorContent, t);
-            } else if (CmisUpdateConflictException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisUpdateConflictException(message, errorContent, t);
-            } else if (CmisNameConstraintViolationException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisNameConstraintViolationException(message, errorContent, t);
-            }
-            return new CmisConstraintException(message, errorContent, t);
-        case 503:
-            return new CmisServiceUnavailableException(message, errorContent, t);
-        default:
-            if (CmisStorageException.EXCEPTION_NAME.equals(exception)) {
-                return new CmisStorageException(message, errorContent, t);
-            }
-            return new CmisRuntimeException(message, errorContent, t);
-        }
-    }
-
-    protected String extractException(String errorContent) {
-        if (errorContent == null) {
-            return null;
-        }
-
-        int begin = errorContent.indexOf("<!--exception-->");
-        int end = errorContent.indexOf("<!--/exception-->");
-
-        if (begin == -1 || end == -1 || begin > end) {
-            return null;
-        }
-
-        return errorContent.substring(begin + "<!--exception-->".length(), end);
-    }
-
-    protected String extractErrorMessage(String message, String errorContent) {
-        if (errorContent == null) {
-            return message;
-        }
-
-        int begin = errorContent.indexOf("<!--message-->");
-        int end = errorContent.indexOf("<!--/message-->");
-
-        if (begin == -1 || end == -1 || begin > end) {
-            return message;
-        }
-
-        return errorContent.substring(begin + "<!--message-->".length(), end);
-    }
-
-    // ---- helpers ----
-
-    protected boolean is(String name, AtomElement element) {
-        return name.equals(element.getName().getLocalPart());
-    }
-
-    protected boolean isStr(String name, AtomElement element) {
-        return is(name, element) && (element.getObject() instanceof String);
-    }
-
-    protected boolean isInt(String name, AtomElement element) {
-        return is(name, element) && (element.getObject() instanceof BigInteger);
-    }
-
-    protected boolean isNextLink(AtomElement element) {
-        return Constants.REL_NEXT.equals(((AtomLink) element.getObject()).getRel());
-    }
-
-    /**
-     * Creates a CMIS object with properties and policy IDs.
-     */
-    protected ObjectDataImpl createObject(Properties properties, String changeToken, List<String> policies) {
-        ObjectDataImpl object = new ObjectDataImpl();
-
-        boolean omitChangeToken = getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false);
-
-        if (properties == null) {
-            properties = new PropertiesImpl();
-            if (changeToken != null && !omitChangeToken) {
-                ((PropertiesImpl) properties)
-                        .addProperty(new PropertyStringImpl(PropertyIds.CHANGE_TOKEN, changeToken));
-            }
-        } else {
-            if (omitChangeToken) {
-                if (properties.getProperties().containsKey(PropertyIds.CHANGE_TOKEN)) {
-                    properties = new PropertiesImpl(properties);
-                    ((PropertiesImpl) properties).removeProperty(PropertyIds.CHANGE_TOKEN);
-                }
-            } else {
-                if (changeToken != null && !properties.getProperties().containsKey(PropertyIds.CHANGE_TOKEN)) {
-                    properties = new PropertiesImpl(properties);
-                    ((PropertiesImpl) properties).addProperty(new PropertyStringImpl(PropertyIds.CHANGE_TOKEN,
-                            changeToken));
-                }
-            }
-        }
-
-        object.setProperties(properties);
-
-        if (isNotEmpty(policies)) {
-            PolicyIdListImpl policyIdList = new PolicyIdListImpl();
-            policyIdList.setPolicyIds(policies);
-            object.setPolicyIds(policyIdList);
-        }
-
-        return object;
-    }
-
-    /**
-     * Creates a CMIS object that only contains an ID in the property list.
-     */
-    protected ObjectData createIdObject(String objectId) {
-        ObjectDataImpl object = new ObjectDataImpl();
-
-        PropertiesImpl properties = new PropertiesImpl();
-        object.setProperties(properties);
-
-        properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_ID, objectId));
-
-        return object;
-    }
-
-    /**
-     * Parses an input stream.
-     */
-    @SuppressWarnings("unchecked")
-    protected <T extends AtomBase> T parse(InputStream stream, Class<T> clazz) {
-        AtomPubParser parser = new AtomPubParser(stream);
-
-        try {
-            parser.parse();
-        } catch (Exception e) {
-            throw new CmisConnectionException("Parsing exception!", e);
-        }
-
-        AtomBase parseResult = parser.getResults();
-
-        if (!clazz.isInstance(parseResult)) {
-            throw new CmisConnectionException("Unexpected document! Received: "
-                    + (parseResult == null ? "something unknown" : parseResult.getType()));
-        }
-
-        return (T) parseResult;
-    }
-
-    /**
-     * Performs a GET on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response read(UrlBuilder url) {
-        // make the call
-        Response resp = getHttpInvoker().invokeGET(url, session);
-
-        // check response code
-        if (resp.getResponseCode() != 200) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        return resp;
-    }
-
-    /**
-     * Performs a POST on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response post(UrlBuilder url, String contentType, Output writer) {
-        // make the call
-        Response resp = getHttpInvoker().invokePOST(url, contentType, writer, session);
-
-        // check response code
-        if (resp.getResponseCode() != 201) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        return resp;
-    }
-
-    /**
-     * Performs a PUT on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response put(UrlBuilder url, String contentType, Output writer) {
-        return put(url, contentType, null, writer);
-    }
-
-    /**
-     * Performs a PUT on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response put(UrlBuilder url, String contentType, Map<String, String> headers, Output writer) {
-        // make the call
-        Response resp = getHttpInvoker().invokePUT(url, contentType, headers, writer, session);
-
-        // check response code
-        if ((resp.getResponseCode() < 200) || (resp.getResponseCode() > 299)) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        return resp;
-    }
-
-    /**
-     * Performs a DELETE on an URL, checks the response code and returns the
-     * result.
-     */
-    protected void delete(UrlBuilder url) {
-        // make the call
-        Response resp = getHttpInvoker().invokeDELETE(url, session);
-
-        // check response code
-        if (resp.getResponseCode() != 204) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-    }
-
-    // ---- common operations ----
-
-    /**
-     * Checks if at least one ACE list is not empty.
-     */
-    protected boolean isAclMergeRequired(Acl addAces, Acl removeAces) {
-        return (addAces != null && isNotEmpty(addAces.getAces()))
-                || (removeAces != null && isNotEmpty(removeAces.getAces()));
-    }
-
-    /**
-     * Merges the new ACL from original, add and remove ACEs lists.
-     */
-    protected Acl mergeAcls(Acl originalAces, Acl addAces, Acl removeAces) {
-        Map<String, Set<String>> originals = convertAclToMap(originalAces);
-        Map<String, Set<String>> adds = convertAclToMap(addAces);
-        Map<String, Set<String>> removes = convertAclToMap(removeAces);
-        List<Ace> newAces = new ArrayList<Ace>();
-
-        // iterate through the original ACEs
-        for (Map.Entry<String, Set<String>> ace : originals.entrySet()) {
-
-            // add permissions
-            Set<String> addPermissions = adds.get(ace.getKey());
-            if (addPermissions != null) {
-                ace.getValue().addAll(addPermissions);
-            }
-
-            // remove permissions
-            Set<String> removePermissions = removes.get(ace.getKey());
-            if (removePermissions != null) {
-                ace.getValue().removeAll(removePermissions);
-            }
-
-            // create new ACE
-            if (!ace.getValue().isEmpty()) {
-                newAces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ace.getKey()),
-                        new ArrayList<String>(ace.getValue())));
-            }
-        }
-
-        // find all ACEs that should be added but are not in the original ACE
-        // list
-        for (Map.Entry<String, Set<String>> ace : adds.entrySet()) {
-            if (!originals.containsKey(ace.getKey()) && !ace.getValue().isEmpty()) {
-                newAces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ace.getKey()),
-                        new ArrayList<String>(ace.getValue())));
-            }
-        }
-
-        return new AccessControlListImpl(newAces);
-    }
-
-    /**
-     * Converts a list of ACEs into Map for better handling.
-     */
-    private static Map<String, Set<String>> convertAclToMap(Acl acl) {
-        Map<String, Set<String>> result = new HashMap<String, Set<String>>();
-
-        if (acl == null || acl.getAces() == null) {
-            return result;
-        }
-
-        for (Ace ace : acl.getAces()) {
-            // don't consider indirect ACEs - we can't change them
-            if (!ace.isDirect()) {
-                // ignore
-                continue;
-            }
-
-            // although a principal must not be null, check it
-            if (ace.getPrincipal() == null || ace.getPrincipal().getId() == null) {
-                // ignore
-                continue;
-            }
-
-            Set<String> permissions = result.get(ace.getPrincipal().getId());
-            if (permissions == null) {
-                permissions = new HashSet<String>();
-                result.put(ace.getPrincipal().getId(), permissions);
-            }
-
-            if (ace.getPermissions() != null) {
-                permissions.addAll(ace.getPermissions());
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Retrieves the Service Document from the server and caches the repository
-     * info objects, collections, links, URI templates, etc.
-     */
-    @SuppressWarnings("unchecked")
-    protected List<RepositoryInfo> getRepositoriesInternal(String repositoryId) {
-        List<RepositoryInfo> repInfos = new ArrayList<RepositoryInfo>();
-
-        // retrieve service doc
-        UrlBuilder url = new UrlBuilder(getServiceDocURL());
-        url.addParameter(Constants.PARAM_REPOSITORY_ID, repositoryId);
-
-        // read and parse
-        Response resp = read(url);
-        ServiceDoc serviceDoc = parse(resp.getStream(), ServiceDoc.class);
-
-        // walk through the workspaces
-        for (RepositoryWorkspace ws : serviceDoc.getWorkspaces()) {
-            if (ws.getId() == null) {
-                // found a non-CMIS workspace
-                continue;
-            }
-
-            for (AtomElement element : ws.getElements()) {
-                if (is(NAME_COLLECTION, element)) {
-                    Map<String, String> colMap = (Map<String, String>) element.getObject();
-                    addCollection(ws.getId(), colMap.get("collectionType"), colMap.get("href"));
-                } else if (element.getObject() instanceof AtomLink) {
-                    addRepositoryLink(ws.getId(), (AtomLink) element.getObject());
-                } else if (is(NAME_URI_TEMPLATE, element)) {
-                    Map<String, String> tempMap = (Map<String, String>) element.getObject();
-                    addTemplate(ws.getId(), tempMap.get("type"), tempMap.get("template"));
-                } else if (element.getObject() instanceof RepositoryInfo) {
-                    repInfos.add((RepositoryInfo) element.getObject());
-                }
-            }
-        }
-
-        return repInfos;
-    }
-
-    /**
-     * Retrieves an object from the server and caches the links.
-     */
-    protected ObjectData getObjectInternal(String repositoryId, IdentifierType idOrPath, String objectIdOrPath,
-            ReturnVersion returnVersion, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-
-        Map<String, Object> parameters = new HashMap<String, Object>();
-        parameters.put(Constants.PARAM_ID, objectIdOrPath);
-        parameters.put(Constants.PARAM_PATH, objectIdOrPath);
-        parameters.put(Constants.PARAM_RETURN_VERSION, returnVersion);
-        parameters.put(Constants.PARAM_FILTER, filter);
-        parameters.put(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        parameters.put(Constants.PARAM_ACL, includeAcl);
-        parameters.put(Constants.PARAM_POLICY_IDS, includePolicyIds);
-        parameters.put(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        parameters.put(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-
-        String link = loadTemplateLink(repositoryId, (idOrPath == IdentifierType.ID ? Constants.TEMPLATE_OBJECT_BY_ID
-                : Constants.TEMPLATE_OBJECT_BY_PATH), parameters);
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        // workaround for missing template parameter in the CMIS spec
-        if (returnVersion != null && returnVersion != ReturnVersion.THIS) {
-            url.addParameter(Constants.PARAM_RETURN_VERSION, returnVersion);
-        }
-
-        // read and parse
-        Response resp = read(url);
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        lockLinks();
-        ObjectData result = null;
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof ObjectData) {
-                    result = (ObjectData) element.getObject();
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-
-        return result;
-    }
-
-    /**
-     * Retrieves a type definition.
-     */
-    protected TypeDefinition getTypeDefinitionInternal(String repositoryId, String typeId) {
-
-        Map<String, Object> parameters = new HashMap<String, Object>();
-        parameters.put(Constants.PARAM_ID, typeId);
-
-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        // read and parse
-        Response resp = read(new UrlBuilder(link));
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        lockTypeLinks();
-        TypeDefinition result = null;
-        try {
-            // clean up cache
-            removeTypeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof TypeDefinition) {
-                    result = (TypeDefinition) element.getObject();
-                }
-            }
-        } finally {
-            unlockTypeLinks();
-        }
-
-        return result;
-    }
-
-    /**
-     * Retrieves the ACL of an object.
-     */
-    public Acl getAclInternal(String repositoryId, String objectId, Boolean onlyBasicPermissions,
-            ExtensionsData extension) {
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_ONLY_BASIC_PERMISSIONS, onlyBasicPermissions);
-
-        // read and parse
-        Response resp = read(url);
-        AtomAcl acl = parse(resp.getStream(), AtomAcl.class);
-
-        return acl.getACL();
-    }
-
-    /**
-     * Updates the ACL of an object.
-     */
-    protected AtomAcl updateAcl(String repositoryId, String objectId, final Acl acl, AclPropagation aclPropagation) {
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_ACL, Constants.MEDIATYPE_ACL);
-        }
-
-        UrlBuilder aclUrl = new UrlBuilder(link);
-        aclUrl.addParameter(Constants.PARAM_ACL_PROPAGATION, aclPropagation);
-
-        final CmisVersion cmisVersion = getCmisVersion(repositoryId);
-
-        // update
-        Response resp = put(aclUrl, Constants.MEDIATYPE_ACL, new Output() {
-            public void write(OutputStream out) throws Exception {
-                XMLStreamWriter writer = XMLUtils.createWriter(out);
-                XMLUtils.startXmlDocument(writer);
-                XMLConverter.writeAcl(writer, cmisVersion, true, acl);
-                XMLUtils.endXmlDocument(writer);
-            }
-        });
-
-        // parse new entry
-        return parse(resp.getStream(), AtomAcl.class);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
deleted file mode 100644
index da84943..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;
-
-/**
- * ACL Service AtomPub client.
- */
-public class AclServiceImpl extends AbstractAtomPubService implements AclService, ExtendedAclService {
-
-    /**
-     * Constructor.
-     */
-    public AclServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-
-        // fetch the current ACL
-        Acl originalAces = getAcl(repositoryId, objectId, false, null);
-
-        // if no changes required, just return the ACL
-        if (!isAclMergeRequired(addAces, removeAces)) {
-            return originalAces;
-        }
-
-        // merge ACLs
-        Acl newACL = mergeAcls(originalAces, addAces, removeAces);
-
-        // update ACL
-        AtomAcl acl = updateAcl(repositoryId, objectId, newACL, aclPropagation);
-        Acl result = acl.getACL();
-
-        return result;
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        return getAclInternal(repositoryId, objectId, onlyBasicPermissions, extension);
-    }
-
-    public Acl setAcl(String repositoryId, String objectId, Acl aces) {
-        AtomAcl acl = updateAcl(repositoryId, objectId, aces, AclPropagation.OBJECTONLY);
-        Acl result = acl.getACL();
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java
deleted file mode 100644
index 4ac0ad7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_ID;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_TITLE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ATOM_UPDATED;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_BASE64;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_FILENAME;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT_MEDIATYPE;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-
-/**
- * Writes a CMIS Atom entry to an output stream.
- */
-public class AtomEntryWriter {
-
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    private final CmisVersion cmisVersion;
-    private final ObjectData object;
-    private final ContentStream contentStream;
-    private final InputStream stream;
-    private final TypeDefinition typeDef;
-    private final BulkUpdateImpl bulkUpdate;
-
-    /**
-     * Constructor for objects.
-     */
-    public AtomEntryWriter(ObjectData object, CmisVersion cmisVersion) {
-        this(object, cmisVersion, null);
-    }
-
-    /**
-     * Constructor for objects.
-     */
-    public AtomEntryWriter(ObjectData object, CmisVersion cmisVersion, ContentStream contentStream) {
-        if ((object == null) || (object.getProperties() == null)) {
-            throw new CmisInvalidArgumentException("Object and properties must not be null!");
-        }
-
-        if ((contentStream != null) && (contentStream.getMimeType() == null)) {
-            throw new CmisInvalidArgumentException("Media type must be set if a stream is present!");
-        }
-
-        this.object = object;
-        this.cmisVersion = cmisVersion;
-        this.contentStream = contentStream;
-        if (contentStream != null && contentStream.getStream() != null) {
-            InputStream in = contentStream.getStream();
-
-            // avoid double buffering
-            if (!(in instanceof BufferedInputStream) && !(in instanceof ByteArrayInputStream)) {
-                stream = new BufferedInputStream(in, BUFFER_SIZE);
-            } else {
-                stream = in;
-            }
-        } else {
-            stream = null;
-        }
-        this.typeDef = null;
-        this.bulkUpdate = null;
-    }
-
-    /**
-     * Constructor for types.
-     */
-    public AtomEntryWriter(TypeDefinition type, CmisVersion cmisVersion) {
-        if (type == null) {
-            throw new CmisInvalidArgumentException("Type must not be null!");
-        }
-
-        this.typeDef = type;
-        this.cmisVersion = cmisVersion;
-        this.object = null;
-        this.contentStream = null;
-        this.stream = null;
-        this.bulkUpdate = null;
-    }
-
-    /**
-     * Constructor for bulk updates.
-     */
-    public AtomEntryWriter(BulkUpdateImpl bulkUpdate) {
-        if (bulkUpdate == null) {
-            throw new CmisInvalidArgumentException("Bulk update data must not be null!");
-        }
-
-        this.bulkUpdate = bulkUpdate;
-        this.typeDef = null;
-        this.cmisVersion = CmisVersion.CMIS_1_1;
-        this.object = null;
-        this.contentStream = null;
-        this.stream = null;
-    }
-
-    /**
-     * Writes the entry to an output stream.
-     * 
-     * @throws XMLStreamException
-     */
-    public void write(OutputStream out) throws XMLStreamException, IOException {
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-
-        XMLUtils.startXmlDocument(writer);
-
-        writer.writeStartElement(XMLConstants.PREFIX_ATOM, "entry", XMLConstants.NAMESPACE_ATOM);
-
-        writer.writeNamespace(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-        writer.writeNamespace(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-        writer.writeNamespace(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-        if (contentStream != null && contentStream.getFileName() != null) {
-            writer.writeNamespace(XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY);
-        }
-
-        // atom:id
-        XMLUtils.write(writer, XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_ID,
-                "urn:uuid:00000000-0000-0000-0000-00000000000");
-
-        // atom:title
-        XMLUtils.write(writer, XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_TITLE, getTitle());
-
-        // atom:updated
-        XMLUtils.write(writer, XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, TAG_ATOM_UPDATED,
-                new GregorianCalendar(TimeZone.getTimeZone("GMT")));
-
-        // content
-        if (stream != null) {
-            writer.writeStartElement(XMLConstants.PREFIX_RESTATOM, TAG_CONTENT, XMLConstants.NAMESPACE_RESTATOM);
-
-            XMLUtils.write(writer, XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM,
-                    TAG_CONTENT_MEDIATYPE, contentStream.getMimeType());
-
-            if (contentStream.getFileName() != null) {
-                XMLUtils.write(writer, XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY,
-                        TAG_CONTENT_FILENAME, contentStream.getFileName());
-            }
-
-            writer.writeStartElement(XMLConstants.PREFIX_RESTATOM, TAG_CONTENT_BASE64, XMLConstants.NAMESPACE_RESTATOM);
-            writeContent(writer);
-            writer.writeEndElement();
-
-            writer.writeEndElement();
-        }
-
-        // object
-        if (object != null) {
-            XMLConverter.writeObject(writer, cmisVersion, XMLConstants.NAMESPACE_RESTATOM, object);
-        }
-
-        // type
-        if (typeDef != null) {
-            XMLConverter.writeTypeDefinition(writer, cmisVersion, XMLConstants.NAMESPACE_RESTATOM, typeDef);
-        }
-
-        // bulk update
-        if (bulkUpdate != null) {
-            XMLConverter.writeBulkUpdate(writer, XMLConstants.NAMESPACE_RESTATOM, bulkUpdate);
-        }
-
-        // end entry
-        writer.writeEndElement();
-
-        // end document
-        XMLUtils.endXmlDocument(writer);
-    }
-
-    // ---- internal ----
-
-    private String getTitle() {
-        String result = "";
-
-        if (object != null) {
-            PropertyData<?> nameProperty = object.getProperties().getProperties().get(PropertyIds.NAME);
-            if (nameProperty instanceof PropertyString) {
-                result = ((PropertyString) nameProperty).getFirstValue();
-            }
-        }
-
-        if (typeDef != null) {
-            if (typeDef.getDisplayName() != null) {
-                result = typeDef.getDisplayName();
-            }
-        }
-
-        if (bulkUpdate != null) {
-            result = "Bulk Update Properties";
-        }
-
-        return result;
-    }
-
-    private void writeContent(XMLStreamWriter writer) throws XMLStreamException, IOException {
-        @SuppressWarnings("resource")
-        Base64.InputStream b64stream = new Base64.InputStream(stream, Base64.ENCODE);
-
-        char[] buffer = new char[BUFFER_SIZE];
-        int pos = 0;
-        int b;
-        while ((b = b64stream.read()) > -1) {
-            buffer[pos++] = (char) (b & 0xFF);
-            if (pos == buffer.length) {
-                writer.writeCharacters(buffer, 0, buffer.length);
-                pos = 0;
-            }
-        }
-        if (pos > 0) {
-            writer.writeCharacters(buffer, 0, pos);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java
deleted file mode 100644
index 3b95354..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.CONTENT_SRC;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_HREF;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_REL;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACL;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ALLOWABLEACTIONS;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CHILDREN;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_COLLECTION;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_COLLECTION_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ENTRY;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_FEED;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_HTML;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_LINK;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_NUM_ITEMS;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_RELATIVE_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPOSITORY_INFO;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_SERVICE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TEMPLATE_TEMPLATE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TEMPLATE_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_URI_TEMPLATE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_WORKSPACE;
-
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAllowableActions;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.HtmlDoc;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstraints;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-
-/**
- * AtomPub Parser.
- */
-public class AtomPubParser {
-
-    // public constants
-    public static final String LINK_REL_CONTENT = "@@content@@";
-
-    private final InputStream stream;
-    private AtomBase parseResult;
-
-    public AtomPubParser(InputStream stream) {
-        if (stream == null) {
-            throw new IllegalArgumentException("No stream.");
-        }
-
-        this.stream = stream;
-    }
-
-    /**
-     * Parses the stream.
-     */
-    public void parse() throws XMLStreamException {
-        XMLStreamReader parser = XMLUtils.createParser(stream);
-
-        try {
-            while (true) {
-                int event = parser.getEventType();
-                if (event == XMLStreamReader.START_ELEMENT) {
-                    QName name = parser.getName();
-
-                    if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-                        if (TAG_FEED.equals(name.getLocalPart())) {
-                            parseResult = parseFeed(parser);
-                            break;
-                        } else if (TAG_ENTRY.equals(name.getLocalPart())) {
-                            parseResult = parseEntry(parser);
-                            break;
-                        }
-                    } else if (XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI())) {
-                        if (TAG_ALLOWABLEACTIONS.equals(name.getLocalPart())) {
-                            parseResult = parseAllowableActions(parser);
-                            break;
-                        } else if (TAG_ACL.equals(name.getLocalPart())) {
-                            parseResult = parseACL(parser);
-                            break;
-                        }
-                    } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
-                        if (TAG_SERVICE.equals(name.getLocalPart())) {
-                            parseResult = parseServiceDoc(parser);
-                            break;
-                        }
-                    } else if (TAG_HTML.equalsIgnoreCase(name.getLocalPart())) {
-                        parseResult = new HtmlDoc();
-                        break;
-                    }
-                }
-
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-
-        } finally {
-            try {
-                parser.close();
-            } catch (XMLStreamException xse) {
-                // there is nothing we can do
-            }
-
-            // make sure the stream is read and closed in all cases
-            IOUtils.consumeAndClose(stream);
-        }
-    }
-
-    /**
-     * Return the parse results.
-     */
-    public AtomBase getResults() {
-        return parseResult;
-    }
-
-    /**
-     * Parses a service document.
-     */
-    private static ServiceDoc parseServiceDoc(XMLStreamReader parser) throws XMLStreamException {
-        ServiceDoc result = new ServiceDoc();
-
-        XMLUtils.next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-
-                if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
-                    if (TAG_WORKSPACE.equals(name.getLocalPart())) {
-                        result.addWorkspace(parseWorkspace(parser));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Parses a workspace element in a service document.
-     */
-    private static RepositoryWorkspace parseWorkspace(XMLStreamReader parser) throws XMLStreamException {
-        RepositoryWorkspace workspace = new RepositoryWorkspace();
-
-        XMLUtils.next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                AtomElement element = parseWorkspaceElement(parser);
-
-                // check if we can extract the workspace id
-                if ((element != null) && (element.getObject() instanceof RepositoryInfo)) {
-                    workspace.setId(((RepositoryInfo) element.getObject()).getId());
-                }
-
-                // add to workspace
-                workspace.addElement(element);
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return workspace;
-    }
-
-    /**
-     * Parses an Atom feed.
-     */
-    private AtomFeed parseFeed(XMLStreamReader parser) throws XMLStreamException {
-        AtomFeed result = new AtomFeed();
-
-        XMLUtils.next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-
-                if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_LINK.equals(name.getLocalPart())) {
-                        result.addElement(parseLink(parser));
-                    } else if (TAG_ENTRY.equals(name.getLocalPart())) {
-                        result.addEntry(parseEntry(parser));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_NUM_ITEMS.equals(name.getLocalPart())) {
-                        result.addElement(parseBigInteger(parser));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else if (XMLConstants.NAMESPACE_APACHE_CHEMISTRY.equals(name.getNamespaceURI())) {
-                    result.addElement(parseText(parser));
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return result;
-    }
-
-    /**
-     * Parses an Atom entry.
-     */
-    private AtomEntry parseEntry(XMLStreamReader parser) throws XMLStreamException {
-        AtomEntry result = new AtomEntry();
-
-        XMLUtils.next(parser);
-
-        // walk through all tags in entry
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                AtomElement element = parseElement(parser);
-                if (element != null) {
-                    // add to entry
-                    result.addElement(element);
-
-                    // find and set object id
-                    if (element.getObject() instanceof ObjectData) {
-                        result.setId(((ObjectData) element.getObject()).getId());
-                    } else if (element.getObject() instanceof TypeDefinition) {
-                        result.setId(((TypeDefinition) element.getObject()).getId());
-                    }
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return result;
-    }
-
-    /**
-     * Parses an Allowable Actions document.
-     */
-    private static AtomAllowableActions parseAllowableActions(XMLStreamReader parser) throws XMLStreamException {
-        return new AtomAllowableActions(XMLConverter.convertAllowableActions(parser));
-    }
-
-    /**
-     * Parses an ACL document.
-     */
-    private static AtomAcl parseACL(XMLStreamReader parser) throws XMLStreamException {
-        return new AtomAcl(XMLConverter.convertAcl(parser));
-    }
-
-    /**
-     * Parses an element.
-     */
-    private AtomElement parseElement(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-
-        if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
-            if (TAG_OBJECT.equals(name.getLocalPart())) {
-                return new AtomElement(name, XMLConverter.convertObject(parser));
-            } else if (TAG_PATH_SEGMENT.equals(name.getLocalPart())
-                    || TAG_RELATIVE_PATH_SEGMENT.equals(name.getLocalPart())) {
-                return parseText(parser);
-            } else if (TAG_TYPE.equals(name.getLocalPart())) {
-                return new AtomElement(name, XMLConverter.convertTypeDefinition(parser));
-            } else if (TAG_CHILDREN.equals(name.getLocalPart())) {
-                return parseChildren(parser);
-            }
-        } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-            if (TAG_LINK.equals(name.getLocalPart())) {
-                return parseLink(parser);
-            } else if (TAG_CONTENT.equals(name.getLocalPart())) {
-                return parseAtomContentSrc(parser);
-            }
-        }
-
-        // we don't know it - skip it
-        XMLUtils.skip(parser);
-
-        return null;
-    }
-
-    /**
-     * Parses a children element.
-     */
-    private AtomElement parseChildren(XMLStreamReader parser) throws XMLStreamException {
-        AtomElement result = null;
-        QName childName = parser.getName();
-
-        XMLUtils.next(parser);
-
-        // walk through the children tag
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-
-                if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_FEED.equals(name.getLocalPart())) {
-                        result = new AtomElement(childName, parseFeed(parser));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return result;
-    }
-
-    /**
-     * Parses a workspace element.
-     */
-    private static AtomElement parseWorkspaceElement(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-
-        if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
-            if (TAG_REPOSITORY_INFO.equals(name.getLocalPart())) {
-                return new AtomElement(name, XMLConverter.convertRepositoryInfo(parser));
-            } else if (TAG_URI_TEMPLATE.equals(name.getLocalPart())) {
-                return parseTemplate(parser);
-            }
-        } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-            if (TAG_LINK.equals(name.getLocalPart())) {
-                return parseLink(parser);
-            }
-        } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
-            if (TAG_COLLECTION.equals(name.getLocalPart())) {
-                return parseCollection(parser);
-            }
-        }
-
-        // we don't know it - skip it
-        XMLUtils.skip(parser);
-
-        return null;
-    }
-
-    /**
-     * Parses a collection tag.
-     */
-    private static AtomElement parseCollection(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        Map<String, String> result = new HashMap<String, String>();
-
-        result.put("href", parser.getAttributeValue(null, "href"));
-
-        XMLUtils.next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName tagName = parser.getName();
-                if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())
-                        && TAG_COLLECTION_TYPE.equals(tagName.getLocalPart())) {
-                    result.put("collectionType", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return new AtomElement(name, result);
-    }
-
-    /**
-     * Parses a template tag.
-     */
-    private static AtomElement parseTemplate(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        Map<String, String> result = new HashMap<String, String>();
-
-        XMLUtils.next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName tagName = parser.getName();
-                if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())) {
-                    if (TAG_TEMPLATE_TEMPLATE.equals(tagName.getLocalPart())) {
-                        result.put("template", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-                    } else if (TAG_TEMPLATE_TYPE.equals(tagName.getLocalPart())) {
-                        result.put("type", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-
-        return new AtomElement(name, result);
-    }
-
-    /**
-     * Parses a link tag.
-     */
-    private static AtomElement parseLink(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        AtomLink result = new AtomLink();
-
-        // save attributes
-        for (int i = 0; i < parser.getAttributeCount(); i++) {
-            if (LINK_REL.equals(parser.getAttributeLocalName(i))) {
-                result.setRel(parser.getAttributeValue(i));
-            } else if (LINK_HREF.equals(parser.getAttributeLocalName(i))) {
-                result.setHref(parser.getAttributeValue(i));
-            } else if (LINK_TYPE.equals(parser.getAttributeLocalName(i))) {
-                result.setType(parser.getAttributeValue(i));
-            }
-        }
-
-        // skip enclosed tags, if any
-        XMLUtils.skip(parser);
-
-        return new AtomElement(name, result);
-    }
-
-    /**
-     * Parses a link tag.
-     */
-    private static AtomElement parseAtomContentSrc(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        AtomLink result = new AtomLink();
-        result.setRel(LINK_REL_CONTENT);
-
-        // save attributes
-        for (int i = 0; i < parser.getAttributeCount(); i++) {
-            if (CONTENT_SRC.equals(parser.getAttributeLocalName(i))) {
-                result.setHref(parser.getAttributeValue(i));
-            }
-        }
-
-        // skip enclosed tags, if any
-        XMLUtils.skip(parser);
-
-        return new AtomElement(name, result);
-    }
-
-    /**
-     * Parses a text tag.
-     */
-    private static AtomElement parseText(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        return new AtomElement(name, XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-    }
-
-    /**
-     * Parses a text tag and convert it into an integer.
-     */
-    private static AtomElement parseBigInteger(XMLStreamReader parser) throws XMLStreamException {
-        QName name = parser.getName();
-        return new AtomElement(name, new BigInteger(XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH)));
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java
deleted file mode 100644
index 86e2b49..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-
-/**
- * Constants for AtomPub.
- */
-public final class CmisAtomPubConstants {
-
-    private CmisAtomPubConstants() {
-    }
-
-    // service doc
-    public static final String TAG_SERVICE = "service";
-    public static final String TAG_WORKSPACE = "workspace";
-    public static final String TAG_REPOSITORY_INFO = "repositoryInfo";
-    public static final String TAG_COLLECTION = "collection";
-    public static final String TAG_COLLECTION_TYPE = "collectionType";
-    public static final String TAG_URI_TEMPLATE = "uritemplate";
-    public static final String TAG_TEMPLATE_TEMPLATE = "template";
-    public static final String TAG_TEMPLATE_TYPE = "type";
-    public static final String TAG_LINK = "link";
-
-    // atom
-    public static final String TAG_ATOM_ID = "id";
-    public static final String TAG_ATOM_TITLE = "title";
-    public static final String TAG_ATOM_UPDATED = "updated";
-
-    // feed
-    public static final String TAG_FEED = "feed";
-
-    // entry
-    public static final String TAG_ENTRY = "entry";
-    public static final String TAG_OBJECT = "object";
-    public static final String TAG_NUM_ITEMS = "numItems";
-    public static final String TAG_PATH_SEGMENT = "pathSegment";
-    public static final String TAG_RELATIVE_PATH_SEGMENT = "relativePathSegment";
-    public static final String TAG_TYPE = "type";
-    public static final String TAG_CHILDREN = "children";
-    public static final String TAG_CONTENT = "content";
-    public static final String TAG_CONTENT_MEDIATYPE = "mediatype";
-    public static final String TAG_CONTENT_BASE64 = "base64";
-    public static final String TAG_CONTENT_FILENAME = "filename";
-
-    public static final String ATTR_DOCUMENT_TYPE = "cmisTypeDocumentDefinitionType";
-    public static final String ATTR_FOLDER_TYPE = "cmisTypeFolderDefinitionType";
-    public static final String ATTR_RELATIONSHIP_TYPE = "cmisTypeRelationshipDefinitionType";
-    public static final String ATTR_POLICY_TYPE = "cmisTypePolicyDefinitionType";
-    public static final String ATTR_ITEM_TYPE = "cmisTypeItemDefinitionType";
-    public static final String ATTR_SECONDARY_TYPE = "cmisTypeSecondaryDefinitionType";
-
-    // allowable actions
-    public static final String TAG_ALLOWABLEACTIONS = "allowableActions";
-
-    // ACL
-    public static final String TAG_ACL = "acl";
-
-    // HTML
-    public static final String TAG_HTML = "html";
-
-    // links
-    public static final String LINK_REL = "rel";
-    public static final String LINK_HREF = "href";
-    public static final String LINK_TYPE = "type";
-    public static final String CONTENT_SRC = "src";
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java
deleted file mode 100644
index 19e4e24..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * CMIS AtomPub SPI implementation.
- */
-public class CmisAtomPubSpi implements CmisSpi {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisAtomPubSpi.class);
-
-    private final BindingSession session;
-
-    private final RepositoryService repositoryService;
-    private final NavigationService navigationService;
-    private final ObjectService objectService;
-    private final VersioningService versioningService;
-    private final DiscoveryService discoveryService;
-    private final MultiFilingService multiFilingService;
-    private final RelationshipService relationshipService;
-    private final PolicyService policyService;
-    private final AclService aclService;
-
-    /**
-     * Constructor.
-     */
-    public CmisAtomPubSpi(BindingSession session) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Initializing AtomPub SPI...", session.getSessionId());
-        }
-
-        this.session = session;
-
-        repositoryService = new RepositoryServiceImpl(session);
-        navigationService = new NavigationServiceImpl(session);
-        objectService = new ObjectServiceImpl(session);
-        versioningService = new VersioningServiceImpl(session);
-        discoveryService = new DiscoveryServiceImpl(session);
-        multiFilingService = new MultiFilingServiceImpl(session);
-        relationshipService = new RelationshipServiceImpl(session);
-        policyService = new PolicyServiceImpl(session);
-        aclService = new AclServiceImpl(session);
-    }
-
-    public RepositoryService getRepositoryService() {
-        return repositoryService;
-    }
-
-    public NavigationService getNavigationService() {
-        return navigationService;
-    }
-
-    public ObjectService getObjectService() {
-        return objectService;
-    }
-
-    public DiscoveryService getDiscoveryService() {
-        return discoveryService;
-    }
-
-    public VersioningService getVersioningService() {
-        return versioningService;
-    }
-
-    public MultiFilingService getMultiFilingService() {
-        return multiFilingService;
-    }
-
-    public RelationshipService getRelationshipService() {
-        return relationshipService;
-    }
-
-    public PolicyService getPolicyService() {
-        return policyService;
-    }
-
-    public AclService getAclService() {
-        return aclService;
-    }
-
-    public void clearAllCaches() {
-        session.remove(SpiSessionParameter.LINK_CACHE);
-    }
-
-    public void clearRepositoryCache(String repositoryId) {
-        LinkCache linkCache = (LinkCache) session.get(SpiSessionParameter.LINK_CACHE);
-        if (linkCache != null) {
-            linkCache.clearRepository(repositoryId);
-        }
-    }
-
-    public void close() {
-        // no-op for AtomPub
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
deleted file mode 100644
index 017c36a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedHolder;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Discovery Service AtomPub client.
- */
-public class DiscoveryServiceImpl extends AbstractAtomPubService implements DiscoveryService {
-
-    /**
-     * Constructor.
-     */
-    public DiscoveryServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeACL, BigInteger maxItems, ExtensionsData extension) {
-        ObjectListImpl result = new ObjectListImpl();
-
-        // find the link
-        String link = null;
-        UrlBuilder url = null;
-
-        // if the application doesn't know the change log token but the link to
-        // the next Atom feed
-        if (changeLogToken instanceof ExtendedHolder && changeLogToken.getValue() == null) {
-            link = (String) ((ExtendedHolder<String>) changeLogToken).getExtraValue(Constants.REP_REL_CHANGES);
-            if (link != null) {
-                url = new UrlBuilder(link);
-            }
-        }
-
-        // if the application didn't provide a link to next Atom feed
-        if (link == null) {
-            link = loadRepositoryLink(repositoryId, Constants.REP_REL_CHANGES);
-            if (link != null) {
-                url = new UrlBuilder(link);
-                url.addParameter(Constants.PARAM_CHANGE_LOG_TOKEN,
-                        (changeLogToken == null ? null : changeLogToken.getValue()));
-                url.addParameter(Constants.PARAM_PROPERTIES, includeProperties);
-                url.addParameter(Constants.PARAM_FILTER, filter);
-                url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-                url.addParameter(Constants.PARAM_ACL, includeACL);
-                url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            }
-        }
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or content changes not supported!");
-        }
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-        String lastChangeLogToken = null;
-
-        // handle top level
-        String nextLink = null;
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                    nextLink = ((AtomLink) element.getObject()).getHref();
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            } else if (isStr("changeLogToken", element)) {
-                lastChangeLogToken = (String) element.getObject();
-            }
-        }
-
-        // get the changes
-        if (!feed.getEntries().isEmpty()) {
-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));
-
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData hit = null;
-
-                // walk through the entry
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof ObjectData) {
-                        hit = (ObjectData) element.getObject();
-                    }
-                }
-
-                if (hit != null) {
-                    result.getObjects().add(hit);
-                }
-            }
-        }
-
-        if (changeLogToken != null) {
-            // the AtomPub binding cannot return a new change log token,
-            // but an OpenCMIS server uses a proprietary tag
-            changeLogToken.setValue(lastChangeLogToken);
-
-            // but we can provide the link to the next Atom feed
-            if (changeLogToken instanceof ExtendedHolder && nextLink != null) {
-                ((ExtendedHolder<String>) changeLogToken).setExtraValue(Constants.REP_REL_CHANGES, nextLink);
-            }
-        }
-
-        return result;
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectListImpl result = new ObjectListImpl();
-
-        // find the link
-        String link = loadCollection(repositoryId, Constants.COLLECTION_QUERY);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or query not supported!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // compile query request
-        final QueryTypeImpl query = new QueryTypeImpl();
-        query.setStatement(statement);
-        query.setSearchAllVersions(searchAllVersions);
-        query.setIncludeAllowableActions(includeAllowableActions);
-        query.setIncludeRelationships(includeRelationships);
-        query.setRenditionFilter(renditionFilter);
-        query.setMaxItems(maxItems);
-        query.setSkipCount(skipCount);
-
-        final CmisVersion cmisVersion = getCmisVersion(repositoryId);
-
-        // post the query and parse results
-        Response resp = post(url, Constants.MEDIATYPE_QUERY, new Output() {
-            public void write(OutputStream out) throws Exception {
-                XMLStreamWriter writer = XMLUtils.createWriter(out);
-                XMLUtils.startXmlDocument(writer);
-                XMLConverter.writeQuery(writer, cmisVersion, query);
-                XMLUtils.endXmlDocument(writer);
-            }
-        });
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // handle top level
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            }
-        }
-
-        // get the result set
-        if (!feed.getEntries().isEmpty()) {
-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));
-
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData hit = null;
-
-                // walk through the entry
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof ObjectData) {
-                        hit = (ObjectData) element.getObject();
-                    }
-                }
-
-                if (hit != null) {
-                    result.getObjects().add(hit);
-                }
-            }
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java
deleted file mode 100644
index 01c5a00..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.ContentTypeCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-
-/**
- * Link cache.
- */
-public class LinkCache implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Set<String> KNOWN_LINKS = new HashSet<String>();
-
-    static {
-        KNOWN_LINKS.add(Constants.REL_ACL);
-        KNOWN_LINKS.add(Constants.REL_DOWN);
-        KNOWN_LINKS.add(Constants.REL_UP);
-        KNOWN_LINKS.add(Constants.REL_FOLDERTREE);
-        KNOWN_LINKS.add(Constants.REL_RELATIONSHIPS);
-        KNOWN_LINKS.add(Constants.REL_SELF);
-        KNOWN_LINKS.add(Constants.REL_ALLOWABLEACTIONS);
-        KNOWN_LINKS.add(Constants.REL_EDITMEDIA);
-        KNOWN_LINKS.add(Constants.REL_POLICIES);
-        KNOWN_LINKS.add(Constants.REL_VERSIONHISTORY);
-        KNOWN_LINKS.add(Constants.REL_WORKINGCOPY);
-        KNOWN_LINKS.add(AtomPubParser.LINK_REL_CONTENT);
-    }
-
-    private final Cache linkCache;
-    private final Cache typeLinkCache;
-    private final Cache collectionLinkCache;
-    private final Cache templateCache;
-    private final Cache repositoryLinkCache;
-
-    /**
-     * Constructor.
-     */
-    public LinkCache(BindingSession session) {
-        int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES,
-                SessionParameterDefaults.CACHE_SIZE_REPOSITORIES);
-        if (repCount < 1) {
-            repCount = SessionParameterDefaults.CACHE_SIZE_REPOSITORIES;
-        }
-
-        int typeCount = session.get(SessionParameter.CACHE_SIZE_TYPES, SessionParameterDefaults.CACHE_SIZE_TYPES);
-        if (typeCount < 1) {
-            typeCount = SessionParameterDefaults.CACHE_SIZE_TYPES;
-        }
-
-        int objCount = session.get(SessionParameter.CACHE_SIZE_LINKS, SessionParameterDefaults.CACHE_SIZE_LINKS);
-        if (objCount < 1) {
-            objCount = SessionParameterDefaults.CACHE_SIZE_LINKS;
-        }
-
-        linkCache = new CacheImpl("Link Cache");
-        linkCache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + objCount, // id
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=12", // rel
-                ContentTypeCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=3,"
-                        + MapCacheLevelImpl.SINGLE_VALUE + "=true" // type
-        });
-
-        typeLinkCache = new CacheImpl("Type Link Cache");
-        typeLinkCache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + typeCount, // id
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=12", // rel
-                ContentTypeCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=3,"
-                        + MapCacheLevelImpl.SINGLE_VALUE + "=true"// type
-        });
-
-        collectionLinkCache = new CacheImpl("Collection Link Cache");
-        collectionLinkCache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=8" // collection
-        });
-
-        templateCache = new CacheImpl("URI Template Cache");
-        templateCache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=6" // type
-        });
-
-        repositoryLinkCache = new CacheImpl("Repository Link Cache");
-        repositoryLinkCache.initialize(new String[] {
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
-                MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=6" // rel
-        });
-    }
-
-    /**
-     * Adds a link.
-     */
-    public void addLink(String repositoryId, String id, String rel, String type, String link) {
-        if (KNOWN_LINKS.contains(rel)) {
-            linkCache.put(link, repositoryId, id, rel, type);
-        } else if (Constants.REL_ALTERNATE.equals(rel)) {
-            // use streamId instead of type as discriminating parameter
-            String streamId = extractStreamId(link);
-            if (streamId != null) {
-                linkCache.put(link, repositoryId, id, rel, streamId);
-            }
-        }
-    }
-
-    /**
-     * Tries to extract a streamId from an alternate link.
-     */
-    // this is not strictly in the spec
-    protected String extractStreamId(String link) {
-        int i = link.lastIndexOf('?');
-        if (i > 0) {
-            String[] params = link.substring(i + 1).split("&");
-            for (String param : params) {
-                String[] parts = param.split("=", 2);
-                if (parts[0].equals(Constants.PARAM_STREAM_ID) && parts.length == 2) {
-                    return parts[1];
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Removes all links of an object.
-     */
-    public void removeLinks(String repositoryId, String id) {
-        linkCache.remove(repositoryId, id);
-    }
-
-    /**
-     * Gets a link.
-     */
-    public String getLink(String repositoryId, String id, String rel, String type) {
-        return (String) linkCache.get(repositoryId, id, rel, type);
-    }
-
-    /**
-     * Gets a link.
-     */
-    public String getLink(String repositoryId, String id, String rel) {
-        return getLink(repositoryId, id, rel, null);
-    }
-
-    /**
-     * Checks a link.
-     */
-    public int checkLink(String repositoryId, String id, String rel, String type) {
-        return linkCache.check(repositoryId, id, rel, type);
-    }
-
-    /**
-     * Locks the link cache.
-     */
-    public void lockLinks() {
-        linkCache.writeLock();
-    }
-
-    /**
-     * Unlocks the link cache.
-     */
-    public void unlockLinks() {
-        linkCache.writeUnlock();
-    }
-
-    /**
-     * Adds a type link.
-     */
-    public void addTypeLink(String repositoryId, String id, String rel, String type, String link) {
-        if (KNOWN_LINKS.contains(rel)) {
-            typeLinkCache.put(link, repositoryId, id, rel, type);
-        }
-    }
-
-    /**
-     * Removes all links of a type.
-     */
-    public void removeTypeLinks(String repositoryId, String id) {
-        typeLinkCache.remove(repositoryId, id);
-    }
-
-    /**
-     * Gets a type link.
-     */
-    public String getTypeLink(String repositoryId, String id, String rel, String type) {
-        return (String) typeLinkCache.get(repositoryId, id, rel, type);
-    }
-
-    /**
-     * Locks the type link cache.
-     */
-    public void lockTypeLinks() {
-        typeLinkCache.writeLock();
-    }
-
-    /**
-     * Unlocks the type link cache.
-     */
-    public void unlockTypeLinks() {
-        typeLinkCache.writeUnlock();
-    }
-
-    /**
-     * Adds a collection.
-     */
-    public void addCollection(String repositoryId, String collection, String link) {
-        collectionLinkCache.put(link, repositoryId, collection);
-    }
-
-    /**
-     * Gets a collection.
-     */
-    public String getCollection(String repositoryId, String collection) {
-        return (String) collectionLinkCache.get(repositoryId, collection);
-    }
-
-    /**
-     * Adds an URI template.
-     */
-    public void addTemplate(String repositoryId, String type, String link) {
-        templateCache.put(link, repositoryId, type);
-    }
-
-    /**
-     * Gets an URI template and replaces place holders with the given
-     * parameters.
-     */
-    public String getTemplateLink(String repositoryId, String type, Map<String, Object> parameters) {
-        String template = (String) templateCache.get(repositoryId, type);
-        if (template == null) {
-            return null;
-        }
-
-        StringBuilder result = new StringBuilder();
-        StringBuilder param = new StringBuilder();
-
-        boolean paramMode = false;
-        for (int i = 0; i < template.length(); i++) {
-            char c = template.charAt(i);
-
-            if (paramMode) {
-                if (c == '}') {
-                    paramMode = false;
-
-                    String paramValue = UrlBuilder.normalizeParameter(parameters.get(param.toString()));
-                    if (paramValue != null) {
-                        result.append(IOUtils.encodeURL(paramValue));
-                    }
-
-                    param = new StringBuilder();
-                } else {
-                    param.append(c);
-                }
-            } else {
-                if (c == '{') {
-                    paramMode = true;
-                } else {
-                    result.append(c);
-                }
-            }
-        }
-
-        return result.toString();
-    }
-
-    /**
-     * Adds a collection.
-     */
-    public void addRepositoryLink(String repositoryId, String rel, String link) {
-        repositoryLinkCache.put(link, repositoryId, rel);
-    }
-
-    /**
-     * Gets a collection.
-     */
-    public String getRepositoryLink(String repositoryId, String rel) {
-        return (String) repositoryLinkCache.get(repositoryId, rel);
-    }
-
-    /**
-     * Removes all entries of the given repository from the caches.
-     */
-    public void clearRepository(String repositoryId) {
-        linkCache.remove(repositoryId);
-        typeLinkCache.remove(repositoryId);
-        collectionLinkCache.remove(repositoryId);
-        templateCache.remove(repositoryId);
-        repositoryLinkCache.remove(repositoryId);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        return "Link Cache [link cache=" + linkCache + ", type link cache=" + typeLinkCache
-                + ", collection link cache=" + collectionLinkCache + ", repository link cache=" + repositoryLinkCache
-                + ",  template cache=" + templateCache + "]";
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
deleted file mode 100644
index b465884..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-
-/**
- * MultiFiling Service AtomPub client.
- */
-public class MultiFilingServiceImpl extends AbstractAtomPubService implements MultiFilingService {
-
-    /**
-     * Constructor.
-     */
-    public MultiFilingServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-
-        // set up object and writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));
-
-        // post addObjectToFolder request
-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // find the link
-        String link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_REMOVE_FROM, folderId);
-
-        // set up object and writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));
-
-        // post removeObjectFromFolder request
-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
deleted file mode 100644
index aa94123..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-
-/**
- * Navigation Service AtomPub client.
- */
-public class NavigationServiceImpl extends AbstractAtomPubService implements NavigationService {
-
-    /**
-     * Constructor.
-     */
-    public NavigationServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // handle top level
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            }
-        }
-
-        // get the children
-        if (!feed.getEntries().isEmpty()) {
-            result.setObjects(new ArrayList<ObjectInFolderData>(feed.getEntries().size()));
-
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectInFolderDataImpl child = null;
-                String pathSegment = null;
-
-                lockLinks();
-                try {
-                    // clean up cache
-                    removeLinks(repositoryId, entry.getId());
-
-                    // walk through the entry
-                    for (AtomElement element : entry.getElements()) {
-                        if (element.getObject() instanceof AtomLink) {
-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                        } else if (isStr(NAME_PATH_SEGMENT, element)) {
-                            pathSegment = (String) element.getObject();
-                        } else if (element.getObject() instanceof ObjectData) {
-                            child = new ObjectInFolderDataImpl();
-                            child.setObject((ObjectData) element.getObject());
-                        }
-                    }
-                } finally {
-                    unlockLinks();
-                }
-
-                if (child != null) {
-                    child.setPathSegment(pathSegment);
-                    result.getObjects().add(child);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // process tree
-        addDescendantsLevel(repositoryId, feed, result);
-
-        return result;
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        ObjectData result = null;
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_UP, Constants.MEDIATYPE_ENTRY);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_UP, Constants.MEDIATYPE_ENTRY);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-
-        // read
-        Response resp = read(url);
-
-        AtomBase base = parse(resp.getStream(), AtomBase.class);
-
-        // get the entry
-        AtomEntry entry = null;
-        if (base instanceof AtomFeed) {
-            AtomFeed feed = (AtomFeed) base;
-            if (feed.getEntries().isEmpty()) {
-                throw new CmisRuntimeException("Parent feed is empty!");
-            }
-            entry = feed.getEntries().get(0);
-        } else if (base instanceof AtomEntry) {
-            entry = (AtomEntry) base;
-        } else {
-            throw new CmisRuntimeException("Unexpected document!");
-        }
-
-        lockLinks();
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof ObjectData) {
-                    result = (ObjectData) element.getObject();
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-
-        return result;
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // process tree
-        addDescendantsLevel(repositoryId, feed, result);
-
-        return result;
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        List<ObjectParentData> result = new ArrayList<ObjectParentData>();
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_UP, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            // root and unfiled objects have no UP link
-            return result;
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, includeRelativePathSegment);
-
-        // read and parse
-        Response resp = read(url);
-
-        AtomBase base = parse(resp.getStream(), AtomBase.class);
-
-        if (base instanceof AtomFeed) {
-            // it's a feed
-            AtomFeed feed = (AtomFeed) base;
-
-            // walk through the feed
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectParentDataImpl objectParent = processParentEntry(entry, repositoryId);
-
-                if (objectParent != null) {
-                    result.add(objectParent);
-                }
-            }
-        } else if (base instanceof AtomEntry) {
-            // it's an entry
-            AtomEntry entry = (AtomEntry) base;
-
-            ObjectParentDataImpl objectParent = processParentEntry(entry, repositoryId);
-
-            if (objectParent != null) {
-                result.add(objectParent);
-            }
-        }
-
-        return result;
-    }
-
-    private ObjectParentDataImpl processParentEntry(AtomEntry entry, String repositoryId) {
-        ObjectParentDataImpl result = null;
-        String relativePathSegment = null;
-
-        lockLinks();
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof ObjectData) {
-                    result = new ObjectParentDataImpl((ObjectData) element.getObject());
-                } else if (is(NAME_RELATIVE_PATH_SEGMENT, element)) {
-                    relativePathSegment = (String) element.getObject();
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-
-        if (result != null) {
-            result.setRelativePathSegment(relativePathSegment);
-        }
-
-        return result;
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectListImpl result = new ObjectListImpl();
-
-        // find the link
-        String link = loadCollection(repositoryId, Constants.COLLECTION_CHECKEDOUT);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or checkedout collection not supported!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FOLDER_ID, folderId);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // handle top level
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            }
-        }
-
-        // get the documents
-        if (!feed.getEntries().isEmpty()) {
-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));
-
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData child = null;
-
-                lockLinks();
-                try {
-                    // clean up cache
-                    removeLinks(repositoryId, entry.getId());
-
-                    // walk through the entry
-                    for (AtomElement element : entry.getElements()) {
-                        if (element.getObject() instanceof AtomLink) {
-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                        } else if (element.getObject() instanceof ObjectData) {
-                            child = (ObjectData) element.getObject();
-                        }
-                    }
-                } finally {
-                    unlockLinks();
-                }
-
-                if (child != null) {
-                    result.getObjects().add(child);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    // ---- internal ----
-
-    /**
-     * Adds descendants level recursively.
-     */
-    private void addDescendantsLevel(String repositoryId, AtomFeed feed, List<ObjectInFolderContainer> containerList) {
-        if (feed == null || feed.getEntries().isEmpty()) {
-            return;
-        }
-
-        // walk through the feed
-        for (AtomEntry entry : feed.getEntries()) {
-            ObjectInFolderDataImpl objectInFolder = null;
-            String pathSegment = null;
-            List<ObjectInFolderContainer> childContainerList = new ArrayList<ObjectInFolderContainer>();
-
-            lockLinks();
-            try {
-                // clean up cache
-                removeLinks(repositoryId, entry.getId());
-
-                // walk through the entry
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof AtomLink) {
-                        addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                    } else if (element.getObject() instanceof ObjectData) {
-                        objectInFolder = new ObjectInFolderDataImpl((ObjectData) element.getObject());
-                    } else if (is(NAME_PATH_SEGMENT, element)) {
-                        pathSegment = (String) element.getObject();
-                    } else if (element.getObject() instanceof AtomFeed) {
-                        addDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), childContainerList);
-                    }
-                }
-            } finally {
-                unlockLinks();
-            }
-
-            if (objectInFolder != null) {
-                objectInFolder.setPathSegment(pathSegment);
-                ObjectInFolderContainerImpl childContainer = new ObjectInFolderContainerImpl(objectInFolder);
-                childContainer.setChildren(childContainerList);
-                containerList.add(childContainer);
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
deleted file mode 100644
index d9fdabf..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAllowableActions;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-/**
- * Object Service AtomPub client.
- */
-public class ObjectServiceImpl extends AbstractAtomPubService implements ObjectService {
-
-    /**
-     * Constructor.
-     */
-    public ObjectServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        checkCreateProperties(properties);
-
-        // find the link
-        String link = null;
-
-        if (folderId == null) {
-            // Creation of unfiled objects via AtomPub is not defined in the
-            // CMIS 1.0 specification. This implementation follow the CMIS 1.1
-            // draft and POSTs the document to the Unfiled collection.
-
-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);
-
-            if (link == null) {
-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");
-            }
-        } else {
-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-            if (link == null) {
-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-            }
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_VERSIONIG_STATE, versioningState);
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId), contentStream);
-
-        // post the new folder object
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // handle ACL modifications
-        handleAclModifications(repositoryId, entry, addAces, removeAces);
-
-        return entry.getId();
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("createDocumentFromSource is not supported by the AtomPub binding!");
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkCreateProperties(properties);
-
-        // find the link
-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId));
-
-        // post the new folder object
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // handle ACL modifications
-        handleAclModifications(repositoryId, entry, addAces, removeAces);
-
-        return entry.getId();
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkCreateProperties(properties);
-
-        // find the link
-        String link = null;
-
-        if (folderId == null) {
-            // Creation of unfiled objects via AtomPub is not defined in the
-            // CMIS 1.0 specification. This implementation follow the CMIS 1.1
-            // draft and POSTs the policy to the Unfiled collection.
-
-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);
-
-            if (link == null) {
-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");
-            }
-        } else {
-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-            if (link == null) {
-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-            }
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId));
-
-        // post the new folder object
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // handle ACL modifications
-        handleAclModifications(repositoryId, entry, addAces, removeAces);
-
-        return entry.getId();
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkCreateProperties(properties);
-
-        // find the link
-        String link = null;
-
-        if (folderId == null) {
-            link = loadCollection(repositoryId, Constants.COLLECTION_UNFILED);
-
-            if (link == null) {
-                throw new CmisObjectNotFoundException("Unknown repository or unfiling not supported!");
-            }
-        } else {
-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-            if (link == null) {
-                throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-            }
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId));
-
-        // post the new folder object
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // handle ACL modifications
-        handleAclModifications(repositoryId, entry, addAces, removeAces);
-
-        return entry.getId();
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        checkCreateProperties(properties);
-
-        // find source id
-        PropertyData<?> sourceIdProperty = properties.getProperties().get(PropertyIds.SOURCE_ID);
-        if (!(sourceIdProperty instanceof PropertyId)) {
-            throw new CmisInvalidArgumentException("Source Id is not set!");
-        }
-
-        String sourceId = ((PropertyId) sourceIdProperty).getFirstValue();
-        if (sourceId == null) {
-            throw new CmisInvalidArgumentException("Source Id is not set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, sourceId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, sourceId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId));
-
-        // post the new folder object
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // handle ACL modifications
-        handleAclModifications(repositoryId, entry, addAces, removeAces);
-
-        return entry.getId();
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        if (changeToken != null) {
-            if (getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false)) {
-                changeToken.setValue(null);
-            } else {
-                // not required by the CMIS specification
-                // -> keep for backwards compatibility with older OpenCMIS
-                // servers
-                url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());
-            }
-        }
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, changeToken == null ? null
-                : changeToken.getValue(), null), getCmisVersion(repositoryId));
-
-        // update
-        Response resp = put(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse new entry
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        // set object id
-        objectId.setValue(entry.getId());
-
-        if (changeToken != null) {
-            changeToken.setValue(null); // just in case
-        }
-
-        lockLinks();
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof ObjectData) {
-                    // extract new change token
-                    if (changeToken != null) {
-                        ObjectData object = (ObjectData) element.getObject();
-
-                        if (object.getProperties() != null) {
-                            Object changeTokenStr = object.getProperties().getProperties()
-                                    .get(PropertyIds.CHANGE_TOKEN);
-                            if (changeTokenStr instanceof PropertyString) {
-                                changeToken.setValue(((PropertyString) changeTokenStr).getFirstValue());
-                            }
-                        }
-                    }
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        // find link
-        String link = loadCollection(repositoryId, Constants.COLLECTION_BULK_UPDATE);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or bulk update properties is not supported!");
-        }
-
-        // set up writer
-        final BulkUpdateImpl bulkUpdate = new BulkUpdateImpl();
-        bulkUpdate.setObjectIdAndChangeToken(objectIdAndChangeToken);
-        bulkUpdate.setProperties(properties);
-        bulkUpdate.setAddSecondaryTypeIds(addSecondaryTypeIds);
-        bulkUpdate.setRemoveSecondaryTypeIds(removeSecondaryTypeIds);
-
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(bulkUpdate);
-
-        // post the new folder object
-        Response resp = post(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-        List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>(feed
-                .getEntries().size());
-
-        // get the results
-        if (!feed.getEntries().isEmpty()) {
-
-            for (AtomEntry entry : feed.getEntries()) {
-                // walk through the entry
-                // we are not interested in the links this time because they
-                // could belong to a new document version
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof ObjectData) {
-                        ObjectData object = (ObjectData) element.getObject();
-                        String id = object.getId();
-                        if (id != null) {
-                            String changeToken = null;
-                            PropertyData<?> changeTokenProp = object.getProperties().getProperties()
-                                    .get(PropertyIds.CHANGE_TOKEN);
-                            if (changeTokenProp instanceof PropertyString) {
-                                changeToken = ((PropertyString) changeTokenProp).getFirstValue();
-                            }
-
-                            result.add(new BulkUpdateObjectIdAndChangeTokenImpl(id, changeToken));
-                        }
-                    }
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-
-        delete(url);
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-
-        // find the down links
-        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, null);
-        String childrenLink = null;
-
-        if (link != null) {
-            // found only a children link, but no descendants link
-            // -> try folder tree link
-            childrenLink = link;
-            link = null;
-        } else {
-            // found no or two down links
-            // -> get only the descendants link
-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        if (link == null) {
-            link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        if (link == null) {
-            link = loadLink(repositoryId, folderId, Constants.REL_FOLDERTREE, Constants.MEDIATYPE_FEED);
-        }
-
-        if (link == null) {
-            link = childrenLink;
-        }
-
-        if (link == null) {
-            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-        url.addParameter(Constants.PARAM_UNFILE_OBJECTS, unfileObjects);
-        url.addParameter(Constants.PARAM_CONTINUE_ON_FAILURE, continueOnFailure);
-
-        // make the call
-        Response resp = getHttpInvoker().invokeDELETE(url, getSession());
-
-        // check response code
-        if (resp.getResponseCode() == 200 || resp.getResponseCode() == 202 || resp.getResponseCode() == 204) {
-            return new FailedToDeleteDataImpl();
-        }
-
-        // If the server returned an internal server error, get the remaining
-        // children of the folder. We only retrieve the first level, since
-        // getDescendants() is not supported by all repositories.
-        if (resp.getResponseCode() == 500) {
-            link = loadLink(repositoryId, folderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-            if (link != null) {
-                url = new UrlBuilder(link);
-                // we only want the object ids
-                url.addParameter(Constants.PARAM_FILTER, "cmis:objectId");
-                url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, false);
-                url.addParameter(Constants.PARAM_RELATIONSHIPS, IncludeRelationships.NONE);
-                url.addParameter(Constants.PARAM_RENDITION_FILTER, "cmis:none");
-                url.addParameter(Constants.PARAM_PATH_SEGMENT, false);
-                // 1000 children should be enough to indicate a problem
-                url.addParameter(Constants.PARAM_MAX_ITEMS, 1000);
-                url.addParameter(Constants.PARAM_SKIP_COUNT, 0);
-
-                // read and parse
-                resp = read(url);
-                AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-                // prepare result
-                FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-                List<String> ids = new ArrayList<String>();
-                result.setIds(ids);
-
-                // get the children ids
-                for (AtomEntry entry : feed.getEntries()) {
-                    ids.add(entry.getId());
-                }
-
-                return result;
-            }
-        }
-
-        throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_ALLOWABLEACTIONS,
-                Constants.MEDIATYPE_ALLOWABLEACTION);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_ALLOWABLEACTIONS,
-                    Constants.MEDIATYPE_ALLOWABLEACTION);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // read and parse
-        Response resp = read(url);
-        AtomAllowableActions allowableActions = parse(resp.getStream(), AtomAllowableActions.class);
-
-        return allowableActions.getAllowableActions();
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        // find the link
-        String link = null;
-        if (streamId != null) {
-            // use the alternate link per spec
-            link = loadLink(repositoryId, objectId, Constants.REL_ALTERNATE, streamId);
-            if (link != null) {
-                streamId = null; // we have a full URL now
-            }
-        }
-        if (link == null) {
-            link = loadLink(repositoryId, objectId, AtomPubParser.LINK_REL_CONTENT, null);
-        }
-
-        if (link == null) {
-            throw new CmisConstraintException("No content stream");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        // using the content URL and adding a streamId param
-        // is not spec-compliant
-        url.addParameter(Constants.PARAM_STREAM_ID, streamId);
-
-        // get the content
-        Response resp = getHttpInvoker().invokeGET(url, getSession(), offset, length);
-
-        // check response code
-        if ((resp.getResponseCode() != 200) && (resp.getResponseCode() != 206)) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        ContentStreamImpl result;
-        if (resp.getResponseCode() == 206) {
-            result = new PartialContentStreamImpl();
-        } else {
-            result = new ContentStreamImpl();
-        }
-
-        String filename = null;
-        String contentDisposition = resp.getHeader("Content-Disposition");
-        if (contentDisposition != null) {
-            filename = MimeHelper.decodeContentDispositionFilename(contentDisposition);
-        }
-
-        result.setFileName(filename);
-        result.setLength(resp.getContentLength());
-        result.setMimeType(resp.getContentTypeHeader());
-        result.setStream(resp.getStream());
-
-        return result;
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-
-        return getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS, filter,
-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-
-        return getObjectInternal(repositoryId, IdentifierType.PATH, path, ReturnVersion.THIS, filter,
-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS, filter,
-                Boolean.FALSE, IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, Boolean.FALSE, extension);
-
-        return object.getProperties();
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, ReturnVersion.THIS,
-                PropertyIds.OBJECT_ID, Boolean.FALSE, IncludeRelationships.NONE, renditionFilter, Boolean.FALSE,
-                Boolean.FALSE, extension);
-
-        List<RenditionData> result = object.getRenditions();
-        if (result == null) {
-            result = Collections.emptyList();
-        }
-
-        return result;
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        if (objectId == null || objectId.getValue() == null || objectId.getValue().length() == 0) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        if (targetFolderId == null || targetFolderId.length() == 0 || sourceFolderId == null
-                || sourceFolderId.length() == 0) {
-            throw new CmisInvalidArgumentException("Source and target folder must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, targetFolderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-        if (link == null) {
-            throwLinkException(repositoryId, targetFolderId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_SOURCE_FOLDER_ID, sourceFolderId);
-
-        // workaround for SharePoint 2010 - see CMIS-839
-        boolean objectIdOnMove = getSession().get(SessionParameter.INCLUDE_OBJECTID_URL_PARAM_ON_MOVE, false);
-        if (objectIdOnMove) {
-            url.addParameter("objectId", objectId.getValue());
-            url.addParameter("targetFolderId", targetFolderId);
-        }
-
-        // set up object and writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId.getValue()),
-                getCmisVersion(repositoryId));
-
-        // post move request
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // workaround for SharePoint 2010 - see CMIS-839
-        if (objectIdOnMove) {
-            // SharePoint doesn't return a new object ID
-            // we assume that the object ID hasn't changed
-            return;
-        }
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        objectId.setValue(entry.getId());
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        setOrAppendContent(repositoryId, objectId, overwriteFlag, changeToken, contentStream, true, false, extension);
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        if (changeToken != null && !getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false)) {
-            url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());
-        }
-
-        delete(url);
-
-        objectId.setValue(null);
-        if (changeToken != null) {
-            changeToken.setValue(null);
-        }
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        setOrAppendContent(repositoryId, objectId, null, changeToken, contentStream, isLastChunk, true, extension);
-    }
-
-    // ---- internal ----
-
-    private static void checkCreateProperties(Properties properties) {
-        if ((properties == null) || (properties.getProperties() == null)) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        if (!properties.getProperties().containsKey(PropertyIds.OBJECT_TYPE_ID)) {
-            throw new CmisInvalidArgumentException("Property " + PropertyIds.OBJECT_TYPE_ID + " must be set!");
-        }
-
-        if (properties.getProperties().containsKey(PropertyIds.OBJECT_ID)) {
-            throw new CmisInvalidArgumentException("Property " + PropertyIds.OBJECT_ID + " must not be set!");
-        }
-    }
-
-    /**
-     * Handles ACL modifications of newly created objects.
-     */
-    private void handleAclModifications(String repositoryId, AtomEntry entry, Acl addAces, Acl removeAces) {
-        if (!isAclMergeRequired(addAces, removeAces)) {
-            return;
-        }
-
-        Acl originalAces = getAclInternal(repositoryId, entry.getId(), Boolean.FALSE, null);
-
-        if (originalAces != null) {
-            // merge and update ACL
-            Acl newACL = mergeAcls(originalAces, addAces, removeAces);
-            if (newACL != null) {
-                updateAcl(repositoryId, entry.getId(), newACL, null);
-            }
-        }
-    }
-
-    /**
-     * Sets or appends content.
-     */
-    private void setOrAppendContent(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, boolean isLastChunk, boolean append,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // we need content
-        if ((contentStream == null) || (contentStream.getStream() == null) || (contentStream.getMimeType() == null)) {
-            throw new CmisInvalidArgumentException("Content must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_EDITMEDIA, null);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        if (changeToken != null && !getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false)) {
-            url.addParameter(Constants.PARAM_CHANGE_TOKEN, changeToken.getValue());
-        }
-
-        if (append) {
-            url.addParameter(Constants.PARAM_APPEND, Boolean.TRUE);
-            url.addParameter(Constants.PARAM_IS_LAST_CHUNK, isLastChunk);
-        } else {
-            url.addParameter(Constants.PARAM_OVERWRITE_FLAG, overwriteFlag);
-        }
-
-        final InputStream stream = contentStream.getStream();
-
-        // Content-Disposition header for the filename
-        Map<String, String> headers = null;
-        if (contentStream.getFileName() != null) {
-            headers = Collections
-                    .singletonMap(
-                            MimeHelper.CONTENT_DISPOSITION,
-                            MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_ATTACHMENT,
-                                    contentStream.getFileName()));
-        }
-
-        // send content
-        Response resp = put(url, contentStream.getMimeType(), headers, new Output() {
-            public void write(OutputStream out) throws IOException {
-                IOUtils.copy(stream, out);
-            }
-        });
-
-        // check response code further
-        if ((resp.getResponseCode() != 200) && (resp.getResponseCode() != 201) && (resp.getResponseCode() != 204)) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        if (resp.getResponseCode() == 201) {
-            // unset the object ID if a new resource has been created
-            // (if the resource has been updated (200 and 204), the object ID
-            // hasn't changed)
-            objectId.setValue(null);
-        }
-
-        if (changeToken != null) {
-            changeToken.setValue(null);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
deleted file mode 100644
index 7fddbcd..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-
-/**
- * Policy Service AtomPub client.
- */
-public class PolicyServiceImpl extends AbstractAtomPubService implements PolicyService {
-
-    /**
-     * Constructor.
-     */
-    public PolicyServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // set up object and writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));
-
-        // post applyPolicy request
-        post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        List<ObjectData> result = new ArrayList<ObjectData>();
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // get the policies
-        if (!feed.getEntries().isEmpty()) {
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData policy = null;
-
-                // walk through the entry
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof ObjectData) {
-                        policy = (ObjectData) element.getObject();
-                    }
-                }
-
-                if (policy != null) {
-                    result.add(policy);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        // we need a policy id
-        if (policyId == null) {
-            throw new CmisInvalidArgumentException("Policy id must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_POLICIES, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, PropertyIds.OBJECT_ID);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // find the policy
-        String policyLink = null;
-        boolean found = false;
-
-        if (!feed.getEntries().isEmpty()) {
-            for (AtomEntry entry : feed.getEntries()) {
-                // walk through the entry
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof AtomLink) {
-                        AtomLink atomLink = (AtomLink) element.getObject();
-                        if (Constants.REL_SELF.equals(atomLink.getRel())) {
-                            policyLink = atomLink.getHref();
-                        }
-                    } else if (element.getObject() instanceof ObjectData) {
-                        String id = ((ObjectData) element.getObject()).getId();
-                        if (policyId.equals(id)) {
-                            found = true;
-                        }
-                    }
-                }
-
-                if (found) {
-                    break;
-                }
-            }
-        }
-
-        // if found, delete it
-        if (found && (policyLink != null)) {
-            delete(new UrlBuilder(policyLink));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
deleted file mode 100644
index 05af528..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-
-/**
- * Relationship Service AtomPub client.
- */
-public class RelationshipServiceImpl extends AbstractAtomPubService implements RelationshipService {
-
-    /**
-     * Constructor.
-     */
-    public RelationshipServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectListImpl result = new ObjectListImpl();
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_RELATIONSHIPS, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
-        url.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // handle top level
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            }
-        }
-
-        // get the children
-        if (!feed.getEntries().isEmpty()) {
-            result.setObjects(new ArrayList<ObjectData>(feed.getEntries().size()));
-
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData relationship = null;
-
-                lockLinks();
-                try {
-                    // clean up cache
-                    removeLinks(repositoryId, entry.getId());
-
-                    // walk through the entry
-                    for (AtomElement element : entry.getElements()) {
-                        if (element.getObject() instanceof AtomLink) {
-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                        } else if (element.getObject() instanceof ObjectData) {
-                            relationship = (ObjectData) element.getObject();
-                        }
-                    }
-                } finally {
-                    unlockLinks();
-                }
-
-                if (relationship != null) {
-                    result.getObjects().add(relationship);
-                }
-            }
-
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
deleted file mode 100644
index 34207a9..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Repository Service AtomPub client.
- */
-public class RepositoryServiceImpl extends AbstractAtomPubService implements RepositoryService {
-
-    /**
-     * Constructor.
-     */
-    public RepositoryServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return getRepositoriesInternal(null);
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        List<RepositoryInfo> repositoryInfos = getRepositoriesInternal(repositoryId);
-
-        if (repositoryInfos.isEmpty()) {
-            throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");
-        }
-
-        if (repositoryInfos.size() == 1) {
-            return repositoryInfos.get(0);
-        }
-
-        // find the repository
-        for (RepositoryInfo info : repositoryInfos) {
-            if (info.getId() == null) {
-                continue;
-            }
-
-            if (info.getId().equals(repositoryId)) {
-                return info;
-            }
-        }
-
-        throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return getTypeDefinitionInternal(repositoryId, typeId);
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl();
-
-        // find the link
-        String link = null;
-        if (typeId == null) {
-            link = loadCollection(repositoryId, Constants.COLLECTION_TYPES);
-        } else {
-            link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-        }
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or type!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // handle top level
-        for (AtomElement element : feed.getElements()) {
-            if (element.getObject() instanceof AtomLink) {
-                if (isNextLink(element)) {
-                    result.setHasMoreItems(Boolean.TRUE);
-                }
-            } else if (isInt(NAME_NUM_ITEMS, element)) {
-                result.setNumItems((BigInteger) element.getObject());
-            }
-        }
-
-        result.setList(new ArrayList<TypeDefinition>(feed.getEntries().size()));
-
-        // get the children
-        if (!feed.getEntries().isEmpty()) {
-            for (AtomEntry entry : feed.getEntries()) {
-                TypeDefinition child = null;
-
-                lockTypeLinks();
-                try {
-                    // walk through the entry
-                    for (AtomElement element : entry.getElements()) {
-                        if (element.getObject() instanceof AtomLink) {
-                            addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                        } else if (element.getObject() instanceof TypeDefinition) {
-                            child = (TypeDefinition) element.getObject();
-                        }
-                    }
-                } finally {
-                    unlockTypeLinks();
-                }
-
-                if (child != null) {
-                    result.getList().add(child);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-
-        // find the link
-        String link = null;
-        if (typeId == null) {
-            link = loadRepositoryLink(repositoryId, Constants.REP_REL_TYPEDESC);
-        } else {
-            link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-        }
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or type!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // process tree
-        addTypeDescendantsLevel(repositoryId, feed, result);
-
-        return result;
-    }
-
-    /**
-     * Adds type descendants level recursively.
-     */
-    private void addTypeDescendantsLevel(String repositoryId, AtomFeed feed, List<TypeDefinitionContainer> containerList) {
-        if (feed == null || feed.getEntries().isEmpty()) {
-            return;
-        }
-
-        // walk through the feed
-        for (AtomEntry entry : feed.getEntries()) {
-            TypeDefinitionContainerImpl childContainer = null;
-            List<TypeDefinitionContainer> childContainerList = new ArrayList<TypeDefinitionContainer>();
-
-            // walk through the entry
-            lockTypeLinks();
-            try {
-                for (AtomElement element : entry.getElements()) {
-                    if (element.getObject() instanceof AtomLink) {
-                        addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                    } else if (element.getObject() instanceof TypeDefinition) {
-                        childContainer = new TypeDefinitionContainerImpl((TypeDefinition) element.getObject());
-                    } else if (element.getObject() instanceof AtomFeed) {
-                        addTypeDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), childContainerList);
-                    }
-                }
-            } finally {
-                unlockTypeLinks();
-            }
-
-            if (childContainer != null) {
-                childContainer.setChildren(childContainerList);
-                containerList.add(childContainer);
-            }
-        }
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        if (type == null) {
-            throw new CmisInvalidArgumentException("Type definition must be set!");
-        }
-
-        String parentId = type.getParentTypeId();
-        if (parentId == null) {
-            throw new CmisInvalidArgumentException("Type definition has no parent type id!");
-        }
-
-        // find the link
-        String link = loadTypeLink(repositoryId, parentId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or parent type!");
-        }
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(type, getCmisVersion(repositoryId));
-
-        // post the new type definition
-        Response resp = post(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        lockTypeLinks();
-        TypeDefinition result = null;
-        try {
-            // clean up cache
-            removeTypeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof TypeDefinition) {
-                    result = (TypeDefinition) element.getObject();
-                }
-            }
-        } finally {
-            unlockTypeLinks();
-        }
-
-        return result;
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        if (type == null) {
-            throw new CmisInvalidArgumentException("Type definition must be set!");
-        }
-
-        String typeId = type.getId();
-        if (typeId == null) {
-            throw new CmisInvalidArgumentException("Type definition has no type id!");
-        }
-
-        // find the link
-        Map<String, Object> parameters = new HashMap<String, Object>();
-        parameters.put(Constants.PARAM_ID, typeId);
-
-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or type!");
-        }
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(type, getCmisVersion(repositoryId));
-
-        // post the new type definition
-        Response resp = put(new UrlBuilder(link), Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        lockTypeLinks();
-        TypeDefinition result = null;
-        try {
-            // clean up cache
-            removeTypeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof TypeDefinition) {
-                    result = (TypeDefinition) element.getObject();
-                }
-            }
-        } finally {
-            unlockTypeLinks();
-        }
-
-        return result;
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        Map<String, Object> parameters = new HashMap<String, Object>();
-        parameters.put(Constants.PARAM_ID, typeId);
-
-        String link = loadTemplateLink(repositoryId, Constants.TEMPLATE_TYPE_BY_ID, parameters);
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        delete(new UrlBuilder(link));
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java
deleted file mode 100644
index a900a63..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-/**
- * Internal session parameters.
- */
-public final class SpiSessionParameter {
-
-    public static final String LINK_CACHE = "org.apache.chemistry.opencmis.binding.atompub.linkcache";
-
-    private SpiSessionParameter() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
deleted file mode 100644
index 741a562..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * Versioning Service AtomPub client.
- */
-public class VersioningServiceImpl extends AbstractAtomPubService implements VersioningService {
-
-    /**
-     * Constructor.
-     */
-    public VersioningServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // find the link
-        String link = loadCollection(repositoryId, Constants.COLLECTION_CHECKEDOUT);
-
-        if (link == null) {
-            throw new CmisObjectNotFoundException("Unknown repository or checkedout collection not supported!");
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-
-        // workaround for SharePoint 2010 - see CMIS-362
-        if (getSession().get(SessionParameter.INCLUDE_OBJECTID_URL_PARAM_ON_CHECKOUT, false)) {
-            url.addParameter("objectId", objectId.getValue());
-        }
-
-        // set up object and writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId.getValue()),
-                getCmisVersion(repositoryId));
-
-        // post move request
-        Response resp = post(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse the response
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        objectId.setValue(entry.getId());
-
-        lockLinks();
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-
-        if (contentCopied != null) {
-            contentCopied.setValue(null);
-        }
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-        }
-
-        // prefer working copy link if available
-        // (workaround for non-compliant repositories)
-        String wcLink = getLink(repositoryId, objectId, Constants.REL_WORKINGCOPY, Constants.MEDIATYPE_ENTRY);
-        if (wcLink != null) {
-            link = wcLink;
-        }
-
-        delete(new UrlBuilder(link));
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // find the link
-        String link = loadLink(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId.getValue(), Constants.REL_SELF, Constants.MEDIATYPE_ENTRY);
-        }
-
-        // prefer working copy link if available
-        // (workaround for non-compliant repositories)
-        String wcLink = getLink(repositoryId, objectId.getValue(), Constants.REL_WORKINGCOPY, Constants.MEDIATYPE_ENTRY);
-        if (wcLink != null) {
-            link = wcLink;
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_CHECKIN_COMMENT, checkinComment);
-        url.addParameter(Constants.PARAM_MAJOR, major);
-        url.addParameter(Constants.PARAM_CHECK_IN, "true");
-
-        // workaround for SharePoint - check in without property change
-        if (getSession().get(SessionParameter.ADD_NAME_ON_CHECK_IN, false)) {
-            if (properties == null || properties.getPropertyList().isEmpty()) {
-                properties = new PropertiesImpl();
-
-                try {
-                    String name = null;
-
-                    // fetch the current name
-                    ObjectData obj = getObjectInternal(repositoryId, IdentifierType.ID, objectId.getValue(),
-                            ReturnVersion.THIS, "cmis:objectId,cmis:name", Boolean.FALSE, IncludeRelationships.NONE,
-                            "cmis:none", Boolean.FALSE, Boolean.FALSE, null);
-
-                    if (obj != null && obj.getProperties() != null && obj.getProperties().getProperties() != null
-                            && obj.getProperties().getProperties().get(PropertyIds.NAME) != null) {
-                        PropertyData<?> nameProp = obj.getProperties().getProperties().get(PropertyIds.NAME);
-                        if (nameProp.getFirstValue() instanceof String) {
-                            name = (String) nameProp.getFirstValue();
-                        }
-                    }
-
-                    if (name == null) {
-                        throw new CmisRuntimeException("Could not determine the name of the PWC!");
-                    }
-
-                    // set the document name to the same value - silly, but
-                    // SharePoint requires that at least one property value has
-                    // to be changed and the name is the only reliable property
-                    ((PropertiesImpl) properties).addProperty(new PropertyStringImpl(PropertyIds.NAME, name));
-                } catch (CmisBaseException e) {
-                    throw new CmisRuntimeException("Could not determine the name of the PWC: " + e.toString(), e);
-                }
-            }
-        }
-
-        // set up writer
-        final AtomEntryWriter entryWriter = new AtomEntryWriter(createObject(properties, null, policies),
-                getCmisVersion(repositoryId), contentStream);
-
-        // update
-        Response resp = put(url, Constants.MEDIATYPE_ENTRY, new Output() {
-            public void write(OutputStream out) throws XMLStreamException, IOException {
-                entryWriter.write(out);
-            }
-        });
-
-        // parse new entry
-        AtomEntry entry = parse(resp.getStream(), AtomEntry.class);
-
-        // we expect a CMIS entry
-        if (entry.getId() == null) {
-            throw new CmisConnectionException("Received Atom entry is not a CMIS entry!");
-        }
-
-        // set object id
-        objectId.setValue(entry.getId());
-
-        AccessControlListImpl originalAces = null;
-
-        lockLinks();
-        try {
-            // clean up cache
-            removeLinks(repositoryId, entry.getId());
-
-            // walk through the entry
-            for (AtomElement element : entry.getElements()) {
-                if (element.getObject() instanceof AtomLink) {
-                    addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                } else if (element.getObject() instanceof ObjectData) {
-                    // extract current ACL
-                    ObjectData object = (ObjectData) element.getObject();
-                    if (object.getAcl() != null) {
-                        originalAces = new AccessControlListImpl(object.getAcl().getAces());
-                        originalAces.setExact(object.isExactAcl());
-                    }
-                }
-            }
-        } finally {
-            unlockLinks();
-        }
-
-        // handle ACL modifications
-        if ((originalAces != null) && (isAclMergeRequired(addAces, removeAces))) {
-            // merge and update ACL
-            Acl newACL = mergeAcls(originalAces, addAces, removeAces);
-            if (newACL != null) {
-                updateAcl(repositoryId, entry.getId(), newACL, null);
-            }
-        }
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        List<ObjectData> result = new ArrayList<ObjectData>();
-
-        // find the link
-        String link = loadLink(repositoryId, objectId, Constants.REL_VERSIONHISTORY, Constants.MEDIATYPE_FEED);
-
-        if (link == null) {
-            throwLinkException(repositoryId, objectId, Constants.REL_VERSIONHISTORY, Constants.MEDIATYPE_FEED);
-        }
-
-        UrlBuilder url = new UrlBuilder(link);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-
-        // read and parse
-        Response resp = read(url);
-        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-        // get the versions
-        if (!feed.getEntries().isEmpty()) {
-            for (AtomEntry entry : feed.getEntries()) {
-                ObjectData version = null;
-
-                lockLinks();
-                try {
-                    // clean up cache
-                    removeLinks(repositoryId, entry.getId());
-
-                    // walk through the entry
-                    for (AtomElement element : entry.getElements()) {
-                        if (element.getObject() instanceof AtomLink) {
-                            addLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
-                        } else if (element.getObject() instanceof ObjectData) {
-                            version = (ObjectData) element.getObject();
-                        }
-                    }
-                } finally {
-                    unlockLinks();
-                }
-
-                if (version != null) {
-                    result.add(version);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
-
-        ReturnVersion returnVersion = ReturnVersion.LATEST;
-        if ((major != null) && (major.booleanValue())) {
-            returnVersion = ReturnVersion.LASTESTMAJOR;
-        }
-
-        return getObjectInternal(repositoryId, IdentifierType.ID, objectId, returnVersion, filter,
-                includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeACL, extension);
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-
-        ReturnVersion returnVersion = ReturnVersion.LATEST;
-        if ((major != null) && (major.booleanValue())) {
-            returnVersion = ReturnVersion.LASTESTMAJOR;
-        }
-
-        ObjectData object = getObjectInternal(repositoryId, IdentifierType.ID, objectId, returnVersion, filter,
-                Boolean.FALSE, IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, Boolean.FALSE, extension);
-
-        return object.getProperties();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java
deleted file mode 100644
index 1262fdd..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAcl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-
-/**
- * AtomAcl.
- */
-public class AtomAcl extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private Acl acl;
-
-    public AtomAcl() {
-        super();
-    }
-
-    public AtomAcl(Acl acl) {
-        this();
-        this.acl = acl;
-    }
-
-    @Override
-    public String getType() {
-        return "ACL";
-    }
-
-    public Acl getACL() {
-        return acl;
-    }
-
-    public void setACL(Acl acl) {
-        this.acl = acl;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java
deleted file mode 100644
index 36dcc99..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomAllowableActions.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-
-/**
- * AtomAllowableActions.
- */
-public class AtomAllowableActions extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private AllowableActions allowableActions;
-
-    public AtomAllowableActions() {
-        super();
-    }
-
-    public AtomAllowableActions(AllowableActions allowableActions) {
-        this();
-        this.allowableActions = allowableActions;
-    }
-
-    @Override
-    public String getType() {
-        return "Allowable Actions";
-    }
-
-    public AllowableActions getAllowableActions() {
-        return allowableActions;
-    }
-
-    public void setAllowableActions(AllowableActions allowableActions) {
-        this.allowableActions = allowableActions;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java
deleted file mode 100644
index a583f74..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Base type for Atom responses.
- */
-public abstract class AtomBase implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final List<AtomElement> elements = new ArrayList<AtomElement>();
-
-    protected AtomBase() {
-    }
-
-    public abstract String getType();
-
-    public List<AtomElement> getElements() {
-        return elements;
-    }
-
-    public void addElement(AtomElement element) {
-        if (element != null) {
-            elements.add(element);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java
deleted file mode 100644
index 85f177d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import java.io.Serializable;
-
-import javax.xml.namespace.QName;
-
-/**
- * Atom Element.
- */
-public class AtomElement implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final QName name;
-    private final Object object;
-
-    public AtomElement(QName name, Object object) {
-        this.name = name;
-        this.object = object;
-    }
-
-    public QName getName() {
-        return name;
-    }
-
-    public Object getObject() {
-        return object;
-    }
-
-    @Override
-    public String toString() {
-        return name + ": " + object;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java
deleted file mode 100644
index 10f920a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-/**
- * Atom Entry.
- */
-public class AtomEntry extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-
-    public AtomEntry() {
-        super();
-    }
-
-    @Override
-    public String getType() {
-        return "Atom Entry";
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String toString() {
-        return "Entry \"" + id + "\": " + getElements();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java
deleted file mode 100644
index da50f47..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Atom Feed.
- */
-public class AtomFeed extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private final List<AtomEntry> entries = new ArrayList<AtomEntry>();
-
-    public AtomFeed() {
-    }
-
-    @Override
-    public String getType() {
-        return "Atom Feed";
-    }
-
-    public List<AtomEntry> getEntries() {
-        return entries;
-    }
-
-    public void addEntry(AtomEntry entry) {
-        if (entry != null) {
-            entries.add(entry);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "Feed : " + getElements() + " " + entries;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java
deleted file mode 100644
index 782c166..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import java.io.Serializable;
-
-/**
- * Atom Link.
- */
-public class AtomLink implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private String rel;
-    private String type;
-    private String href;
-
-    public AtomLink() {
-    }
-
-    public String getRel() {
-        return rel;
-    }
-
-    public void setRel(String rel) {
-        this.rel = rel;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getHref() {
-        return href;
-    }
-
-    public void setHref(String href) {
-        this.href = href;
-    }
-
-    @Override
-    public String toString() {
-        return "Link: rel=\"" + rel + "\" type=\"" + type + "\" href=\"" + href + "\"";
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java
deleted file mode 100644
index 8646ba0..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/HtmlDoc.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-public class HtmlDoc extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public String getType() {
-        return "HTML document";
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java
deleted file mode 100644
index dc061ad..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-/**
- * Repository workspace.
- */
-public class RepositoryWorkspace extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-
-    public RepositoryWorkspace() {
-    }
-
-    @Override
-    public String getType() {
-        return "Repository Workspace";
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String toString() {
-        return "Workspace \"" + id + "\": " + getElements();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java
deleted file mode 100644
index 2f3265f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Service Doc.
- */
-public class ServiceDoc extends AtomBase {
-
-    private static final long serialVersionUID = 1L;
-
-    private final List<RepositoryWorkspace> workspaces = new ArrayList<RepositoryWorkspace>();
-
-    public ServiceDoc() {
-    }
-
-    @Override
-    public String getType() {
-        return "Service Document";
-    }
-
-    public List<RepositoryWorkspace> getWorkspaces() {
-        return workspaces;
-    }
-
-    public void addWorkspace(RepositoryWorkspace ws) {
-        if (ws != null) {
-            workspaces.add(ws);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "Service Doc: " + workspaces;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
deleted file mode 100644
index 5a8f69e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisServiceUnavailableException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoBrowserBindingImpl;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.ContainerFactory;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Base class for all Browser Binding client services.
- */
-public abstract class AbstractBrowserBindingService implements LinkAccess {
-
-    protected static final ContainerFactory SIMPLE_CONTAINER_FACTORY = new ContainerFactory() {
-        public Map<String, Object> createObjectContainer() {
-            return new LinkedHashMap<String, Object>();
-        }
-
-        public List<Object> creatArrayContainer() {
-            return new ArrayList<Object>();
-        }
-    };
-
-    private BindingSession session;
-    private boolean succint;
-    private DateTimeFormat dateTimeFormat;
-
-    /**
-     * Sets the current session.
-     */
-    protected void setSession(BindingSession session) {
-        this.session = session;
-
-        Object succintObj = session.get(SessionParameter.BROWSER_SUCCINCT);
-        this.succint = (succintObj == null ? true : Boolean.parseBoolean(succintObj.toString()));
-
-        Object dateTimeFormatObj = session.get(SessionParameter.BROWSER_DATETIME_FORMAT);
-        this.dateTimeFormat = (dateTimeFormatObj == null ? DateTimeFormat.SIMPLE : DateTimeFormat
-                .fromValue(dateTimeFormatObj.toString().toLowerCase(Locale.ENGLISH)));
-    }
-
-    /**
-     * Gets the current session.
-     */
-    protected BindingSession getSession() {
-        return session;
-    }
-
-    /**
-     * Gets the HTTP Invoker object.
-     */
-    protected HttpInvoker getHttpInvoker() {
-        return CmisBindingsHelper.getHttpInvoker(session);
-    }
-
-    /**
-     * Returns the service URL of this session.
-     */
-    protected String getServiceUrl() {
-        Object url = session.get(SessionParameter.BROWSER_URL);
-        if (url instanceof String) {
-            return (String) url;
-        }
-
-        return null;
-    }
-
-    protected UrlBuilder getRepositoryUrl(String repositoryId, String selector) {
-        UrlBuilder result = getRepositoryUrlCache().getRepositoryUrl(repositoryId, selector);
-
-        if (result == null) {
-            getRepositoriesInternal(repositoryId);
-            result = getRepositoryUrlCache().getRepositoryUrl(repositoryId, selector);
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        return result;
-    }
-
-    protected UrlBuilder getRepositoryUrl(String repositoryId) {
-        UrlBuilder result = getRepositoryUrlCache().getRepositoryUrl(repositoryId);
-
-        if (result == null) {
-            getRepositoriesInternal(repositoryId);
-            result = getRepositoryUrlCache().getRepositoryUrl(repositoryId);
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        return result;
-    }
-
-    protected UrlBuilder getObjectUrl(String repositoryId, String objectId, String selector) {
-        UrlBuilder result = getRepositoryUrlCache().getObjectUrl(repositoryId, objectId, selector);
-
-        if (result == null) {
-            getRepositoriesInternal(repositoryId);
-            result = getRepositoryUrlCache().getObjectUrl(repositoryId, objectId, selector);
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        return result;
-    }
-
-    protected UrlBuilder getObjectUrl(String repositoryId, String objectId) {
-        UrlBuilder result = getRepositoryUrlCache().getObjectUrl(repositoryId, objectId);
-
-        if (result == null) {
-            getRepositoriesInternal(repositoryId);
-            result = getRepositoryUrlCache().getObjectUrl(repositoryId, objectId);
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        return result;
-    }
-
-    protected UrlBuilder getPathUrl(String repositoryId, String path, String selector) {
-        UrlBuilder result = getRepositoryUrlCache().getPathUrl(repositoryId, path, selector);
-
-        if (result == null) {
-            getRepositoriesInternal(repositoryId);
-            result = getRepositoryUrlCache().getPathUrl(repositoryId, path, selector);
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository!");
-        }
-
-        return result;
-    }
-
-    protected boolean getSuccinct() {
-        return succint;
-    }
-
-    protected String getSuccinctParameter() {
-        return succint ? "true" : null;
-    }
-
-    protected DateTimeFormat getDateTimeFormat() {
-        return dateTimeFormat;
-    }
-
-    protected String getDateTimeFormatParameter() {
-        return dateTimeFormat == null || dateTimeFormat == DateTimeFormat.SIMPLE ? null : dateTimeFormat.value();
-    }
-
-    protected void setChangeToken(Holder<String> changeToken, ObjectData obj) {
-        if (changeToken == null) {
-            return;
-        }
-
-        changeToken.setValue(null);
-
-        if (obj == null || obj.getProperties() == null || obj.getProperties().getProperties() == null) {
-            return;
-        }
-
-        PropertyData<?> ct = obj.getProperties().getProperties().get(PropertyIds.CHANGE_TOKEN);
-        if (ct instanceof PropertyString) {
-            changeToken.setValue(((PropertyString) ct).getFirstValue());
-        }
-    }
-
-    // ---- exceptions ----
-
-    /**
-     * Converts an error message or a HTTP status code into an Exception.
-     */
-    protected CmisBaseException convertStatusCode(int code, String message, String errorContent, Throwable t) {
-        Object obj = null;
-        try {
-            if (errorContent != null) {
-                JSONParser parser = new JSONParser();
-                obj = parser.parse(errorContent);
-            }
-        } catch (JSONParseException pe) {
-            // error content is not valid JSON -> ignore
-        }
-
-        if (obj instanceof JSONObject) {
-            JSONObject json = (JSONObject) obj;
-            Object jsonError = json.get(JSONConstants.ERROR_EXCEPTION);
-            if (jsonError instanceof String) {
-                Object jsonMessage = json.get(JSONConstants.ERROR_MESSAGE);
-                if (jsonMessage != null) {
-                    message = jsonMessage.toString();
-                }
-
-                if (CmisConstraintException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisConstraintException(message, errorContent, t);
-                } else if (CmisContentAlreadyExistsException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisContentAlreadyExistsException(message, errorContent, t);
-                } else if (CmisFilterNotValidException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisFilterNotValidException(message, errorContent, t);
-                } else if (CmisInvalidArgumentException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisInvalidArgumentException(message, errorContent, t);
-                } else if (CmisNameConstraintViolationException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisNameConstraintViolationException(message, errorContent, t);
-                } else if (CmisNotSupportedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisNotSupportedException(message, errorContent, t);
-                } else if (CmisObjectNotFoundException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisObjectNotFoundException(message, errorContent, t);
-                } else if (CmisPermissionDeniedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisPermissionDeniedException(message, errorContent, t);
-                } else if (CmisStorageException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisStorageException(message, errorContent, t);
-                } else if (CmisStreamNotSupportedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisStreamNotSupportedException(message, errorContent, t);
-                } else if (CmisUpdateConflictException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisUpdateConflictException(message, errorContent, t);
-                } else if (CmisVersioningException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
-                    return new CmisVersioningException(message, errorContent, t);
-                } else if (code == 503) {
-                    return new CmisServiceUnavailableException(message, errorContent, t);
-                }
-            }
-        }
-
-        // fall back to status code
-        switch (code) {
-        case 301:
-        case 302:
-        case 303:
-        case 307:
-            return new CmisConnectionException("Redirects are not supported (HTTP status code " + code + "): "
-                    + message, errorContent, t);
-        case 400:
-            return new CmisInvalidArgumentException(message, errorContent, t);
-        case 401:
-            return new CmisUnauthorizedException(message, errorContent, t);
-        case 403:
-            return new CmisPermissionDeniedException(message, errorContent, t);
-        case 404:
-            return new CmisObjectNotFoundException(message, errorContent, t);
-        case 405:
-            return new CmisNotSupportedException(message, errorContent, t);
-        case 407:
-            return new CmisProxyAuthenticationException(message, errorContent, t);
-        case 409:
-            return new CmisConstraintException(message, errorContent, t);
-        case 503:
-            return new CmisServiceUnavailableException(message, errorContent, t);
-        default:
-            return new CmisRuntimeException(message, errorContent, t);
-        }
-    }
-
-    // ---- helpers ----
-
-    /**
-     * Parses an object from an input stream.
-     */
-    @SuppressWarnings("unchecked")
-    protected Map<String, Object> parseObject(InputStream stream, String charset) {
-        Object obj = parse(stream, charset, SIMPLE_CONTAINER_FACTORY);
-
-        if (obj instanceof Map) {
-            return (Map<String, Object>) obj;
-        }
-
-        throw new CmisConnectionException("Unexpected object!");
-    }
-
-    /**
-     * Parses an array from an input stream.
-     */
-    @SuppressWarnings("unchecked")
-    protected List<Object> parseArray(InputStream stream, String charset) {
-        Object obj = parse(stream, charset, SIMPLE_CONTAINER_FACTORY);
-
-        if (obj instanceof List) {
-            return (List<Object>) obj;
-        }
-
-        throw new CmisConnectionException("Unexpected object!");
-    }
-
-    /**
-     * Parses an input stream.
-     */
-    protected Object parse(InputStream stream, String charset, ContainerFactory containerFactory) {
-
-        InputStreamReader reader = null;
-
-        Object obj = null;
-        try {
-            reader = new InputStreamReader(stream, charset);
-            JSONParser parser = new JSONParser();
-            obj = parser.parse(reader, containerFactory);
-        } catch (Exception e) {
-            throw new CmisConnectionException("Parsing exception!", e);
-        } finally {
-            IOUtils.consumeAndClose(reader);
-            if (reader == null) {
-                IOUtils.closeQuietly(stream);
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     * Performs a GET on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response read(UrlBuilder url) {
-        // make the call
-        Response resp = getHttpInvoker().invokeGET(url, session);
-
-        // check response code
-        if (resp.getResponseCode() != 200) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        return resp;
-    }
-
-    /**
-     * Performs a POST on an URL, checks the response code and returns the
-     * result.
-     */
-    protected Response post(UrlBuilder url, String contentType, Output writer) {
-        // make the call
-        Response resp = getHttpInvoker().invokePOST(url, contentType, writer, session);
-
-        // check response code
-        if (resp.getResponseCode() != 200 && resp.getResponseCode() != 201) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        return resp;
-    }
-
-    /**
-     * Performs a POST on an URL, checks the response code and returns the
-     * result.
-     */
-    protected void postAndConsume(UrlBuilder url, String contentType, Output writer) {
-        Response resp = post(url, contentType, writer);
-        IOUtils.consumeAndClose(resp.getStream());
-    }
-
-    // ---- URL ----
-
-    /**
-     * Returns the repository URL cache or creates a new cache if it doesn't
-     * exist.
-     */
-    protected RepositoryUrlCache getRepositoryUrlCache() {
-        RepositoryUrlCache repositoryUrlCache = (RepositoryUrlCache) getSession().get(
-                SpiSessionParameter.REPOSITORY_URL_CACHE);
-        if (repositoryUrlCache == null) {
-            repositoryUrlCache = new RepositoryUrlCache();
-            getSession().put(SpiSessionParameter.REPOSITORY_URL_CACHE, repositoryUrlCache);
-        }
-
-        return repositoryUrlCache;
-    }
-
-    /**
-     * Retrieves the the repository info objects.
-     */
-    protected List<RepositoryInfo> getRepositoriesInternal(String repositoryId) {
-
-        UrlBuilder url = null;
-
-        if (repositoryId == null) {
-            // no repository id provided -> get all
-            url = new UrlBuilder(getServiceUrl());
-        } else {
-            // use URL of the specified repository
-            url = getRepositoryUrlCache().getRepositoryUrl(repositoryId, Constants.SELECTOR_REPOSITORY_INFO);
-            if (url == null) {
-                // repository infos haven't been fetched yet -> get them all
-                url = new UrlBuilder(getServiceUrl());
-            }
-        }
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        List<RepositoryInfo> repInfos = new ArrayList<RepositoryInfo>();
-
-        for (Object jri : json.values()) {
-            if (jri instanceof Map) {
-                @SuppressWarnings("unchecked")
-                RepositoryInfo ri = JSONConverter.convertRepositoryInfo((Map<String, Object>) jri);
-                String id = ri.getId();
-
-                if (ri instanceof RepositoryInfoBrowserBindingImpl) {
-                    String repositoryUrl = ((RepositoryInfoBrowserBindingImpl) ri).getRepositoryUrl();
-                    String rootUrl = ((RepositoryInfoBrowserBindingImpl) ri).getRootUrl();
-
-                    if (id == null || repositoryUrl == null || rootUrl == null) {
-                        throw new CmisConnectionException("Found invalid Repository Info! (id: " + id + ")");
-                    }
-
-                    getRepositoryUrlCache().addRepository(id, repositoryUrl, rootUrl);
-                }
-
-                repInfos.add(ri);
-            } else {
-                throw new CmisConnectionException("Found invalid Repository Info!");
-            }
-        }
-
-        return repInfos;
-    }
-
-    /**
-     * Retrieves a type definition.
-     */
-    protected TypeDefinition getTypeDefinitionInternal(String repositoryId, String typeId) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId, Constants.SELECTOR_TYPE_DEFINITION);
-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertTypeDefinition(json);
-    }
-
-    // ---- LinkAccess interface ----
-
-    public String loadLink(String repositoryId, String objectId, String rel, String type) {
-        // AtomPub specific -> return null
-        return null;
-    }
-
-    public String loadContentLink(String repositoryId, String documentId) {
-        UrlBuilder result = getRepositoryUrlCache().getObjectUrl(repositoryId, documentId, Constants.SELECTOR_CONTENT);
-        return result == null ? null : result.toString();
-    }
-
-    public String loadRenditionContentLink(String repositoryId, String documentId, String streamId) {
-        UrlBuilder result = getRepositoryUrlCache().getObjectUrl(repositoryId, documentId, Constants.SELECTOR_CONTENT);
-        if (result != null) {
-            result.addParameter(Constants.PARAM_STREAM_ID, streamId);
-            return result.toString();
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AclServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AclServiceImpl.java
deleted file mode 100644
index bcf1352..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AclServiceImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;
-
-/**
- * ACL Service Browser Binding client.
- */
-public class AclServiceImpl extends AbstractBrowserBindingService implements AclService, ExtendedAclService {
-
-    /**
-     * Constructor.
-     */
-    public AclServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_ACL);
-        url.addParameter(Constants.PARAM_ONLY_BASIC_PERMISSIONS, onlyBasicPermissions);
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertAcl(json);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_APPLY_ACL);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addParameter(Constants.PARAM_ACL_PROPAGATION, aclPropagation);
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertAcl(json);
-    }
-
-    public Acl setAcl(String repositoryId, String objectId, Acl aces) {
-        Acl currentAcl = getAcl(repositoryId, objectId, false, null);
-
-        List<Ace> removeAces = new ArrayList<Ace>();
-        if (currentAcl.getAces() != null) {
-            for (Ace ace : currentAcl.getAces()) {
-                if (ace.isDirect()) {
-                    removeAces.add(ace);
-                }
-            }
-        }
-
-        return applyAcl(repositoryId, objectId, aces, new AccessControlListImpl(removeAces), AclPropagation.OBJECTONLY,
-                null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java
deleted file mode 100644
index 14dba52..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-
-public class ClientTypeCacheImpl implements TypeCache {
-
-    private final String repositoryId;
-    private final AbstractBrowserBindingService service;
-
-    public ClientTypeCacheImpl(String repositoryId, AbstractBrowserBindingService service) {
-        this.repositoryId = repositoryId;
-        this.service = service;
-    }
-
-    public TypeDefinition getTypeDefinition(String typeId) {
-
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(service.getSession());
-
-        TypeDefinition type = cache.get(repositoryId, typeId);
-        if (type == null) {
-            type = service.getTypeDefinitionInternal(repositoryId, typeId);
-            if (type != null) {
-                cache.put(repositoryId, type);
-            }
-        }
-
-        return type;
-    }
-
-    public TypeDefinition reloadTypeDefinition(String typeId) {
-
-        TypeDefinitionCache cache = CmisBindingsHelper.getTypeDefinitionCache(service.getSession());
-
-        TypeDefinition type = service.getTypeDefinitionInternal(repositoryId, typeId);
-        if (type != null) {
-            cache.put(repositoryId, type);
-        }
-
-        return type;
-    }
-
-    public TypeDefinition getTypeDefinitionForObject(String objectId) {
-        // not used
-        assert false;
-        return null;
-    }
-
-    public PropertyDefinition<?> getPropertyDefinition(String propId) {
-        assert false;
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/CmisBrowserBindingSpi.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/CmisBrowserBindingSpi.java
deleted file mode 100644
index 87593e3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/CmisBrowserBindingSpi.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CmisBrowserBindingSpi implements CmisSpi {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisBrowserBindingSpi.class);
-
-    private final BindingSession session;
-
-    private final RepositoryService repositoryService;
-    private final NavigationService navigationService;
-    private final ObjectService objectService;
-    private final VersioningService versioningService;
-    private final DiscoveryService discoveryService;
-    private final MultiFilingService multiFilingService;
-    private final RelationshipService relationshipService;
-    private final PolicyService policyService;
-    private final AclService aclService;
-
-    /**
-     * Constructor.
-     */
-    public CmisBrowserBindingSpi(BindingSession session) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Initializing Browser Binding SPI...", session.getSessionId());
-        }
-
-        this.session = session;
-
-        repositoryService = new RepositoryServiceImpl(session);
-        navigationService = new NavigationServiceImpl(session);
-        objectService = new ObjectServiceImpl(session);
-        versioningService = new VersioningServiceImpl(session);
-        discoveryService = new DiscoveryServiceImpl(session);
-        multiFilingService = new MultiFilingServiceImpl(session);
-        relationshipService = new RelationshipServiceImpl(session);
-        policyService = new PolicyServiceImpl(session);
-        aclService = new AclServiceImpl(session);
-    }
-
-    public RepositoryService getRepositoryService() {
-        return repositoryService;
-    }
-
-    public NavigationService getNavigationService() {
-        return navigationService;
-    }
-
-    public ObjectService getObjectService() {
-        return objectService;
-    }
-
-    public VersioningService getVersioningService() {
-        return versioningService;
-    }
-
-    public RelationshipService getRelationshipService() {
-        return relationshipService;
-    }
-
-    public DiscoveryService getDiscoveryService() {
-        return discoveryService;
-    }
-
-    public MultiFilingService getMultiFilingService() {
-        return multiFilingService;
-    }
-
-    public AclService getAclService() {
-        return aclService;
-    }
-
-    public PolicyService getPolicyService() {
-        return policyService;
-    }
-
-    public void clearAllCaches() {
-        session.remove(SpiSessionParameter.REPOSITORY_URL_CACHE);
-    }
-
-    public void clearRepositoryCache(String repositoryId) {
-        RepositoryUrlCache repUrlCache = (RepositoryUrlCache) session.get(SpiSessionParameter.REPOSITORY_URL_CACHE);
-        if (repUrlCache != null) {
-            repUrlCache.removeRepository(repositoryId);
-        }
-    }
-
-    public void close() {
-        // no-op for Browser Binding
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/DiscoveryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/DiscoveryServiceImpl.java
deleted file mode 100644
index 6599e81..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/DiscoveryServiceImpl.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Discovery Service Browser Binding client.
- */
-public class DiscoveryServiceImpl extends AbstractBrowserBindingService implements DiscoveryService {
-
-    /**
-     * Constructor.
-     */
-    public DiscoveryServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_QUERY);
-        formData.addParameter(Constants.PARAM_STATEMENT, statement);
-        formData.addParameter(Constants.PARAM_SEARCH_ALL_VERSIONS, searchAllVersions);
-        formData.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        formData.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        formData.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        formData.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        formData.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-        formData.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-        // Important: No succinct flag here!!!
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-        return JSONConverter.convertObjectList(json, typeCache, true);
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId, Constants.SELECTOR_CONTENT_CHANGES);
-        url.addParameter(Constants.PARAM_CHANGE_LOG_TOKEN, changeLogToken == null ? null : changeLogToken.getValue());
-        url.addParameter(Constants.PARAM_PROPERTIES, includeProperties);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-        url.addParameter(Constants.PARAM_ACL, includeAcl);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        if (changeLogToken != null && json != null) {
-            Object token = json.get(JSONConstants.JSON_OBJECTLIST_CHANGE_LOG_TOKEN);
-            if (token instanceof String) {
-                changeLogToken.setValue((String) token);
-            }
-        }
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjectList(json, typeCache, false);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/FormDataWriter.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/FormDataWriter.java
deleted file mode 100644
index f4164c5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/FormDataWriter.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URLEncoder;
-import java.util.GregorianCalendar;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-
-public final class FormDataWriter {
-
-    private static final String CONTENT_TYPE_URLENCODED = "application/x-www-form-urlencoded;charset=utf-8";
-    private static final String CONTENT_TYPE_FORMDATA = "multipart/form-data; boundary=";
-    private static final String CRLF = "\r\n";
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    private final String boundary;
-    private final Map<String, String> parameters = new LinkedHashMap<String, String>();
-    private ContentStream contentStream;
-
-    public FormDataWriter(String action) {
-        this(action, null);
-    }
-
-    public FormDataWriter(String action, ContentStream contentStream) {
-        addParameter(Constants.CONTROL_CMISACTION, action);
-        this.contentStream = contentStream;
-        boundary = "aPacHeCheMIStryoPEncmiS" + Long.toHexString(action.hashCode()) + action
-                + Long.toHexString(System.currentTimeMillis()) + Long.toHexString(this.hashCode());
-    }
-
-    public void addParameter(String name, Object value) {
-        if (name == null || value == null) {
-            return;
-        }
-
-        parameters.put(name, UrlBuilder.normalizeParameter(value));
-    }
-
-    public void addPropertiesParameters(Properties properties, DateTimeFormat dateTimeFormat) {
-        if (properties == null) {
-            return;
-        }
-
-        int idx = 0;
-        for (PropertyData<?> prop : properties.getPropertyList()) {
-            if (prop == null) {
-                continue;
-            }
-
-            String idxStr = "[" + idx + "]";
-            addParameter(Constants.CONTROL_PROP_ID + idxStr, prop.getId());
-
-            if (isNotEmpty(prop.getValues())) {
-                if (prop.getValues().size() == 1) {
-                    addParameter(Constants.CONTROL_PROP_VALUE + idxStr,
-                            convertPropertyValue(prop.getFirstValue(), dateTimeFormat));
-                } else {
-                    int vidx = 0;
-                    for (Object obj : prop.getValues()) {
-                        String vidxStr = "[" + vidx + "]";
-                        addParameter(Constants.CONTROL_PROP_VALUE + idxStr + vidxStr,
-                                convertPropertyValue(obj, dateTimeFormat));
-                        vidx++;
-                    }
-                }
-            }
-
-            idx++;
-        }
-    }
-
-    public void addSuccinctFlag(boolean succinct) {
-        if (succinct) {
-            addParameter(Constants.CONTROL_SUCCINCT, "true");
-        }
-    }
-
-    public void addPoliciesParameters(List<String> policies) {
-        if (policies == null) {
-            return;
-        }
-
-        int idx = 0;
-        for (String policy : policies) {
-            if (policy != null) {
-                String idxStr = "[" + idx + "]";
-                addParameter(Constants.CONTROL_POLICY + idxStr, policy);
-                idx++;
-            }
-        }
-    }
-
-    public void addAddAcesParameters(Acl acl) {
-        addAcesParameters(acl, Constants.CONTROL_ADD_ACE_PRINCIPAL, Constants.CONTROL_ADD_ACE_PERMISSION);
-    }
-
-    public void addRemoveAcesParameters(Acl acl) {
-        addAcesParameters(acl, Constants.CONTROL_REMOVE_ACE_PRINCIPAL, Constants.CONTROL_REMOVE_ACE_PERMISSION);
-    }
-
-    private void addAcesParameters(Acl acl, String principalControl, String permissionControl) {
-        if (acl == null || acl.getAces() == null) {
-            return;
-        }
-
-        int idx = 0;
-        for (Ace ace : acl.getAces()) {
-            if (ace.getPrincipalId() != null && isNotEmpty(ace.getPermissions())) {
-                String idxStr = "[" + idx + "]";
-                addParameter(principalControl + idxStr, ace.getPrincipalId());
-
-                int permIdx = 0;
-                for (String perm : ace.getPermissions()) {
-                    if (perm != null) {
-                        String permIdxStr = "[" + permIdx + "]";
-                        addParameter(permissionControl + idxStr + permIdxStr, perm);
-                        permIdx++;
-                    }
-                }
-                idx++;
-            }
-        }
-    }
-
-    public void addObjectIdsAndChangeTokens(List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens) {
-        if (isNullOrEmpty(objectIdsAndChangeTokens)) {
-            return;
-        }
-
-        int idx = 0;
-        for (BulkUpdateObjectIdAndChangeToken oc : objectIdsAndChangeTokens) {
-            if (oc == null || oc.getId() == null || oc.getId().length() == 0) {
-                continue;
-            }
-
-            String idxStr = "[" + idx + "]";
-            addParameter(Constants.CONTROL_OBJECT_ID + idxStr, oc.getId());
-            addParameter(Constants.CONTROL_CHANGE_TOKEN + idxStr,
-                    (oc.getChangeToken() == null ? "" : oc.getChangeToken()));
-
-            idx++;
-        }
-    }
-
-    public void addSecondaryTypeIds(List<String> secondaryTypeIds) {
-        addSecondaryTypeIdParameters(secondaryTypeIds, Constants.CONTROL_ADD_SECONDARY_TYPE);
-    }
-
-    public void removeSecondaryTypeIds(List<String> secondaryTypeIds) {
-        addSecondaryTypeIdParameters(secondaryTypeIds, Constants.CONTROL_REMOVE_SECONDARY_TYPE);
-    }
-
-    private void addSecondaryTypeIdParameters(List<String> secondaryTypeIds, String secondaryTypeIdControl) {
-        if (isNullOrEmpty(secondaryTypeIds)) {
-            return;
-        }
-
-        int idx = 0;
-        for (String typeId : secondaryTypeIds) {
-            if (typeId == null || typeId.length() == 0) {
-                continue;
-            }
-
-            String idxStr = "[" + idx + "]";
-            addParameter(secondaryTypeIdControl + idxStr, typeId);
-
-            idx++;
-        }
-    }
-
-    private String convertPropertyValue(Object value, DateTimeFormat dateTimeFormat) {
-        if (value == null) {
-            return null;
-        }
-
-        if (value instanceof GregorianCalendar) {
-            if (dateTimeFormat == DateTimeFormat.EXTENDED) {
-                return DateTimeHelper.formatXmlDateTime((GregorianCalendar) value);
-            } else {
-                return String.valueOf(((GregorianCalendar) value).getTimeInMillis());
-            }
-        }
-
-        return value.toString();
-    }
-
-    public String getContentType() {
-        return (contentStream == null ? CONTENT_TYPE_URLENCODED : CONTENT_TYPE_FORMDATA + boundary);
-    }
-
-    public void write(OutputStream out) throws IOException {
-        InputStream stream = (contentStream == null ? null : contentStream.getStream());
-
-        if (stream == null) {
-            boolean first = true;
-            byte[] amp = IOUtils.toUTF8Bytes("&");
-
-            for (Map.Entry<String, String> param : parameters.entrySet()) {
-                if (first) {
-                    first = false;
-                } else {
-                    out.write(amp);
-                }
-
-                out.write(IOUtils.toUTF8Bytes(param.getKey() + "=" + URLEncoder.encode(param.getValue(), IOUtils.UTF8)));
-            }
-        } else {
-            writeLine(out);
-
-            // parameters
-            for (Map.Entry<String, String> param : parameters.entrySet()) {
-                writeLine(out, "--" + boundary);
-                writeLine(out, "Content-Disposition: form-data; name=\"" + param.getKey() + "\"");
-                writeLine(out, "Content-Type: text/plain; charset=utf-8");
-                writeLine(out);
-                writeLine(out, param.getValue());
-            }
-
-            // content
-            String filename = contentStream.getFileName();
-            if (filename == null || filename.length() == 0) {
-                filename = "content";
-            }
-
-            String mediaType = contentStream.getMimeType();
-            if (mediaType == null || mediaType.indexOf('/') < 1 || mediaType.indexOf('\n') > -1
-                    || mediaType.indexOf('\r') > -1) {
-                mediaType = Constants.MEDIATYPE_OCTETSTREAM;
-            }
-
-            writeLine(out, "--" + boundary);
-            writeLine(
-                    out,
-                    "Content-Disposition: "
-                            + MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_FORM_DATA_CONTENT, filename));
-            writeLine(out, "Content-Type: " + mediaType);
-            writeLine(out, "Content-Transfer-Encoding: binary");
-            writeLine(out);
-
-            IOUtils.copy(stream, out, BUFFER_SIZE);
-
-            writeLine(out);
-            writeLine(out, "--" + boundary + "--");
-        }
-    }
-
-    private void writeLine(OutputStream out) throws IOException {
-        writeLine(out, null);
-    }
-
-    private void writeLine(OutputStream out, String s) throws IOException {
-        s = (s == null ? CRLF : s + CRLF);
-        out.write(IOUtils.toUTF8Bytes(s));
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/MultiFilingServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/MultiFilingServiceImpl.java
deleted file mode 100644
index 31a9174..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/MultiFilingServiceImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-
-/**
- * MultiFiling Service Browser Binding client.
- */
-public class MultiFilingServiceImpl extends AbstractBrowserBindingService implements MultiFilingService {
-
-    /**
-     * Constructor.
-     */
-    public MultiFilingServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_ADD_OBJECT_TO_FOLDER);
-        formData.addParameter(Constants.PARAM_FOLDER_ID, folderId);
-        formData.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-
-        // send and parse
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_REMOVE_OBJECT_FROM_FOLDER);
-        formData.addParameter(Constants.PARAM_FOLDER_ID, folderId);
-
-        // send and parse
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/NavigationServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/NavigationServiceImpl.java
deleted file mode 100644
index 29be2a8..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/NavigationServiceImpl.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-
-/**
- * Navigation Service Browser Binding client.
- */
-public class NavigationServiceImpl extends AbstractBrowserBindingService implements NavigationService {
-
-    /**
-     * Constructor.
-     */
-    public NavigationServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId, Constants.SELECTOR_CHILDREN);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjectInFolderList(json, typeCache);
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId, Constants.SELECTOR_DESCENDANTS);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertDescendants(json, typeCache);
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId, Constants.SELECTOR_FOLDER_TREE);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertDescendants(json, typeCache);
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_PARENTS);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, includeRelativePathSegment);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjectParents(json, typeCache);
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId, Constants.SELECTOR_PARENT);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObject(json, typeCache);
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = (folderId != null ? getObjectUrl(repositoryId, folderId, Constants.SELECTOR_CHECKEDOUT)
-                : getRepositoryUrl(repositoryId, Constants.SELECTOR_CHECKEDOUT));
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjectList(json, typeCache, false);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ObjectServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ObjectServiceImpl.java
deleted file mode 100644
index 2e48880..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ObjectServiceImpl.java
+++ /dev/null
@@ -1,633 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-/**
- * Object Service Browser Binding client.
- */
-public class ObjectServiceImpl extends AbstractBrowserBindingService implements ObjectService {
-
-    /**
-     * Constructor.
-     */
-    public ObjectServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = (folderId != null ? getObjectUrl(repositoryId, folderId) : getRepositoryUrl(repositoryId));
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_DOCUMENT, contentStream);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addParameter(Constants.PARAM_VERSIONIG_STATE, versioningState);
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = (folderId != null ? getObjectUrl(repositoryId, folderId) : getRepositoryUrl(repositoryId));
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_DOCUMENT_FROM_SOURCE);
-        formData.addParameter(Constants.PARAM_SOURCE_ID, sourceId);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addParameter(Constants.PARAM_VERSIONIG_STATE, versioningState);
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_FOLDER);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_RELATIONSHIP);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = (folderId != null ? getObjectUrl(repositoryId, folderId) : getRepositoryUrl(repositoryId));
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_POLICY);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = (folderId != null ? getObjectUrl(repositoryId, folderId) : getRepositoryUrl(repositoryId));
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_ITEM);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        return (newObj == null ? null : newObj.getId());
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_ALLOWABLEACTIONS);
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertAllowableActions(json);
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_OBJECT);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-        url.addParameter(Constants.PARAM_ACL, includeAcl);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObject(json, typeCache);
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getPathUrl(repositoryId, path, Constants.SELECTOR_OBJECT);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-        url.addParameter(Constants.PARAM_ACL, includeAcl);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObject(json, typeCache);
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_PROPERTIES);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        if (getSuccinct()) {
-            TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-            return JSONConverter.convertSuccinctProperties(json, null, typeCache);
-        } else {
-            return JSONConverter.convertProperties(json, null);
-        }
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_RENDITIONS);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertRenditions(json);
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_CONTENT);
-        url.addParameter(Constants.PARAM_STREAM_ID, streamId);
-
-        // get the content
-        Response resp = getHttpInvoker().invokeGET(url, getSession(), offset, length);
-
-        // check response code
-        if ((resp.getResponseCode() != 200) && (resp.getResponseCode() != 206)) {
-            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
-        }
-
-        // get filename from Content-Disposition header
-        String filename = null;
-        String contentDisposition = resp.getContentDisposition();
-        if (contentDisposition != null) {
-            filename = MimeHelper.decodeContentDispositionFilename(contentDisposition);
-        }
-
-        // build result object
-        ContentStreamImpl result;
-        if (resp.getResponseCode() == 206) {
-            result = new PartialContentStreamImpl();
-        } else {
-            result = new ContentStreamImpl();
-        }
-
-        result.setFileName(filename);
-        result.setLength(resp.getContentLength());
-        result.setMimeType(resp.getContentTypeHeader());
-        result.setStream(resp.getStream());
-
-        return result;
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        // we need an object ID
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_UPDATE_PROPERTIES);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addParameter(Constants.PARAM_CHANGE_TOKEN,
-                (changeToken == null || getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                        : changeToken.getValue()));
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-
-        setChangeToken(changeToken, newObj);
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        // we need object ids
-        if (isNullOrEmpty(objectIdAndChangeToken)) {
-            throw new CmisInvalidArgumentException("Object ids must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_BULK_UPDATE);
-        formData.addObjectIdsAndChangeTokens(objectIdAndChangeToken);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addSecondaryTypeIds(addSecondaryTypeIds);
-        formData.removeSecondaryTypeIds(removeSecondaryTypeIds);
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertBulkUpdate(json);
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_MOVE);
-        formData.addParameter(Constants.PARAM_TARGET_FOLDER_ID, targetFolderId);
-        formData.addParameter(Constants.PARAM_SOURCE_FOLDER_ID, sourceFolderId);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_DELETE);
-        formData.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-
-        // send
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, folderId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_DELETE_TREE);
-        formData.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-        formData.addParameter(Constants.PARAM_UNFILE_OBJECTS, unfileObjects);
-        formData.addParameter(Constants.PARAM_CONTINUE_ON_FAILURE, continueOnFailure);
-
-        // send
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        if (resp.hasResponseStream()) {
-            try {
-                InputStream responseStream = IOUtils.checkForBytes(resp.getStream(), 8192);
-                if (responseStream != null) {
-                    Map<String, Object> json = parseObject(responseStream, resp.getCharset());
-                    return JSONConverter.convertFailedToDelete(json);
-                }
-            } catch (IOException e) {
-                throw new CmisConnectionException("Cannot read response!", e);
-            }
-        }
-
-        return new FailedToDeleteDataImpl();
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_SET_CONTENT, contentStream);
-        formData.addParameter(Constants.PARAM_OVERWRITE_FLAG, overwriteFlag);
-        formData.addParameter(Constants.PARAM_CHANGE_TOKEN,
-                (changeToken == null || getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                        : changeToken.getValue()));
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-
-        setChangeToken(changeToken, newObj);
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_APPEND_CONTENT, contentStream);
-        formData.addParameter(Constants.CONTROL_IS_LAST_CHUNK, isLastChunk);
-        formData.addParameter(Constants.PARAM_CHANGE_TOKEN,
-                (changeToken == null || getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                        : changeToken.getValue()));
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-
-        setChangeToken(changeToken, newObj);
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object ID must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_DELETE_CONTENT);
-        formData.addParameter(Constants.PARAM_CHANGE_TOKEN,
-                (changeToken == null || getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                        : changeToken.getValue()));
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-
-        setChangeToken(changeToken, newObj);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/PolicyServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/PolicyServiceImpl.java
deleted file mode 100644
index 50a278d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/PolicyServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-
-/**
- * Policy Service Browser Binding client.
- */
-public class PolicyServiceImpl extends AbstractBrowserBindingService implements PolicyService {
-
-    /**
-     * Constructor.
-     */
-    public PolicyServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_APPLY_POLICY);
-        formData.addPoliciesParameters(Collections.singletonList(policyId));
-
-        // send
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_REMOVE_POLICY);
-        formData.addPoliciesParameters(Collections.singletonList(policyId));
-
-        // send
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_POLICIES);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjects(json, typeCache);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RelationshipServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RelationshipServiceImpl.java
deleted file mode 100644
index a56206d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RelationshipServiceImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-
-/**
- * Relationship Service Browser Binding client.
- */
-public class RelationshipServiceImpl extends AbstractBrowserBindingService implements RelationshipService {
-
-    /**
-     * Constructor.
-     */
-    public RelationshipServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_RELATIONSHIPS);
-        url.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
-        url.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjectList(json, typeCache, false);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java
deleted file mode 100644
index d0df39f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Repository Service Browser Binding client.
- */
-public class RepositoryServiceImpl extends AbstractBrowserBindingService implements RepositoryService {
-
-    /**
-     * Constructor.
-     */
-    public RepositoryServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return getRepositoriesInternal(null);
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        List<RepositoryInfo> repositoryInfos = getRepositoriesInternal(repositoryId);
-
-        if (repositoryInfos.isEmpty()) {
-            throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");
-        }
-
-        if (repositoryInfos.size() == 1) {
-            return repositoryInfos.get(0);
-        }
-
-        // find the repository
-        for (RepositoryInfo info : repositoryInfos) {
-            if (info.getId() == null) {
-                continue;
-            }
-
-            if (info.getId().equals(repositoryId)) {
-                return info;
-            }
-        }
-
-        throw new CmisObjectNotFoundException("Repository '" + repositoryId + "'not found!");
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return getTypeDefinitionInternal(repositoryId, typeId);
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId, Constants.SELECTOR_TYPE_CHILDREN);
-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);
-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertTypeChildren(json);
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId, Constants.SELECTOR_TYPE_DESCENDANTS);
-        url.addParameter(Constants.PARAM_TYPE_ID, typeId);
-        url.addParameter(Constants.PARAM_DEPTH, depth);
-        url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertTypeDescendants(json);
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_TYPE);
-        if (type != null) {
-            formData.addParameter(Constants.CONTROL_TYPE, JSONConverter.convert(type, getDateTimeFormat())
-                    .toJSONString());
-        }
-
-        // send
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertTypeDefinition(json);
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_UPDATE_TYPE);
-        if (type != null) {
-            formData.addParameter(Constants.CONTROL_TYPE, JSONConverter.convert(type, getDateTimeFormat())
-                    .toJSONString());
-        }
-
-        // send
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        return JSONConverter.convertTypeDefinition(json);
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getRepositoryUrl(repositoryId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_DELETE_TYPE);
-        formData.addParameter(Constants.CONTROL_TYPE_ID, typeId);
-
-        // send
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryUrlCache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryUrlCache.java
deleted file mode 100644
index ab754b2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryUrlCache.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-
-/**
- * URL cache for repository and root URLs.
- */
-public class RepositoryUrlCache implements Serializable {
-
-    public static final String OBJECT_ID = "objectId";
-
-    private static final long serialVersionUID = 1L;
-
-    private final Map<String, String> repositoryUrls;
-    private final Map<String, String> rootUrls;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    public RepositoryUrlCache() {
-        repositoryUrls = new HashMap<String, String>();
-        rootUrls = new HashMap<String, String>();
-    }
-
-    /**
-     * Adds the URLs of a repository to the cache.
-     */
-    public void addRepository(String repositoryId, String repositoryUrl, String rootUrl) {
-        if (repositoryId == null || repositoryUrl == null || rootUrl == null) {
-            throw new IllegalArgumentException("Repository Id or Repository URL or Root URL is not set!");
-        }
-
-        lock.writeLock().lock();
-        try {
-            repositoryUrls.put(repositoryId, repositoryUrl);
-            rootUrls.put(repositoryId, rootUrl);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Removes the URLs of a repository from the cache.
-     */
-    public void removeRepository(String repositoryId) {
-        lock.writeLock().lock();
-        try {
-            repositoryUrls.remove(repositoryId);
-            rootUrls.remove(repositoryId);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Returns the base repository URL of a repository.
-     */
-    public String getRepositoryBaseUrl(String repositoryId) {
-        lock.readLock().lock();
-        try {
-            return repositoryUrls.get(repositoryId);
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Returns the root URL of a repository.
-     */
-    public String getRootUrl(String repositoryId) {
-        lock.readLock().lock();
-        try {
-            return rootUrls.get(repositoryId);
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Returns the repository URL.
-     */
-    public UrlBuilder getRepositoryUrl(String repositoryId) {
-        String base = getRepositoryBaseUrl(repositoryId);
-        if (base == null) {
-            return null;
-        }
-
-        return new UrlBuilder(base);
-    }
-
-    /**
-     * Returns the repository URL with the given selector.
-     */
-    public UrlBuilder getRepositoryUrl(String repositoryId, String selector) {
-        UrlBuilder result = getRepositoryUrl(repositoryId);
-        if (result == null) {
-            return null;
-        }
-
-        result.addParameter(Constants.PARAM_SELECTOR, selector);
-
-        return result;
-    }
-
-    /**
-     * Returns an object URL with the given selector.
-     */
-    public UrlBuilder getObjectUrl(String repositoryId, String objectId) {
-        String root = getRootUrl(repositoryId);
-        if (root == null) {
-            return null;
-        }
-
-        UrlBuilder result = new UrlBuilder(root);
-        result.addParameter(OBJECT_ID, objectId);
-
-        return result;
-    }
-
-    /**
-     * Returns an object URL with the given selector.
-     */
-    public UrlBuilder getObjectUrl(String repositoryId, String objectId, String selector) {
-        UrlBuilder result = getObjectUrl(repositoryId, objectId);
-        if (result == null) {
-            return null;
-        }
-
-        result.addParameter(Constants.PARAM_SELECTOR, selector);
-
-        return result;
-    }
-
-    /**
-     * Returns an object URL with the given selector.
-     */
-    public UrlBuilder getPathUrl(String repositoryId, String path) {
-        String root = getRootUrl(repositoryId);
-        if (root == null) {
-            return null;
-        }
-
-        UrlBuilder result = new UrlBuilder(root);
-        result.addPath(path);
-
-        return result;
-    }
-
-    /**
-     * Returns an object URL with the given selector.
-     */
-    public UrlBuilder getPathUrl(String repositoryId, String path, String selector) {
-        UrlBuilder result = getPathUrl(repositoryId, path);
-        if (result == null) {
-            return null;
-        }
-
-        result.addParameter(Constants.PARAM_SELECTOR, selector);
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/SpiSessionParameter.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/SpiSessionParameter.java
deleted file mode 100644
index 39451c9..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/SpiSessionParameter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-/**
- * Internal session parameters.
- */
-public final class SpiSessionParameter {
-
-    public static final String REPOSITORY_URL_CACHE = "org.apache.chemistry.opencmis.binding.browser.repositoryurls";
-
-    private SpiSessionParameter() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/VersioningServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/VersioningServiceImpl.java
deleted file mode 100644
index 12398cf..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/VersioningServiceImpl.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.browser;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Output;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * Versioning Service Browser Binding client.
- */
-public class VersioningServiceImpl extends AbstractBrowserBindingService implements VersioningService {
-
-    /**
-     * Constructor.
-     */
-    public VersioningServiceImpl(BindingSession session) {
-        setSession(session);
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CHECK_OUT);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId);
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CANCEL_CHECK_OUT);
-
-        // send
-        postAndConsume(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        // we need an object id
-        if ((objectId == null) || (objectId.getValue() == null) || (objectId.getValue().length() == 0)) {
-            throw new CmisInvalidArgumentException("Object id must be set!");
-        }
-
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId.getValue());
-
-        // prepare form data
-        final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CHECK_IN, contentStream);
-        formData.addParameter(Constants.PARAM_MAJOR, major);
-        formData.addPropertiesParameters(properties, getDateTimeFormat());
-        formData.addParameter(Constants.PARAM_CHECKIN_COMMENT, checkinComment);
-        formData.addPoliciesParameters(policies);
-        formData.addAddAcesParameters(addAces);
-        formData.addRemoveAcesParameters(removeAces);
-        formData.addSuccinctFlag(getSuccinct());
-
-        // send and parse
-        Response resp = post(url, formData.getContentType(), new Output() {
-            public void write(OutputStream out) throws IOException {
-                formData.write(out);
-            }
-        });
-
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        ObjectData newObj = JSONConverter.convertObject(json, typeCache);
-
-        objectId.setValue(newObj == null ? null : newObj.getId());
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_OBJECT);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-        url.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-        url.addParameter(Constants.PARAM_ACL, includeAcl);
-        url.addParameter(Constants.PARAM_RETURN_VERSION,
-                (major == null || Boolean.FALSE.equals(major) ? ReturnVersion.LATEST : ReturnVersion.LASTESTMAJOR));
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObject(json, typeCache);
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_PROPERTIES);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_RETURN_VERSION,
-                (major == null || Boolean.FALSE.equals(major) ? ReturnVersion.LATEST : ReturnVersion.LASTESTMAJOR));
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset());
-
-        if (getSuccinct()) {
-            TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-            return JSONConverter.convertSuccinctProperties(json, null, typeCache);
-        } else {
-            return JSONConverter.convertProperties(json, null);
-        }
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        // build URL
-        UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_VERSIONS);
-        url.addParameter(Constants.PARAM_FILTER, filter);
-        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-        url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter());
-        url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter());
-
-        // read and parse
-        Response resp = read(url);
-        List<Object> json = parseArray(resp.getStream(), resp.getCharset());
-
-        TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this);
-
-        return JSONConverter.convertObjects(json, typeCache);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieManager.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieManager.java
deleted file mode 100644
index b36bea4..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieManager.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * This class has been taken from Apache Harmony (http://harmony.apache.org/) 
- * and has been modified to work with OpenCMIS.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.cookies;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Cookie Manager.
- * 
- * This implementation conforms to RFC 2965, section 3.3 with some RFC 6265
- * extensions.
- */
-public class CmisCookieManager implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisCookieManager.class.getName());
-
-    private static final String VERSION_ZERO_HEADER = "Set-cookie";
-    private static final String VERSION_ONE_HEADER = "Set-cookie2";
-
-    private final String sessionId;
-    private final CmisCookieStoreImpl store;
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Constructs a new cookie manager.
-     */
-    public CmisCookieManager() {
-        this("<unknown>");
-    }
-
-    /**
-     * Constructs a new cookie manager.
-     */
-    public CmisCookieManager(String sessionId) {
-        this.sessionId = sessionId;
-        store = new CmisCookieStoreImpl();
-    }
-
-    /**
-     * Searchs and gets all cookies in the cache by the specified uri in the
-     * request header.
-     * 
-     * @param uri
-     *            the specified uri to search for
-     * @param requestHeaders
-     *            a list of request headers
-     * @return a map that record all such cookies, the map is unchangeable
-     */
-    public Map<String, List<String>> get(String url, Map<String, List<String>> requestHeaders) {
-        if (url == null || requestHeaders == null) {
-            throw new IllegalArgumentException("URL or headers are null!");
-        }
-
-        URI uri;
-        try {
-            uri = new URI(url);
-        } catch (URISyntaxException e) {
-            throw new CmisConnectionException(e.getMessage(), e);
-        }
-
-        lock.writeLock().lock();
-        try {
-            List<CmisHttpCookie> cookies = store.get(uri);
-            String uriPath = uri.getPath();
-            for (int i = 0; i < cookies.size(); i++) {
-                CmisHttpCookie cookie = cookies.get(i);
-                String cookiePath = cookie.getPath();
-                // if the uri's path does not path-match cookie's path, remove
-                // cookies from the list
-                if (cookiePath == null || uriPath.length() == 0 || !uriPath.startsWith(cookiePath)) {
-                    cookies.remove(i);
-                }
-            }
-
-            Map<String, List<String>> map = getCookieMap(cookies, requestHeaders);
-
-            if (LOG.isDebugEnabled()) {
-                if (map != null && !map.isEmpty()) {
-                    LOG.debug("Session {}: Setting cookies for URL {}: {}", sessionId, url,
-                            map.get("Cookie") == null ? "" : map.get("Cookie").toString());
-                }
-            }
-
-            return map;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    private static Map<String, List<String>> getCookieMap(List<CmisHttpCookie> cookies,
-            Map<String, List<String>> requestHeaders) {
-        if (cookies.isEmpty()) {
-            return Collections.emptyMap();
-        }
-
-        StringBuilder cookieHeaderStr = new StringBuilder();
-
-        for (CmisHttpCookie cookie : cookies) {
-            if (cookieHeaderStr.length() > 0) {
-                cookieHeaderStr.append("; ");
-            }
-            cookieHeaderStr.append(cookie.getName());
-            cookieHeaderStr.append('=');
-            cookieHeaderStr.append(cookie.getValue());
-        }
-
-        return Collections.singletonMap("Cookie", Collections.singletonList(cookieHeaderStr.toString()));
-    }
-
-    /**
-     * Sets cookies according to uri and responseHeaders
-     * 
-     * @param uri
-     *            the specified uri
-     * @param responseHeaders
-     *            a list of request headers
-     * @throws IOException
-     *             if some error of I/O operation occurs
-     */
-    public void put(String url, Map<String, List<String>> responseHeaders) {
-        if (url == null || responseHeaders == null) {
-            throw new IllegalArgumentException("URL or headers are null!");
-        }
-
-        URI uri;
-        try {
-            uri = new URI(url);
-        } catch (URISyntaxException e) {
-            throw new CmisConnectionException(e.getMessage(), e);
-        }
-
-        lock.writeLock().lock();
-        try {
-            // parse and construct cookies according to the map
-            List<CmisHttpCookie> cookies = parseCookie(responseHeaders);
-            for (CmisHttpCookie cookie : cookies) {
-                if (cookie.getDomain() == null) {
-                    cookie.setDomain(uri.getHost());
-                }
-                if (cookie.getPath() == null) {
-                    cookie.setPath("/");
-                }
-                store.add(uri, cookie);
-            }
-
-            if (LOG.isDebugEnabled()) {
-                if (!cookies.isEmpty()) {
-                    LOG.debug("Session {}: Retrieved cookies for URL {}: {}", sessionId, url, cookies.toString());
-                }
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    private static List<CmisHttpCookie> parseCookie(Map<String, List<String>> responseHeaders) {
-        List<CmisHttpCookie> cookies = new ArrayList<CmisHttpCookie>();
-        for (Map.Entry<String, List<String>> entry : responseHeaders.entrySet()) {
-            String key = entry.getKey();
-            // Only "Set-cookie" and "Set-cookie2" pair will be parsed
-            if (key != null && (key.equalsIgnoreCase(VERSION_ZERO_HEADER) || key.equalsIgnoreCase(VERSION_ONE_HEADER))) {
-                // parse list elements one by one
-                for (String cookieStr : entry.getValue()) {
-                    try {
-                        for (CmisHttpCookie cookie : CmisHttpCookie.parse(cookieStr)) {
-                            cookies.add(cookie);
-                        }
-                    } catch (IllegalArgumentException e) {
-                        // this string is invalid, jump to the next one.
-                    }
-                }
-            }
-        }
-
-        return cookies;
-    }
-
-    /**
-     * Gets current cookie store.
-     * 
-     * @return the cookie store currently used by cookie manager.
-     */
-    public CmisCookieStoreImpl getCookieStore() {
-        return store;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java
deleted file mode 100644
index aadcb9a..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * This class has been taken from Apache Harmony (http://harmony.apache.org/) 
- * and has been modified to work with OpenCMIS.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.cookies;
-
-import java.io.Serializable;
-import java.net.URI;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Pattern;
-
-/**
- * Provides an in-memory cookie store.
- */
-public class CmisCookieStoreImpl implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private static final String IP_ADDRESS_PATTERN_STR = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
-    private static final Pattern IP_ADDRESS_PATTERN = Pattern.compile(IP_ADDRESS_PATTERN_STR);
-
-    private final int maxUrls;
-    private final ArrayDeque<CmisHttpCookie> storeList;
-
-    public CmisCookieStoreImpl() {
-        this(300);
-    }
-
-    public CmisCookieStoreImpl(final int maxUrls) {
-        this.maxUrls = maxUrls;
-        storeList = new ArrayDeque<CmisHttpCookie>(maxUrls);
-    }
-
-    public void add(final URI uri, final CmisHttpCookie cookie) {
-        if (uri == null || cookie == null) {
-            throw new IllegalArgumentException("URI and cookie must be set!");
-        }
-
-        if (cookie.hasExpired()) {
-            storeList.remove(cookie);
-            return;
-        }
-
-        Iterator<CmisHttpCookie> iter = storeList.iterator();
-        while (iter.hasNext()) {
-            CmisHttpCookie storeCookie = iter.next();
-
-            if (storeCookie.equals(cookie) || storeCookie.hasExpired()) {
-                iter.remove();
-            }
-        }
-
-        storeList.addFirst(cookie);
-
-        if (storeList.size() > maxUrls) {
-            storeList.removeLast();
-        }
-    }
-
-    public List<CmisHttpCookie> get(URI uri) {
-        if (uri == null) {
-            throw new IllegalArgumentException("URI is null!");
-        }
-
-        final String uriHost = uri.getHost().toLowerCase(Locale.ENGLISH);
-
-        boolean isSecure = false;
-        String scheme = uri.getScheme();
-        if (scheme != null) {
-            isSecure = scheme.toLowerCase(Locale.ENGLISH).startsWith("https");
-        }
-
-        List<CmisHttpCookie> cookies = new ArrayList<CmisHttpCookie>();
-
-        Iterator<CmisHttpCookie> iter = storeList.iterator();
-        while (iter.hasNext()) {
-            CmisHttpCookie cookie = iter.next();
-
-            if (cookie.hasExpired()) {
-                iter.remove();
-            } else if ((!cookie.getSecure() || isSecure) && cookie.getDomain() != null) {
-                String cookieDomain = cookie.getDomain().toLowerCase();
-
-                if (isIPAddress(uriHost) && uriHost.equals(cookieDomain)) {
-                    cookies.add(cookie);
-                } else {
-                    if (cookie.getVersion() == 0) {
-                        // Netscape, RFC 2109, RFC 6265
-                        if (uriHost.endsWith(cookieDomain)
-                                && (uriHost.length() == cookieDomain.length() || cookieDomain.charAt(0) == '.')) {
-                            cookies.add(cookie);
-                        }
-                    } else if (cookie.getVersion() == 1) {
-                        // RFC 2965
-                        if (CmisHttpCookie.domainMatches(cookieDomain, uriHost)) {
-                            cookies.add(cookie);
-                        }
-                    }
-                }
-            }
-        }
-
-        return cookies;
-    }
-
-    private boolean isIPAddress(String s) {
-        if (s.charAt(0) == '[') {
-            // IPv6
-            return true;
-        }
-
-        if (IP_ADDRESS_PATTERN.matcher(s).matches()) {
-            // IPv4
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisHttpCookie.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisHttpCookie.java
deleted file mode 100644
index 4db1ab9..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisHttpCookie.java
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * This class has been taken from Apache Harmony (http://harmony.apache.org/) 
- * and has been modified to work with OpenCMIS.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.cookies;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-
-/**
- * This class represents a http cookie, which indicates the status information
- * between the client agent side and the server side. According to RFC, there
- * are 4 http cookie specifications. This class is compatible with the original
- * Netscape specification, RFC 2109, RFC 2965 and party compatible with RFC
- * 6265. HttpCookie class can accept all syntax forms.
- */
-public final class CmisHttpCookie implements Cloneable, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String DOT_STR = ".";
-    private static final String LOCAL_STR = ".local";
-    private static final String QUOTE_STR = "\"";
-    private static final String COMMA_STR = ",";
-    private static final Pattern HEAD_PATTERN = Pattern.compile("Set-Cookie2?:", Pattern.CASE_INSENSITIVE);
-    private static final Pattern NAME_PATTERN = Pattern.compile(
-            "([^$=,\u0085\u2028\u2029][^,\n\t\r\r\n\u0085\u2028\u2029]*?)=([^;]*)(;)?", Pattern.DOTALL
-                    | Pattern.CASE_INSENSITIVE);
-    private static final Pattern ATTR_PATTERN0 = Pattern.compile("([^;=]*)(?:=([^;]*))?");
-    private static final Pattern ATTR_PATTERN1 = Pattern.compile("(,?[^;=]*)(?:=([^;,]*))?((?=.))?");
-
-    private abstract static class Setter {
-        private boolean set;
-
-        Setter() {
-            set = false;
-        }
-
-        boolean isSet() {
-            return set;
-        }
-
-        void set(boolean isSet) {
-            set = isSet;
-        }
-
-        abstract void setValue(String value, CmisHttpCookie cookie);
-
-        void validate(String value, CmisHttpCookie cookie) {
-            if (cookie.getVersion() == 1 && value != null && value.contains(COMMA_STR)) {
-                throw new IllegalArgumentException();
-            }
-        }
-    }
-
-    private Map<String, Setter> attributeSet = new HashMap<String, Setter>();
-
-    /**
-     * A utility method used to check whether the host name is in a domain or
-     * not.
-     * 
-     * @param domain
-     *            the domain to be checked against
-     * @param host
-     *            the host to be checked
-     * @return true if the host is in the domain, false otherwise
-     */
-    public static boolean domainMatches(String domain, String host) {
-        if (domain == null || host == null) {
-            return false;
-        }
-        String newDomain = domain.toLowerCase();
-        String newHost = host.toLowerCase();
-
-        return newDomain.equals(newHost)
-                || (isValidDomain(newDomain) && effDomainMatches(newDomain, newHost) && isValidHost(newDomain, newHost));
-    }
-
-    private static boolean effDomainMatches(String domain, String host) {
-        // calculate effective host name
-        String effHost = host.indexOf(DOT_STR) != -1 ? host : (host + LOCAL_STR);
-
-        // Rule 2: domain and host are string-compare equal, or A = NB, B = .B'
-        // and N is a non-empty name string
-        boolean inDomain = domain.equals(effHost);
-        inDomain = inDomain
-                || (effHost.endsWith(domain) && effHost.length() > domain.length() && domain.startsWith(DOT_STR));
-
-        return inDomain;
-    }
-
-    private static boolean isCommaDelim(CmisHttpCookie cookie) {
-        String value = cookie.getValue();
-        if (value.startsWith(QUOTE_STR) && value.endsWith(QUOTE_STR)) {
-            cookie.setValue(value.substring(1, value.length() - 1));
-            return false;
-        }
-
-        if (cookie.getVersion() == 1 && value.contains(COMMA_STR)) {
-            cookie.setValue(value.substring(0, value.indexOf(COMMA_STR)));
-            return true;
-        }
-
-        return false;
-    }
-
-    private static boolean isValidDomain(String domain) {
-        // Rule 1: The value for Domain contains embedded dots, or is .local
-        if (domain.length() <= 2) {
-            return false;
-        }
-
-        return domain.substring(1, domain.length() - 1).indexOf(DOT_STR) != -1 || domain.equals(LOCAL_STR);
-    }
-
-    private static boolean isValidHost(String domain, String host) {
-        // Rule 3: host does not end with domain, or the remainder does not
-        // contain "."
-        boolean matches = !host.endsWith(domain);
-        if (!matches) {
-            String hostSub = host.substring(0, host.length() - domain.length());
-            matches = hostSub.indexOf(DOT_STR) == -1;
-        }
-
-        return matches;
-    }
-
-    /**
-     * Constructs a cookie from a string. The string should comply with
-     * set-cookie or set-cookie2 header format as specified in RFC 2965. Since
-     * set-cookies2 syntax allows more than one cookie definitions in one
-     * header, the returned object is a list.
-     * 
-     * @param header
-     *            a set-cookie or set-cookie2 header.
-     * @return a list of constructed cookies
-     * @throws IllegalArgumentException
-     *             if the string does not comply with cookie specification, or
-     *             the cookie name contains illegal characters, or reserved
-     *             tokens of cookie specification appears
-     * @throws NullPointerException
-     *             if header is null
-     */
-    public static List<CmisHttpCookie> parse(String header) {
-        Matcher matcher = HEAD_PATTERN.matcher(header);
-        // Parse cookie name & value
-        List<CmisHttpCookie> list = null;
-        CmisHttpCookie cookie = null;
-        String headerString = header;
-        int version = 0;
-        // process set-cookie | set-cookie2 head
-        if (matcher.find()) {
-            String cookieHead = matcher.group();
-            if ("set-cookie2:".equalsIgnoreCase(cookieHead)) {
-                version = 1;
-            }
-            headerString = header.substring(cookieHead.length());
-        }
-
-        // parse cookie name/value pair
-        matcher = NAME_PATTERN.matcher(headerString);
-        if (matcher.lookingAt()) {
-            list = new ArrayList<CmisHttpCookie>();
-            cookie = new CmisHttpCookie(matcher.group(1), matcher.group(2));
-            cookie.setVersion(version);
-
-            /*
-             * Comma is a delimiter in cookie spec 1.1. If find comma in version
-             * 1 cookie header, part of matched string need to be spitted out.
-             */
-            String nameGroup = matcher.group();
-            if (isCommaDelim(cookie)) {
-                headerString = headerString.substring(nameGroup.indexOf(COMMA_STR));
-            } else {
-                headerString = headerString.substring(nameGroup.length());
-            }
-            list.add(cookie);
-        } else {
-            throw new IllegalArgumentException();
-        }
-
-        // parse cookie headerString
-        while (!(headerString.length() == 0)) {
-            matcher = cookie.getVersion() == 1 ? ATTR_PATTERN1.matcher(headerString) : ATTR_PATTERN0
-                    .matcher(headerString);
-
-            if (matcher.lookingAt()) {
-                String attrName = matcher.group(1).trim();
-
-                // handle special situation like: <..>;;<..>
-                if (attrName.length() == 0) {
-                    headerString = headerString.substring(1);
-                    continue;
-                }
-
-                // If port is the attribute, then comma will not be used as a
-                // delimiter
-                if (attrName.equalsIgnoreCase("port") || attrName.equalsIgnoreCase("expires")) {
-                    int start = matcher.regionStart();
-                    matcher = ATTR_PATTERN0.matcher(headerString);
-                    matcher.region(start, headerString.length());
-                    matcher.lookingAt();
-                } else if (cookie.getVersion() == 1 && attrName.startsWith(COMMA_STR)) {
-                    // If the last encountered token is comma, and the parsed
-                    // attribute is not port, then this attribute/value pair
-                    // ends.
-                    headerString = headerString.substring(1);
-                    matcher = NAME_PATTERN.matcher(headerString);
-                    if (matcher.lookingAt()) {
-                        cookie = new CmisHttpCookie(matcher.group(1), matcher.group(2));
-                        list.add(cookie);
-                        headerString = headerString.substring(matcher.group().length());
-                        continue;
-                    }
-                }
-
-                Setter setter = cookie.attributeSet.get(attrName.toLowerCase());
-                if (setter != null && !setter.isSet()) {
-                    String attrValue = matcher.group(2);
-                    setter.validate(attrValue, cookie);
-                    setter.setValue(matcher.group(2), cookie);
-                }
-                headerString = headerString.substring(matcher.end());
-            }
-        }
-
-        return list;
-    }
-
-    private String comment;
-    private String commentURL;
-    private boolean discard;
-    private String domain;
-    private long maxAge = -1L;
-    private String name;
-    private String path;
-    private String portList;
-    private boolean secure;
-    private String value;
-    private int version = 1;
-
-    {
-        attributeSet.put("comment", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setComment(value);
-                if (cookie.getComment() != null) {
-                    set(true);
-                }
-            }
-        });
-        attributeSet.put("commenturl", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setCommentURL(value);
-                if (cookie.getCommentURL() != null) {
-                    set(true);
-                }
-            }
-        });
-        attributeSet.put("discard", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setDiscard(true);
-                set(true);
-            }
-        });
-        attributeSet.put("domain", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setDomain(value);
-                if (cookie.getDomain() != null) {
-                    set(true);
-                }
-            }
-        });
-        attributeSet.put("max-age", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                try {
-                    cookie.setMaxAge(Long.parseLong(value));
-                } catch (NumberFormatException e) {
-                    throw new IllegalArgumentException("Invalid max-age!", e);
-                }
-                set(true);
-
-                if (!attributeSet.get("version").isSet()) {
-                    cookie.setVersion(1);
-                }
-            }
-        });
-
-        attributeSet.put("path", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setPath(value);
-                if (cookie.getPath() != null) {
-                    set(true);
-                }
-            }
-        });
-        attributeSet.put("port", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setPortlist(value);
-                if (cookie.getPortlist() != null) {
-                    set(true);
-                }
-            }
-
-            @Override
-            void validate(String v, CmisHttpCookie cookie) {
-            }
-        });
-        attributeSet.put("secure", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setSecure(true);
-                set(true);
-            }
-        });
-        attributeSet.put("version", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                try {
-                    int v = Integer.parseInt(value);
-                    if (v > cookie.getVersion()) {
-                        cookie.setVersion(v);
-                    }
-                } catch (NumberFormatException e) {
-                    throw new IllegalArgumentException("Invalid version!", e);
-                }
-                if (cookie.getVersion() != 0) {
-                    set(true);
-                }
-            }
-        });
-
-        attributeSet.put("expires", new Setter() {
-            @Override
-            void setValue(String value, CmisHttpCookie cookie) {
-                cookie.setVersion(0);
-                attributeSet.get("version").set(true);
-                if (!attributeSet.get("max-age").isSet()) {
-                    attributeSet.get("max-age").set(true);
-                    if (!"en".equalsIgnoreCase(Locale.getDefault().getLanguage())) {
-                        cookie.setMaxAge(0);
-                        return;
-                    }
-
-                    Date date = DateTimeHelper.parseHttpDateTime(value);
-                    if (date != null) {
-                        cookie.setMaxAge((date.getTime() - System.currentTimeMillis()) / 1000);
-                    } else {
-                        cookie.setMaxAge(0);
-                    }
-                }
-            }
-
-            @Override
-            void validate(String v, CmisHttpCookie cookie) {
-            }
-        });
-    }
-
-    /**
-     * Initializes a cookie with the specified name and value.
-     * 
-     * The name attribute can just contain ASCII characters, which is immutable
-     * after creation. Commas, white space and semicolons are not allowed. The $
-     * character is also not allowed to be the beginning of the name.
-     * 
-     * The value attribute depends on what the server side is interested. The
-     * setValue method can be used to change it.
-     * 
-     * RFC 2965 is the default cookie specification of this class. If one wants
-     * to change the version of the cookie, the setVersion method is available.
-     * 
-     * @param name
-     *            - the specific name of the cookie
-     * @param value
-     *            - the specific value of the cookie
-     * 
-     * @throws IllegalArgumentException
-     *             - if the name contains not-allowed or reserved characters
-     * 
-     * @throws NullPointerException
-     *             if the value of name is null
-     */
-    public CmisHttpCookie(String name, String value) {
-        String ntrim = name.trim(); // erase leading and trailing whitespaces
-        if (!isValidName(ntrim)) {
-            throw new IllegalArgumentException("Invalid name!");
-        }
-
-        this.name = ntrim;
-        this.value = value;
-    }
-
-    private void attrToString(StringBuilder builder, String attrName, String attrValue) {
-        if (attrValue != null && builder != null) {
-            builder.append(';');
-            builder.append('$');
-            builder.append(attrName);
-            builder.append("=\"");
-            builder.append(attrValue);
-            builder.append(QUOTE_STR);
-        }
-    }
-
-    /**
-     * Answers a copy of this object.
-     * 
-     * @return a copy of this cookie
-     */
-    @Override
-    public Object clone() {
-        try {
-            return super.clone();
-        } catch (CloneNotSupportedException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Answers whether two cookies are equal. Two cookies are equal if they have
-     * the same domain and name in a case-insensitive mode and path in a
-     * case-sensitive mode.
-     * 
-     * @param obj
-     *            the object to be compared.
-     * @return true if two cookies equals, false otherwise
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (obj instanceof CmisHttpCookie) {
-            CmisHttpCookie anotherCookie = (CmisHttpCookie) obj;
-            if (name.equalsIgnoreCase(anotherCookie.getName())) {
-                String anotherDomain = anotherCookie.getDomain();
-                boolean equals = domain == null ? anotherDomain == null : domain.equalsIgnoreCase(anotherDomain);
-                if (equals) {
-                    String anotherPath = anotherCookie.getPath();
-                    return path == null ? anotherPath == null : path.equals(anotherPath);
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Answers the value of comment attribute(specified in RFC 2965) of this
-     * cookie.
-     * 
-     * @return the value of comment attribute
-     */
-    public String getComment() {
-        return comment;
-    }
-
-    /**
-     * Answers the value of commentURL attribute(specified in RFC 2965) of this
-     * cookie.
-     * 
-     * @return the value of commentURL attribute
-     */
-    public String getCommentURL() {
-        return commentURL;
-    }
-
-    /**
-     * Answers the value of discard attribute(specified in RFC 2965) of this
-     * cookie.
-     * 
-     * @return discard value of this cookie
-     */
-    public boolean getDiscard() {
-        return discard;
-    }
-
-    /**
-     * Answers the domain name for this cookie in the format specified in RFC
-     * 2965
-     * 
-     * @return the domain value of this cookie
-     */
-    public String getDomain() {
-        return domain;
-    }
-
-    /**
-     * Returns the Max-Age value as specified in RFC 2965 of this cookie.
-     * 
-     * @return the Max-Age value
-     */
-    public long getMaxAge() {
-        return maxAge;
-    }
-
-    /**
-     * Answers the name for this cookie.
-     * 
-     * @return the name for this cookie
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Answers the path part of a request URL to which this cookie is returned.
-     * This cookie is visible to all subpaths.
-     * 
-     * @return the path used to return the cookie
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * Answers the value of port attribute(specified in RFC 2965) of this
-     * cookie.
-     * 
-     * @return port list of this cookie
-     */
-    public String getPortlist() {
-        return portList;
-    }
-
-    /**
-     * Answers true if the browser only sends cookies over a secure protocol.
-     * False if can send cookies through any protocols.
-     * 
-     * @return true if sends cookies only through secure protocol, false
-     *         otherwise
-     */
-    public boolean getSecure() {
-        return secure;
-    }
-
-    /**
-     * Answers the value of this cookie.
-     * 
-     * @return the value of this cookie
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * Get the version of this cookie
-     * 
-     * @return 0 indicates the original Netscape cookie specification, while 1
-     *         indicates RFC 2965/2109 specification.
-     */
-    public int getVersion() {
-        return version;
-    }
-
-    /**
-     * Answers whether the cookie has expired.
-     * 
-     * @return true is the cookie has expired, false otherwise
-     */
-    public boolean hasExpired() {
-        // -1 indicates the cookie will persist until browser shutdown
-        // so the cookie is not expired.
-        if (maxAge == -1L) {
-            return false;
-        }
-
-        boolean expired = false;
-        if (maxAge <= 0L) {
-            expired = true;
-        }
-        return expired;
-    }
-
-    /**
-     * Answers hash code of this http cookie. The result is calculated as below:
-     * 
-     * getName().toLowerCase().hashCode() + getDomain().toLowerCase().hashCode()
-     * + getPath().hashCode()
-     * 
-     * @return the hash code of this cookie
-     */
-    @Override
-    public int hashCode() {
-        int hashCode = name.toLowerCase().hashCode();
-        hashCode += domain == null ? 0 : domain.toLowerCase().hashCode();
-        hashCode += path == null ? 0 : path.hashCode();
-        return hashCode;
-    }
-
-    private boolean isValidName(String n) {
-        // name cannot be empty or begin with '$' or equals the reserved
-        // attributes (case-insensitive)
-        boolean isValid = !(n.length() == 0 || n.charAt(0) == '$' || attributeSet.containsKey(n.toLowerCase()));
-        if (isValid) {
-            for (int i = 0; i < n.length(); i++) {
-                char nameChar = n.charAt(i);
-                // name must be ASCII characters and cannot contain ';', ',' and
-                // whitespace
-                if (nameChar < 0 || nameChar >= 127 || nameChar == ';' || nameChar == ','
-                        || (Character.isWhitespace(nameChar) && nameChar != ' ')) {
-                    isValid = false;
-                    break;
-                }
-            }
-        }
-
-        return isValid;
-    }
-
-    /**
-     * Set the value of comment attribute(specified in RFC 2965) of this cookie.
-     * 
-     * @param purpose
-     *            the comment value to be set
-     */
-    public void setComment(String purpose) {
-        comment = purpose;
-    }
-
-    /**
-     * Set the value of commentURL attribute(specified in RFC 2965) of this
-     * cookie.
-     * 
-     * @param purpose
-     *            the value of commentURL attribute to be set
-     */
-    public void setCommentURL(String purpose) {
-        commentURL = purpose;
-    }
-
-    /**
-     * Set the value of discard attribute(specified in RFC 2965) of this cookie.
-     * 
-     * @param discard
-     *            the value for discard attribute
-     */
-    public void setDiscard(boolean discard) {
-        this.discard = discard;
-    }
-
-    /**
-     * Set the domain value for this cookie. Browsers send the cookie to the
-     * domain specified by this value. The form of the domain is specified in
-     * RFC 2965.
-     * 
-     * @param pattern
-     *            the domain pattern
-     */
-    public void setDomain(String pattern) {
-        domain = pattern == null ? null : pattern.toLowerCase();
-    }
-
-    /**
-     * Sets the Max-Age value as specified in RFC 2965 of this cookie to expire.
-     * 
-     * @param expiry
-     *            the value used to set the Max-Age value of this cookie
-     */
-    public void setMaxAge(long expiry) {
-        maxAge = expiry;
-    }
-
-    /**
-     * Set the path to which this cookie is returned. This cookie is visible to
-     * all the pages under the path and all subpaths.
-     * 
-     * @param path
-     *            the path to which this cookie is returned
-     */
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    /**
-     * Set the value of port attribute(specified in RFC 2965) of this cookie.
-     * 
-     * @param ports
-     *            the value for port attribute
-     */
-    public void setPortlist(String ports) {
-        portList = ports;
-    }
-
-    /*
-     * Handle 2 special cases: 1. value is wrapped by a quotation 2. value
-     * contains comma
-     */
-
-    /**
-     * Tells the browser whether the cookies should be sent to server through
-     * secure protocols.
-     * 
-     * @param flag
-     *            tells browser to send cookie to server only through secure
-     *            protocol if flag is true
-     */
-    public void setSecure(boolean flag) {
-        secure = flag;
-    }
-
-    /**
-     * Sets the value for this cookie after it has been instantiated. String
-     * newValue can be in BASE64 form. If the version of the cookie is 0,
-     * special value as: white space, brackets, parentheses, equals signs,
-     * commas, double quotes, slashes, question marks, at signs, colons, and
-     * semicolons are not recommended. Empty values may lead to different
-     * behavior on different browsers.
-     * 
-     * @param newValue
-     *            the value for this cookie
-     */
-    public void setValue(String newValue) {
-        // FIXME: According to spec, version 0 cookie value does not allow many
-        // symbols. But RI does not implement it. Follow RI temporarily.
-        value = newValue;
-    }
-
-    /**
-     * Sets the version of the cookie. 0 indicates the original Netscape cookie
-     * specification, while 1 indicates RFC 2965/2109 specification.
-     * 
-     * @param v
-     *            0 or 1 as stated above
-     * @throws IllegalArgumentException
-     *             if v is neither 0 nor 1
-     */
-    public void setVersion(int v) {
-        if (v != 0 && v != 1) {
-            throw new IllegalArgumentException("Unknown version!");
-        }
-        version = v;
-    }
-
-    /**
-     * Returns a string to represent the cookie. The format of string follows
-     * the cookie specification. The leading token "Cookie" is not included
-     * 
-     * @return the string format of the cookie object
-     */
-    @Override
-    public String toString() {
-        StringBuilder cookieStr = new StringBuilder();
-        cookieStr.append(name);
-        cookieStr.append('=');
-        if (version == 0) {
-            cookieStr.append(value);
-        } else if (version == 1) {
-            cookieStr.append(QUOTE_STR);
-            cookieStr.append(value);
-            cookieStr.append(QUOTE_STR);
-
-            attrToString(cookieStr, "Path", path);
-            attrToString(cookieStr, "Domain", domain);
-            attrToString(cookieStr, "Port", portList);
-        }
-
-        return cookieStr.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/AbstractApacheClientHttpInvoker.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/AbstractApacheClientHttpInvoker.java
deleted file mode 100644
index d1cef68..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/AbstractApacheClientHttpInvoker.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.GZIPOutputStream;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLSocket;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpVersion;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.entity.AbstractHttpEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A {@link HttpInvoker} that uses The Apache HTTP client.
- */
-public abstract class AbstractApacheClientHttpInvoker implements HttpInvoker {
-
-    protected static final Logger LOG = LoggerFactory.getLogger(AbstractApacheClientHttpInvoker.class);
-
-    protected static final String HTTP_CLIENT = "org.apache.chemistry.opencmis.client.bindings.spi.http.ApacheClientHttpInvoker.httpClient";
-    protected static final int BUFFER_SIZE = 2 * 1024 * 1024;
-
-    public Response invokeGET(UrlBuilder url, BindingSession session) {
-        return invoke(url, "GET", null, null, null, session, null, null);
-    }
-
-    public Response invokeGET(UrlBuilder url, BindingSession session, BigInteger offset, BigInteger length) {
-        return invoke(url, "GET", null, null, null, session, offset, length);
-    }
-
-    public Response invokePOST(UrlBuilder url, String contentType, Output writer, BindingSession session) {
-        return invoke(url, "POST", contentType, null, writer, session, null, null);
-    }
-
-    public Response invokePUT(UrlBuilder url, String contentType, Map<String, String> headers, Output writer,
-            BindingSession session) {
-        return invoke(url, "PUT", contentType, headers, writer, session, null, null);
-    }
-
-    public Response invokeDELETE(UrlBuilder url, BindingSession session) {
-        return invoke(url, "DELETE", null, null, null, session, null, null);
-    }
-
-    protected Response invoke(UrlBuilder url, String method, String contentType, Map<String, String> headers,
-            final Output writer, final BindingSession session, BigInteger offset, BigInteger length) {
-        int respCode = -1;
-
-        try {
-            // log before connect
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Session {}: {} {}", session.getSessionId(), method, url);
-            }
-
-            // get HTTP client object from session
-            DefaultHttpClient httpclient = (DefaultHttpClient) session.get(HTTP_CLIENT);
-            if (httpclient == null) {
-                session.writeLock();
-                try {
-                    httpclient = (DefaultHttpClient) session.get(HTTP_CLIENT);
-                    if (httpclient == null) {
-                        httpclient = createHttpClient(url, session);
-                        session.put(HTTP_CLIENT, httpclient, true);
-                    }
-                } finally {
-                    session.writeUnlock();
-                }
-            }
-
-            HttpRequestBase request = null;
-
-            if ("GET".equals(method)) {
-                request = new HttpGet(url.toString());
-            } else if ("POST".equals(method)) {
-                request = new HttpPost(url.toString());
-            } else if ("PUT".equals(method)) {
-                request = new HttpPut(url.toString());
-            } else if ("DELETE".equals(method)) {
-                request = new HttpDelete(url.toString());
-            } else {
-                throw new CmisRuntimeException("Invalid HTTP method!");
-            }
-
-            // set content type
-            if (contentType != null) {
-                request.setHeader("Content-Type", contentType);
-            }
-            // set other headers
-            if (headers != null) {
-                for (Map.Entry<String, String> header : headers.entrySet()) {
-                    request.addHeader(header.getKey(), header.getValue());
-                }
-            }
-
-            // authenticate
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-            if (authProvider != null) {
-                Map<String, List<String>> httpHeaders = authProvider.getHTTPHeaders(url.toString());
-                if (httpHeaders != null) {
-                    for (Map.Entry<String, List<String>> header : httpHeaders.entrySet()) {
-                        if (header.getKey() != null && isNotEmpty(header.getValue())) {
-                            String key = header.getKey();
-                            if (key.equalsIgnoreCase("user-agent")) {
-                                request.setHeader("User-Agent", header.getValue().get(0));
-                            } else {
-                                for (String value : header.getValue()) {
-                                    if (value != null) {
-                                        request.addHeader(key, value);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            // range
-            if ((offset != null) || (length != null)) {
-                StringBuilder sb = new StringBuilder("bytes=");
-
-                if ((offset == null) || (offset.signum() == -1)) {
-                    offset = BigInteger.ZERO;
-                }
-
-                sb.append(offset.toString());
-                sb.append('-');
-
-                if ((length != null) && (length.signum() == 1)) {
-                    sb.append(offset.add(length.subtract(BigInteger.ONE)).toString());
-                }
-
-                request.setHeader("Range", sb.toString());
-            }
-
-            // compression
-            Object compression = session.get(SessionParameter.COMPRESSION);
-            if ((compression != null) && Boolean.parseBoolean(compression.toString())) {
-                request.setHeader("Accept-Encoding", "gzip,deflate");
-            }
-
-            // locale
-            if (session.get(CmisBindingsHelper.ACCEPT_LANGUAGE) instanceof String) {
-                request.setHeader("Accept-Language", session.get(CmisBindingsHelper.ACCEPT_LANGUAGE).toString());
-            }
-
-            // send data
-            if (writer != null) {
-                Object clientCompression = session.get(SessionParameter.CLIENT_COMPRESSION);
-                final boolean clientCompressionFlag = (clientCompression != null)
-                        && Boolean.parseBoolean(clientCompression.toString());
-                if (clientCompressionFlag) {
-                    request.setHeader("Content-Encoding", "gzip");
-                }
-
-                AbstractHttpEntity streamEntity = new AbstractHttpEntity() {
-                    @Override
-                    public boolean isChunked() {
-                        return true;
-                    }
-
-                    public boolean isRepeatable() {
-                        return false;
-                    }
-
-                    public long getContentLength() {
-                        return -1;
-                    }
-
-                    public boolean isStreaming() {
-                        return false;
-                    }
-
-                    public InputStream getContent() throws IOException {
-                        throw new UnsupportedOperationException();
-                    }
-
-                    public void writeTo(final OutputStream outstream) throws IOException {
-                        OutputStream connOut = null;
-
-                        if (clientCompressionFlag) {
-                            connOut = new GZIPOutputStream(outstream, 4096);
-                        } else {
-                            connOut = outstream;
-                        }
-
-                        OutputStream out = new BufferedOutputStream(connOut, BUFFER_SIZE);
-                        try {
-                            writer.write(out);
-                        } catch (IOException ioe) {
-                            throw ioe;
-                        } catch (Exception e) {
-                            throw new IOException(e);
-                        }
-                        out.flush();
-
-                        if (connOut instanceof GZIPOutputStream) {
-                            ((GZIPOutputStream) connOut).finish();
-                        }
-                    }
-                };
-                ((HttpEntityEnclosingRequestBase) request).setEntity(streamEntity);
-            }
-
-            // connect
-            HttpResponse response = httpclient.execute(request);
-            HttpEntity entity = response.getEntity();
-
-            // get stream, if present
-            respCode = response.getStatusLine().getStatusCode();
-            InputStream inputStream = null;
-            InputStream errorStream = null;
-
-            if ((respCode == 200) || (respCode == 201) || (respCode == 203) || (respCode == 206)) {
-                if (entity != null) {
-                    inputStream = entity.getContent();
-                } else {
-                    inputStream = new ByteArrayInputStream(new byte[0]);
-                }
-            } else {
-                if (entity != null) {
-                    errorStream = entity.getContent();
-                } else {
-                    errorStream = new ByteArrayInputStream(new byte[0]);
-                }
-            }
-
-            // collect headers
-            Map<String, List<String>> responseHeaders = new HashMap<String, List<String>>();
-            for (Header header : response.getAllHeaders()) {
-                List<String> values = responseHeaders.get(header.getName());
-                if (values == null) {
-                    values = new ArrayList<String>();
-                    responseHeaders.put(header.getName(), values);
-                }
-                values.add(header.getValue());
-            }
-
-            // log after connect
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("Session {}: {} {} > Headers: {}", session.getSessionId(), method, url,
-                        responseHeaders.toString());
-            }
-
-            // forward response HTTP headers
-            if (authProvider != null) {
-                authProvider.putResponseHeaders(url.toString(), respCode, responseHeaders);
-            }
-
-            // get the response
-            return new Response(respCode, response.getStatusLine().getReasonPhrase(), responseHeaders, inputStream,
-                    errorStream);
-        } catch (IOException e) {
-            String status = (respCode > 0 ? " (HTTP status code " + respCode + ")" : "");
-            throw new CmisConnectionException("Cannot access \"" + url + "\"" + status + ": " + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Creates default params for the Apache HTTP Client.
-     */
-    protected HttpParams createDefaultHttpParams(BindingSession session) {
-        HttpParams params = new BasicHttpParams();
-
-        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
-        HttpProtocolParams.setUserAgent(params, ClientVersion.OPENCMIS_CLIENT);
-        HttpProtocolParams.setContentCharset(params, IOUtils.UTF8);
-        HttpProtocolParams.setUseExpectContinue(params, true);
-
-        HttpConnectionParams.setStaleCheckingEnabled(params, true);
-
-        int connectTimeout = session.get(SessionParameter.CONNECT_TIMEOUT, -1);
-        if (connectTimeout >= 0) {
-            HttpConnectionParams.setConnectionTimeout(params, connectTimeout);
-        }
-
-        int readTimeout = session.get(SessionParameter.READ_TIMEOUT, -1);
-        if (readTimeout >= 0) {
-            HttpConnectionParams.setSoTimeout(params, readTimeout);
-        }
-
-        return params;
-    }
-
-    /**
-     * Verifies a hostname with the given verifier.
-     */
-    protected void verify(HostnameVerifier verifier, String host, SSLSocket sslSocket) throws IOException {
-        try {
-            if (verifier instanceof X509HostnameVerifier) {
-                ((X509HostnameVerifier) verifier).verify(host, sslSocket);
-            } else {
-                if (!verifier.verify(host, sslSocket.getSession())) {
-                    throw new SSLException("Hostname in certificate didn't match: <" + host + ">");
-                }
-            }
-        } catch (IOException ioe) {
-            closeSocket(sslSocket);
-            throw ioe;
-        }
-    }
-
-    /**
-     * Closes the given socket and ignores exceptions.
-     */
-    protected void closeSocket(Socket socket) {
-        try {
-            socket.close();
-        } catch (IOException ioe) {
-            // ignore
-        }
-    }
-
-    /**
-     * Creates the {@link HttpClient} instance.
-     */
-    protected abstract DefaultHttpClient createHttpClient(UrlBuilder url, BindingSession session);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java
deleted file mode 100644
index b9e2c9c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/ApacheClientHttpInvoker.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketTimeoutException;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.client.params.CookiePolicy;
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.HttpInetSocketAddress;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeLayeredSocketFactory;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
-import org.apache.http.impl.conn.ProxySelectorRoutePlanner;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-
-/**
- * A {@link HttpInvoker} that uses The Apache HTTP client.
- */
-public class ApacheClientHttpInvoker extends AbstractApacheClientHttpInvoker {
-
-    protected DefaultHttpClient createHttpClient(UrlBuilder url, BindingSession session) {
-        // set params
-        HttpParams params = createDefaultHttpParams(session);
-        params.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);
-
-        // set up scheme registry and connection manager
-        SchemeRegistry registry = new SchemeRegistry();
-        registry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
-        registry.register(new Scheme("https", 443, getSSLSocketFactory(url, session)));
-
-        // set up connection manager
-        PoolingClientConnectionManager connManager = new PoolingClientConnectionManager(registry);
-
-        // set max connection a
-        String keepAliveStr = System.getProperty("http.keepAlive", "true");
-        if ("true".equalsIgnoreCase(keepAliveStr)) {
-            String maxConnStr = System.getProperty("http.maxConnections", "5");
-            int maxConn = 5;
-            try {
-                maxConn = Integer.parseInt(maxConnStr);
-            } catch (NumberFormatException nfe) {
-                // ignore
-            }
-            connManager.setDefaultMaxPerRoute(maxConn);
-            connManager.setMaxTotal(4 * maxConn);
-        }
-
-        // set up proxy
-        ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(registry, null);
-
-        // set up client
-        DefaultHttpClient httpclient = new DefaultHttpClient(connManager, params);
-        httpclient.setRoutePlanner(routePlanner);
-
-        return httpclient;
-    }
-
-    /**
-     * Builds a SSL Socket Factory for the Apache HTTP Client.
-     */
-    private SchemeLayeredSocketFactory getSSLSocketFactory(final UrlBuilder url, final BindingSession session) {
-        // get authentication provider
-        AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-
-        // check SSL Socket Factory
-        final SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-        if (sf == null) {
-            // no custom factory -> return default factory
-            return org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory();
-        }
-
-        // check hostame verifier and use default if not set
-        final HostnameVerifier hv = (authProvider.getHostnameVerifier() == null ? new BrowserCompatHostnameVerifier()
-                : authProvider.getHostnameVerifier());
-
-        if (hv instanceof X509HostnameVerifier) {
-            return new org.apache.http.conn.ssl.SSLSocketFactory(sf, (X509HostnameVerifier) hv);
-        }
-
-        // build new socket factory
-        return new SchemeLayeredSocketFactory() {
-
-            public boolean isSecure(Socket sock) {
-                return true;
-            }
-
-            public Socket createSocket(HttpParams params) throws IOException {
-                return sf.createSocket();
-            }
-
-            public Socket connectSocket(final Socket socket, final InetSocketAddress remoteAddress,
-                    final InetSocketAddress localAddress, final HttpParams params) throws IOException {
-
-                Socket sock = (socket != null ? socket : createSocket(params));
-                if (localAddress != null) {
-                    sock.setReuseAddress(HttpConnectionParams.getSoReuseaddr(params));
-                    sock.bind(localAddress);
-                }
-
-                int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
-                int soTimeout = HttpConnectionParams.getSoTimeout(params);
-
-                try {
-                    sock.setSoTimeout(soTimeout);
-                    sock.connect(remoteAddress, connTimeout);
-                } catch (SocketTimeoutException ex) {
-                    closeSocket(sock);
-                    throw new ConnectTimeoutException("Connect to " + remoteAddress + " timed out!");
-                }
-
-                String host;
-                if (remoteAddress instanceof HttpInetSocketAddress) {
-                    host = ((HttpInetSocketAddress) remoteAddress).getHttpHost().getHostName();
-                } else {
-                    host = remoteAddress.getHostName();
-                }
-
-                SSLSocket sslSocket;
-                if (sock instanceof SSLSocket) {
-                    sslSocket = (SSLSocket) sock;
-                } else {
-                    int port = remoteAddress.getPort();
-                    sslSocket = (SSLSocket) sf.createSocket(sock, host, port, true);
-                }
-                verify(hv, host, sslSocket);
-
-                return sslSocket;
-            }
-
-            public Socket createLayeredSocket(final Socket socket, final String host, final int port,
-                    final HttpParams params) throws IOException {
-                SSLSocket sslSocket = (SSLSocket) sf.createSocket(socket, host, port, true);
-                verify(hv, host, sslSocket);
-
-                return sslSocket;
-            }
-        };
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java
deleted file mode 100644
index ae6d9b0..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/DefaultHttpInvoker.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.GZIPOutputStream;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSocketFactory;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class DefaultHttpInvoker implements HttpInvoker {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpInvoker.class);
-
-    private static final int BUFFER_SIZE = 2 * 1024 * 1024;
-
-    public DefaultHttpInvoker() {
-    }
-
-    public Response invokeGET(UrlBuilder url, BindingSession session) {
-        return invoke(url, "GET", null, null, null, session, null, null);
-    }
-
-    public Response invokeGET(UrlBuilder url, BindingSession session, BigInteger offset, BigInteger length) {
-        return invoke(url, "GET", null, null, null, session, offset, length);
-    }
-
-    public Response invokePOST(UrlBuilder url, String contentType, Output writer, BindingSession session) {
-        return invoke(url, "POST", contentType, null, writer, session, null, null);
-    }
-
-    public Response invokePUT(UrlBuilder url, String contentType, Map<String, String> headers, Output writer,
-            BindingSession session) {
-        return invoke(url, "PUT", contentType, headers, writer, session, null, null);
-    }
-
-    public Response invokeDELETE(UrlBuilder url, BindingSession session) {
-        return invoke(url, "DELETE", null, null, null, session, null, null);
-    }
-
-    private Response invoke(UrlBuilder url, String method, String contentType, Map<String, String> headers,
-            Output writer, BindingSession session, BigInteger offset, BigInteger length) {
-        int respCode = -1;
-
-        try {
-            // log before connect
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Session {}: {} {}", session.getSessionId(), method, url);
-            }
-
-            // connect
-            HttpURLConnection conn = (HttpURLConnection) (new URL(url.toString())).openConnection();
-            conn.setRequestMethod(method);
-            conn.setDoInput(true);
-            conn.setDoOutput(writer != null);
-            conn.setAllowUserInteraction(false);
-            conn.setUseCaches(false);
-            conn.setRequestProperty("User-Agent", ClientVersion.OPENCMIS_CLIENT);
-
-            // timeouts
-            int connectTimeout = session.get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                conn.setConnectTimeout(connectTimeout);
-            }
-
-            int readTimeout = session.get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                conn.setReadTimeout(readTimeout);
-            }
-
-            // set content type
-            if (contentType != null) {
-                conn.setRequestProperty("Content-Type", contentType);
-            }
-            // set other headers
-            if (headers != null) {
-                for (Map.Entry<String, String> header : headers.entrySet()) {
-                    conn.addRequestProperty(header.getKey(), header.getValue());
-                }
-            }
-
-            // authenticate
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-            if (authProvider != null) {
-                Map<String, List<String>> httpHeaders = authProvider.getHTTPHeaders(url.toString());
-                if (httpHeaders != null) {
-                    for (Map.Entry<String, List<String>> header : httpHeaders.entrySet()) {
-                        if (header.getKey() != null && isNotEmpty(header.getValue())) {
-                            String key = header.getKey();
-                            if (key.equalsIgnoreCase("user-agent")) {
-                                conn.setRequestProperty("User-Agent", header.getValue().get(0));
-                            } else {
-                                for (String value : header.getValue()) {
-                                    if (value != null) {
-                                        conn.addRequestProperty(key, value);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if (conn instanceof HttpsURLConnection) {
-                    SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-                    if (sf != null) {
-                        ((HttpsURLConnection) conn).setSSLSocketFactory(sf);
-                    }
-
-                    HostnameVerifier hv = authProvider.getHostnameVerifier();
-                    if (hv != null) {
-                        ((HttpsURLConnection) conn).setHostnameVerifier(hv);
-                    }
-                }
-            }
-
-            // range
-            if ((offset != null) || (length != null)) {
-                StringBuilder sb = new StringBuilder("bytes=");
-
-                if ((offset == null) || (offset.signum() == -1)) {
-                    offset = BigInteger.ZERO;
-                }
-
-                sb.append(offset.toString());
-                sb.append('-');
-
-                if ((length != null) && (length.signum() == 1)) {
-                    sb.append(offset.add(length.subtract(BigInteger.ONE)).toString());
-                }
-
-                conn.setRequestProperty("Range", sb.toString());
-            }
-
-            // compression
-            Object compression = session.get(SessionParameter.COMPRESSION);
-            if ((compression != null) && Boolean.parseBoolean(compression.toString())) {
-                conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
-            }
-
-            // locale
-            if (session.get(CmisBindingsHelper.ACCEPT_LANGUAGE) instanceof String) {
-                conn.setRequestProperty("Accept-Language", session.get(CmisBindingsHelper.ACCEPT_LANGUAGE).toString());
-            }
-
-            // send data
-            if (writer != null) {
-                conn.setChunkedStreamingMode((64 * 1024) - 1);
-
-                OutputStream connOut = null;
-
-                Object clientCompression = session.get(SessionParameter.CLIENT_COMPRESSION);
-                if ((clientCompression != null) && Boolean.parseBoolean(clientCompression.toString())) {
-                    conn.setRequestProperty("Content-Encoding", "gzip");
-                    connOut = new GZIPOutputStream(conn.getOutputStream(), 4096);
-                } else {
-                    connOut = conn.getOutputStream();
-                }
-
-                OutputStream out = new BufferedOutputStream(connOut, BUFFER_SIZE);
-                writer.write(out);
-                out.flush();
-
-                if (connOut instanceof GZIPOutputStream) {
-                    ((GZIPOutputStream) connOut).finish();
-                }
-            }
-
-            // connect
-            conn.connect();
-
-            // get stream, if present
-            respCode = conn.getResponseCode();
-            InputStream inputStream = null;
-            if ((respCode == 200) || (respCode == 201) || (respCode == 203) || (respCode == 206)) {
-                inputStream = conn.getInputStream();
-            }
-
-            // log after connect
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("Session {}: {} {} > Headers: {}", session.getSessionId(), method, url, conn
-                        .getHeaderFields().toString());
-            }
-
-            // forward response HTTP headers
-            if (authProvider != null) {
-                authProvider.putResponseHeaders(url.toString(), respCode, conn.getHeaderFields());
-            }
-
-            // get the response
-            return new Response(respCode, conn.getResponseMessage(), conn.getHeaderFields(), inputStream,
-                    conn.getErrorStream());
-        } catch (Exception e) {
-            String status = (respCode > 0 ? " (HTTP status code " + respCode + ")" : "");
-            throw new CmisConnectionException("Cannot access \"" + url + "\"" + status + ": " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpInvoker.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpInvoker.java
deleted file mode 100644
index dbba680..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpInvoker.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-
-/**
- * HTTP Invoker Interface.
- */
-public interface HttpInvoker {
-
-    /**
-     * Executes a HTTP GET request.
-     */
-    Response invokeGET(UrlBuilder url, BindingSession session);
-
-    /**
-     * Executes a HTTP GET request.
-     */
-    Response invokeGET(UrlBuilder url, BindingSession session, BigInteger offset, BigInteger length);
-
-    /**
-     * Executes a HTTP POST request.
-     */
-    Response invokePOST(UrlBuilder url, String contentType, Output writer, BindingSession session);
-
-    /**
-     * Executes a HTTP PUT request.
-     */
-    Response invokePUT(UrlBuilder url, String contentType, Map<String, String> headers, Output writer,
-            BindingSession session);
-
-    /**
-     * Executes a HTTP DELETE request.
-     */
-    Response invokeDELETE(UrlBuilder url, BindingSession session);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Output.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Output.java
deleted file mode 100644
index 38b3678..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Output.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import java.io.OutputStream;
-
-/**
- * Output interface.
- */
-public interface Output {
-    @SuppressWarnings("PMD.SignatureDeclareThrowsException")
-    void write(OutputStream out) throws Exception;
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java
deleted file mode 100644
index 5fde48f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.http;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.Inflater;
-import java.util.zip.InflaterInputStream;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-
-/**
- * HTTP Response.
- */
-public class Response {
-    private static final int MAX_ERROR_LENGTH = 128 * 1024;
-
-    private final int responseCode;
-    private final String responseMessage;
-    private final Map<String, List<String>> headers;
-    private InputStream stream;
-    private String errorContent;
-    private BigInteger length;
-    private String charset;
-    private boolean hasResponseStream;
-
-    public Response(int responseCode, String responseMessage, Map<String, List<String>> headers,
-            InputStream responseStream, InputStream errorStream) {
-        this.responseCode = responseCode;
-        this.responseMessage = responseMessage;
-        this.stream = responseStream;
-        this.hasResponseStream = (stream != null);
-        boolean isGZIP = (responseStream instanceof GZIPInputStream);
-
-        this.headers = new HashMap<String, List<String>>();
-        if (headers != null) {
-            for (Map.Entry<String, List<String>> e : headers.entrySet()) {
-                this.headers.put(e.getKey() == null ? null : e.getKey().toLowerCase(Locale.ENGLISH), e.getValue());
-            }
-        }
-
-        // determine charset
-        charset = IOUtils.UTF8;
-        String contentType = getContentTypeHeader();
-        if (contentType != null) {
-            String[] parts = contentType.split(";");
-            for (int i = 1; i < parts.length; i++) {
-                String part = parts[i].trim().toLowerCase(Locale.ENGLISH);
-                if (part.startsWith("charset")) {
-                    int x = part.indexOf('=');
-                    charset = part.substring(x + 1).trim();
-                    break;
-                }
-            }
-        }
-
-        // if there is an error page, get it
-        if (errorStream != null) {
-            if (contentType != null) {
-                String contentTypeLower = contentType.toLowerCase(Locale.ENGLISH).split(";")[0];
-                if (contentTypeLower.startsWith("text/") || contentTypeLower.endsWith("+xml")
-                        || contentTypeLower.startsWith("application/xml")
-                        || contentTypeLower.startsWith("application/json")) {
-                    errorStream = new BufferedInputStream(errorStream, 64 * 1024);
-                    StringBuilder sb = new StringBuilder();
-
-                    try {
-                        String encoding = getContentEncoding();
-                        if (encoding != null) {
-                            String encLower = encoding.trim().toLowerCase(Locale.ENGLISH);
-                            if (encLower.equals("gzip") && !isGZIP) {
-                                errorStream = new GZIPInputStream(errorStream, 64 * 1024);
-                            } else if (encLower.equals("deflate")) {
-                                errorStream = new InflaterInputStream(errorStream, new Inflater(true), 64 * 1024);
-                            }
-                        }
-
-                        InputStreamReader reader = new InputStreamReader(errorStream, charset);
-                        char[] buffer = new char[4096];
-                        int b;
-                        while ((b = reader.read(buffer)) > -1) {
-                            sb.append(buffer, 0, b);
-                            if (sb.length() >= MAX_ERROR_LENGTH) {
-                                break;
-                            }
-                        }
-                        reader.close();
-
-                        errorContent = sb.toString();
-                    } catch (IOException e) {
-                        errorContent = "Unable to retrieve content: " + e.getMessage();
-                    }
-                }
-            } else {
-                IOUtils.closeQuietly(errorStream);
-            }
-
-            IOUtils.closeQuietly(responseStream);
-
-            return;
-        }
-
-        // get the stream length
-        length = null;
-        String lengthStr = getHeader("Content-Length");
-        if (lengthStr != null && !isGZIP) {
-            try {
-                length = new BigInteger(lengthStr);
-            } catch (NumberFormatException e) {
-                // content-length is not a number -> ignore
-            }
-        }
-
-        if (stream == null || BigInteger.ZERO.equals(length) || responseCode == 204) {
-            hasResponseStream = false;
-        } else {
-            stream = new BufferedInputStream(stream, 64 * 1024);
-            try {
-                hasResponseStream = IOUtils.checkForBytes(stream);
-            } catch (IOException ioe) {
-                throw new CmisConnectionException("IO exception!", ioe);
-            }
-
-            if (hasResponseStream) {
-                String encoding = getContentEncoding();
-                if (encoding != null) {
-                    String encLower = encoding.trim().toLowerCase(Locale.ENGLISH);
-                    if (encLower.equals("gzip") && !isGZIP) {
-                        // if the stream is gzip encoded, decode it
-                        length = null;
-                        try {
-                            stream = new GZIPInputStream(stream, 64 * 1024);
-                        } catch (IOException e) {
-                            errorContent = e.getMessage();
-                            stream = null;
-                            IOUtils.closeQuietly(responseStream);
-                        }
-                    } else if (encLower.equals("deflate")) {
-                        // if the stream is deflate encoded, decode it
-                        length = null;
-                        stream = new InflaterInputStream(stream, new Inflater(true), 64 * 1024);
-                    }
-                }
-
-                String transferEncoding = getContentTransferEncoding();
-                if (transferEncoding != null && transferEncoding.trim().toLowerCase(Locale.ENGLISH).equals("base64")) {
-                    // if the stream is base64 encoded, decode it
-                    length = null;
-                    stream = new Base64.InputStream(stream);
-                }
-            }
-        }
-    }
-
-    public int getResponseCode() {
-        return responseCode;
-    }
-
-    public String getResponseMessage() {
-        return responseMessage;
-    }
-
-    public Map<String, List<String>> getHeaders() {
-        return headers;
-    }
-
-    public String getHeader(String name) {
-        List<String> list = headers.get(name.toLowerCase(Locale.US));
-        if (isNullOrEmpty(list)) {
-            return null;
-        }
-
-        return list.get(0);
-    }
-
-    public String getContentTypeHeader() {
-        return getHeader("Content-Type");
-    }
-
-    public BigInteger getContentLengthHeader() {
-        String lengthStr = getHeader("Content-Length");
-        if (lengthStr == null) {
-            return null;
-        }
-
-        try {
-            return new BigInteger(lengthStr);
-        } catch (NumberFormatException e) {
-            return null;
-        }
-    }
-
-    public String getLocactionHeader() {
-        return getHeader("Location");
-    }
-
-    public String getContentLocactionHeader() {
-        return getHeader("Content-Location");
-    }
-
-    public String getContentTransferEncoding() {
-        return getHeader("Content-Transfer-Encoding");
-    }
-
-    public String getContentEncoding() {
-        return getHeader("Content-Encoding");
-    }
-
-    public String getContentDisposition() {
-        return getHeader("Content-Disposition");
-    }
-
-    public String getCharset() {
-        return charset;
-    }
-
-    public BigInteger getContentLength() {
-        return length;
-    }
-
-    public boolean hasResponseStream() {
-        return hasResponseStream;
-    }
-
-    public InputStream getStream() {
-        return stream;
-    }
-
-    public String getErrorContent() {
-        return errorContent;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AbstractLocalService.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AbstractLocalService.java
deleted file mode 100644
index b14b368..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AbstractLocalService.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService.Progress;
-
-/**
- * Base class for all local clients.
- */
-public abstract class AbstractLocalService {
-
-    private BindingSession session;
-    private CmisServiceFactory factory;
-
-    private String user;
-    private String password;
-
-    /**
-     * Sets the current session.
-     */
-    protected void setSession(BindingSession session) {
-        this.session = session;
-
-        Object userObj = session.get(SessionParameter.USER);
-        user = userObj instanceof String ? userObj.toString() : null;
-
-        Object passwordObj = session.get(SessionParameter.PASSWORD);
-        password = passwordObj instanceof String ? passwordObj.toString() : null;
-    }
-
-    /**
-     * Gets the current session.
-     */
-    protected BindingSession getSession() {
-        return session;
-    }
-
-    /**
-     * Sets the service factory.
-     */
-    protected void setServiceFactory(CmisServiceFactory factory) {
-        this.factory = factory;
-    }
-
-    /**
-     * Gets the service factory.
-     */
-    protected CmisServiceFactory getServiceFactory() {
-        return factory;
-    }
-
-    /**
-     * Determines if the processing should be stopped before the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopBeforeService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).beforeServiceCall() == Progress.STOP;
-    }
-
-    /**
-     * Determines if the processing should be stopped after the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopAfterService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).afterServiceCall() == Progress.STOP;
-    }
-
-    /**
-     * creates a local call context.
-     */
-    protected CallContext createCallContext(String repositoryId) {
-        return new LocalCallContext(repositoryId, user, password);
-    }
-
-    protected CmisService getService(String repositoryId) {
-        return factory.getService(createCallContext(repositoryId));
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AclServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AclServiceImpl.java
deleted file mode 100644
index 685a556..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/AclServiceImpl.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;
-
-public class AclServiceImpl extends AbstractLocalService implements AclService, ExtendedAclService {
-
-    /**
-     * Constructor.
-     */
-    public AclServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Acl serviceResult = service
-                    .applyAcl(repositoryId, objectId, addAces, removeAces, aclPropagation, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Acl serviceResult = service.getAcl(repositoryId, objectId, onlyBasicPermissions, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public Acl setAcl(String repositoryId, String objectId, Acl aces) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Acl serviceResult = service.applyAcl(repositoryId, objectId, aces, AclPropagation.OBJECTONLY);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/CmisLocalSpi.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/CmisLocalSpi.java
deleted file mode 100644
index 5c077d7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/CmisLocalSpi.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * * CMIS local SPI implementation.
- */
-public class CmisLocalSpi implements CmisSpi {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisLocalSpi.class);
-
-    private final CmisServiceFactory factory;
-
-    private final RepositoryService repositoryService;
-    private final NavigationService navigationService;
-    private final ObjectService objectService;
-    private final VersioningService versioningService;
-    private final DiscoveryService discoveryService;
-    private final MultiFilingService multiFilingService;
-    private final RelationshipService relationshipService;
-    private final PolicyService policyService;
-    private final AclService aclService;
-
-    /**
-     * Constructor.
-     */
-    public CmisLocalSpi(BindingSession session) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Initializing local SPI...", session.getSessionId());
-        }
-
-        // get the service factory class name
-        String serviceFactoryClassname = (String) session.get(SessionParameter.LOCAL_FACTORY);
-        if (serviceFactoryClassname == null) {
-            throw new CmisConnectionException("Factory class not set!");
-        }
-
-        try {
-            // gather parameters from session
-            Map<String, String> parameters = new HashMap<String, String>();
-            for (String key : session.getKeys()) {
-                Object value = session.get(key);
-                if (value instanceof String) {
-                    parameters.put(key, (String) value);
-                }
-            }
-
-            // create and initialize factory
-            factory = (CmisServiceFactory) ClassLoaderUtil.loadClass(serviceFactoryClassname).newInstance();
-            factory.init(parameters);
-        } catch (Exception e) {
-            throw new CmisConnectionException("Factory cannot be created: " + e.getMessage(), e);
-        }
-
-        repositoryService = new RepositoryServiceImpl(session, factory);
-        navigationService = new NavigationServiceImpl(session, factory);
-        objectService = new ObjectServiceImpl(session, factory);
-        versioningService = new VersioningServiceImpl(session, factory);
-        discoveryService = new DiscoveryServiceImpl(session, factory);
-        multiFilingService = new MultiFilingServiceImpl(session, factory);
-        relationshipService = new RelationshipServiceImpl(session, factory);
-        policyService = new PolicyServiceImpl(session, factory);
-        aclService = new AclServiceImpl(session, factory);
-    }
-
-    public RepositoryService getRepositoryService() {
-        return repositoryService;
-    }
-
-    public NavigationService getNavigationService() {
-        return navigationService;
-    }
-
-    public ObjectService getObjectService() {
-        return objectService;
-    }
-
-    public DiscoveryService getDiscoveryService() {
-        return discoveryService;
-    }
-
-    public VersioningService getVersioningService() {
-        return versioningService;
-    }
-
-    public MultiFilingService getMultiFilingService() {
-        return multiFilingService;
-    }
-
-    public RelationshipService getRelationshipService() {
-        return relationshipService;
-    }
-
-    public PolicyService getPolicyService() {
-        return policyService;
-    }
-
-    public AclService getAclService() {
-        return aclService;
-    }
-
-    public void clearAllCaches() {
-    }
-
-    public void clearRepositoryCache(String repositoryId) {
-    }
-
-    public void close() {
-        factory.destroy();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/DiscoveryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/DiscoveryServiceImpl.java
deleted file mode 100644
index cbbad4b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/DiscoveryServiceImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-public class DiscoveryServiceImpl extends AbstractLocalService implements DiscoveryService {
-
-    /**
-     * Constructor.
-     */
-    public DiscoveryServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.getContentChanges(repositoryId, changeLogToken, includeProperties,
-                    filter, includePolicyIds, includeAcl, maxItems, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.query(repositoryId, statement, searchAllVersions,
-                    includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/LocalCallContext.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/LocalCallContext.java
deleted file mode 100644
index 165cb29..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/LocalCallContext.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.MutableCallContext;
-
-/**
- * Simple {@link CallContext} implementation.
- */
-public class LocalCallContext implements MutableCallContext {
-
-    private final Map<String, Object> contextMap = new HashMap<String, Object>();
-
-    public LocalCallContext(String repositoryId, String user, String password) {
-        contextMap.put(REPOSITORY_ID, repositoryId);
-        contextMap.put(USERNAME, user);
-        contextMap.put(PASSWORD, password);
-    }
-
-    public String getBinding() {
-        return BINDING_LOCAL;
-    }
-
-    public Object get(String key) {
-        return contextMap.get(key);
-    }
-
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    public String getRepositoryId() {
-        return (String) get(REPOSITORY_ID);
-    }
-
-    public String getUsername() {
-        return (String) get(USERNAME);
-    }
-
-    public String getPassword() {
-        return (String) get(PASSWORD);
-    }
-
-    public String getLocale() {
-        return null;
-    }
-
-    public BigInteger getOffset() {
-        return (BigInteger) get(OFFSET);
-    }
-
-    public BigInteger getLength() {
-        return (BigInteger) get(LENGTH);
-    }
-
-    public boolean isObjectInfoRequired() {
-        return false;
-    }
-
-    public File getTempDirectory() {
-        return null;
-    }
-
-    public boolean encryptTempFiles() {
-        return false;
-    }
-
-    public int getMemoryThreshold() {
-        return 0;
-    }
-
-    public long getMaxContentSize() {
-        return -1;
-    }
-
-    public void put(String key, Object value) {
-        contextMap.put(key, value);
-    }
-
-    public Object remove(String key) {
-        return contextMap.remove(key);
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/MultiFilingServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/MultiFilingServiceImpl.java
deleted file mode 100644
index 14d32b1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/MultiFilingServiceImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-
-public class MultiFilingServiceImpl extends AbstractLocalService implements MultiFilingService {
-
-    /**
-     * Constructor.
-     */
-    public MultiFilingServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/NavigationServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/NavigationServiceImpl.java
deleted file mode 100644
index 14df3c7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/NavigationServiceImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-
-public class NavigationServiceImpl extends AbstractLocalService implements NavigationService {
-
-    /**
-     * Constructor.
-     */
-    public NavigationServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-            ObjectList serviceResult = service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectInFolderList serviceResult = service.getChildren(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems,
-                    skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-            List<ObjectInFolderContainer> serviceResult = service.getDescendants(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getFolderParent(repositoryId, folderId, filter, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectInFolderContainer> serviceResult = service.getFolderTree(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectParentData> serviceResult = service.getObjectParents(repositoryId, objectId, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment,
-                    extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/ObjectServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/ObjectServiceImpl.java
deleted file mode 100644
index ffc2ab7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/ObjectServiceImpl.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-public class ObjectServiceImpl extends AbstractLocalService implements ObjectService {
-
-    /**
-     * Constructor.
-     */
-    public ObjectServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            String serviceResult = service.createDocument(repositoryId, properties, folderId, contentStream,
-                    versioningState, policies, addAces, removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            String serviceResult = service.createDocumentFromSource(repositoryId, sourceId, properties, folderId,
-                    versioningState, policies, addAces, removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            String serviceResult = service.createFolder(repositoryId, properties, folderId, policies, addAces,
-                    removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            String serviceResult = service.createPolicy(repositoryId, properties, folderId, policies, addAces,
-                    removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-            String serviceResult = service.createItem(repositoryId, properties, folderId, policies, addAces,
-                    removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            String serviceResult = service.createRelationship(repositoryId, properties, policies, addAces, removeAces,
-                    extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteContentStream(repositoryId, objectId, changeToken, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-        } finally {
-            service.close();
-        }
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteObject(repositoryId, objectId, allVersions, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-        } finally {
-            service.close();
-        }
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            FailedToDeleteData serviceResult = service.deleteTree(repositoryId, folderId, allVersions, unfileObjects,
-                    continueOnFailure, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            AllowableActions serviceResult = service.getAllowableActions(repositoryId, objectId, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ContentStream serviceResult = service.getContentStream(repositoryId, objectId, streamId, offset, length,
-                    extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObject(repositoryId, objectId, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Properties serviceResult = service.getProperties(repositoryId, objectId, filter, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<RenditionData> serviceResult = service.getRenditions(repositoryId, objectId, renditionFilter,
-                    maxItems, skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.appendContentStream(repositoryId, objectId, changeToken, contentStream, isLastChunk, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.updateProperties(repositoryId, objectId, changeToken, properties, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<BulkUpdateObjectIdAndChangeToken> serviceResult = service.bulkUpdateProperties(repositoryId,
-                    objectIdAndChangeToken, properties, addSecondaryTypeIds, removeSecondaryTypeIds, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/PolicyServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/PolicyServiceImpl.java
deleted file mode 100644
index 5fdd53c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/PolicyServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-
-public class PolicyServiceImpl extends AbstractLocalService implements PolicyService {
-
-    /**
-     * Constructor.
-     */
-    public PolicyServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.applyPolicy(repositoryId, policyId, objectId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-            List<ObjectData> serviceResut = service.getAppliedPolicies(repositoryId, objectId, filter, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResut;
-        } finally {
-            service.close();
-        }
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.removePolicy(repositoryId, policyId, objectId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RelationshipServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RelationshipServiceImpl.java
deleted file mode 100644
index f706fc8..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RelationshipServiceImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-
-public class RelationshipServiceImpl extends AbstractLocalService implements RelationshipService {
-
-    /**
-     * Constructor.
-     */
-    public RelationshipServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.getObjectRelationships(repositoryId, objectId,
-                    includeSubRelationshipTypes, relationshipDirection, typeId, filter, includeAllowableActions,
-                    maxItems, skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RepositoryServiceImpl.java
deleted file mode 100644
index 11f0231..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Repository Service local client.
- */
-public class RepositoryServiceImpl extends AbstractLocalService implements RepositoryService {
-
-    /**
-     * Constructor.
-     */
-    public RepositoryServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            RepositoryInfo serviceResult = service.getRepositoryInfo(repositoryId, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        CmisService service = getService(null);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<RepositoryInfo> serviceResult = service.getRepositoryInfos(extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinition serviceResult = service.getTypeDefinition(repositoryId, typeId, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinitionList serviceResult = service.getTypeChildren(repositoryId, typeId,
-                    includePropertyDefinitions, maxItems, skipCount, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<TypeDefinitionContainer> serviceResult = service.getTypeDescendants(repositoryId, typeId, depth,
-                    includePropertyDefinitions, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinition serviceResult = service.createType(repositoryId, type, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinition serviceResult = service.updateType(repositoryId, type, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteType(repositoryId, typeId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/VersioningServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/VersioningServiceImpl.java
deleted file mode 100644
index df5c006..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/local/VersioningServiceImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.local;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-public class VersioningServiceImpl extends AbstractLocalService implements VersioningService {
-
-    /**
-     * Constructor.
-     */
-    public VersioningServiceImpl(BindingSession session, CmisServiceFactory factory) {
-        setSession(session);
-        setServiceFactory(factory);
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.cancelCheckOut(repositoryId, objectId, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-        } finally {
-            service.close();
-        }
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment, policies,
-                    addAces, removeAces, extension);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.checkOut(repositoryId, objectId, extension, contentCopied);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-        } finally {
-            service.close();
-        }
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectData> serviceResult = service.getAllVersions(repositoryId, objectId, versionSeriesId, filter,
-                    includeAllowableActions, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major,
-                    filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds,
-                    includeAcl, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        CmisService service = getService(repositoryId);
-
-        try {
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Properties serviceResult = service.getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId,
-                    major, filter, extension);
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return serviceResult;
-        } finally {
-            service.close();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
deleted file mode 100644
index 9e5f5b4..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
+++ /dev/null
@@ -1,721 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.ref.SoftReference;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.math.BigInteger;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayDeque;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.xml.namespace.QName;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.Service;
-import javax.xml.ws.WebServiceFeature;
-import javax.xml.ws.handler.HandlerResolver;
-import javax.xml.ws.handler.MessageContext;
-import javax.xml.ws.http.HTTPException;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;
-import org.apache.chemistry.opencmis.client.bindings.spi.http.Response;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ACLService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ACLServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.MultiFilingServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.NavigationService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.NavigationServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.PolicyService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.PolicyServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RelationshipService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RelationshipServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningService;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public abstract class AbstractPortProvider {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractPortProvider.class);
-
-    private static final int PORT_CACHE_SIZE = 5;
-
-    protected static final int CHUNK_SIZE = (64 * 1024) - 1;
-
-    protected enum CmisWebSerivcesService {
-        REPOSITORY_SERVICE("RepositoryService", false, RepositoryService.class, RepositoryServicePort.class,
-                SessionParameter.WEBSERVICES_REPOSITORY_SERVICE,
-                SessionParameter.WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT),
-
-        NAVIGATION_SERVICE("NavigationService", false, NavigationService.class, NavigationServicePort.class,
-                SessionParameter.WEBSERVICES_NAVIGATION_SERVICE,
-                SessionParameter.WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT),
-
-        OBJECT_SERVICE("ObjectService", true, ObjectService.class, ObjectServicePort.class,
-                SessionParameter.WEBSERVICES_OBJECT_SERVICE, SessionParameter.WEBSERVICES_OBJECT_SERVICE_ENDPOINT),
-
-        VERSIONING_SERVICE("VersioningService", true, VersioningService.class, VersioningServicePort.class,
-                SessionParameter.WEBSERVICES_VERSIONING_SERVICE,
-                SessionParameter.WEBSERVICES_VERSIONING_SERVICE_ENDPOINT),
-
-        DISCOVERY_SERVICE("DiscoveryService", false, DiscoveryService.class, DiscoveryServicePort.class,
-                SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, SessionParameter.WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT),
-
-        MULTIFILING_SERVICE("MultiFilingService", false, MultiFilingService.class, MultiFilingServicePort.class,
-                SessionParameter.WEBSERVICES_MULTIFILING_SERVICE,
-                SessionParameter.WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT),
-
-        RELATIONSHIP_SERVICE("RelationshipService", false, RelationshipService.class, RelationshipServicePort.class,
-                SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE,
-                SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT),
-
-        POLICY_SERVICE("PolicyService", false, PolicyService.class, PolicyServicePort.class,
-                SessionParameter.WEBSERVICES_POLICY_SERVICE, SessionParameter.WEBSERVICES_POLICY_SERVICE_ENDPOINT),
-
-        ACL_SERVICE("ACLService", false, ACLService.class, ACLServicePort.class,
-                SessionParameter.WEBSERVICES_ACL_SERVICE, SessionParameter.WEBSERVICES_ACL_SERVICE_ENDPOINT);
-
-        private final String name;
-        private final QName qname;
-        private final boolean handlesContent;
-        private final Class<? extends Service> serviceClass;
-        private final Class<?> portClass;
-        private final String wsdlKey;
-        private final String endpointKey;
-
-        CmisWebSerivcesService(String localname, boolean handlesContent, Class<? extends Service> serviceClass,
-                Class<?> port11Class, String wsdlKey, String endpointKey) {
-            this.name = localname;
-            this.qname = new QName("http://docs.oasis-open.org/ns/cmis/ws/200908/", localname);
-            this.handlesContent = handlesContent;
-            this.serviceClass = serviceClass;
-            this.portClass = port11Class;
-            this.wsdlKey = wsdlKey;
-            this.endpointKey = endpointKey;
-        }
-
-        public String getServiceName() {
-            return name;
-        }
-
-        public QName getQName() {
-            return qname;
-        }
-
-        public boolean handlesContent() {
-            return handlesContent;
-        }
-
-        public Class<? extends Service> getServiceClass() {
-            return serviceClass;
-        }
-
-        public Class<?> getPortClass() {
-            return portClass;
-        }
-
-        public String getWsdlKey() {
-            return wsdlKey;
-        }
-
-        public String getEndpointKey() {
-            return endpointKey;
-        }
-    }
-
-    class CmisServiceHolder {
-        private final CmisWebSerivcesService service;
-        private SoftReference<Service> serviceObject;
-        private final URL endpointUrl;
-
-        public CmisServiceHolder(final CmisWebSerivcesService service, final URL endpointUrl)
-                throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
-            this.service = service;
-            this.endpointUrl = endpointUrl;
-            this.serviceObject = new SoftReference<Service>(createServiceObject());
-        }
-
-        private Service createServiceObject() throws InstantiationException, IllegalAccessException,
-                InvocationTargetException, NoSuchMethodException {
-            final Constructor<? extends Service> serviceConstructor = service.getServiceClass().getConstructor(
-                    new Class<?>[] { URL.class, QName.class });
-
-            URL wsdlUrl = service.getPortClass().getResource("/wsdl/cmis11/CMISWS-Service.wsdl");
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Session {}: WSDL URL: {}", getSession().getSessionId(), wsdlUrl.toExternalForm());
-            }
-
-            Service newService = serviceConstructor.newInstance(new Object[] { wsdlUrl, service.getQName() });
-
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            if (authProvider != null) {
-                HandlerResolver handlerResolver = authProvider.getHandlerResolver();
-                if (handlerResolver != null) {
-                    newService.setHandlerResolver(handlerResolver);
-                }
-            }
-
-            return newService;
-        }
-
-        public CmisWebSerivcesService getService() {
-            return service;
-        }
-
-        public Service getServiceObject() throws InstantiationException, IllegalAccessException,
-                InvocationTargetException, NoSuchMethodException {
-            Service result = serviceObject.get();
-            if (result == null) {
-                result = createServiceObject();
-                serviceObject = new SoftReference<Service>(result);
-            }
-
-            return result;
-        }
-
-        public URL getEndpointUrl() {
-            return endpointUrl;
-        }
-
-        public String getServiceName() {
-            return service.getServiceName();
-        }
-    }
-
-    private BindingSession session;
-    private boolean useCompression;
-    private boolean useClientCompression;
-    private String acceptLanguage;
-
-    private final ReentrantLock portObjectLock = new ReentrantLock();
-    private final EnumMap<CmisWebSerivcesService, ArrayDeque<SoftReference<BindingProvider>>> portObjectCache = new EnumMap<CmisWebSerivcesService, ArrayDeque<SoftReference<BindingProvider>>>(
-            CmisWebSerivcesService.class);
-
-    public BindingSession getSession() {
-        return session;
-    }
-
-    public void setSession(BindingSession session) {
-        this.session = session;
-
-        final Object compression = session.get(SessionParameter.COMPRESSION);
-        useCompression = (compression != null) && Boolean.parseBoolean(compression.toString());
-
-        final Object clientCompression = session.get(SessionParameter.CLIENT_COMPRESSION);
-        useClientCompression = (clientCompression != null) && Boolean.parseBoolean(clientCompression.toString());
-
-        if (session.get(CmisBindingsHelper.ACCEPT_LANGUAGE) instanceof String) {
-            acceptLanguage = session.get(CmisBindingsHelper.ACCEPT_LANGUAGE).toString();
-        }
-    }
-
-    public boolean useCompression() {
-        return useCompression;
-    }
-
-    public boolean useClientCompression() {
-        return useClientCompression;
-    }
-
-    public String getAcceptLanguage() {
-        return acceptLanguage;
-    }
-
-    /**
-     * Return the Repository Service port object.
-     */
-    public RepositoryServicePort getRepositoryServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.REPOSITORY_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (RepositoryServicePort) portObject;
-    }
-
-    /**
-     * Return the Navigation Service port object.
-     */
-    public NavigationServicePort getNavigationServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.NAVIGATION_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (NavigationServicePort) portObject;
-    }
-
-    /**
-     * Return the Object Service port object.
-     */
-    public ObjectServicePort getObjectServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.OBJECT_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (ObjectServicePort) portObject;
-    }
-
-    /**
-     * Return the Versioning Service port object.
-     */
-    public VersioningServicePort getVersioningServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.VERSIONING_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (VersioningServicePort) portObject;
-    }
-
-    /**
-     * Return the Discovery Service port object.
-     */
-    public DiscoveryServicePort getDiscoveryServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.DISCOVERY_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (DiscoveryServicePort) portObject;
-    }
-
-    /**
-     * Return the MultiFiling Service port object.
-     */
-    public MultiFilingServicePort getMultiFilingServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.MULTIFILING_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (MultiFilingServicePort) portObject;
-    }
-
-    /**
-     * Return the Relationship Service port object.
-     */
-    public RelationshipServicePort getRelationshipServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.RELATIONSHIP_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (RelationshipServicePort) portObject;
-    }
-
-    /**
-     * Return the Policy Service port object.
-     */
-    public PolicyServicePort getPolicyServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.POLICY_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (PolicyServicePort) portObject;
-    }
-
-    /**
-     * Return the ACL Service port object.
-     */
-    public ACLServicePort getACLServicePort(CmisVersion cmisVersion, String soapAction) {
-        BindingProvider portObject = getPortObject(CmisWebSerivcesService.ACL_SERVICE);
-        setSoapAction(portObject, soapAction, cmisVersion);
-
-        return (ACLServicePort) portObject;
-    }
-
-    public void endCall(Object portObject) {
-        AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
-        if (authProvider != null && portObject instanceof BindingProvider) {
-            BindingProvider bp = (BindingProvider) portObject;
-            String url = (String) bp.getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
-            if (bp.getResponseContext() != null) {
-                @SuppressWarnings("unchecked")
-                Map<String, List<String>> headers = (Map<String, List<String>>) bp.getResponseContext().get(
-                        MessageContext.HTTP_RESPONSE_HEADERS);
-                Integer statusCode = (Integer) bp.getResponseContext().get(MessageContext.HTTP_RESPONSE_CODE);
-                authProvider.putResponseHeaders(url, statusCode == null ? -1 : statusCode, headers);
-            }
-
-            CmisWebSerivcesService service = null;
-
-            if (portObject instanceof RepositoryServicePort) {
-                service = CmisWebSerivcesService.REPOSITORY_SERVICE;
-            } else if (portObject instanceof NavigationServicePort) {
-                service = CmisWebSerivcesService.NAVIGATION_SERVICE;
-            } else if (portObject instanceof ObjectServicePort) {
-                service = CmisWebSerivcesService.OBJECT_SERVICE;
-            } else if (portObject instanceof VersioningServicePort) {
-                service = CmisWebSerivcesService.VERSIONING_SERVICE;
-            } else if (portObject instanceof DiscoveryServicePort) {
-                service = CmisWebSerivcesService.DISCOVERY_SERVICE;
-            } else if (portObject instanceof MultiFilingServicePort) {
-                service = CmisWebSerivcesService.MULTIFILING_SERVICE;
-            } else if (portObject instanceof RelationshipServicePort) {
-                service = CmisWebSerivcesService.RELATIONSHIP_SERVICE;
-            } else if (portObject instanceof PolicyServicePort) {
-                service = CmisWebSerivcesService.POLICY_SERVICE;
-            } else if (portObject instanceof ACLServicePort) {
-                service = CmisWebSerivcesService.ACL_SERVICE;
-            }
-
-            if (service == null) {
-                return;
-            }
-
-            portObjectLock.lock();
-            try {
-                ArrayDeque<SoftReference<BindingProvider>> queue = portObjectCache.get(service);
-                if (queue == null) {
-                    throw new CmisRuntimeException("This is a bug!");
-                }
-
-                if (queue.size() < PORT_CACHE_SIZE) {
-                    queue.push(new SoftReference<BindingProvider>(bp));
-                } else {
-                    Iterator<SoftReference<BindingProvider>> iter = queue.iterator();
-                    while (iter.hasNext()) {
-                        SoftReference<BindingProvider> ref = iter.next();
-                        if (ref.get() == null) {
-                            iter.remove();
-                            queue.push(new SoftReference<BindingProvider>(bp));
-                            break;
-                        }
-                    }
-                }
-            } finally {
-                portObjectLock.unlock();
-            }
-        }
-    }
-
-    // ---- internal ----
-
-    @SuppressWarnings("unchecked")
-    protected BindingProvider getPortObject(final CmisWebSerivcesService service) {
-        Map<CmisWebSerivcesService, CmisServiceHolder> serviceMap = (Map<CmisWebSerivcesService, CmisServiceHolder>) session
-                .get(SpiSessionParameter.SERVICES);
-
-        // does the service map exist?
-        if (serviceMap == null) {
-            session.writeLock();
-            try {
-                // try again
-                serviceMap = (Map<CmisWebSerivcesService, CmisServiceHolder>) session.get(SpiSessionParameter.SERVICES);
-                if (serviceMap == null) {
-                    serviceMap = new EnumMap<CmisWebSerivcesService, CmisServiceHolder>(CmisWebSerivcesService.class);
-                    session.put(SpiSessionParameter.SERVICES, serviceMap, true);
-                }
-
-                if (serviceMap.containsKey(service)) {
-                    return createPortObject(serviceMap.get(service));
-                }
-
-                // create service object
-                CmisServiceHolder serviceholder = initServiceObject(service);
-                serviceMap.put(service, serviceholder);
-
-                // create port object
-                return createPortObject(serviceholder);
-            } finally {
-                session.writeUnlock();
-            }
-        }
-
-        // is the service in the service map?
-        if (!serviceMap.containsKey(service)) {
-            session.writeLock();
-            try {
-                // try again
-                if (serviceMap.containsKey(service)) {
-                    return createPortObject(serviceMap.get(service));
-                }
-
-                // create object
-                CmisServiceHolder serviceholder = initServiceObject(service);
-                serviceMap.put(service, serviceholder);
-
-                return createPortObject(serviceholder);
-            } finally {
-                session.writeUnlock();
-            }
-        }
-
-        return createPortObject(serviceMap.get(service));
-    }
-
-    /**
-     * Creates a service object.
-     */
-    protected CmisServiceHolder initServiceObject(final CmisWebSerivcesService service) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Initializing Web Service {} ...", getSession().getSessionId(),
-                    service.getServiceName());
-        }
-
-        try {
-            // get URLs
-            URL endpointUrl = null;
-
-            String wsdlUrlStr = (String) session.get(service.getWsdlKey());
-            if (wsdlUrlStr != null) {
-                endpointUrl = getEndpointUrlFromWsdl(wsdlUrlStr, service);
-            } else {
-                String endpointUrlStr = (String) session.get(service.getEndpointKey());
-                if (endpointUrlStr != null) {
-                    endpointUrl = new URL(endpointUrlStr);
-                }
-            }
-
-            if (endpointUrl == null) {
-                throw new CmisRuntimeException("Neither a WSDL URL nor an endpoint URL is specified for the service "
-                        + service.getServiceName() + "!");
-            }
-
-            // build the requested service object
-            return new CmisServiceHolder(service, endpointUrl);
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (HTTPException he) {
-            String message = "Cannot connect to Web Services [" + service.getServiceName() + "]: " + he.getMessage();
-            if (he.getStatusCode() == 401) {
-                throw new CmisUnauthorizedException(message, he);
-            } else if (he.getStatusCode() == 404) {
-                throw new CmisObjectNotFoundException(message, he);
-            } else if (he.getStatusCode() == 407) {
-                throw new CmisProxyAuthenticationException(message, he);
-            } else if (he.getStatusCode() == 301 || he.getStatusCode() == 302 || he.getStatusCode() == 303
-                    || he.getStatusCode() == 307) {
-                throw new CmisConnectionException("Redirects are not supported (HTTP status code " + he.getStatusCode()
-                        + "): " + message, he);
-            } else {
-                throw new CmisConnectionException(message, he);
-            }
-        } catch (InvocationTargetException ite) {
-            String message = "Cannot initalize Web Services service object [" + service.getServiceName() + "]: "
-                    + ite.getCause().getMessage();
-            throw new CmisConnectionException(message, ite);
-        } catch (Exception e) {
-            String message = "Cannot initalize Web Services service object [" + service.getServiceName() + "]: "
-                    + e.getMessage();
-            throw new CmisConnectionException(message, e);
-        }
-    }
-
-    /**
-     * Reads the URL and extracts the endpoint URL of the given service.
-     */
-    private URL getEndpointUrlFromWsdl(final String wsdlUrl, final CmisWebSerivcesService service) {
-        InputStream wsdlStream;
-        URL url;
-
-        // check the WSDL URL
-        try {
-            url = new URL(wsdlUrl);
-        } catch (MalformedURLException e) {
-            throw new CmisConnectionException("Invalid WSDL URL: " + wsdlUrl, e);
-        }
-
-        // check protocol
-        if (url.getProtocol().equalsIgnoreCase("http") || url.getProtocol().equalsIgnoreCase("https")) {
-            // HTTP URL -> use HttpInvoker to enable authentication
-            HttpInvoker hi = CmisBindingsHelper.getHttpInvoker(session);
-            Response wsdlResponse = hi.invokeGET(new UrlBuilder(wsdlUrl), session);
-
-            if (wsdlResponse.getResponseCode() != 200) {
-                throw new CmisConnectionException("Cannot access WSDL: " + wsdlUrl, BigInteger.ZERO,
-                        wsdlResponse.getErrorContent());
-            } else {
-                wsdlStream = wsdlResponse.getStream();
-            }
-        } else {
-            // non-HTTP URL -> just open the stream
-            try {
-                wsdlStream = url.openStream();
-            } catch (IOException e) {
-                throw new CmisConnectionException("Cannot access WSDL: " + wsdlUrl, e);
-            }
-        }
-
-        // parse the WSDL
-        try {
-            final Document doc = XMLUtils.parseDomDocument(new BufferedInputStream(wsdlStream, 64 * 1024));
-
-            NodeList serivceList = doc.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "service");
-            for (int i = 0; i < serivceList.getLength(); i++) {
-                Element serviceNode = (Element) serivceList.item(i);
-
-                String name = serviceNode.getAttribute("name");
-                if (name == null) {
-                    continue;
-                }
-
-                if (!service.getQName().getLocalPart().equals(name)) {
-                    continue;
-                }
-
-                NodeList portList = serviceNode.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "port");
-                if (portList.getLength() < 1) {
-                    throw new CmisRuntimeException("This service has no ports: " + service.getServiceName());
-                }
-
-                Element port = (Element) portList.item(0);
-
-                NodeList addressList = port.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/soap/", "address");
-                if (addressList.getLength() < 1) {
-                    throw new CmisRuntimeException("This service has no endpoint address: " + service.getServiceName());
-                }
-
-                Element address = (Element) addressList.item(0);
-
-                String location = address.getAttribute("location");
-                if (location == null) {
-                    throw new CmisRuntimeException("This service has no endpoint address: " + service.getServiceName());
-                }
-
-                try {
-                    return new URL(location);
-                } catch (MalformedURLException e) {
-                    throw new CmisRuntimeException("This service provides an invalid endpoint address: "
-                            + service.getServiceName(), e);
-                }
-            }
-
-            throw new CmisRuntimeException("This service does not provide an endpoint address: "
-                    + service.getServiceName());
-        } catch (ParserConfigurationException pe) {
-            throw new CmisRuntimeException("Cannot parse this WSDL: " + wsdlUrl, pe);
-        } catch (SAXException se) {
-            throw new CmisRuntimeException("Cannot parse this WSDL: " + wsdlUrl, se);
-        } catch (IOException ioe) {
-            throw new CmisRuntimeException("Cannot read this WSDL: " + wsdlUrl, ioe);
-        } finally {
-            IOUtils.closeQuietly(wsdlStream);
-        }
-    }
-
-    /**
-     * Sets the default HTTP headers on a {@link BindingProvider} object.
-     */
-    protected void setHTTPHeaders(BindingProvider portObject, Map<String, List<String>> httpHeaders) {
-        if (httpHeaders == null) {
-            httpHeaders = new HashMap<String, List<String>>();
-        }
-
-        // CMIS client header
-        httpHeaders.put("X-CMIS-Client", Collections.singletonList(ClientVersion.OPENCMIS_CLIENT));
-
-        // compression
-        if (useCompression) {
-            httpHeaders.put("Accept-Encoding", Collections.singletonList("gzip"));
-        }
-
-        // client compression
-        if (useClientCompression) {
-            httpHeaders.put("Content-Encoding", Collections.singletonList("gzip"));
-        }
-
-        // locale
-        if (acceptLanguage != null) {
-            httpHeaders.put("Accept-Language", Collections.singletonList(acceptLanguage));
-        }
-
-        portObject.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, httpHeaders);
-    }
-
-    /**
-     * Sets the endpoint URL if the URL is not <code>null</code>.
-     */
-    protected void setEndpointUrl(BindingProvider portObject, URL endpointUrl) {
-        if (endpointUrl == null) {
-            return;
-        }
-
-        portObject.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointUrl.toString());
-    }
-
-    /**
-     * Sets the SOAP Action header.
-     */
-    protected void setSoapAction(BindingProvider portObject, String soapAction, CmisVersion cmisVersion) {
-        portObject.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
-
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            portObject.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "");
-        } else {
-            portObject.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, soapAction);
-        }
-    }
-
-    /**
-     * Creates a simple port object from a CmisServiceHolder object.
-     */
-    protected BindingProvider createPortObjectFromServiceHolder(final CmisServiceHolder serviceHolder,
-            WebServiceFeature... features) throws Exception {
-        portObjectLock.lock();
-        try {
-            ArrayDeque<SoftReference<BindingProvider>> queue = portObjectCache.get(serviceHolder.getService());
-            if (queue == null) {
-                queue = new ArrayDeque<SoftReference<BindingProvider>>();
-                portObjectCache.put(serviceHolder.getService(), queue);
-            }
-
-            while (!queue.isEmpty()) {
-                BindingProvider bp = queue.pop().get();
-                if (bp != null) {
-                    return bp;
-                }
-            }
-        } finally {
-            portObjectLock.unlock();
-        }
-
-        return (BindingProvider) serviceHolder.getServiceObject().getPort(serviceHolder.getService().getPortClass(),
-                features);
-    }
-
-    /**
-     * Creates a port object.
-     */
-    protected abstract BindingProvider createPortObject(CmisServiceHolder serviceHolder);
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractWebServicesService.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractWebServicesService.java
deleted file mode 100644
index aa079ca..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractWebServicesService.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.io.StringWriter;
-import java.math.BigInteger;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.impl.RepositoryInfoCache;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.w3c.dom.Node;
-
-/**
- * Base class for all Web Services clients.
- */
-public abstract class AbstractWebServicesService {
-
-    private BindingSession session;
-
-    /**
-     * Sets the current session.
-     */
-    protected void setSession(BindingSession session) {
-        this.session = session;
-    }
-
-    /**
-     * Gets the current session.
-     */
-    protected BindingSession getSession() {
-        return session;
-    }
-
-    /**
-     * Converts a Web Services Exception into a CMIS Client exception.
-     */
-    protected CmisBaseException convertException(CmisException ex) {
-        if ((ex == null) || (ex.getFaultInfo() == null)) {
-            return new CmisRuntimeException("CmisException has no fault!");
-        }
-
-        String msg = ex.getFaultInfo().getMessage();
-        BigInteger code = ex.getFaultInfo().getCode();
-
-        String errorContent = null;
-        if (!ex.getFaultInfo().getAny().isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            for (Object o : ex.getFaultInfo().getAny()) {
-                if (o != null) {
-                    if (o instanceof Node) {
-                        sb.append(getNodeAsString((Node) o));
-                    } else {
-                        sb.append(o.toString());
-                    }
-                    sb.append('\n');
-                }
-            }
-            errorContent = sb.toString();
-        }
-
-        switch (ex.getFaultInfo().getType()) {
-        case CONSTRAINT:
-            return new CmisConstraintException(msg, code, errorContent);
-        case CONTENT_ALREADY_EXISTS:
-            return new CmisContentAlreadyExistsException(msg, code, errorContent);
-        case FILTER_NOT_VALID:
-            return new CmisFilterNotValidException(msg, code, errorContent);
-        case INVALID_ARGUMENT:
-            return new CmisInvalidArgumentException(msg, code, errorContent);
-        case NAME_CONSTRAINT_VIOLATION:
-            return new CmisNameConstraintViolationException(msg, code, errorContent);
-        case NOT_SUPPORTED:
-            return new CmisNotSupportedException(msg, code, errorContent);
-        case OBJECT_NOT_FOUND:
-            return new CmisObjectNotFoundException(msg, code, errorContent);
-        case PERMISSION_DENIED:
-            return new CmisPermissionDeniedException(msg, code, errorContent);
-        case RUNTIME:
-            return new CmisRuntimeException(msg, code, errorContent);
-        case STORAGE:
-            return new CmisStorageException(msg, code, errorContent);
-        case STREAM_NOT_SUPPORTED:
-            return new CmisStreamNotSupportedException(msg, code, errorContent);
-        case UPDATE_CONFLICT:
-            return new CmisUpdateConflictException(msg, code, errorContent);
-        case VERSIONING:
-            return new CmisVersioningException(msg, code, errorContent);
-        default:
-        }
-
-        return new CmisRuntimeException("Unknown exception[" + ex.getFaultInfo().getType().value() + "]: " + msg);
-    }
-
-    private static String getNodeAsString(Node node) {
-        try {
-            TransformerFactory factory = TransformerFactory.newInstance();
-            Transformer transformrt = factory.newTransformer();
-            transformrt.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-            // transformrt.setOutputProperty(OutputKeys.INDENT, "yes");
-
-            StringWriter sw = new StringWriter();
-            transformrt.transform(new DOMSource(node), new StreamResult(sw));
-            return sw.toString();
-        } catch (TransformerException e) {
-            assert false;
-        }
-
-        return "";
-    }
-
-    /**
-     * Return the CMIS version of the given repository.
-     */
-    protected CmisVersion getCmisVersion(String repositoryId) {
-        if (CmisBindingsHelper.getForcedCmisVersion(session) != null) {
-            return CmisBindingsHelper.getForcedCmisVersion(session);
-        }
-
-        RepositoryInfoCache cache = CmisBindingsHelper.getRepositoryInfoCache(session);
-        RepositoryInfo info = cache.get(repositoryId);
-
-        if (info == null) {
-            info = CmisBindingsHelper.getSPI(session).getRepositoryService().getRepositoryInfo(repositoryId, null);
-            if (info != null) {
-                cache.put(info);
-            }
-        }
-
-        // if the version is unknown try CMIS 1.0
-        return (info == null ? CmisVersion.CMIS_1_0 : info.getCmisVersion());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AclServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AclServiceImpl.java
deleted file mode 100644
index 57dad0d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AclServiceImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ACLServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumACLPropagation;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;
-
-/**
- * ACL Service Web Services client.
- */
-public class AclServiceImpl extends AbstractWebServicesService implements AclService, ExtendedAclService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public AclServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addACEs, Acl removeACEs,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        ACLServicePort port = portProvider.getACLServicePort(getCmisVersion(repositoryId), "applyACL");
-
-        try {
-            return convert(port.applyACL(repositoryId, objectId, convert(addACEs), convert(removeACEs),
-                    convert(EnumACLPropagation.class, aclPropagation), convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        ACLServicePort port = portProvider.getACLServicePort(getCmisVersion(repositoryId), "getACL");
-
-        try {
-            return convert(port.getACL(repositoryId, objectId, onlyBasicPermissions, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public Acl setAcl(String repositoryId, String objectId, Acl aces) {
-        Acl currentAcl = getAcl(repositoryId, objectId, false, null);
-
-        List<Ace> removeAces = new ArrayList<Ace>();
-        if (currentAcl.getAces() != null) {
-            for (Ace ace : currentAcl.getAces()) {
-                if (ace.isDirect()) {
-                    removeAces.add(ace);
-                }
-            }
-        }
-
-        return applyAcl(repositoryId, objectId, aces, new AccessControlListImpl(removeAces), AclPropagation.OBJECTONLY,
-                null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/Axis2PortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/Axis2PortProvider.java
deleted file mode 100644
index a2eadf3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/Axis2PortProvider.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.soap.MTOMFeature;
-
-import org.apache.axis2.jaxws.Constants;
-import org.apache.axis2.transport.http.HTTPConstants;
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Element;
-
-/**
- * Axis2 JAX-WS implementation
- * 
- * !!! EXPERIMENTAL !!!
- */
-public class Axis2PortProvider extends AbstractPortProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(Axis2PortProvider.class);
-
-    /**
-     * Creates a port object.
-     */
-    protected BindingProvider createPortObject(CmisServiceHolder serviceHolder) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Creating Web Service port object of {} ...", getSession().getSessionId(),
-                    serviceHolder.getServiceName());
-        }
-
-        try {
-            // create port object
-            BindingProvider portObject = createPortObjectFromServiceHolder(serviceHolder, new MTOMFeature());
-
-            // add SOAP and HTTP authentication headers
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            Map<String, List<String>> httpHeaders = null;
-            if (authProvider != null) {
-                // SOAP header
-                Element soapHeader = authProvider.getSOAPHeaders(portObject);
-                if (soapHeader != null) {
-                    TransformerFactory transFactory = TransformerFactory.newInstance();
-                    Transformer transformer = transFactory.newTransformer();
-                    StringWriter headerXml = new StringWriter();
-                    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-                    transformer.transform(new DOMSource(soapHeader), new StreamResult(headerXml));
-
-                    Map<QName, List<String>> header = new HashMap<QName, List<String>>();
-                    header.put(new QName(soapHeader.getNamespaceURI(), soapHeader.getLocalName()),
-                            Collections.singletonList(headerXml.toString()));
-                    portObject.getRequestContext().put(Constants.JAXWS_OUTBOUND_SOAP_HEADERS, header);
-                }
-
-                // HTTP header
-                String url = (serviceHolder.getEndpointUrl() != null ? serviceHolder.getEndpointUrl().toString()
-                        : serviceHolder.getServiceObject().getWSDLDocumentLocation().toString());
-                httpHeaders = authProvider.getHTTPHeaders(url);
-
-                // TODO: set SSL Factory
-
-                // TODO: set Hostname Verifier
-            }
-
-            // set HTTP headers
-            setHTTPHeaders(portObject, httpHeaders);
-
-            // set endpoint URL
-            setEndpointUrl(portObject, serviceHolder.getEndpointUrl());
-
-            // HTTP settings
-            portObject.getRequestContext().put(HTTPConstants.REUSE_HTTP_CLIENT, "true");
-
-            // timeouts
-            int connectTimeout = getSession().get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                portObject.getRequestContext().put(HTTPConstants.CONNECTION_TIMEOUT, Integer.valueOf(connectTimeout));
-            }
-
-            int readTimeout = getSession().get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                portObject.getRequestContext().put(HTTPConstants.SO_TIMEOUT, Integer.valueOf(readTimeout));
-            }
-
-            return portObject;
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot initalize Web Services port object: " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CXFPortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CXFPortProvider.java
deleted file mode 100644
index 0353a19..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CXFPortProvider.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.Binding;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.soap.MTOMFeature;
-import javax.xml.ws.soap.SOAPBinding;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.frontend.ClientProxy;
-import org.apache.cxf.headers.Header;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Element;
-
-/**
- * Apache CXF JAX-WS implementation.
- */
-public class CXFPortProvider extends AbstractPortProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(CXFPortProvider.class);
-
-    /**
-     * Creates a port object.
-     */
-    protected BindingProvider createPortObject(CmisServiceHolder serviceHolder) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Creating Web Service port object of {} ...", getSession().getSessionId(),
-                    serviceHolder.getServiceName());
-        }
-
-        try {
-            // create port object
-            BindingProvider portObject = createPortObjectFromServiceHolder(serviceHolder, new MTOMFeature());
-
-            Binding binding = portObject.getBinding();
-            ((SOAPBinding) binding).setMTOMEnabled(true);
-
-            // add SOAP and HTTP authentication headers
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            Map<String, List<String>> httpHeaders = null;
-            if (authProvider != null) {
-                // SOAP header
-                Element soapHeader = authProvider.getSOAPHeaders(portObject);
-                if (soapHeader != null) {
-                    portObject.getRequestContext().put(
-                            Header.HEADER_LIST,
-                            Collections.singletonList(new Header(new QName(soapHeader.getNamespaceURI(), soapHeader
-                                    .getLocalName()), soapHeader)));
-                }
-
-                // HTTP header
-                String url = (serviceHolder.getEndpointUrl() != null ? serviceHolder.getEndpointUrl().toString()
-                        : serviceHolder.getServiceObject().getWSDLDocumentLocation().toString());
-                httpHeaders = authProvider.getHTTPHeaders(url);
-            }
-
-            // set HTTP headers
-            setHTTPHeaders(portObject, httpHeaders);
-
-            // set endpoint URL
-            setEndpointUrl(portObject, serviceHolder.getEndpointUrl());
-
-            Client client = ClientProxy.getClient(portObject);
-            HTTPConduit http = (HTTPConduit) client.getConduit();
-            HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
-            httpClientPolicy.setAllowChunking(true);
-
-            // timeouts
-            int connectTimeout = getSession().get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                httpClientPolicy.setConnectionTimeout(connectTimeout);
-            }
-
-            int readTimeout = getSession().get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                httpClientPolicy.setReceiveTimeout(readTimeout);
-            }
-
-            http.setClient(httpClientPolicy);
-
-            return portObject;
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot initalize Web Services port object: " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CmisWebServicesSpi.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CmisWebServicesSpi.java
deleted file mode 100644
index a537fa4..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CmisWebServicesSpi.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import javax.xml.ws.spi.Provider;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * CMIS Web Services SPI implementation.
- */
-public class CmisWebServicesSpi implements CmisSpi {
-
-    public static final String JAXWS_IMPL_RI = "sunri";
-    public static final String JAXWS_IMPL_JRE = "sunjre";
-    public static final String JAXWS_IMPL_CXF = "cxf";
-    public static final String JAXWS_IMPL_WEBSPHERE = "websphere";
-    public static final String JAXWS_IMPL_AXIS2 = "axis2";
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisWebServicesSpi.class);
-
-    private final RepositoryService repositoryService;
-    private final NavigationService navigationService;
-    private final ObjectService objectService;
-    private final VersioningService versioningService;
-    private final DiscoveryService discoveryService;
-    private final MultiFilingService multiFilingService;
-    private final RelationshipService relationshipService;
-    private final PolicyService policyService;
-    private final AclService aclService;
-
-    /**
-     * Constructor.
-     */
-    public CmisWebServicesSpi(BindingSession session) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Initializing Web Services SPI...", session.getSessionId());
-        }
-
-        AbstractPortProvider portProvider = null;
-
-        String portProviderClass = (String) session.get(SessionParameter.WEBSERVICES_PORT_PROVIDER_CLASS);
-        if (portProviderClass == null) {
-            String jaxwsImpl = (String) session.get(SessionParameter.WEBSERVICES_JAXWS_IMPL);
-
-            if (jaxwsImpl == null) {
-                jaxwsImpl = System.getProperty("org.apache.chemistry.opencmis.binding.webservices.jaxws.impl");
-            }
-
-            if (jaxwsImpl == null) {
-                Provider provider = Provider.provider();
-                if (provider == null) {
-                    throw new CmisRuntimeException("No JAX-WS implementation found!");
-                }
-
-                String providerPackage = provider.getClass().getPackage().getName();
-
-                if (providerPackage.startsWith("com.sun.xml.internal.ws.spi")) {
-                    portProvider = new SunJREPortProvider();
-                } else if (providerPackage.startsWith("com.sun.xml.ws.spi")) {
-                    portProvider = new SunRIPortProvider();
-                } else if (providerPackage.startsWith("org.apache.cxf.jaxws")) {
-                    portProvider = new CXFPortProvider();
-                } else if (providerPackage.startsWith("org.apache.axis2.jaxws.spi")) {
-                    portProvider = new Axis2PortProvider();
-                } else {
-                    throw new CmisRuntimeException("Could not detect JAX-WS implementation! Use session parameter "
-                            + SessionParameter.WEBSERVICES_JAXWS_IMPL + " to specify one.");
-                }
-            } else if (JAXWS_IMPL_JRE.equals(jaxwsImpl)) {
-                portProvider = new SunJREPortProvider();
-            } else if (JAXWS_IMPL_RI.equals(jaxwsImpl)) {
-                portProvider = new SunRIPortProvider();
-            } else if (JAXWS_IMPL_CXF.equals(jaxwsImpl)) {
-                portProvider = new CXFPortProvider();
-            } else if (JAXWS_IMPL_WEBSPHERE.equals(jaxwsImpl)) {
-                portProvider = new WebSpherePortProvider();
-            } else if (JAXWS_IMPL_AXIS2.equals(jaxwsImpl)) {
-                portProvider = new Axis2PortProvider();
-            } else {
-                throw new CmisRuntimeException("Unknown JAX-WS implementation specified!");
-            }
-        } else {
-            Object portProviderObj = null;
-
-            try {
-                portProviderObj = ClassLoaderUtil.loadClass(portProviderClass).newInstance();
-            } catch (Exception e) {
-                throw new IllegalArgumentException("Could not load port provider: " + e, e);
-            }
-
-            if (!(portProviderObj instanceof AbstractPortProvider)) {
-                throw new IllegalArgumentException("Port provider does not implement AbstractPortProvider!");
-            }
-            portProvider = (AbstractPortProvider) portProviderObj;
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Port provider class: {}", session.getSessionId(), portProvider.getClass().getName());
-        }
-
-        portProvider.setSession(session);
-
-        repositoryService = new RepositoryServiceImpl(session, portProvider);
-        navigationService = new NavigationServiceImpl(session, portProvider);
-        objectService = new ObjectServiceImpl(session, portProvider);
-        versioningService = new VersioningServiceImpl(session, portProvider);
-        discoveryService = new DiscoveryServiceImpl(session, portProvider);
-        multiFilingService = new MultiFilingServiceImpl(session, portProvider);
-        relationshipService = new RelationshipServiceImpl(session, portProvider);
-        policyService = new PolicyServiceImpl(session, portProvider);
-        aclService = new AclServiceImpl(session, portProvider);
-    }
-
-    public RepositoryService getRepositoryService() {
-        return repositoryService;
-    }
-
-    public NavigationService getNavigationService() {
-        return navigationService;
-    }
-
-    public ObjectService getObjectService() {
-        return objectService;
-    }
-
-    public DiscoveryService getDiscoveryService() {
-        return discoveryService;
-    }
-
-    public VersioningService getVersioningService() {
-        return versioningService;
-    }
-
-    public MultiFilingService getMultiFilingService() {
-        return multiFilingService;
-    }
-
-    public RelationshipService getRelationshipService() {
-        return relationshipService;
-    }
-
-    public PolicyService getPolicyService() {
-        return policyService;
-    }
-
-    public AclService getAclService() {
-        return aclService;
-    }
-
-    public void clearAllCaches() {
-    }
-
-    public void clearRepositoryCache(String repositoryId) {
-    }
-
-    public void close() {
-        // no-op for Web Services
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/DiscoveryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/DiscoveryServiceImpl.java
deleted file mode 100644
index e8c3253..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/DiscoveryServiceImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Discovery Service Web Services client.
- */
-public class DiscoveryServiceImpl extends AbstractWebServicesService implements DiscoveryService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public DiscoveryServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeACL, BigInteger maxItems, ExtensionsData extension) {
-        DiscoveryServicePort port = portProvider.getDiscoveryServicePort(getCmisVersion(repositoryId),
-                "getContentChanges");
-
-        try {
-            javax.xml.ws.Holder<String> portChangeLokToken = convertHolder(changeLogToken);
-            javax.xml.ws.Holder<CmisObjectListType> portObjects = new javax.xml.ws.Holder<CmisObjectListType>();
-
-            port.getContentChanges(repositoryId, portChangeLokToken, includeProperties, filter, includePolicyIds,
-                    includeACL, maxItems, convert(extension), portObjects);
-
-            setHolderValue(portChangeLokToken, changeLogToken);
-
-            return convert(portObjects.value);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        DiscoveryServicePort port = portProvider.getDiscoveryServicePort(getCmisVersion(repositoryId), "query");
-
-        try {
-            return convert(port.query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                    convert(EnumIncludeRelationships.class, includeRelationships), renditionFilter, maxItems,
-                    skipCount, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/MultiFilingServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/MultiFilingServiceImpl.java
deleted file mode 100644
index 6ab59ac..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/MultiFilingServiceImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import javax.xml.ws.Holder;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.MultiFilingServicePort;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-
-/**
- * MultiFiling Service Web Services client.
- */
-public class MultiFilingServiceImpl extends AbstractWebServicesService implements MultiFilingService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public MultiFilingServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        MultiFilingServicePort port = portProvider.getMultiFilingServicePort(getCmisVersion(repositoryId),
-                "addObjectToFolder");
-
-        try {
-            Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.addObjectToFolder(repositoryId, objectId, folderId, allVersions, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        MultiFilingServicePort port = portProvider.getMultiFilingServicePort(getCmisVersion(repositoryId),
-                "removeObjectFromFolder");
-
-        try {
-            Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.removeObjectFromFolder(repositoryId, objectId, folderId, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/NavigationServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/NavigationServiceImpl.java
deleted file mode 100644
index 252ae3e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/NavigationServiceImpl.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderContainerType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectParentsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.NavigationServicePort;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-
-/**
- * Navigation Service Web Services client.
- */
-public class NavigationServiceImpl extends AbstractWebServicesService implements NavigationService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public NavigationServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId), "getChildren");
-
-        try {
-            return convert(port.getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                    convert(EnumIncludeRelationships.class, includeRelationships), renditionFilter, includePathSegment,
-                    maxItems, skipCount, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId),
-                "getDescendants");
-
-        try {
-            List<CmisObjectInFolderContainerType> containerList = port.getDescendants(repositoryId, folderId, depth,
-                    filter, includeAllowableActions, convert(EnumIncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePathSegment, convert(extension));
-
-            // no list?
-            if (containerList == null) {
-                return null;
-            }
-
-            // convert list
-            List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-            for (CmisObjectInFolderContainerType container : containerList) {
-                result.add(convert(container));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId),
-                "getFolderParent");
-
-        try {
-            return convert(port.getFolderParent(repositoryId, folderId, filter, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId),
-                "getFolderTree");
-
-        try {
-            List<CmisObjectInFolderContainerType> containerList = port.getFolderTree(repositoryId, folderId, depth,
-                    filter, includeAllowableActions, convert(EnumIncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePathSegment, convert(extension));
-
-            // no list?
-            if (containerList == null) {
-                return null;
-            }
-
-            // convert list
-            List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-            for (CmisObjectInFolderContainerType container : containerList) {
-                result.add(convert(container));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId),
-                "getObjectParents");
-
-        try {
-            List<CmisObjectParentsType> parentsList = port.getObjectParents(repositoryId, objectId, filter,
-                    includeAllowableActions, convert(EnumIncludeRelationships.class, includeRelationships),
-                    renditionFilter, includeRelativePathSegment, convert(extension));
-
-            // no list?
-            if (parentsList == null) {
-                return null;
-            }
-
-            // convert list
-            List<ObjectParentData> result = new ArrayList<ObjectParentData>();
-            for (CmisObjectParentsType parent : parentsList) {
-                result.add(convert(parent));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        NavigationServicePort port = portProvider.getNavigationServicePort(getCmisVersion(repositoryId),
-                "getCheckedOutDocs");
-
-        try {
-            return convert(port.getCheckedOutDocs(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                    convert(EnumIncludeRelationships.class, includeRelationships), renditionFilter, maxItems,
-                    skipCount, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/ObjectServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/ObjectServiceImpl.java
deleted file mode 100644
index 127bb00..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/ObjectServiceImpl.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectIdAndChangeTokenType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRenditionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumUnfileObject;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumVersioningState;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectServicePort;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-/**
- * Object Service Web Services client.
- */
-public class ObjectServiceImpl extends AbstractWebServicesService implements ObjectService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public ObjectServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addACEs,
-            Acl removeACEs, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "createDocument");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createDocument(repositoryId, convert(properties), folderId, convert(contentStream, false),
-                    convert(EnumVersioningState.class, versioningState), policies, convert(addACEs),
-                    convert(removeACEs), portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs,
-            ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId),
-                "createDocumentFromSource");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createDocumentFromSource(repositoryId, sourceId, convert(properties), folderId,
-                    convert(EnumVersioningState.class, versioningState), policies, convert(addACEs),
-                    convert(removeACEs), portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addACEs, Acl removeACEs, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "createFolder");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createFolder(repositoryId, convert(properties), folderId, policies, convert(addACEs),
-                    convert(removeACEs), portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addACEs, Acl removeACEs, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "createPolicy");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createPolicy(repositoryId, convert(properties), folderId, policies, convert(addACEs),
-                    convert(removeACEs), portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addACEs, Acl removeACEs, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        ObjectServicePort port = portProvider.getObjectServicePort(CmisVersion.CMIS_1_1, "createItem");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createItem(repositoryId, convert(properties), folderId, convert(addACEs), convert(removeACEs),
-                    portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addACEs,
-            Acl removeACEs, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "createRelationship");
-
-        try {
-            javax.xml.ws.Holder<String> objectId = new javax.xml.ws.Holder<String>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.createRelationship(repositoryId, convert(properties), policies, convert(addACEs), convert(removeACEs),
-                    portExtension, objectId);
-
-            setExtensionValues(portExtension, extension);
-
-            return objectId.value;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "updateProperties");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<String> portChangeToken = (getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                    : convertHolder(changeToken));
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.updateProperties(repositoryId, portObjectId, portChangeToken, convert(properties), portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setHolderValue(portChangeToken, changeToken);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        ObjectServicePort port = portProvider.getObjectServicePort(CmisVersion.CMIS_1_1, "bulkUpdateProperties");
-
-        try {
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-            javax.xml.ws.Holder<CmisObjectIdAndChangeTokenType> bulkUpdateResponse = new javax.xml.ws.Holder<CmisObjectIdAndChangeTokenType>();
-
-            port.bulkUpdateProperties(repositoryId,
-                    convert(objectIdAndChangeToken, properties, addSecondaryTypeIds, removeSecondaryTypeIds),
-                    portExtension, bulkUpdateResponse);
-
-            setExtensionValues(portExtension, extension);
-
-            List<BulkUpdateObjectIdAndChangeToken> result = null;
-            if (bulkUpdateResponse.value != null) {
-                // TODO: fix
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "deleteObject");
-
-        try {
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.deleteObject(repositoryId, objectId, allVersions, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "deleteTree");
-
-        try {
-            return convert(port.deleteTree(repositoryId, folderId, allVersions,
-                    convert(EnumUnfileObject.class, unfileObjects), continueOnFailure, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getAllowableActions");
-
-        try {
-            return convert(port.getAllowableActions(repositoryId, objectId, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getContentStream");
-
-        try {
-            boolean isPartial = false;
-            if ((offset != null && offset.signum() == 1) || length != null) {
-                isPartial = true;
-            }
-
-            return convert(port.getContentStream(repositoryId, objectId, streamId, offset, length, convert(extension)),
-                    isPartial);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getObject");
-
-        try {
-            return convert(port.getObject(repositoryId, objectId, filter, includeAllowableActions,
-                    convert(EnumIncludeRelationships.class, includeRelationships), renditionFilter, includePolicyIds,
-                    includeACL, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getObjectByPath");
-
-        try {
-            return convert(port.getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                    convert(EnumIncludeRelationships.class, includeRelationships), renditionFilter, includePolicyIds,
-                    includeACL, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getProperties");
-
-        try {
-            return convert(port.getProperties(repositoryId, objectId, filter, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "getRenditions");
-
-        try {
-            List<CmisRenditionType> renditionList = port.getRenditions(repositoryId, objectId, renditionFilter,
-                    maxItems, skipCount, convert(extension));
-
-            // no list?
-            if (renditionList == null) {
-                return null;
-            }
-
-            // convert list
-            List<RenditionData> result = new ArrayList<RenditionData>();
-            for (CmisRenditionType rendition : renditionList) {
-                result.add(convert(rendition));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "moveObject");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.moveObject(repositoryId, portObjectId, targetFolderId, sourceFolderId, portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "setContentStream");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<String> portChangeToken = (getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                    : convertHolder(changeToken));
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.setContentStream(repositoryId, portObjectId, overwriteFlag, portChangeToken,
-                    convert(contentStream, false), portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setHolderValue(portChangeToken, changeToken);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        ObjectServicePort port = portProvider.getObjectServicePort(getCmisVersion(repositoryId), "deleteContentStream");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<String> portChangeToken = (getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                    : convertHolder(changeToken));
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.deleteContentStream(repositoryId, portObjectId, portChangeToken, portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setHolderValue(portChangeToken, changeToken);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        ObjectServicePort port = portProvider.getObjectServicePort(CmisVersion.CMIS_1_1, "appendContentStream");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<String> portChangeToken = (getSession().get(SessionParameter.OMIT_CHANGE_TOKENS, false) ? null
-                    : convertHolder(changeToken));
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.appendContentStream(repositoryId, portObjectId, isLastChunk, portChangeToken,
-                    convert(contentStream, false), portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setHolderValue(portChangeToken, changeToken);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/PolicyServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/PolicyServiceImpl.java
deleted file mode 100644
index cf3fae7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/PolicyServiceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.ws.Holder;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.PolicyServicePort;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-
-/**
- * Policy Service Web Services client.
- */
-public class PolicyServiceImpl extends AbstractWebServicesService implements PolicyService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public PolicyServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        PolicyServicePort port = portProvider.getPolicyServicePort(getCmisVersion(repositoryId), "applyPolicy");
-
-        try {
-            Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.applyPolicy(repositoryId, policyId, objectId, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        PolicyServicePort port = portProvider.getPolicyServicePort(getCmisVersion(repositoryId), "removePolicy");
-
-        try {
-            Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.removePolicy(repositoryId, policyId, objectId, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        PolicyServicePort port = portProvider.getPolicyServicePort(getCmisVersion(repositoryId), "getAppliedPolicies");
-
-        try {
-            List<CmisObjectType> policyList = port.getAppliedPolicies(repositoryId, objectId, filter,
-                    convert(extension));
-
-            List<ObjectData> result = new ArrayList<ObjectData>();
-
-            // no list?
-            if (policyList == null) {
-                return result;
-            }
-
-            // convert list
-            for (CmisObjectType policy : policyList) {
-                result.add(convert(policy));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RelationshipServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RelationshipServiceImpl.java
deleted file mode 100644
index f6a1518..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RelationshipServiceImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumRelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RelationshipServicePort;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-
-/**
- * Relationship Service Web Services client.
- */
-public class RelationshipServiceImpl extends AbstractWebServicesService implements RelationshipService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public RelationshipServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        RelationshipServicePort port = portProvider.getRelationshipServicePort(getCmisVersion(repositoryId),
-                "getObjectRelationships");
-
-        try {
-            return convert(port.getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes,
-                    convert(EnumRelationshipDirection.class, relationshipDirection), typeId, filter,
-                    includeAllowableActions, maxItems, skipCount, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RepositoryServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RepositoryServiceImpl.java
deleted file mode 100644
index 3f9a40e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RepositoryServiceImpl.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertTypeContainerList;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryEntryType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Repository Service Web Services client.
- */
-public class RepositoryServiceImpl extends AbstractWebServicesService implements RepositoryService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public RepositoryServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        CmisVersion cmisVersion = CmisBindingsHelper.getForcedCmisVersion(getSession());
-        if (cmisVersion == null) {
-            cmisVersion = CmisVersion.CMIS_1_1;
-        }
-
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositories");
-
-        List<CmisRepositoryEntryType> entries = null;
-        try {
-            // get the list of repositories
-            entries = port.getRepositories(convert(extension));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-
-        List<RepositoryInfo> infos = null;
-        if (entries != null) {
-            port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositoryInfo");
-
-            try {
-                infos = new ArrayList<RepositoryInfo>();
-
-                // iterate through the list and fetch repository infos
-                for (CmisRepositoryEntryType entry : entries) {
-                    try {
-                        CmisRepositoryInfoType info = port.getRepositoryInfo(entry.getRepositoryId(), null);
-                        infos.add(convert(info));
-                    } catch (CmisBaseException e) {
-                        // getRepositoryInfo() failed for whatever reason
-                        // -> provide at least a repository info stub
-                        RepositoryInfoImpl info = new RepositoryInfoImpl();
-                        info.setId(entry.getRepositoryId());
-                        info.setName(entry.getRepositoryName());
-                        infos.add(info);
-                    }
-                }
-            } catch (CmisException e) {
-                throw convertException(e);
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-            } finally {
-                portProvider.endCall(port);
-            }
-        }
-
-        return infos;
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        CmisVersion cmisVersion = CmisBindingsHelper.getForcedCmisVersion(getSession());
-        if (cmisVersion == null) {
-            cmisVersion = CmisVersion.CMIS_1_1;
-        }
-
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositoryInfo");
-
-        try {
-            return convert(port.getRepositoryInfo(repositoryId, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
-                "getTypeDefinition");
-
-        try {
-            return convert(port.getTypeDefinition(repositoryId, typeId, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
-                "getTypeChildren");
-
-        try {
-            return convert(port.getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount,
-                    convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
-                "getTypeDescendants");
-
-        try {
-            return convertTypeContainerList(port.getTypeDescendants(repositoryId, typeId, depth,
-                    includePropertyDefinitions, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "createType");
-
-        try {
-            javax.xml.ws.Holder<CmisTypeDefinitionType> typeDef = new javax.xml.ws.Holder<CmisTypeDefinitionType>(
-                    convert(type));
-
-            port.createType(repositoryId, typeDef, convert(extension));
-
-            return convert(typeDef.value);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "updateType");
-
-        try {
-            javax.xml.ws.Holder<CmisTypeDefinitionType> typeDef = new javax.xml.ws.Holder<CmisTypeDefinitionType>(
-                    convert(type));
-
-            port.updateType(repositoryId, typeDef, convert(extension));
-
-            return convert(typeDef.value);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
-        }
-
-        RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "deleteType");
-
-        try {
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.deleteType(repositoryId, typeId, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SpiSessionParameter.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SpiSessionParameter.java
deleted file mode 100644
index 9770982..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SpiSessionParameter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-/**
- * Web Services session parameter.
- */
-public final class SpiSessionParameter {
-
-    public static final String SERVICES = "org.apache.chemistry.opencmis.binding.webservices.services";
-
-    private SpiSessionParameter() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunJREPortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunJREPortProvider.java
deleted file mode 100644
index 4bc2542..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunJREPortProvider.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocketFactory;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.WebServiceFeature;
-import javax.xml.ws.soap.MTOMFeature;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Element;
-
-import com.sun.xml.internal.ws.api.message.Headers;
-import com.sun.xml.internal.ws.developer.JAXWSProperties;
-import com.sun.xml.internal.ws.developer.StreamingAttachmentFeature;
-import com.sun.xml.internal.ws.developer.WSBindingProvider;
-
-/**
- * Sun JRE JAX-WS implementation.
- */
-@SuppressWarnings("restriction")
-public class SunJREPortProvider extends AbstractPortProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(SunJREPortProvider.class);
-
-    private int contentThreshold;
-    private int responseThreshold;
-
-    @Override
-    public void setSession(BindingSession session) {
-        super.setSession(session);
-
-        contentThreshold = session.get(SessionParameter.WEBSERVICES_MEMORY_THRESHOLD, 4 * 1024 * 1024);
-        responseThreshold = session.get(SessionParameter.WEBSERVICES_REPSONSE_MEMORY_THRESHOLD, -1);
-
-        if (responseThreshold > contentThreshold) {
-            contentThreshold = responseThreshold;
-        }
-    }
-
-    /**
-     * Creates a port object.
-     */
-    @SuppressWarnings("restriction")
-    protected BindingProvider createPortObject(CmisServiceHolder serviceHolder) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Creating Web Service port object of {} ...", getSession().getSessionId(),
-                    serviceHolder.getServiceName());
-        }
-
-        try {
-            // prepare features
-            WebServiceFeature[] features;
-            if (serviceHolder.getService().handlesContent()) {
-                features = new WebServiceFeature[] { new MTOMFeature(),
-                        new StreamingAttachmentFeature(null, true, contentThreshold) };
-            } else {
-                if (responseThreshold > -1) {
-                    features = new WebServiceFeature[] { new MTOMFeature(),
-                            new StreamingAttachmentFeature(null, true, responseThreshold) };
-                } else {
-                    features = new WebServiceFeature[] { new MTOMFeature() };
-                }
-            }
-
-            // create port object
-            BindingProvider portObject = createPortObjectFromServiceHolder(serviceHolder, features);
-
-            // set streaming for services that transport content
-            if (serviceHolder.getService().handlesContent()) {
-                portObject.getRequestContext().put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, CHUNK_SIZE);
-            }
-
-            // add SOAP and HTTP authentication headers
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            Map<String, List<String>> httpHeaders = null;
-            if (authProvider != null) {
-                // SOAP header
-                Element soapHeader = authProvider.getSOAPHeaders(portObject);
-                if (soapHeader != null) {
-                    ((WSBindingProvider) portObject).setOutboundHeaders(Headers.create(soapHeader));
-                }
-
-                // HTTP header
-                String url = (serviceHolder.getEndpointUrl() != null ? serviceHolder.getEndpointUrl().toString()
-                        : serviceHolder.getServiceObject().getWSDLDocumentLocation().toString());
-                httpHeaders = authProvider.getHTTPHeaders(url);
-
-                // SSL Factory
-                SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-                if (sf != null) {
-                    portObject.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sf);
-                }
-
-                // Hostname Verifier
-                HostnameVerifier hv = authProvider.getHostnameVerifier();
-                if (hv != null) {
-                    portObject.getRequestContext().put(JAXWSProperties.HOSTNAME_VERIFIER, hv);
-                }
-            }
-
-            // set HTTP headers
-            setHTTPHeaders(portObject, httpHeaders);
-
-            // set endpoint URL
-            setEndpointUrl(portObject, serviceHolder.getEndpointUrl());
-
-            // timeouts
-            int connectTimeout = getSession().get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                portObject.getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, connectTimeout);
-            }
-
-            int readTimeout = getSession().get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                portObject.getRequestContext().put(JAXWSProperties.REQUEST_TIMEOUT, readTimeout);
-            }
-
-            return portObject;
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot initalize Web Services port object: " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunRIPortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunRIPortProvider.java
deleted file mode 100644
index 72de2f7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SunRIPortProvider.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocketFactory;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.WebServiceFeature;
-import javax.xml.ws.soap.MTOMFeature;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Element;
-
-import com.sun.xml.ws.api.message.Headers;
-import com.sun.xml.ws.developer.JAXWSProperties;
-import com.sun.xml.ws.developer.StreamingAttachmentFeature;
-import com.sun.xml.ws.developer.WSBindingProvider;
-
-/**
- * JAX-WS RI implementation.
- */
-public class SunRIPortProvider extends AbstractPortProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(SunRIPortProvider.class);
-
-    private int contentThreshold;
-    private int responseThreshold;
-
-    @Override
-    public void setSession(BindingSession session) {
-        super.setSession(session);
-
-        contentThreshold = session.get(SessionParameter.WEBSERVICES_MEMORY_THRESHOLD, 4 * 1024 * 1024);
-        responseThreshold = session.get(SessionParameter.WEBSERVICES_REPSONSE_MEMORY_THRESHOLD, -1);
-
-        if (responseThreshold > contentThreshold) {
-            contentThreshold = responseThreshold;
-        }
-    }
-
-    /**
-     * Creates a port object.
-     */
-    protected BindingProvider createPortObject(CmisServiceHolder serviceHolder) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Session {}: Creating Web Service port object of {} ...", getSession().getSessionId(),
-                    serviceHolder.getServiceName());
-        }
-
-        try {
-            // prepare features
-            WebServiceFeature[] features;
-            if (serviceHolder.getService().handlesContent()) {
-                features = new WebServiceFeature[] { new MTOMFeature(),
-                        new StreamingAttachmentFeature(null, true, contentThreshold) };
-            } else {
-                if (responseThreshold > -1) {
-                    features = new WebServiceFeature[] { new MTOMFeature(),
-                            new StreamingAttachmentFeature(null, true, responseThreshold) };
-                } else {
-                    features = new WebServiceFeature[] { new MTOMFeature() };
-                }
-            }
-
-            // create port object
-            BindingProvider portObject = createPortObjectFromServiceHolder(serviceHolder, features);
-
-            // set streaming for services that transport content
-            if (serviceHolder.getService().handlesContent()) {
-                portObject.getRequestContext().put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, CHUNK_SIZE);
-            }
-
-            // add SOAP and HTTP authentication headers
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            Map<String, List<String>> httpHeaders = null;
-            if (authProvider != null) {
-                // SOAP header
-                Element soapHeader = authProvider.getSOAPHeaders(portObject);
-                if (soapHeader != null) {
-                    ((WSBindingProvider) portObject).setOutboundHeaders(Headers.create(soapHeader));
-                }
-
-                // HTTP header
-                String url = (serviceHolder.getEndpointUrl() != null ? serviceHolder.getEndpointUrl().toString()
-                        : serviceHolder.getServiceObject().getWSDLDocumentLocation().toString());
-                httpHeaders = authProvider.getHTTPHeaders(url);
-
-                // SSL Factory
-                SSLSocketFactory sf = authProvider.getSSLSocketFactory();
-                if (sf != null) {
-                    portObject.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sf);
-                }
-
-                // Hostname Verifier
-                HostnameVerifier hv = authProvider.getHostnameVerifier();
-                if (hv != null) {
-                    portObject.getRequestContext().put(JAXWSProperties.HOSTNAME_VERIFIER, hv);
-                }
-            }
-
-            // set HTTP headers
-            setHTTPHeaders(portObject, httpHeaders);
-
-            // set endpoint URL
-            setEndpointUrl(portObject, serviceHolder.getEndpointUrl());
-
-            // timeouts
-            int connectTimeout = getSession().get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                portObject.getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, connectTimeout);
-            }
-
-            int readTimeout = getSession().get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                portObject.getRequestContext().put("com.sun.xml.ws.request.timeout", readTimeout);
-            }
-
-            return portObject;
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot initalize Web Services port object: " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/VersioningServiceImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/VersioningServiceImpl.java
deleted file mode 100644
index 8303421..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/VersioningServiceImpl.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * Versioning Service Web Services client.
- */
-public class VersioningServiceImpl extends AbstractWebServicesService implements VersioningService {
-
-    private final AbstractPortProvider portProvider;
-
-    /**
-     * Constructor.
-     */
-    public VersioningServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
-        setSession(session);
-        this.portProvider = portProvider;
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId), "checkOut");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<Boolean> portContentCopied = new javax.xml.ws.Holder<Boolean>();
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.checkOut(repositoryId, portObjectId, portExtension, portContentCopied);
-
-            setHolderValue(portObjectId, objectId);
-            setHolderValue(portContentCopied, contentCopied);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
-                "cancelCheckOut");
-
-        try {
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.cancelCheckOut(repositoryId, objectId, portExtension);
-
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addACEs, Acl removeACEs,
-            ExtensionsData extension) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId), "checkIn");
-
-        try {
-            javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
-            javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
-
-            port.checkIn(repositoryId, portObjectId, major, convert(properties), convert(contentStream, false),
-                    checkinComment, policies, convert(addACEs), convert(removeACEs), portExtension);
-
-            setHolderValue(portObjectId, objectId);
-            setExtensionValues(portExtension, extension);
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
-                "getAllVersions");
-
-        try {
-            List<CmisObjectType> versionList = port.getAllVersions(repositoryId, versionSeriesId, filter,
-                    includeAllowableActions, convert(extension));
-
-            // no list?
-            if (versionList == null) {
-                return null;
-            }
-
-            // convert list
-            List<ObjectData> result = new ArrayList<ObjectData>();
-            for (CmisObjectType version : versionList) {
-                result.add(convert(version));
-            }
-
-            return result;
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
-                "getObjectOfLatestVersion");
-
-        try {
-            return convert(port.getObjectOfLatestVersion(repositoryId, versionSeriesId, major, filter,
-                    includeAllowableActions, convert(EnumIncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePolicyIds, includeACL, convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
-                "getPropertiesOfLatestVersion");
-
-        try {
-            return convert(port.getPropertiesOfLatestVersion(repositoryId, versionSeriesId, major, filter,
-                    convert(extension)));
-        } catch (CmisException e) {
-            throw convertException(e);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error: " + e.getMessage(), e);
-        } finally {
-            portProvider.endCall(port);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/WebSpherePortProvider.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/WebSpherePortProvider.java
deleted file mode 100644
index c688826..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/WebSpherePortProvider.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
-
-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.soap.MTOMFeature;
-
-import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Element;
-
-/**
- * WebSphere JAX-WS implementation
- */
-public class WebSpherePortProvider extends AbstractPortProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(WebSpherePortProvider.class);
-
-    /**
-     * Creates a port object.
-     */
-    protected BindingProvider createPortObject(CmisServiceHolder serviceHolder) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Creating Web Service port object of " + serviceHolder.getServiceName() + "...");
-        }
-
-        try {
-            // create port object
-            BindingProvider portObject = createPortObjectFromServiceHolder(serviceHolder, new MTOMFeature());
-
-            // add SOAP and HTTP authentication headers
-            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(getSession());
-            Map<String, List<String>> httpHeaders = null;
-            if (authProvider != null) {
-                // SOAP header
-                Element soapHeader = authProvider.getSOAPHeaders(portObject);
-                if (soapHeader != null) {
-                    TransformerFactory transFactory = TransformerFactory.newInstance();
-                    Transformer transformer = transFactory.newTransformer();
-                    StringWriter headerXml = new StringWriter();
-                    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-                    transformer.transform(new DOMSource(soapHeader), new StreamResult(headerXml));
-
-                    Map<QName, List<String>> header = new HashMap<QName, List<String>>();
-                    header.put(new QName(soapHeader.getNamespaceURI(), soapHeader.getLocalName()),
-                            Collections.singletonList(headerXml.toString()));
-                    portObject.getRequestContext().put("jaxws.binding.soap.headers.outbound", header);
-                }
-
-                // HTTP header
-                String url = (serviceHolder.getEndpointUrl() != null ? serviceHolder.getEndpointUrl().toString()
-                        : serviceHolder.getServiceObject().getWSDLDocumentLocation().toString());
-                httpHeaders = authProvider.getHTTPHeaders(url);
-
-                // TODO: set SSL Factory
-
-                // TODO: set Hostname Verifier
-            }
-
-            // set HTTP headers
-            setHTTPHeaders(portObject, httpHeaders);
-
-            // set endpoint URL
-            setEndpointUrl(portObject, serviceHolder.getEndpointUrl());
-
-            // timeouts
-            int connectTimeout = getSession().get(SessionParameter.CONNECT_TIMEOUT, -1);
-            if (connectTimeout >= 0) {
-                portObject.getRequestContext().put("connection_timeout", connectTimeout);
-            }
-
-            int readTimeout = getSession().get(SessionParameter.READ_TIMEOUT, -1);
-            if (readTimeout >= 0) {
-                portObject.getRequestContext().put("request_timeout", readTimeout);
-            }
-
-            return portObject;
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new CmisConnectionException("Cannot initalize Web Services port object: " + e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/site/apt/index.apt b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/site/apt/index.apt
deleted file mode 100644
index 1d51611..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/site/apt/index.apt
+++ /dev/null
@@ -1,53 +0,0 @@
-~~
-~~
-~~ Licensed to the Apache Software Foundation (ASF) under one
-~~ or more contributor license agreements.  See the NOTICE file
-~~ distributed with this work for additional information
-~~ regarding copyright ownership.  The ASF licenses this file
-~~ to you under the Apache License, Version 2.0 (the
-~~ "License"); you may not use this file except in compliance
-~~ with the License.  You may obtain a copy of the License at
-~~
-~~   http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~ Unless required by applicable law or agreed to in writing,
-~~ software distributed under the License is distributed on an
-~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-~~ KIND, either express or implied.  See the License for the
-~~ specific language governing permissions and limitations
-~~ under the License.
-~~
-~~
-
-  -----
-  OpenCMIS Client Binding Layer
-  -----
-
-JUnit Test Parameters
-
-  The provider implementation tests that require a real CMIS repository can be 
-  configured via system properties. These are the properties:
- 
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-|| Property                           || Description                              || Default                                                                      |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test                       | Must be set to true to run tests          | false                                                                         |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.username              | User name                                 | test                                                                          |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.password              | Password                                  | test                                                                          |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.repository            | Repository id of the test repository      | [If not set the first repository returned by getRepositoryInfo will be used.] |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.testfolder            | Root folder for all tests                 | [If not set the the root folder of the test repository will be used.]         |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.documenttype          | Default test document type                | cmis:document                                                                 |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.foldertype            | Default test folder type                  | cmis:folder                                                                   |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.atompub.url           | URL of the CMIS AtomPub service document  | http://localhost:8080/cmis/atom                                               |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.webservices.url       | URL prefix of the CMIS Web Services WSDLs | http://localhost:8080/cmis/services/                                          |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
-| opencmis.test.config                | Absolute path to a properties file that can contain all the parameters above | <none>                                     |
-*-------------------------------------+-------------------------------------------+-------------------------------------------------------------------------------+
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AclMergeTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AclMergeTest.java
deleted file mode 100644
index f13d704..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AclMergeTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.atompub;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-
-/**
- * Test for the ACL merging that is necessary in the AtomPub binding
- * implementation.
- */
-public class AclMergeTest extends TestCase {
-
-    public void testIsACLMergeRequired() {
-        AtomPubService service = new AtomPubService();
-
-        assertFalse(service.publicIsACLMergeRequired(null, null));
-        assertFalse(service.publicIsACLMergeRequired(new AccessControlListImpl(), null));
-        assertFalse(service.publicIsACLMergeRequired(null, new AccessControlListImpl()));
-        assertFalse(service.publicIsACLMergeRequired(new AccessControlListImpl(), new AccessControlListImpl()));
-    }
-
-    public void testAclMerge() {
-        AtomPubService service = new AtomPubService();
-
-        // original
-        Map<String, String[]> originalAceData = new HashMap<String, String[]>();
-
-        originalAceData.put("p1", new String[] { "perm:read", "perm:write", "perm:delete" });
-        originalAceData.put("p2", new String[] { "perm:read" });
-        originalAceData.put("p3", new String[] { "perm:all" });
-
-        Acl originalACEs = createACL(originalAceData);
-
-        // add
-        Map<String, String[]> addAceData = new HashMap<String, String[]>();
-
-        addAceData.put("p2", new String[] { "perm:write" });
-        addAceData.put("p4", new String[] { "perm:all" });
-
-        Acl addACEs = createACL(addAceData);
-
-        // remove
-        Map<String, String[]> removeAceData = new HashMap<String, String[]>();
-
-        removeAceData.put("p1", new String[] { "perm:write" });
-        removeAceData.put("p3", new String[] { "perm:all" });
-
-        Acl removeACEs = createACL(removeAceData);
-
-        Acl newACL = service.publicMergeACLs(originalACEs, addACEs, removeACEs);
-
-        assertEquals(3, newACL.getAces().size());
-
-        for (Ace ace : newACL.getAces()) {
-            String principal = ace.getPrincipal().getId();
-            assertNotNull(principal);
-
-            if (principal.equals("p1")) {
-                assertEquals(2, ace.getPermissions().size());
-                assertTrue(ace.getPermissions().contains("perm:read"));
-                assertTrue(ace.getPermissions().contains("perm:delete"));
-                assertFalse(ace.getPermissions().contains("perm:write"));
-            } else if (principal.equals("p2")) {
-                assertEquals(2, ace.getPermissions().size());
-                assertTrue(ace.getPermissions().contains("perm:read"));
-                assertTrue(ace.getPermissions().contains("perm:write"));
-            } else if (principal.equals("p3")) {
-                fail("Principal should be deleted!");
-            } else if (principal.equals("p4")) {
-                assertEquals(1, ace.getPermissions().size());
-                assertTrue(ace.getPermissions().contains("perm:all"));
-            }
-        }
-    }
-
-    /**
-     * Creates an ACL structure from a Map.
-     */
-    private static Acl createACL(Map<String, String[]> aceData) {
-        AccessControlListImpl result = new AccessControlListImpl();
-
-        List<Ace> aces = new ArrayList<Ace>();
-
-        for (Map.Entry<String, String[]> e : aceData.entrySet()) {
-            ArrayList<String> permissions = new ArrayList<String>();
-
-            for (String s : e.getValue()) {
-                permissions.add(s);
-            }
-
-            AccessControlEntryImpl ace = new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(e.getKey()),
-                    permissions);
-
-            aces.add(ace);
-        }
-
-        result.setAces(aces);
-
-        return result;
-    }
-
-    /**
-     * A class to make a few protected methods publicly available.
-     */
-    private static class AtomPubService extends AbstractAtomPubService {
-        public Acl publicMergeACLs(Acl originalACEs, Acl addACEs, Acl removeACEs) {
-            return mergeAcls(originalACEs, addACEs, removeACEs);
-        }
-
-        public boolean publicIsACLMergeRequired(Acl addACEs, Acl removeACEs) {
-            return isAclMergeRequired(addACEs, removeACEs);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomParserTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomParserTest.java
deleted file mode 100644
index 20be7c6..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomParserTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.atompub;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomEntryWriter;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-
-/**
- * Minimal test for AtomEntryWriter and AtomPubParser.
- */
-public class AtomParserTest extends TestCase {
-
-    private static final byte[] CONTENT = "This is my test content!".getBytes();
-    private static final String CONTENT_TYPE = "text/plain";
-
-    public void testParser() throws Exception {
-        ByteArrayOutputStream bao = new ByteArrayOutputStream();
-
-        // set up an object
-        PropertiesImpl properties = new PropertiesImpl();
-
-        PropertyStringImpl propName = new PropertyStringImpl(PropertyIds.NAME, "TestName");
-        properties.addProperty(propName);
-
-        PropertyIntegerImpl propInt = new PropertyIntegerImpl("IntProp", Arrays.asList(new BigInteger[] {
-                BigInteger.valueOf(1), BigInteger.valueOf(2), BigInteger.valueOf(3) }));
-        properties.addProperty(propInt);
-
-        PropertyDecimalImpl propDec = new PropertyDecimalImpl("DecProp", new BigDecimal(
-                "3.14159253589793238462643383279502884197"
-                        + "169399375105820974944592307816406286208998628034825342117067982148086513"));
-        properties.addProperty(propDec);
-
-        ObjectDataImpl object1 = new ObjectDataImpl();
-        object1.setProperties(properties);
-
-        // write the entry
-        ContentStream contentStream = new ContentStreamImpl(null, BigInteger.valueOf(CONTENT.length), CONTENT_TYPE,
-                new ByteArrayInputStream(CONTENT));
-        AtomEntryWriter aew = new AtomEntryWriter(object1, CmisVersion.CMIS_1_1, contentStream);
-        aew.write(bao);
-
-        byte[] entryContent = bao.toByteArray();
-        assertTrue(entryContent.length > 0);
-
-        // parse it
-        AtomPubParser parser = new AtomPubParser(new ByteArrayInputStream(entryContent));
-        parser.parse();
-        AtomBase parseResult = parser.getResults();
-
-        assertTrue(parseResult instanceof AtomEntry);
-        AtomEntry entry = (AtomEntry) parseResult;
-
-        assertNotNull(entry);
-        assertFalse(entry.getElements().isEmpty());
-
-        // find the object
-        ObjectData object2 = null;
-        for (AtomElement element : entry.getElements()) {
-            if (element.getObject() instanceof ObjectData) {
-                assertNull(object2);
-                object2 = (ObjectData) element.getObject();
-            }
-        }
-
-        assertNotNull(object2);
-        assertNotNull(object2.getProperties());
-
-        // compare properties
-        for (PropertyData<?> property1 : object1.getProperties().getPropertyList()) {
-            PropertyData<?> property2 = object2.getProperties().getProperties().get(property1.getId());
-
-            assertNotNull(property2);
-            assertEquals(property1, property2);
-        }
-    }
-
-    protected void assertEquals(PropertyData<?> expected, PropertyData<?> actual) throws Exception {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null || actual == null) {
-            fail("Property is null!");
-        }
-
-        assertEquals(expected.getId(), actual.getId());
-        assertSame(expected.getClass(), actual.getClass());
-
-        List<?> values1 = expected.getValues();
-        assertNotNull(values1);
-        assertFalse(values1.isEmpty());
-
-        List<?> values2 = actual.getValues();
-        assertNotNull(values2);
-        assertFalse(values2.isEmpty());
-
-        assertEquals(values1.size(), values2.size());
-
-        for (int i = 0; i < values1.size(); i++) {
-            assertEquals(values1.get(i), values2.get(i));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomPubTestBindingFactory.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomPubTestBindingFactory.java
deleted file mode 100644
index b20fbd3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomPubTestBindingFactory.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.atompub;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-public class AtomPubTestBindingFactory {
-    
-    private AtomPubTestBindingFactory() {
-    }
-
-    public static CmisBinding createBinding(String atomPubUrl, String user, String password) {
-        // gather parameters
-        Map<String, String> parameters = new HashMap<String, String>();
-        parameters.put(SessionParameter.USER, user);
-        parameters.put(SessionParameter.PASSWORD, password);
-
-        parameters.put(SessionParameter.ATOMPUB_URL, atomPubUrl);
-
-        // get factory and create provider
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisAtomPubBinding(parameters);
-
-        return binding;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadOnlyTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadOnlyTests.java
deleted file mode 100644
index a0cd829..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadOnlyTests.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.atompub;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.bindings.framework.AbstractSimpleReadOnlyTests;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- * 
- */
-public class SimpleReadOnlyTests extends AbstractSimpleReadOnlyTests {
-
-    private final Set<String> fTests;
-
-    public SimpleReadOnlyTests() {
-        fTests = new HashSet<String>();
-        fTests.add(TEST_REPOSITORY_INFO);
-        fTests.add(TEST_TYPES);
-        fTests.add(TEST_NAVIGATION);
-        fTests.add(TEST_CONTENT_STREAM);
-        fTests.add(TEST_QUERY);
-        fTests.add(TEST_CHECKEDOUT);
-        fTests.add(TEST_CONTENT_CHANGES);
-    }
-
-    @Override
-    protected CmisBinding createBinding() {
-        // Add the default Java cookie manager from Java 1.6 to optimize
-        // authentication
-        // by reusing the common case where a token is stored in a cookie.
-        // Note: Enable cookie management requires Java 1.6, uncomment the
-        // following two lines to
-        // enable cookie management for the tests.
-        // java.net.CookieManager cm = new java.net.CookieManager(null,
-        // CookiePolicy.ACCEPT_ALL);
-        // java.net.CookieHandler.setDefault(cm);
-
-        return AtomPubTestBindingFactory.createBinding(getAtomPubURL(), getUsername(), getPassword());
-    }
-
-    @Override
-    protected Set<String> getEnabledTests() {
-        return fTests;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadWriteTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadWriteTests.java
deleted file mode 100644
index 6772b3e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadWriteTests.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.atompub;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.bindings.framework.AbstractSimpleReadWriteTests;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- */
-public class SimpleReadWriteTests extends AbstractSimpleReadWriteTests {
-
-    private final Set<String> fTests;
-
-    public SimpleReadWriteTests() {
-        fTests = new HashSet<String>();
-        fTests.add(TEST_CREATE_FOLDER);
-        fTests.add(TEST_CREATE_DOCUMENT);
-        fTests.add(TEST_SET_AND_DELETE_CONTENT);
-        fTests.add(TEST_UPDATE_PROPERTIES);
-        fTests.add(TEST_DELETE_TREE);
-        fTests.add(TEST_MOVE_OBJECT);
-        // fTests.add(TEST_COPY_OBJECT);
-        fTests.add(TEST_VERSIONING);
-    }
-
-    @Override
-    protected CmisBinding createBinding() {
-        // Add the default Java cookie manager from Java 1.6 to optimize
-        // authentication
-        // by reusing the common case where a token is stored in a cookie.
-        // Note: Enable cookie management requires Java 1.6, uncomment the
-        // following two lines to
-        // enable cookie management for the tests.
-        // java.net.CookieManager cm = new java.net.CookieManager(null,
-        // CookiePolicy.ACCEPT_ALL);
-        // java.net.CookieHandler.setDefault(cm);
-
-        return AtomPubTestBindingFactory.createBinding(getAtomPubURL(), getUsername(), getPassword());
-    }
-
-    @Override
-    protected Set<String> getEnabledTests() {
-        return fTests;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheTest.java
deleted file mode 100644
index 8f9703f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.cache;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.ContentTypeCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;
-import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
-
-/**
- * Tests the cache implementation.
- */
-public class CacheTest extends TestCase {
-
-    public static final String MAP_CACHE_LEVEL = "org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl";
-    public static final String LRU_CACHE_LEVEL = "org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl";
-
-    public void testCache() {
-        Cache cache;
-
-        cache = new CacheImpl();
-        cache.initialize(new String[] { MAP_CACHE_LEVEL, LRU_CACHE_LEVEL, MAP_CACHE_LEVEL, MAP_CACHE_LEVEL });
-
-        String value1 = "value1";
-        String value2 = "value2";
-        String value3 = "value3";
-        Object valueObj;
-
-        // put and get
-        cache.put(value1, "l1", "l2a", "l3", "l4");
-        cache.put(value2, "l1", "l2b", "l3", "l4");
-        cache.put(value3, "l1", "l2c", "l3", "l4");
-
-        valueObj = cache.get("l1", "l2a", "l3", "l4");
-        assertTrue(valueObj instanceof String);
-        assertSame(value1, valueObj);
-
-        valueObj = cache.get("l1", "l2b", "l3", "l4");
-        assertTrue(valueObj instanceof String);
-        assertSame(value2, valueObj);
-
-        valueObj = cache.get("l1", "l2c", "l3", "l4");
-        assertTrue(valueObj instanceof String);
-        assertSame(value3, valueObj);
-
-        // remove leaf
-        cache.remove("l1", "l2", "l3", "l4");
-        valueObj = cache.get("l1", "l2", "l3", "l4");
-        assertNull(valueObj);
-
-        // put and get
-        cache.put(value1, "l1", "l2", "l3", "l4");
-        valueObj = cache.get("l1", "l2", "l3", "l4");
-        assertTrue(valueObj instanceof String);
-        assertSame(value1, valueObj);
-
-        // remove branch
-        cache.remove("l1", "l2");
-        valueObj = cache.get("l1", "l2", "l3", "l4");
-        assertNull(valueObj);
-    }
-
-    public void testCacheBadUsage() {
-        Cache cache;
-
-        cache = new CacheImpl();
-        cache.initialize(new String[] { MAP_CACHE_LEVEL, LRU_CACHE_LEVEL, MAP_CACHE_LEVEL, MAP_CACHE_LEVEL });
-
-        // insufficient number of keys
-        try {
-            cache.put("value", "l1", "l2", "l3");
-        } catch (IllegalArgumentException e) {
-        }
-
-        // too many number of keys
-        try {
-            cache.put("value", "l1", "l2", "l3", "l4", "l5");
-        } catch (IllegalArgumentException e) {
-        }
-
-        // no keys
-        assertNull(cache.get((String[]) null));
-    }
-
-    public void testCacheConfig() {
-        Cache cache;
-
-        // empty config
-        try {
-            cache = new CacheImpl();
-            cache.initialize(new String[] {});
-        } catch (IllegalArgumentException e) {
-        }
-
-        // null config
-        try {
-            cache = new CacheImpl();
-            cache.initialize(null);
-        } catch (IllegalArgumentException e) {
-        }
-
-        // unknown class
-        try {
-            cache = new CacheImpl();
-            cache.initialize(new String[] { "this.is.not.a.valid.class" });
-        } catch (IllegalArgumentException e) {
-        }
-
-        // not a CacheLevel class
-        try {
-            cache = new CacheImpl();
-            cache.initialize(new String[] { "org.apache.chemistry.opencmis.client.provider.cache.CacheTest" });
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testMapCache() {
-        Cache cache;
-
-        cache = new CacheImpl();
-        cache.initialize(new String[] { MAP_CACHE_LEVEL + " " + MapCacheLevelImpl.CAPACITY + "=10,"
-                + MapCacheLevelImpl.LOAD_FACTOR + "=0.5" });
-
-        for (int i = 0; i < 100; i++) {
-            cache.put("value" + i, "key" + i);
-        }
-
-        for (int i = 0; i < 100; i++) {
-            Object valueObj = cache.get("key" + i);
-            assertTrue(valueObj instanceof String);
-            assertEquals("value" + i, valueObj);
-        }
-    }
-
-    public void testURLCache() {
-        Cache cache;
-
-        cache = new CacheImpl();
-        cache.initialize(new String[] { LRU_CACHE_LEVEL + " " + LruCacheLevelImpl.MAX_ENTRIES + "=10" });
-
-        for (int i = 0; i < 100; i++) {
-            cache.put("value" + i, "key" + i);
-        }
-
-        for (int i = 0; i < 90; i++) {
-            Object valueObj = cache.get("key" + i);
-            assertNull(valueObj);
-        }
-
-        for (int i = 90; i < 100; i++) {
-            Object valueObj = cache.get("key" + i);
-            assertTrue(valueObj instanceof String);
-            assertEquals("value" + i, valueObj);
-        }
-    }
-
-    public void XtestFallback() {
-        Cache cache;
-
-        cache = new CacheImpl();
-        cache.initialize(new String[] { MAP_CACHE_LEVEL + " " + MapCacheLevelImpl.CAPACITY + "=10,"
-                + MapCacheLevelImpl.LOAD_FACTOR + "=0.5" });
-
-        cache.put("value1", new String[] { null });
-        cache.put("value2", "key2");
-
-        assertEquals("value1", cache.get(new String[] { null }));
-        assertEquals("value2", cache.get("key2"));
-        assertEquals("value1", cache.get("key3"));
-    }
-
-    public void testContentTypeCache() {
-        ContentTypeCacheLevelImpl cl = new ContentTypeCacheLevelImpl();
-        cl.initialize(null);
-
-        String type1 = "type1";
-
-        cl.put(type1, "text/plain; param1=test; charset=UTF-8");
-
-        assertEquals(type1, cl.get("text/plain; param1=test; charset=UTF-8"));
-        assertEquals(type1, cl.get("text/plain; param1=test; charset=utf-8"));
-        assertEquals(type1, cl.get("text/plain; charset=utf-8; param1=test"));
-        assertEquals(type1, cl.get("text/plain; charset=utf-8; param1=test;"));
-        assertEquals(type1, cl.get("text/plain;charset=utf-8;param1=test"));
-        assertEquals(type1, cl.get("text/plain;\tcharset=utf-8;     param1=test"));
-        assertEquals(type1, cl.get("text/plain; charset=\"utf-8\"; param1=test;"));
-
-        assertNull(cl.get("text/plain; param1=blah; charset=UTF-8"));
-        assertNull(cl.get("text/plain; param1=test; charset=us-ascii"));
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java
deleted file mode 100644
index 54b95e8..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.framework;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Base test case for CMIS tests.
-  */
-public abstract class AbstractCmisTestCase extends TestCase {
-
-    public static final String DEFAULT_TESTS_ENABLED = "true";
-    public static final String DEFAULT_USERNAME = "admin";
-    public static final String DEFAULT_PASSWORD = "admin";
-    public static final String DEFAULT_ATOMPUB_URL = "http://localhost:8080/chemistry-opencmis-server-jcr/atom";
-    public static final String DEFAULT_WEBSERVICES_URLPREFIX = "http://localhost:8080/cmis/services/";
-    public static final String DEFAULT_DOCTYPE = "cmis:document";
-    public static final String DEFAULT_FOLDERTYPE = "cmis:folder";
-
-    public static final String PROP_TESTS_ENABLED = "opencmis.test";
-    public static final String PROP_USERNAME = "opencmis.test.username";
-    public static final String PROP_PASSWORD = "opencmis.test.password";
-    public static final String PROP_REPOSITORY = "opencmis.test.repository";
-    public static final String PROP_TESTFOLDER = "opencmis.test.testfolder";
-    public static final String PROP_DOCTYPE = "opencmis.test.documenttype";
-    public static final String PROP_FOLDERTYPE = "opencmis.test.foldertype";
-    public static final String PROP_CONFIG_FILE = "opencmis.test.config";
-
-    public static final String PROP_ATOMPUB_URL = "opencmis.test.atompub.url";
-    public static final String PROP_WEBSERVICES_URLPREFIX = "opencmis.test.webservices.url";
-
-    private CmisBinding binding;
-    private String fTestRepositoryId;
-    private String fTestFolderId;
-
-    private static final Logger log = LoggerFactory.getLogger(AbstractCmisTestCase.class);
-
-    /**
-     * Read configuration file.
-     */
-    static {
-        String configFileName = System.getProperty(PROP_CONFIG_FILE);
-        if (configFileName != null) {
-
-            try {
-                java.util.Properties properties = new java.util.Properties();
-                properties.load(new FileInputStream(configFileName));
-
-                for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
-                    String key = (String) e.nextElement();
-                    String value = properties.getProperty(key);
-                    System.setProperty(key, value);
-                }
-            } catch (Exception e) {
-                System.err.println("Could not load test properties: " + e.toString());
-            }
-        }
-    }
-
-    /**
-     * Returns the binding object or creates one if does not exist.
-     */
-    protected CmisBinding getBinding() {
-        if (binding == null) {
-            log.info("Creating binding...");
-            binding = createBinding();
-        }
-
-        return binding;
-    }
-
-    /**
-     * Creates a binding object.
-     */
-    protected abstract CmisBinding createBinding();
-
-    /**
-     * Returns a set of test names that enabled.
-     */
-    protected abstract Set<String> getEnabledTests();
-
-    /**
-     * Returns the test repository id.
-     */
-    protected String getTestRepositoryId() {
-        if (fTestRepositoryId != null) {
-            return fTestRepositoryId;
-        }
-
-        fTestRepositoryId = System.getProperty(PROP_REPOSITORY);
-        if (fTestRepositoryId != null) {
-            log.info("Test repository: " + fTestRepositoryId);
-            return fTestRepositoryId;
-        }
-
-        fTestRepositoryId = getFirstRepositoryId();
-        log.info("Test repository: " + fTestRepositoryId);
-
-        return fTestRepositoryId;
-    }
-
-    /**
-     * Returns the test root folder id.
-     */
-    protected String getTestRootFolder() {
-        if (fTestFolderId != null) {
-            return fTestFolderId;
-        }
-
-        fTestFolderId = System.getProperty(PROP_TESTFOLDER);
-        if (fTestFolderId != null) {
-            log.info("Test root folder: " + fTestFolderId);
-            return fTestFolderId;
-        }
-
-        fTestFolderId = getRootFolderId();
-        log.info("Test root folder: " + fTestFolderId);
-
-        return fTestFolderId;
-    }
-
-    /**
-     * Returns if the test is enabled.
-     */
-    protected boolean isEnabled(String name) {
-        boolean testsEnabled = Boolean.parseBoolean(System.getProperty(PROP_TESTS_ENABLED, DEFAULT_TESTS_ENABLED));
-
-        if (testsEnabled && getEnabledTests().contains(name)) {
-            return true;
-        }
-
-        log.info("Skipping test '" + name + "'!");
-
-        return false;
-    }
-
-    /**
-     * Returns the test username.
-     */
-    protected String getUsername() {
-        return System.getProperty(PROP_USERNAME, DEFAULT_USERNAME);
-    }
-
-    /**
-     * Returns the test password.
-     */
-    protected String getPassword() {
-        return System.getProperty(PROP_PASSWORD, DEFAULT_PASSWORD);
-    }
-
-    /**
-     * Returns the default document type.
-     */
-    protected String getDefaultDocumentType() {
-        return System.getProperty(PROP_DOCTYPE, DEFAULT_DOCTYPE);
-    }
-
-    /**
-     * Returns the default folder type.
-     */
-    protected String getDefaultFolderType() {
-        return System.getProperty(PROP_FOLDERTYPE, DEFAULT_FOLDERTYPE);
-    }
-
-    /**
-     * Returns the AtomPub URL.
-     */
-    protected String getAtomPubURL() {
-        return System.getProperty(PROP_ATOMPUB_URL, DEFAULT_ATOMPUB_URL);
-    }
-
-    /**
-     * Returns the Web Services URL prefix.
-     */
-    protected String getWebServicesURL() {
-        return System.getProperty(PROP_WEBSERVICES_URLPREFIX, DEFAULT_WEBSERVICES_URLPREFIX);
-    }
-
-    /**
-     * Returns the object factory.
-     */
-    protected BindingsObjectFactory getObjectFactory() {
-        return getBinding().getObjectFactory();
-    }
-
-    /**
-     * Returns the id of the first repository.
-     */
-    protected String getFirstRepositoryId() {
-        List<RepositoryInfo> repositories = getBinding().getRepositoryService().getRepositoryInfos(null);
-
-        assertNotNull(repositories);
-        assertFalse(repositories.isEmpty());
-        assertNotNull(repositories.get(0).getId());
-
-        return repositories.get(0).getId();
-    }
-
-    /**
-     * Returns the info object of the test repository.
-     */
-    protected RepositoryInfo getRepositoryInfo() {
-        RepositoryInfo repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(getTestRepositoryId(),
-                null);
-
-        assertNotNull(repositoryInfo);
-        assertNotNull(repositoryInfo.getId());
-        assertEquals(getTestRepositoryId(), repositoryInfo.getId());
-
-        return repositoryInfo;
-    }
-
-    /**
-     * Returns the root folder of the test repository.
-     */
-    protected String getRootFolderId() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getRootFolderId());
-
-        return repository.getRootFolderId();
-    }
-
-    /**
-     * Returns if the test repository supports reading ACLs.
-     */
-    protected boolean supportsDiscoverACLs() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        return repository.getCapabilities().getAclCapability() != CapabilityAcl.NONE;
-    }
-
-    /**
-     * Returns if the test repository supports setting ACLs.
-     */
-    protected boolean supportsManageACLs() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        return repository.getCapabilities().getAclCapability() == CapabilityAcl.MANAGE;
-    }
-
-    /**
-     * Returns if the test repository supports renditions.
-     */
-    protected boolean supportsRenditions() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getCapabilities().getRenditionsCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getRenditionsCapability() != CapabilityRenditions.NONE;
-    }
-
-    /**
-     * Returns if the test repository supports descendants.
-     */
-    protected boolean supportsDescendants() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getCapabilities().isGetDescendantsSupported() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().isGetDescendantsSupported();
-    }
-
-    /**
-     * Returns if the test repository supports descendants.
-     */
-    protected boolean supportsFolderTree() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getCapabilities().isGetFolderTreeSupported() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().isGetFolderTreeSupported();
-    }
-
-    /**
-     * Returns if the test repository supports content changes.
-     */
-    protected boolean supportsContentChanges() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getCapabilities().getChangesCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE;
-    }
-
-    /**
-     * Returns if the test repository supports query.
-     */
-    protected boolean supportsQuery() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getCapabilities().getQueryCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getQueryCapability() != CapabilityQuery.NONE;
-    }
-
-    /**
-     * Returns if the test repository supports relationships.
-     */
-    protected boolean supportsRelationships() {
-        TypeDefinition relType = null;
-
-        try {
-            relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:relationship",
-                    null);
-        } catch (CmisObjectNotFoundException e) {
-            return false;
-        }
-
-        return relType != null;
-    }
-
-    /**
-     * Returns if the test repository supports policies.
-     */
-    protected boolean supportsPolicies() {
-        TypeDefinition relType = null;
-
-        try {
-            relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:policy", null);
-        } catch (CmisObjectNotFoundException e) {
-            return false;
-        }
-
-        return relType != null;
-    }
-
-    /**
-     * Returns the AclPropagation from the ACL capabilities.
-     */
-    protected AclPropagation getAclPropagation() {
-        RepositoryInfo repository = getRepositoryInfo();
-
-        assertNotNull(repository.getCapabilities());
-
-        if (repository.getAclCapabilities().getAclPropagation() == null) {
-            return AclPropagation.REPOSITORYDETERMINED;
-        }
-
-        return repository.getAclCapabilities().getAclPropagation();
-    }
-
-    // ---- helpers ----
-
-    /**
-     * Prints a warning.
-     */
-    protected void warning(String message) {
-        System.out.println("**** " + message);
-    }
-
-    /**
-     * Creates a ContentStreamData object from a byte array.
-     */
-    protected ContentStream createContentStreamData(String mimeType, byte[] content) {
-        assertNotNull(content);
-
-        return getObjectFactory().createContentStream("test", BigInteger.valueOf(content.length), mimeType,
-                new ByteArrayInputStream(content));
-    }
-
-    /**
-     * Extracts the path from a folder object.
-     */
-    protected String getPath(ObjectData folderObject) {
-        assertNotNull(folderObject);
-        assertNotNull(folderObject.getProperties());
-        assertNotNull(folderObject.getProperties().getProperties());
-        assertTrue(folderObject.getProperties().getProperties().get(PropertyIds.PATH) instanceof PropertyString);
-
-        PropertyString pathProperty = (PropertyString) folderObject.getProperties().getProperties()
-                .get(PropertyIds.PATH);
-
-        assertNotNull(pathProperty.getValues());
-        assertEquals(1, pathProperty.getValues().size());
-        assertNotNull(pathProperty.getValues().get(0));
-
-        return pathProperty.getValues().get(0);
-    }
-
-    // ---- short cuts ----
-
-    /**
-     * Retrieves an object.
-     */
-    protected ObjectData getObject(String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-        ObjectData object = getBinding().getObjectService()
-                .getObject(getTestRepositoryId(), objectId, filter, includeAllowableActions, includeRelationships,
-                        renditionFilter, includePolicyIds, includeACL, extension);
-
-        assertNotNull(object);
-
-        return object;
-    }
-
-    /**
-     * Retrieves a full blown object.
-     */
-    protected ObjectData getObject(String objectId) {
-        ObjectData object = getObject(objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-                Boolean.TRUE, null);
-
-        assertBasicProperties(object.getProperties());
-
-        return object;
-    }
-
-    /**
-     * Retrieves an object by path.
-     */
-    protected ObjectData getObjectByPath(String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeACL, ExtensionsData extension) {
-        ObjectData object = getBinding().getObjectService()
-                .getObjectByPath(getTestRepositoryId(), path, filter, includeAllowableActions, includeRelationships,
-                        renditionFilter, includePolicyIds, includeACL, extension);
-
-        assertNotNull(object);
-
-        return object;
-    }
-
-    /**
-     * Retrieves a full blown object by path.
-     */
-    protected ObjectData getObjectByPath(String path) {
-        ObjectData object = getObjectByPath(path, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-                Boolean.TRUE, null);
-
-        assertBasicProperties(object.getProperties());
-
-        return object;
-    }
-
-    /**
-     * Returns <code>true</code> if the object with the given id exists,
-     * <code>false</code> otherwise.
-     */
-    protected boolean existsObject(String objectId) {
-        try {
-            ObjectData object = getObject(objectId, PropertyIds.OBJECT_ID, Boolean.FALSE, IncludeRelationships.NONE,
-                    null, Boolean.FALSE, Boolean.FALSE, null);
-
-            assertNotNull(object);
-            assertNotNull(object.getId());
-        } catch (CmisObjectNotFoundException e) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns the child of a folder.
-     */
-    protected ObjectInFolderData getChild(String folderId, String objectId) {
-        boolean hasMore = true;
-
-        while (hasMore) {
-            ObjectInFolderList children = getBinding().getNavigationService().getChildren(getTestRepositoryId(),
-                    folderId, "*", null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE, null, null, null);
-
-            assertNotNull(children);
-            assertTrue(isNotEmpty(children.getObjects()));
-
-            hasMore = (children.hasMoreItems() == null ? false : children.hasMoreItems().booleanValue());
-
-            for (ObjectInFolderData object : children.getObjects()) {
-                assertNotNull(object);
-                assertNotNull(object.getPathSegment());
-                assertNotNull(object.getObject());
-                assertNotNull(object.getObject().getId());
-
-                assertBasicProperties(object.getObject().getProperties());
-
-                if (object.getObject().getId().equals(objectId)) {
-                    return object;
-                }
-            }
-        }
-
-        fail("Child not found!");
-
-        return null;
-    }
-
-    /**
-     * Gets the version series id of an object.
-     */
-    protected String getVersionSeriesId(ObjectData object) {
-        PropertyData<?> versionSeriesId = object.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID);
-        assertNotNull(versionSeriesId);
-        assertTrue(versionSeriesId instanceof PropertyId);
-
-        return ((PropertyId) versionSeriesId).getFirstValue();
-    }
-
-    /**
-     * Gets the version series id of an object.
-     */
-    protected String getVersionSeriesId(String docId) {
-        return getVersionSeriesId(getObject(docId));
-    }
-
-    /**
-     * Creates a folder.
-     */
-    protected String createFolder(Properties properties, String folderId, List<String> policies, Acl addACEs,
-            Acl removeACEs) {
-        String objectId = getBinding().getObjectService().createFolder(getTestRepositoryId(), properties, folderId,
-                policies, addACEs, removeACEs, null);
-        assertNotNull(objectId);
-        assertTrue(existsObject(objectId));
-
-        ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-        // check canGetProperties
-        assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
-
-        // check name
-        PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-        if (nameProp != null) {
-            assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-                    nameProp.getFirstValue());
-        }
-
-        // check object type
-        PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        assertNotNull(typeProp);
-        assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
-                typeProp.getFirstValue());
-
-        // check parent
-        ObjectData parent = getBinding().getNavigationService().getFolderParent(getTestRepositoryId(), objectId, null,
-                null);
-        assertNotNull(parent);
-        assertNotNull(parent.getProperties());
-        assertNotNull(parent.getProperties().getProperties());
-        assertNotNull(parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-        assertEquals(folderId, parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue());
-
-        return objectId;
-    }
-
-    /**
-     * Creates a folder with the default type.
-     */
-    protected String createDefaultFolder(String folderId, String name) {
-        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
-        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultFolderType()));
-
-        Properties properties = getObjectFactory().createPropertiesData(propList);
-
-        return createFolder(properties, folderId, null, null, null);
-    }
-
-    /**
-     * Creates a document.
-     */
-    protected String createDocument(Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
-        String objectId = getBinding().getObjectService().createDocument(getTestRepositoryId(), properties, folderId,
-                contentStream, versioningState, policies, addACEs, removeACEs, null);
-        assertNotNull(objectId);
-        assertTrue(existsObject(objectId));
-
-        if (folderId != null) {
-            ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-            // check canGetProperties
-            assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
-
-            // check canGetContentStream
-            if (contentStream != null) {
-                assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_CONTENT_STREAM,
-                        true);
-            }
-
-            // check name
-            PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-            if (nameProp != null) {
-                assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-                        nameProp.getFirstValue());
-            }
-
-            // check object type
-            PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-            assertNotNull(typeProp);
-            assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
-                    typeProp.getFirstValue());
-
-            // check parent
-            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-                    getTestRepositoryId(), objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-                    null);
-            assertNotNull(parents);
-            assertEquals(1, parents.size());
-
-            ObjectParentData parent = parents.get(0);
-            assertNotNull(parent);
-            assertNotNull(parent.getRelativePathSegment());
-            assertNotNull(parent.getObject());
-            assertNotNull(parent.getObject().getProperties().getProperties());
-            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-            assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
-                    .getFirstValue());
-
-            // get document by path (check relative path segment)
-            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.PATH));
-            String parentPath = parent.getObject().getProperties().getProperties().get(PropertyIds.PATH)
-                    .getFirstValue().toString();
-
-            ObjectData docByPath = getObjectByPath((parentPath.equals("/") ? "" : parentPath) + "/"
-                    + folderChild.getPathSegment());
-
-            PropertyData<?> idProp = docByPath.getProperties().getProperties().get(PropertyIds.OBJECT_ID);
-            assertNotNull(idProp);
-            assertEquals(objectId, idProp.getFirstValue());
-        } else {
-            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-                    getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-                    null);
-            assertNotNull(parents);
-            assertEquals(0, parents.size());
-        }
-
-        return objectId;
-    }
-
-    /**
-     * Creates a document with the default type.
-     */
-    protected String createDefaultDocument(String folderId, String name, String contentType, byte[] content) {
-        VersioningState vs = (isVersionable(getDefaultDocumentType()) ? VersioningState.MAJOR : VersioningState.NONE);
-
-        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
-        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultDocumentType()));
-
-        Properties properties = getObjectFactory().createPropertiesData(propList);
-
-        ContentStream contentStream = createContentStreamData(contentType, content);
-
-        return createDocument(properties, folderId, contentStream, vs, null, null, null);
-    }
-
-    /**
-     * Creates a document from source.
-     */
-    protected String createDocumentFromSource(String sourceId, Properties properties, String folderId,
-            VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
-        String objectId = getBinding().getObjectService().createDocumentFromSource(getTestRepositoryId(), sourceId,
-                properties, folderId, versioningState, policies, addACEs, removeACEs, null);
-        assertNotNull(objectId);
-        assertTrue(existsObject(objectId));
-
-        if (folderId != null) {
-            ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-            // check name
-            PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-            if (nameProp != null) {
-                assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-                        nameProp.getValues().get(0));
-            }
-
-            // check parent
-            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-                    getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-                    null);
-            assertNotNull(parents);
-            assertEquals(1, parents.size());
-
-            ObjectParentData parent = parents.get(0);
-            assertNotNull(parent);
-            assertNotNull(parent.getRelativePathSegment());
-            assertNotNull(parent.getObject());
-            assertNotNull(parent.getObject().getProperties().getProperties());
-            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-            assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
-                    .getFirstValue());
-        }
-
-        return objectId;
-    }
-
-    /**
-     * Deletes an object.
-     */
-    protected void delete(String objectId, boolean allVersions) {
-        getBinding().getObjectService().deleteObject(getTestRepositoryId(), objectId, allVersions, null);
-        assertFalse(existsObject(objectId));
-    }
-
-    /**
-     * Deletes a tree.
-     */
-    protected void deleteTree(String folderId) {
-        getBinding().getObjectService().deleteTree(getTestRepositoryId(), folderId, Boolean.TRUE, UnfileObject.DELETE,
-                Boolean.TRUE, null);
-        assertFalse(existsObject(folderId));
-    }
-
-    /**
-     * Gets a content stream.
-     */
-    protected ContentStream getContent(String objectId, String streamId) {
-        ContentStream contentStream = getBinding().getObjectService().getContentStream(getTestRepositoryId(), objectId,
-                streamId, null, null, null);
-        assertNotNull(contentStream);
-        assertNotNull(contentStream.getMimeType());
-        assertNotNull(contentStream.getStream());
-
-        return contentStream;
-    }
-
-    /**
-     * Reads the content from a content stream into a byte array.
-     */
-    protected byte[] readContent(ContentStream contentStream) throws Exception {
-        assertNotNull(contentStream);
-        assertNotNull(contentStream.getStream());
-
-        InputStream stream = contentStream.getStream();
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        IOUtils.copy(stream, baos);
-
-        return baos.toByteArray();
-    }
-
-    /**
-     * Returns a type definition.
-     */
-    protected TypeDefinition getTypeDefinition(String typeName) {
-        TypeDefinition typeDef = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), typeName,
-                null);
-
-        assertNotNull(typeDef);
-        assertNotNull(typeDef.getId());
-
-        return typeDef;
-    }
-
-    /**
-     * Returns if the type is versionable.
-     */
-    protected boolean isVersionable(String typeName) {
-        TypeDefinition type = getTypeDefinition(typeName);
-
-        assertTrue(type instanceof DocumentTypeDefinition);
-
-        Boolean isVersionable = ((DocumentTypeDefinition) type).isVersionable();
-        assertNotNull(isVersionable);
-
-        return isVersionable;
-    }
-
-    // ---- asserts ----
-
-    protected void assertEquals(TypeDefinition expected, TypeDefinition actual, boolean checkPropertyDefintions) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected type definition is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual type definition is null!");
-        }
-
-        assertEquals("TypeDefinition id:", expected.getId(), actual.getId());
-        assertEquals("TypeDefinition local name:", expected.getLocalName(), actual.getLocalName());
-        assertEquals("TypeDefinition local namespace:", expected.getLocalNamespace(), actual.getLocalNamespace());
-        assertEquals("TypeDefinition display name:", expected.getDisplayName(), actual.getDisplayName());
-        assertEquals("TypeDefinition description:", expected.getDescription(), actual.getDescription());
-        assertEquals("TypeDefinition query name:", expected.getQueryName(), actual.getQueryName());
-        assertEquals("TypeDefinition parent id:", expected.getParentTypeId(), actual.getParentTypeId());
-        assertEquals("TypeDefinition base id:", expected.getBaseTypeId(), actual.getBaseTypeId());
-
-        if (!checkPropertyDefintions) {
-            return;
-        }
-
-        if (expected.getPropertyDefinitions() == null && actual.getPropertyDefinitions() == null) {
-            return;
-        }
-
-        if (expected.getPropertyDefinitions() == null) {
-            fail("Expected property definition list is null!");
-        }
-
-        if (actual.getPropertyDefinitions() == null) {
-            fail("Actual property definition list is null!");
-        }
-
-        assertEquals(expected.getPropertyDefinitions().size(), actual.getPropertyDefinitions().size());
-
-        for (PropertyDefinition<?> expectedPropDef : expected.getPropertyDefinitions().values()) {
-            PropertyDefinition<?> actualPropDef = actual.getPropertyDefinitions().get(expectedPropDef.getId());
-
-            assertEquals(expectedPropDef, actualPropDef);
-        }
-    }
-
-    protected void assertEquals(PropertyDefinition<?> expected, PropertyDefinition<?> actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected property definition is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual property definition is null!");
-        }
-
-        assertNotNull(expected.getId());
-        assertNotNull(actual.getId());
-
-        String id = expected.getId();
-
-        assertEquals("PropertyDefinition " + id + " id:", expected.getId(), actual.getId());
-        assertEquals("PropertyDefinition " + id + " local name:", expected.getLocalName(), actual.getLocalName());
-        assertEquals("PropertyDefinition " + id + " local namespace:", expected.getLocalNamespace(),
-                actual.getLocalNamespace());
-        assertEquals("PropertyDefinition " + id + " query name:", expected.getQueryName(), actual.getQueryName());
-        assertEquals("PropertyDefinition " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
-        assertEquals("PropertyDefinition " + id + " description:", expected.getDescription(), actual.getDescription());
-        assertEquals("PropertyDefinition " + id + " property type:", expected.getPropertyType(),
-                actual.getPropertyType());
-        assertEquals("PropertyDefinition " + id + " cardinality:", expected.getCardinality(), actual.getCardinality());
-        assertEquals("PropertyDefinition " + id + " updatability:", expected.getUpdatability(),
-                actual.getUpdatability());
-    }
-
-    protected void assertEquals(Properties expected, Properties actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected properties data is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual properties data is null!");
-        }
-
-        if (expected.getProperties() == null && actual.getProperties() == null) {
-            return;
-        }
-
-        if (expected.getProperties() == null || actual.getProperties() == null) {
-            fail("Properties are null!");
-        }
-
-        if (expected.getProperties() == null) {
-            fail("Expected properties are null!");
-        }
-
-        if (actual.getProperties() == null) {
-            fail("Actual properties are null!");
-        }
-
-        assertEquals(expected.getProperties().size(), actual.getProperties().size());
-
-        for (String id : expected.getProperties().keySet()) {
-            PropertyData<?> expectedProperty = expected.getProperties().get(id);
-            assertNotNull(expectedProperty);
-            assertEquals(id, expectedProperty.getId());
-
-            PropertyData<?> actualProperty = actual.getProperties().get(id);
-            assertNotNull(actualProperty);
-            assertEquals(id, actualProperty.getId());
-
-            assertEquals(expectedProperty, actualProperty);
-        }
-    }
-
-    protected void assertEquals(PropertyData<?> expected, PropertyData<?> actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null || actual == null) {
-            fail("Properties data is null!");
-        }
-
-        String id = expected.getId();
-
-        assertEquals("PropertyData " + id + " id:", expected.getId(), actual.getId());
-        assertEquals("PropertyData " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
-        assertEquals("PropertyData " + id + " local name:", expected.getLocalName(), actual.getLocalName());
-        assertEquals("PropertyData " + id + " query name:", expected.getQueryName(), actual.getQueryName());
-
-        assertEquals("PropertyData " + id + " values:", expected.getValues().size(), actual.getValues().size());
-
-        for (int i = 0; i < expected.getValues().size(); i++) {
-            assertEquals("PropertyData " + id + " value[" + i + "]:", expected.getValues().get(i), actual.getValues()
-                    .get(i));
-        }
-    }
-
-    protected void assertBasicProperties(Properties properties) {
-        assertNotNull(properties);
-        assertNotNull(properties.getProperties());
-
-        assertProperty(properties.getProperties().get(PropertyIds.OBJECT_ID), PropertyIds.OBJECT_ID, PropertyId.class);
-        assertProperty(properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID), PropertyIds.OBJECT_TYPE_ID,
-                PropertyId.class);
-        assertProperty(properties.getProperties().get(PropertyIds.BASE_TYPE_ID), PropertyIds.BASE_TYPE_ID,
-                PropertyId.class);
-        assertProperty(properties.getProperties().get(PropertyIds.NAME), PropertyIds.NAME, PropertyString.class);
-        assertProperty(properties.getProperties().get(PropertyIds.CREATED_BY), PropertyIds.CREATED_BY,
-                PropertyString.class);
-        assertProperty(properties.getProperties().get(PropertyIds.CREATION_DATE), PropertyIds.CREATION_DATE,
-                PropertyDateTime.class);
-        assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFIED_BY), PropertyIds.LAST_MODIFIED_BY,
-                PropertyString.class);
-        assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFICATION_DATE),
-                PropertyIds.LAST_MODIFICATION_DATE, PropertyDateTime.class);
-    }
-
-    protected void assertProperty(PropertyData<?> property, String id, Class<?> clazz) {
-        assertNotNull(property);
-        assertNotNull(property.getId());
-        assertEquals("PropertyData " + id + " id:", id, property.getId());
-        assertTrue(clazz.isAssignableFrom(property.getClass()));
-        assertNotNull(property.getValues());
-        assertFalse(property.getValues().isEmpty());
-    }
-
-    protected void assertPropertyValue(PropertyData<?> property, String id, Class<?> clazz, Object... values) {
-        assertProperty(property, id, clazz);
-
-        assertEquals("Property " + id + " values:", values.length, property.getValues().size());
-
-        int i = 0;
-        for (Object value : property.getValues()) {
-            assertEquals("Property " + id + " value[" + i + "]:", values[i], value);
-            i++;
-        }
-    }
-
-    protected void assertPropertyValue(Properties properties, String id, Class<?> clazz, Object... values) {
-        assertNotNull(properties);
-        assertNotNull(properties.getProperties());
-
-        PropertyData<?> property = properties.getProperties().get(id);
-        assertNotNull(property);
-
-        assertPropertyValue(property, id, clazz, values);
-    }
-
-    protected void assertEquals(AllowableActions expected, AllowableActions actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected allowable action data is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual allowable action data is null!");
-        }
-
-        assertNotNull(expected.getAllowableActions());
-        assertNotNull(actual.getAllowableActions());
-
-        assertEquals("Allowable action size:", expected.getAllowableActions().size(), actual.getAllowableActions()
-                .size());
-
-        for (Action action : expected.getAllowableActions()) {
-            boolean expectedBoolean = expected.getAllowableActions().contains(action);
-            boolean actualBoolean = actual.getAllowableActions().contains(action);
-
-            assertEquals("AllowableAction " + action + ":", expectedBoolean, actualBoolean);
-        }
-    }
-
-    protected void assertAllowableAction(AllowableActions allowableActions, Action action, boolean expected) {
-        assertNotNull(allowableActions);
-        assertNotNull(allowableActions.getAllowableActions());
-        assertNotNull(action);
-
-        assertEquals("Allowable action \"" + action + "\":", expected,
-                allowableActions.getAllowableActions().contains(action));
-    }
-
-    protected void assertEquals(Acl expected, Acl actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected ACL data is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual ACL data is null!");
-        }
-
-        if (expected.getAces() == null && actual.getAces() == null) {
-            return;
-        }
-
-        if (expected.getAces() == null) {
-            fail("Expected ACE data is null!");
-        }
-
-        if (actual.getAces() == null) {
-            fail("Actual ACE data is null!");
-        }
-
-        // assertEquals(expected.isExact(), actual.isExact());
-        assertEquals(expected.getAces().size(), actual.getAces().size());
-
-        for (int i = 0; i < expected.getAces().size(); i++) {
-            assertEquals(expected.getAces().get(i), actual.getAces().get(i));
-        }
-    }
-
-    protected void assertEquals(Ace expected, Ace actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected ACE data is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual ACE data is null!");
-        }
-
-        assertNotNull(expected.getPrincipal());
-        assertNotNull(expected.getPrincipal().getId());
-        assertNotNull(actual.getPrincipal());
-        assertNotNull(actual.getPrincipal().getId());
-        assertEquals("ACE Principal:", expected.getPrincipal().getId(), actual.getPrincipal().getId());
-
-        assertEqualLists(expected.getPermissions(), actual.getPermissions());
-    }
-
-    protected void assertEquals(RenditionData expected, RenditionData actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected rendition is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual rendition is null!");
-        }
-
-        assertEquals("Rendition kind:", expected.getKind(), actual.getKind());
-        assertEquals("Rendition MIME type:", expected.getMimeType(), actual.getMimeType());
-        assertEquals("Rendition length:", expected.getBigLength(), actual.getBigLength());
-        assertEquals("Rendition stream id:", expected.getStreamId(), actual.getStreamId());
-        assertEquals("Rendition title:", expected.getTitle(), actual.getTitle());
-        assertEquals("Rendition height:", expected.getBigHeight(), actual.getBigHeight());
-        assertEquals("Rendition width:", expected.getBigWidth(), actual.getBigWidth());
-        assertEquals("Rendition document id:", expected.getRenditionDocumentId(), actual.getRenditionDocumentId());
-    }
-
-    protected void assertContent(byte[] expected, byte[] actual) {
-        assertNotNull(expected);
-        assertNotNull(actual);
-
-        assertEquals("Content size:", expected.length, actual.length);
-
-        for (int i = 0; i < expected.length; i++) {
-            assertEquals("Content not equal.", expected[i], actual[i]);
-        }
-    }
-
-    protected void assertMimeType(String expected, String actual) {
-        assertNotNull(expected);
-        assertNotNull(actual);
-
-        int paramIdx = actual.indexOf(';');
-        if (paramIdx != -1) {
-            actual = actual.substring(0, paramIdx);
-        }
-
-        assertEquals(expected, actual);
-    }
-
-    protected void assertEqualLists(List<?> expected, List<?> actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-
-        if (expected == null) {
-            fail("Expected list is null!");
-        }
-
-        if (actual == null) {
-            fail("Actual list is null!");
-        }
-
-        assertEquals("List size:", expected.size(), actual.size());
-
-        for (int i = 0; i < expected.size(); i++) {
-            assertEquals("List element " + i + ":", expected.get(i), actual.get(i));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadOnlyTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadOnlyTests.java
deleted file mode 100644
index 1236199..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadOnlyTests.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.framework;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-
-/**
- * Simple read-only tests.
- */
-public abstract class AbstractSimpleReadOnlyTests extends AbstractCmisTestCase {
-
-    public static final String TEST_REPOSITORY_INFO = "repositoryInfo";
-    public static final String TEST_TYPES = "types";
-    public static final String TEST_CONTENT_STREAM = "contentStream";
-    public static final String TEST_NAVIGATION = "navigation";
-    public static final String TEST_QUERY = "query";
-    public static final String TEST_CHECKEDOUT = "checkedout";
-    public static final String TEST_CONTENT_CHANGES = "contentChanges";
-
-    /**
-     * Tests repository info.
-     */
-    public void testRepositoryInfo() {
-        if (!isEnabled(TEST_REPOSITORY_INFO)) {
-            return;
-        }
-
-        RepositoryInfo repInfo = getRepositoryInfo();
-
-        Tools.print(repInfo);
-
-        assertNotNull(repInfo.getId());
-        assertNotNull(repInfo.getCmisVersionSupported());
-        assertNotNull(repInfo.getRootFolderId());
-        assertNotNull(repInfo.getCapabilities());
-    }
-
-    /**
-     * Some type related tests.
-     */
-    public void testTypes() {
-        if (!isEnabled(TEST_TYPES)) {
-            return;
-        }
-
-        String repId = getTestRepositoryId();
-
-        // get standard type
-        TypeDefinition docType = getTypeDefinition("cmis:document");
-        assertTrue(docType instanceof DocumentTypeDefinition);
-        assertEquals("cmis:document", docType.getId());
-        assertEquals(BaseTypeId.CMIS_DOCUMENT, docType.getBaseTypeId());
-
-        TypeDefinition folderType = getTypeDefinition("cmis:folder");
-        assertTrue(folderType instanceof FolderTypeDefinition);
-        assertEquals("cmis:folder", folderType.getId());
-        assertEquals(BaseTypeId.CMIS_FOLDER, folderType.getBaseTypeId());
-
-        try {
-            TypeDefinition relationshipType = getTypeDefinition("cmis:relationship");
-            assertTrue(relationshipType instanceof RelationshipTypeDefinition);
-            assertEquals("cmis:relationship", relationshipType.getId());
-            assertEquals(BaseTypeId.CMIS_RELATIONSHIP, relationshipType.getBaseTypeId());
-        } catch (Exception e) {
-            warning("Relationships type: " + e);
-        }
-
-        try {
-            TypeDefinition policyType = getTypeDefinition("cmis:policy");
-            assertTrue(policyType instanceof PolicyTypeDefinition);
-            assertEquals("cmis:policy", policyType.getId());
-            assertEquals(BaseTypeId.CMIS_POLICY, policyType.getBaseTypeId());
-        } catch (Exception e) {
-            warning("Policy type: " + e);
-        }
-
-        // getTypeChildren
-        TypeDefinitionList types = getBinding().getRepositoryService().getTypeChildren(repId, null, Boolean.TRUE, null,
-                null, null);
-        assertNotNull(types);
-        assertNotNull(types.hasMoreItems());
-        assertNotNull(types.getList());
-        assertFalse(types.getList().isEmpty());
-        assertTrue(types.getList().size() >= 2);
-        assertTrue(types.getList().size() <= 4);
-
-        getBinding().clearAllCaches();
-
-        for (TypeDefinition type : types.getList()) {
-            TypeDefinition type2 = getTypeDefinition(type.getId());
-            assertEquals(type, type2, true);
-        }
-
-        // getTypeDescendants
-        List<TypeDefinitionContainer> typesContainers = getBinding().getRepositoryService().getTypeDescendants(repId,
-                null, null, Boolean.TRUE, null);
-        assertNotNull(typesContainers);
-        assertFalse(typesContainers.isEmpty());
-
-        for (TypeDefinitionContainer typeContainer : typesContainers) {
-            assertNotNull(typeContainer.getTypeDefinition());
-            assertNotNull(typeContainer.getTypeDefinition().getId());
-            TypeDefinition type2 = getTypeDefinition(typeContainer.getTypeDefinition().getId());
-            assertEquals(typeContainer.getTypeDefinition(), type2, true);
-        }
-
-        Tools.printTypes("Type Descendants", typesContainers);
-
-        getBinding().clearAllCaches();
-
-        assertTypeContainers(repId, typesContainers);
-    }
-
-    private void assertTypeContainers(String repId, List<TypeDefinitionContainer> typesContainers) {
-        if (typesContainers == null) {
-            return;
-        }
-
-        for (TypeDefinitionContainer container : typesContainers) {
-            assertNotNull(container.getTypeDefinition());
-
-            TypeDefinition type = container.getTypeDefinition();
-            TypeDefinition type2 = getTypeDefinition(type.getId());
-
-            assertEquals(type, type2, true);
-
-            assertTypeContainers(repId, container.getChildren());
-        }
-    }
-
-    /**
-     * Navigation smoke test.
-     */
-    public void testNavigation() {
-        if (!isEnabled(TEST_NAVIGATION)) {
-            return;
-        }
-
-        String repId = getTestRepositoryId();
-        String rootFolder = getRootFolderId();
-        String testRootFolder = getTestRootFolder();
-
-        ObjectData rootFolderObject = getObject(rootFolder);
-        String rootPath = getPath(rootFolderObject);
-        assertEquals("Root path is not \"/\"!", "/", rootPath);
-        assertAllowableAction(rootFolderObject.getAllowableActions(), Action.CAN_GET_OBJECT_PARENTS, false);
-
-        ObjectData folderObject = getObject(testRootFolder);
-        String path = getPath(folderObject);
-
-        ObjectInFolderList children = getBinding().getNavigationService().getChildren(repId, testRootFolder, "*", null,
-                Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE, null, null, null);
-        assertNotNull(children);
-        assertNotNull(children.hasMoreItems());
-
-        if (supportsDescendants()) {
-            List<ObjectInFolderContainer> desc = getBinding().getNavigationService().getDescendants(repId,
-                    testRootFolder, BigInteger.valueOf(2), "*", Boolean.TRUE, IncludeRelationships.BOTH, null,
-                    Boolean.TRUE, null);
-            assertNotNull(desc);
-            Tools.print("Descendants", desc);
-
-            assertContainer(desc, 5);
-        } else {
-            warning("Descendants not supported!");
-        }
-
-        if (supportsFolderTree()) {
-            List<ObjectInFolderContainer> tree = getBinding().getNavigationService().getFolderTree(repId,
-                    testRootFolder, BigInteger.valueOf(2), "*", Boolean.TRUE, IncludeRelationships.BOTH, null,
-                    Boolean.TRUE, null);
-            assertNotNull(tree);
-            Tools.print("Tree", tree);
-
-            assertContainer(tree, 5);
-        } else {
-            warning("Folder Tree not supported!");
-        }
-
-        for (ObjectInFolderData object : children.getObjects()) {
-            assertNotNull(object.getObject());
-            assertNotNull(object.getObject().getId());
-            assertNotNull(object.getObject().getBaseTypeId());
-
-            ObjectData object2 = getObject(object.getObject().getId());
-            assertNotNull(object2.getId());
-            assertEquals(object.getObject().getId(), object2.getId());
-            assertEquals(object.getObject().getProperties(), object2.getProperties());
-
-            ObjectData object3 = getObjectByPath((path.equals("/") ? "/" : path + "/") + object.getPathSegment());
-            assertNotNull(object3);
-            assertNotNull(object3.getId());
-            assertEquals(object.getObject().getId(), object3.getId());
-            assertEquals(object.getObject().getProperties(), object3.getProperties());
-
-            checkObject(object.getObject().getId());
-
-            if (object.getObject().getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-                ObjectInFolderList children2 = getBinding().getNavigationService().getChildren(repId,
-                        object.getObject().getId(), null, null, Boolean.TRUE, IncludeRelationships.BOTH, null,
-                        Boolean.TRUE, null, null, null);
-                assertNotNull(children2);
-            } else if (object.getObject().getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-                checkObjectVersions(object.getObject().getId());
-            }
-        }
-    }
-
-    private void assertContainer(List<ObjectInFolderContainer> containers, int maxDepth) {
-        if (containers == null) {
-            return;
-        }
-
-        if (maxDepth < 1) {
-            return;
-        }
-
-        for (ObjectInFolderContainer container : containers) {
-            assertNotNull(container);
-            assertNotNull(container.getObject());
-            assertNotNull(container.getObject().getObject());
-            assertNotNull(container.getObject().getObject().getId());
-            assertNotNull(container.getObject().getPathSegment());
-
-            ObjectData object = getObject(container.getObject().getObject().getId());
-
-            assertEquals(container.getObject().getObject().getProperties(), object.getProperties());
-            assertEquals(container.getObject().getObject().getAllowableActions(), object.getAllowableActions());
-
-            assertContainer(container.getChildren(), maxDepth - 1);
-        }
-    }
-
-    /**
-     * Content stream smoke test.
-     */
-    public void testContentStream() throws Exception {
-        if (!isEnabled(TEST_CONTENT_STREAM)) {
-            return;
-        }
-
-        String repId = getTestRepositoryId();
-        String rootFolder = getTestRootFolder();
-
-        ObjectInFolderList children = getBinding().getNavigationService().getChildren(repId, rootFolder, null, null,
-                Boolean.FALSE, IncludeRelationships.BOTH, null, Boolean.FALSE, null, null, null);
-        assertNotNull(children);
-        assertNotNull(children.getObjects());
-
-        for (ObjectInFolderData object : children.getObjects()) {
-            assertNotNull(object.getObject().getId());
-            assertNotNull(object.getObject().getBaseTypeId());
-
-            if (object.getObject().getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-                ContentStream contentStream = getContent(object.getObject().getId(), null);
-                readContent(contentStream);
-
-                return;
-            }
-        }
-
-        fail("No document in test folder!");
-    }
-
-    /**
-     * Query smoke test.
-     */
-    public void testQuery() {
-        if (!isEnabled(TEST_QUERY)) {
-            return;
-        }
-
-        if (supportsQuery()) {
-            String repId = getTestRepositoryId();
-
-            ObjectList rs = getBinding().getDiscoveryService().query(repId, "SELECT * FROM cmis:document", null, null,
-                    null, null, null, null, null);
-            assertNotNull(rs);
-
-            if (rs.getObjects() != null) {
-                for (ObjectData object : rs.getObjects()) {
-                    assertNotNull(object);
-                    assertNotNull(object.getProperties());
-                    assertNotNull(object.getProperties().getProperties());
-                }
-            }
-
-        } else {
-            warning("Query not supported!");
-        }
-    }
-
-    /**
-     * Checked out smoke test.
-     */
-    public void testCheckedout() {
-        if (!isEnabled(TEST_CHECKEDOUT)) {
-            return;
-        }
-
-        String repId = getTestRepositoryId();
-
-        ObjectList co = getBinding().getNavigationService().getCheckedOutDocs(repId, getTestRootFolder(), null, null,
-                Boolean.TRUE, IncludeRelationships.BOTH, null, BigInteger.valueOf(100), null, null);
-        assertNotNull(co);
-
-        if (co.getObjects() != null) {
-            assertTrue(co.getObjects().size() <= 100);
-
-            for (ObjectData object : co.getObjects()) {
-                assertNotNull(object);
-                assertNotNull(object.getId());
-                assertEquals(BaseTypeId.CMIS_DOCUMENT, object.getBaseTypeId());
-            }
-        }
-    }
-
-    /**
-     * Content changes smoke test.
-     */
-    public void testContentChanges() {
-        if (!isEnabled(TEST_CONTENT_CHANGES)) {
-            return;
-        }
-
-        if (supportsContentChanges()) {
-            String repId = getTestRepositoryId();
-
-            ObjectList cc = getBinding().getDiscoveryService().getContentChanges(repId, null, Boolean.TRUE, "*",
-                    Boolean.TRUE, Boolean.TRUE, BigInteger.valueOf(100), null);
-            assertNotNull(cc);
-
-            if (cc.getObjects() != null) {
-                assertTrue(cc.getObjects().size() <= 100);
-
-                for (ObjectData object : cc.getObjects()) {
-                    assertNotNull(object);
-                    assertNotNull(object.getId());
-                    assertNotNull(object.getChangeEventInfo());
-                    assertNotNull(object.getChangeEventInfo().getChangeType());
-                    assertNotNull(object.getChangeEventInfo().getChangeTime());
-                }
-            }
-        } else {
-            warning("Content changes not supported!");
-        }
-    }
-
-    /**
-     * Tests some of the read-only methods of the Object Service.
-     */
-    private void checkObject(String objectId) {
-        System.out.println("Checking object " + objectId + "...");
-
-        ObjectData object = getObject(objectId);
-
-        // check properties
-        Properties properties = getBinding().getObjectService().getProperties(getTestRepositoryId(), objectId, "*",
-                null);
-
-        assertEquals(object.getProperties(), properties);
-
-        // check allowable actions
-        AllowableActions allowableActions = getBinding().getObjectService().getAllowableActions(getTestRepositoryId(),
-                objectId, null);
-
-        assertEquals(object.getAllowableActions(), allowableActions);
-
-        // check ACLS
-        if (supportsDiscoverACLs()) {
-            Acl acl = getBinding().getAclService().getAcl(getTestRepositoryId(), objectId, Boolean.FALSE, null);
-
-            assertEquals(object.getAcl(), acl);
-        } else {
-            warning("ACLs not supported!");
-        }
-
-        // check policies
-        if (supportsPolicies()) {
-            List<ObjectData> policies = getBinding().getPolicyService().getAppliedPolicies(getTestRepositoryId(),
-                    objectId, null, null);
-
-            if (policies == null) {
-                assertNull(object.getPolicyIds().getPolicyIds());
-            } else {
-                assertNotNull(object.getPolicyIds().getPolicyIds());
-
-                List<String> policyIds = new ArrayList<String>();
-
-                for (ObjectData policy : policies) {
-                    assertNotNull(policy);
-                    assertNotNull(policy.getId());
-
-                    policyIds.add(policy.getId());
-                }
-
-                assertEqualLists(object.getPolicyIds().getPolicyIds(), policyIds);
-            }
-        } else {
-            warning("Policies not supported!");
-        }
-
-        // check renditions
-        if (supportsRenditions()) {
-            List<RenditionData> renditions = getBinding().getObjectService().getRenditions(getTestRepositoryId(),
-                    objectId, null, null, null, null);
-
-            assertEqualLists(object.getRenditions(), renditions);
-        } else {
-            warning("Renditions not supported!");
-        }
-
-        // check relationships
-        if (supportsRelationships()) {
-            ObjectList relationships = getBinding().getRelationshipService().getObjectRelationships(
-                    getTestRepositoryId(), objectId, Boolean.TRUE, RelationshipDirection.EITHER, null, "*",
-                    Boolean.TRUE, null, null, null);
-            assertNotNull(relationships);
-
-            if ((object.getRelationships() != null) && (relationships.getObjects() != null)) {
-                assertEquals(object.getRelationships().size(), relationships.getObjects().size());
-                for (ObjectData rel1 : relationships.getObjects()) {
-                    assertBasicProperties(rel1.getProperties());
-                    boolean found = false;
-
-                    for (ObjectData rel2 : object.getRelationships()) {
-                        if (rel2.getId().equals(rel1.getId())) {
-                            found = true;
-                            assertEquals(rel2.getProperties(), rel1.getProperties());
-                            break;
-                        }
-                    }
-
-                    assertTrue(found);
-                }
-            }
-        } else {
-            warning("Relationships not supported!");
-        }
-    }
-
-    /**
-     * Tests some of the read-only methods of the Versioning Service.
-     */
-    private void checkObjectVersions(String objectId) {
-        System.out.println("Checking versions of object " + objectId + "...");
-
-        String versionSeriesId = getVersionSeriesId(objectId);
-        assertNotNull(versionSeriesId);
-
-        // check latest version
-        ObjectData latestVersionObject = getBinding().getVersioningService().getObjectOfLatestVersion(
-                getTestRepositoryId(), objectId, versionSeriesId, Boolean.FALSE, "*", Boolean.TRUE,
-                IncludeRelationships.BOTH, null, Boolean.TRUE, Boolean.TRUE, null);
-        assertNotNull(latestVersionObject);
-
-        Properties latestVersionProperties = getBinding().getVersioningService().getPropertiesOfLatestVersion(
-                getTestRepositoryId(), objectId, versionSeriesId, Boolean.FALSE, "*", null);
-        assertNotNull(latestVersionProperties);
-
-        assertEquals(latestVersionObject.getProperties(), latestVersionProperties);
-
-        String typeName = (String) latestVersionObject.getProperties().getProperties().get(PropertyIds.BASE_TYPE_ID)
-                .getFirstValue();
-        if (isVersionable(typeName)) {
-            List<ObjectData> allVersions = getBinding().getVersioningService().getAllVersions(getTestRepositoryId(),
-                    objectId, versionSeriesId, "*", Boolean.FALSE, null);
-            assertNotNull(allVersions);
-            assertTrue(isNotEmpty(allVersions));
-
-            boolean foundObject = false;
-            boolean foundLatestObject = false;
-            for (ObjectData object : allVersions) {
-                assertNotNull(object);
-                assertNotNull(object.getId());
-
-                if (objectId.equals(object.getId())) {
-                    foundObject = true;
-                }
-
-                if (latestVersionObject.getId().equals(object.getId())) {
-                    foundLatestObject = true;
-                    assertEquals(latestVersionObject.getProperties(), object.getProperties());
-                }
-            }
-
-            if (!foundObject) {
-                fail("Object " + objectId + " not found in it's version history!");
-            }
-
-            if (!foundLatestObject) {
-                fail("Object " + latestVersionObject.getId() + " not found in it's version history!");
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadWriteTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadWriteTests.java
deleted file mode 100644
index 61ad3d5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadWriteTests.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.framework;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Simple read-write test.
- */
-public abstract class AbstractSimpleReadWriteTests extends AbstractCmisTestCase {
-
-    public static final String TEST_CREATE_FOLDER = "createFolder";
-    public static final String TEST_CREATE_DOCUMENT = "createDocument";
-    public static final String TEST_CREATE_FROM_SOURCE = "createDocumentFromSource";
-    public static final String TEST_SET_AND_DELETE_CONTENT = "setAndDeleteContent";
-    public static final String TEST_UPDATE_PROPERTIES = "updateProperties";
-    public static final String TEST_DELETE_TREE = "deleteTree";
-    public static final String TEST_MOVE_OBJECT = "moveObject";
-    public static final String TEST_COPY_OBJECT = "copyObject";
-    public static final String TEST_VERSIONING = "versioning";
-
-    private static final byte[] CONTENT = "My document test content!".getBytes();
-    private static final byte[] CONTENT2 = "Another test content!".getBytes();
-    private static final String CONTENT_TYPE = "text/plain";
-
-    /**
-     * Tests folder creation.
-     */
-    public void testCreateFolder() {
-        if (!isEnabled(TEST_CREATE_FOLDER)) {
-            return;
-        }
-
-        // create folder
-        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, "testfolder"));
-        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultFolderType()));
-
-        Properties properties = getObjectFactory().createPropertiesData(propList);
-
-        String folderId = createFolder(properties, getTestRootFolder(), null, null, null);
-
-        // delete folder
-        delete(folderId, true);
-    }
-
-    /**
-     * Tests document creation.
-     */
-    public void testCreateDocument() throws Exception {
-        if (!isEnabled(TEST_CREATE_DOCUMENT)) {
-            return;
-        }
-
-        VersioningState vs = (isVersionable(getDefaultDocumentType()) ? VersioningState.MAJOR : VersioningState.NONE);
-
-        // create document
-        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, "testdoc.txt"));
-        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultDocumentType()));
-
-        Properties properties = getObjectFactory().createPropertiesData(propList);
-
-        ContentStream contentStream = createContentStreamData(CONTENT_TYPE, CONTENT);
-
-        String docId = createDocument(properties, getTestRootFolder(), contentStream, vs, null, null, null);
-
-        // read and assert content
-        ContentStream contentStream2 = getContent(docId, null);
-        assertMimeType(CONTENT_TYPE, contentStream2.getMimeType());
-        if (contentStream2.getBigLength() != null) {
-            assertEquals(CONTENT.length, contentStream2.getBigLength().intValue());
-        }
-
-        byte[] content = readContent(contentStream2);
-        assertContent(CONTENT, content);
-
-        // apply an ACL
-        if (supportsManageACLs()) {
-            Ace ace = getObjectFactory()
-                    .createAccessControlEntry(getUsername(), Collections.singletonList("cmis:read"));
-            Acl acl = getObjectFactory().createAccessControlList(Collections.singletonList(ace));
-
-            Acl newAcl = getBinding().getAclService().applyAcl(getTestRepositoryId(), docId, acl, null,
-                    getAclPropagation(), null);
-            assertNotNull(newAcl);
-
-            Acl readAcl = getBinding().getAclService().getAcl(getTestRepositoryId(), docId, Boolean.FALSE, null);
-            assertNotNull(readAcl);
-
-            assertEquals(newAcl, readAcl);
-        } else {
-            warning("ACLs management not supported!");
-        }
-
-        // delete document
-        delete(docId, true);
-    }
-
-    /**
-     * Tests document creation from source.
-     */
-    public void testCreateDocumentFromSource() throws Exception {
-        if (!isEnabled(TEST_CREATE_FROM_SOURCE)) {
-            return;
-        }
-
-        VersioningState vs = (isVersionable(getDefaultDocumentType()) ? VersioningState.MAJOR : VersioningState.NONE);
-
-        String docId = createDefaultDocument(getTestRootFolder(), "testdoc.org.txt", CONTENT_TYPE, CONTENT);
-
-        // create a copy
-        List<PropertyData<?>> propList2 = new ArrayList<PropertyData<?>>();
-        propList2.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, "testdoc.copy.txt"));
-
-        Properties properties2 = getObjectFactory().createPropertiesData(propList2);
-
-        String docId2 = createDocumentFromSource(docId, properties2, getTestRootFolder(), vs, null, null, null);
-
-        // get objects
-        getObject(docId);
-        getObject(docId2);
-
-        // read and assert content
-        ContentStream contentStream2 = getContent(docId, null);
-        ContentStream contentStream3 = getContent(docId2, null);
-
-        assertEquals(contentStream2.getMimeType(), contentStream3.getMimeType());
-        assertEquals(contentStream2.getBigLength(), contentStream3.getBigLength());
-
-        byte[] content2 = readContent(contentStream2);
-        byte[] content3 = readContent(contentStream3);
-        assertContent(content2, content3);
-
-        // delete documents
-        delete(docId, true);
-        delete(docId2, true);
-    }
-
-    /**
-     * Tests setting and deleting content stream.
-     */
-    public void testSetAndDeleteContent() throws Exception {
-        if (!isEnabled(TEST_SET_AND_DELETE_CONTENT)) {
-            return;
-        }
-
-        boolean requiresCheckOut = getRepositoryInfo().getCapabilities().getContentStreamUpdatesCapability() == CapabilityContentStreamUpdates.PWCONLY;
-
-        boolean isVersionable = isVersionable(getDefaultDocumentType());
-
-        String docId = createDefaultDocument(getTestRootFolder(), "testcontent.txt", CONTENT_TYPE, CONTENT);
-
-        // if a check out is required, do it
-        Holder<String> docIdHolder = new Holder<String>(docId);
-        if (requiresCheckOut) {
-            if (isVersionable) {
-                getBinding().getVersioningService().checkOut(getTestRepositoryId(), docIdHolder, null, null);
-            } else {
-                warning("Default document type is not versionable!");
-                delete(docId, true);
-                return;
-            }
-        }
-
-        String docIdWorkingCopy = docIdHolder.getValue();
-
-        // delete content
-        try {
-            getBinding().getObjectService().deleteContentStream(getTestRepositoryId(), docIdHolder, null, null);
-        } catch (CmisNotSupportedException e) {
-            warning("deleteContentStream not supported!");
-        }
-
-        // set content
-        ContentStream contentStream2 = createContentStreamData(CONTENT_TYPE, CONTENT2);
-
-        docIdHolder = new Holder<String>(docIdWorkingCopy);
-        getBinding().getObjectService().setContentStream(getTestRepositoryId(), docIdHolder, true, null,
-                contentStream2, null);
-
-        // read and assert content
-        String newVersionDocId = (docIdHolder.getValue() == null ? docIdWorkingCopy : docIdHolder.getValue());
-        ContentStream contentStream3 = getContent(newVersionDocId, null);
-        assertMimeType(CONTENT_TYPE, contentStream3.getMimeType());
-        if (contentStream3.getBigLength() != null) {
-            assertEquals(CONTENT2.length, contentStream3.getBigLength().intValue());
-        }
-
-        byte[] content = readContent(contentStream3);
-        assertContent(CONTENT2, content);
-
-        // if it has been checked out, cancel that
-        if (requiresCheckOut) {
-            getBinding().getVersioningService().cancelCheckOut(getTestRepositoryId(), docIdWorkingCopy, null);
-        }
-
-        // delete document
-        delete(docId, true);
-    }
-
-    /**
-     * Tests property updates.
-     */
-    public void testUpdateProperties() {
-        if (!isEnabled(TEST_UPDATE_PROPERTIES)) {
-            return;
-        }
-
-        String name1 = "updateTest1.txt";
-        String name2 = "updateTest2.txt";
-
-        // create document
-        String docId = createDefaultDocument(getTestRootFolder(), name1, CONTENT_TYPE, CONTENT);
-
-        // update
-        List<PropertyData<?>> updatePropList = new ArrayList<PropertyData<?>>();
-        updatePropList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name2));
-
-        Properties updateProperties = getObjectFactory().createPropertiesData(updatePropList);
-
-        Holder<String> docIdHolder = new Holder<String>(docId);
-        getBinding().getObjectService().updateProperties(getTestRepositoryId(), docIdHolder, null, updateProperties,
-                null);
-
-        // get new id and check name property
-        docId = docIdHolder.getValue();
-
-        ObjectData updatedObject = getObject(docId);
-        String updatedName = (String) updatedObject.getProperties().getProperties().get(PropertyIds.NAME)
-                .getFirstValue();
-        assertNotNull(updatedName);
-        assertEquals(name2, updatedName);
-
-        // delete document
-        delete(docId, true);
-    }
-
-    /**
-     * Tests delete tree.
-     */
-    public void testDeleteTree() {
-        if (!isEnabled(TEST_DELETE_TREE)) {
-            return;
-        }
-
-        // create a folder tree
-        String folder1 = createDefaultFolder(getTestRootFolder(), "folder1");
-        String folder11 = createDefaultFolder(folder1, "folder11");
-        String folder12 = createDefaultFolder(folder1, "folder12");
-        String folder121 = createDefaultFolder(folder12, "folder121");
-        String folder122 = createDefaultFolder(folder12, "folder122");
-
-        // create a few documents
-        String doc111 = createDefaultDocument(folder11, "doc111.txt", CONTENT_TYPE, CONTENT);
-        String doc1221 = createDefaultDocument(folder122, "doc1221.txt", CONTENT_TYPE, CONTENT2);
-
-        // delete the tree
-        getBinding().getObjectService().deleteTree(getTestRepositoryId(), folder1, Boolean.TRUE, UnfileObject.DELETE,
-                Boolean.TRUE, null);
-
-        assertFalse(existsObject(folder1));
-        assertFalse(existsObject(folder11));
-        assertFalse(existsObject(folder12));
-        assertFalse(existsObject(folder121));
-        assertFalse(existsObject(folder122));
-        assertFalse(existsObject(doc111));
-        assertFalse(existsObject(doc1221));
-    }
-
-    /**
-     * Tests move object.
-     */
-    public void testMoveObject() {
-        if (!isEnabled(TEST_MOVE_OBJECT)) {
-            return;
-        }
-
-        // create folders
-        String folder1 = createDefaultFolder(getTestRootFolder(), "folder1");
-        String folder2 = createDefaultFolder(getTestRootFolder(), "folder2");
-
-        // create document
-        String docId = createDefaultDocument(folder1, "testdoc.txt", CONTENT_TYPE, CONTENT);
-
-        // move it
-        Holder<String> docIdHolder = new Holder<String>(docId);
-        getBinding().getObjectService().moveObject(getTestRepositoryId(), docIdHolder, folder2, folder1, null);
-        assertNotNull(docIdHolder.getValue());
-
-        assertTrue(existsObject(docIdHolder.getValue()));
-        getChild(folder2, docIdHolder.getValue());
-
-        deleteTree(folder1);
-        deleteTree(folder2);
-    }
-
-    /**
-     * Tests copy object.
-     */
-    public void testCopyObject() {
-        if (!isEnabled(TEST_COPY_OBJECT)) {
-            return;
-        }
-
-        // create folders
-        String folder1 = createDefaultFolder(getTestRootFolder(), "folder1");
-        String folder2 = createDefaultFolder(getTestRootFolder(), "folder2");
-
-        // create document
-        String docId = createDefaultDocument(folder1, "testdoc.txt", CONTENT_TYPE, CONTENT);
-
-        // copy it with new properties
-        List<PropertyData<?>> updatePropList = new ArrayList<PropertyData<?>>();
-        updatePropList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, "newdocname"));
-        Properties updateProperties = getObjectFactory().createPropertiesData(updatePropList);
-
-        String copyId = getBinding().getObjectService().createDocumentFromSource(getTestRepositoryId(), docId,
-                updateProperties, folder2, null, null, null, null, null);
-        assertNotNull(copyId);
-
-        assertTrue(existsObject(copyId));
-        ObjectInFolderData copy = getChild(folder2, copyId);
-        String updatedName = (String) copy.getObject().getProperties().getProperties().get(PropertyIds.NAME)
-                .getFirstValue();
-        assertEquals("newdocname", updatedName);
-
-        deleteTree(folder1);
-        deleteTree(folder2);
-    }
-
-    /**
-     * Test check-in/check-out.
-     */
-    public void testVersioning() {
-        if (!isEnabled(TEST_VERSIONING)) {
-            return;
-        }
-
-        if (!isVersionable(getDefaultDocumentType())) {
-            warning("Default document type is not versionable!");
-            return;
-        }
-
-        // create document
-        String docId = createDefaultDocument(getTestRootFolder(), "versionTest.txt", CONTENT_TYPE, CONTENT);
-
-        // there must be only one version in the version series
-        List<ObjectData> allVersions = getBinding().getVersioningService().getAllVersions(getTestRepositoryId(), docId,
-                getVersionSeriesId(docId), "*", Boolean.FALSE, null);
-        assertNotNull(allVersions);
-        assertEquals(1, allVersions.size());
-
-        assertEquals(docId, allVersions.get(0).getId());
-
-        // check out
-        Holder<String> versionIdHolder = new Holder<String>(docId);
-        getBinding().getVersioningService().checkOut(getTestRepositoryId(), versionIdHolder, null, null);
-        String versionId = versionIdHolder.getValue();
-
-        // object must be marked as checked out
-        assertTrue(isCheckedOut(docId));
-
-        // cancel check out
-        getBinding().getVersioningService().cancelCheckOut(getTestRepositoryId(), versionId, null);
-
-        // object must NOT be marked as checked out
-        assertFalse(isCheckedOut(docId));
-
-        // check out again
-        versionIdHolder.setValue(docId);
-        getBinding().getVersioningService().checkOut(getTestRepositoryId(), versionIdHolder, null, null);
-        versionId = versionIdHolder.getValue();
-
-        // object must be marked as checked out
-        assertTrue(isCheckedOut(docId));
-
-        versionIdHolder.setValue(versionId);
-        getBinding().getVersioningService().checkIn(getTestRepositoryId(), versionIdHolder, Boolean.TRUE, null, null,
-                "Test Version 2", null, null, null, null);
-        docId = versionIdHolder.getValue();
-
-        // object must NOT be marked as checked out
-        assertFalse(isCheckedOut(docId));
-
-        // there must be exactly two versions in the version series
-        allVersions = getBinding().getVersioningService().getAllVersions(getTestRepositoryId(), docId,
-                getVersionSeriesId(docId), "*", Boolean.FALSE, null);
-        assertNotNull(allVersions);
-        assertEquals(2, allVersions.size());
-
-        // delete document
-        delete(docId, true);
-    }
-
-    private boolean isCheckedOut(String docId) {
-        ObjectData object = getObject(docId);
-        PropertyData<?> isCheckedOut = object.getProperties().getProperties()
-                .get(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-        assertNotNull(isCheckedOut);
-        assertTrue(isCheckedOut.getFirstValue() instanceof Boolean);
-
-        return ((Boolean) isCheckedOut.getFirstValue()).booleanValue();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/Tools.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/Tools.java
deleted file mode 100644
index 941b812..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/Tools.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.framework;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-
-/**
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- * 
- */
-public class Tools {
-    
-    private Tools() {
-    }
-
-    public static void print(RepositoryInfo repositoryInfo) {
-        if (repositoryInfo == null) {
-            return;
-        }
-
-        System.out.println("-------------");
-        System.out.println("Id:               " + repositoryInfo.getId());
-        System.out.println("Name:             " + repositoryInfo.getName());
-        System.out.println("CMIS Version:     " + repositoryInfo.getCmisVersionSupported());
-        System.out.println("Product:          " + repositoryInfo.getVendorName() + " / "
-                + repositoryInfo.getProductName() + " " + repositoryInfo.getProductVersion());
-        System.out.println("Root Folder:      " + repositoryInfo.getRootFolderId());
-        System.out.println("Capabilities:     " + repositoryInfo.getCapabilities());
-        System.out.println("ACL Capabilities: " + repositoryInfo.getAclCapabilities());
-        System.out.println("-------------");
-    }
-
-    public static void printTypes(String title, List<TypeDefinitionContainer> typeContainerList) {
-        System.out.println("-------------");
-        System.out.println(title);
-        System.out.println("-------------");
-
-        printTypes(typeContainerList, 0);
-    }
-
-    private static void printTypes(List<TypeDefinitionContainer> typeContainerList, int level) {
-        if (typeContainerList == null) {
-            return;
-        }
-
-        for (TypeDefinitionContainer container : typeContainerList) {
-            for (int i = 0; i < level; i++) {
-                System.out.print("  ");
-            }
-
-            container.getTypeDefinition().getId();
-            System.out.println(container.getTypeDefinition().getId());
-
-            printTypes(container.getChildren(), level + 1);
-        }
-    }
-
-    public static void print(String title, List<ObjectInFolderContainer> containerList) {
-        System.out.println("-------------");
-        System.out.println(title);
-        System.out.println("-------------");
-
-        print(containerList, 0);
-    }
-
-    private static void print(List<ObjectInFolderContainer> containerList, int level) {
-        if (containerList == null) {
-            return;
-        }
-
-        for (ObjectInFolderContainer container : containerList) {
-            for (int i = 0; i < level; i++) {
-                System.out.print("  ");
-            }
-
-            Properties properties = container.getObject().getObject().getProperties();
-            System.out.println(properties.getProperties().get(PropertyIds.NAME).getFirstValue() + " ("
-                    + properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID).getFirstValue() + ")");
-
-            print(container.getChildren(), level + 1);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/CookiesTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/CookiesTest.java
deleted file mode 100644
index cd0c838..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/CookiesTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.misc;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.client.bindings.spi.cookies.CmisCookieManager;
-
-public class CookiesTest extends TestCase {
-
-    public void testCookies() {
-        CmisCookieManager manager = new CmisCookieManager();
-        String url;
-
-        url = "https://www.example.com/s/test/abc?xyz";
-        addCookie(manager, url, "cookie1", "c1-1111", "/s/");
-
-        url = "https://www.example.com/s/test/abc?xyz";
-        addCookie(manager, url, "cookie2", "c2-1111", "/s/");
-        deleteCookie(manager, url, "cookie2", "/s/");
-
-        url = "https://www.example.com/s/test/abc";
-        addCookie(manager, url, "cookie1", "c1-2222", "/s/");
-
-        url = "https://www.example.com/s/test/abc";
-        addCookie(manager, url, "cookie1", "c1-3333", "/s/t");
-
-        url = "https://www.example.com/s/test/abc?abc";
-        addCookie(manager, url, "cookie1", "c1-4444", "/s/x");
-
-        List<String> cookies = manager.get("https://www.example.com/s/test/abc/s", new HashMap<String, List<String>>())
-                .get("Cookie");
-
-        assertEquals(1, cookies.size());
-        assertEquals(cookies.get(0), "cookie1=c1-3333; cookie1=c1-2222");
-        //assertEquals(cookies.get(1), "cookie1=c1-2222");
-    }
-
-    private void addCookie(CmisCookieManager manager, String url, String name, String value, String path) {
-        Map<String, List<String>> responseHeaders = new HashMap<String, List<String>>();
-
-        responseHeaders.put(null, Collections.singletonList("HTTP/1.1 200 OK"));
-        responseHeaders
-                .put("Set-Cookie", Collections.singletonList(name + "=" + value + "; Path=" + path + "; Secure"));
-
-        manager.put(url, responseHeaders);
-    }
-
-    private void deleteCookie(CmisCookieManager manager, String url, String name, String path) {
-        Map<String, List<String>> responseHeaders = new HashMap<String, List<String>>();
-
-        responseHeaders.put(null, Collections.singletonList("HTTP/1.1 200 OK"));
-        responseHeaders.put("Set-Cookie",
-                Collections.singletonList(name + "=delete; Path=" + path + "; Secure; Max-Age=0"));
-
-        manager.put(url, responseHeaders);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadOnlyTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadOnlyTests.java
deleted file mode 100644
index 8058f64..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadOnlyTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.webservices;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.bindings.framework.AbstractSimpleReadOnlyTests;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- * 
- */
-public class SimpleReadOnlyTests extends AbstractSimpleReadOnlyTests {
-
-    private final Set<String> fTests;
-
-    public SimpleReadOnlyTests() {
-        fTests = new HashSet<String>();
-        fTests.add(TEST_REPOSITORY_INFO);
-        fTests.add(TEST_TYPES);
-        fTests.add(TEST_NAVIGATION);
-        fTests.add(TEST_CONTENT_STREAM);
-        fTests.add(TEST_QUERY);
-        fTests.add(TEST_CHECKEDOUT);
-        fTests.add(TEST_CONTENT_CHANGES);
-    }
-
-    @Override
-    protected CmisBinding createBinding() {
-        return WebServicesTestBindingFactory.createBinding(getWebServicesURL(), getUsername(), getPassword());
-    }
-
-    @Override
-    protected Set<String> getEnabledTests() {
-        return fTests;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadWriteTests.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadWriteTests.java
deleted file mode 100644
index d7fd3ba..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadWriteTests.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.webservices;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.bindings.framework.AbstractSimpleReadWriteTests;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- */
-public class SimpleReadWriteTests extends AbstractSimpleReadWriteTests {
-
-    private final Set<String> fTests;
-
-    public SimpleReadWriteTests() {
-        fTests = new HashSet<String>();
-        fTests.add(TEST_CREATE_FOLDER);
-        fTests.add(TEST_CREATE_DOCUMENT);
-        fTests.add(TEST_CREATE_FROM_SOURCE);
-        fTests.add(TEST_SET_AND_DELETE_CONTENT);
-        fTests.add(TEST_UPDATE_PROPERTIES);
-        fTests.add(TEST_DELETE_TREE);
-        fTests.add(TEST_MOVE_OBJECT);
-        fTests.add(TEST_COPY_OBJECT);
-        fTests.add(TEST_VERSIONING);
-    }
-
-    @Override
-    protected CmisBinding createBinding() {
-        return WebServicesTestBindingFactory.createBinding(getWebServicesURL(), getUsername(), getPassword());
-    }
-
-    @Override
-    protected Set<String> getEnabledTests() {
-        return fTests;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/WebServicesTestBindingFactory.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/WebServicesTestBindingFactory.java
deleted file mode 100644
index a04308d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/WebServicesTestBindingFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.bindings.webservices;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Web Services Binding Factory.
- */
-public class WebServicesTestBindingFactory {
-
-    private WebServicesTestBindingFactory() {
-    }
-
-    public static CmisBinding createBinding(String url, String username, String password) {
-        boolean isPrefix = true;
-
-        url = url.trim();
-        String urlLower = url.toLowerCase(Locale.ENGLISH);
-
-        if (urlLower.endsWith("?wsdl")) {
-            isPrefix = false;
-        } else if (urlLower.endsWith(".wsdl")) {
-            isPrefix = false;
-        } else if (urlLower.endsWith(".xml")) {
-            isPrefix = false;
-        } else if (urlLower.endsWith(".aspx")) {
-            isPrefix = false;
-        } else if (urlLower.endsWith("/wsdl")) {
-            isPrefix = false;
-        }
-
-        return createBinding(url, isPrefix, username, password);
-    }
-
-    public static CmisBinding createBinding(String url, boolean isPrefix, String username, String password) {
-        // gather parameters
-        Map<String, String> parameters = new HashMap<String, String>();
-        parameters.put(SessionParameter.USER, username);
-        parameters.put(SessionParameter.PASSWORD, password);
-
-        if (!isPrefix) {
-            parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url);
-            parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url);
-        } else {
-            parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url + "RepositoryService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url + "NavigationService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url + "ObjectService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url + "VersioningService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url + "DiscoveryService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url + "RelationshipService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url + "MultiFilingService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url + "PolicyService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url + "ACLService?wsdl");
-        }
-
-        // get factory and create provider
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisWebServicesBinding(parameters);
-
-        return binding;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/resources/log4j.properties
deleted file mode 100644
index 1e2c517..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=${project.build.directory}/log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.opencmis.client.bindings.spi=O
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/pom.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/pom.xml
deleted file mode 100644
index f3d1c3c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/pom.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-client-impl</artifactId>
-    <name>OpenCMIS Client Implementation</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>    
-                            <goal>manifest</goal>
-                        </goals>   
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package />
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                        <Bundle-Activator>org.apache.chemistry.opencmis.client.osgi.Activator</Bundle-Activator>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                       <id>pack-client-with-deps</id>
-                       <goals>
-                           <goal>single</goal>
-                       </goals>
-                       <phase>package</phase>
-                       <configuration>
-                           <attach>true</attach>
-                           <descriptors>
-                               <descriptor>src/main/assembly/client-with-dependencies-assembly.xml</descriptor>
-                               <descriptor>src/main/assembly/client-with-ri-dependencies-assembly.xml</descriptor>
-                               <descriptor>src/main/assembly/client-with-cxf-dependencies-assembly.xml</descriptor>
-                           </descriptors>
-                       </configuration>
-                   </execution>
-                </executions>
-            </plugin>  
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>${osgi.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <!-- Sun RI -->
-        <dependency>
-            <groupId>org.jvnet.mimepull</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>${mimepull.version}</version>
-            <scope>provided</scope>
-        </dependency> 
-        <dependency>
-            <groupId>com.sun.xml.ws</groupId>
-            <artifactId>jaxws-rt</artifactId>
-            <version>${jaxws-rt.version}</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>stax</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion>	 
-                    <groupId>org.codehaus.woodstox</groupId>	 
-                    <artifactId>wstx-asl</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>junit</groupId>	 
-                    <artifactId>junit</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>org.jvnet</groupId>	 
-                    <artifactId>mimepull</artifactId>	 
-                </exclusion>	 
-            </exclusions>
-        </dependency>
-        <!-- CXF -->
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxws</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-transports-http</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-ws-policy</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <!-- Test -->
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>${log4j.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <profiles>
-        <profile>
-            <!--
-                call mvn test -Dorg.apache.chemistry.opencmis.client.runtime.suite.config.path=myServer.properties to
-                run test using profile parameters
-            -->
-            <activation>
-                <property>
-                    <name>org.apache.chemistry.opencmis.client.runtime.test.config.path</name>
-                </property>
-            </activation>
-            <build>
-                <pluginManagement>
-                    <plugins>
-                        <plugin>
-                            <groupId>org.apache.maven.plugins</groupId>
-                            <artifactId>maven-surefire-plugin</artifactId>
-                            <configuration>
-                                <argLine>-Dorg.apache.chemistry.opencmis.client.runtime.test.config.path=${org.apache.chemistry.opencmis.client.runtime.test.config.path}</argLine>
-                            </configuration>
-                        </plugin>
-                    </plugins>
-                </pluginManagement>
-            </build>
-        </profile>
-
-        <!--
-            Extending the default -Papache-release profile used *only*
-            during releases
-        -->
-        <profile>
-            <id>apache-release</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>pack-client-with-deps</id>
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <phase>package</phase>
-                                <configuration>
-                                    <attach>true</attach>
-                                    <descriptors>
-                                        <descriptor>
-                                            src/main/assembly/client-with-dependencies-assembly.xml
-                                         </descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-
-</project>
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-cxf-dependencies-assembly.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-cxf-dependencies-assembly.xml
deleted file mode 100644
index a8eafe5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-cxf-dependencies-assembly.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 assembly is for development only and should not be released!
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
-    <id>with-cxf-dependencies</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <dependencySets>
-        <dependencySet>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-        </dependencySet>
-        <dependencySet>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>com.sun.xml.ws:jaxws-rt</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-</assembly>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-license.txt b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-license.txt
deleted file mode 100644
index 4aa597e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-license.txt
+++ /dev/null
@@ -1,608 +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.
-
-
-=======================================================================
-- Woodstox (http://woodstox.codehaus.org)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-This copy of Woodstox XML processor is licensed under the
-Apache (Software) License, version 2.0 ("the License").
-See the License for details about distribution rights, and the
-specific rights regarding derivate works.
-
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/
-
-A copy is also included with both the the downloadable source code package
-and jar that contains class bytecodes, as file "ASL 2.0". In both cases,
-that file should be located next to this file: in source distribution
-the location should be "release-notes/asl"; and in jar "META-INF/"
-
-
-=======================================================================
-- Stax2 API (http://woodstox.codehaus.org/StAX2)
-  License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)
-
-
-Copyright (c) 2004-2010, Woodstox Project (http://woodstox.codehaus.org/)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-3. Neither the name of the Woodstox XML Processor nor the names
-   of its contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- Streaming API for XML (http://stax.codehaus.org)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      1. Definitions.
-            1.1. "Contributor" means each individual or entity that
-            creates or contributes to the creation of Modifications.
-            1.2. "Contributor Version" means the combination of the
-            Original Software, prior Modifications used by a
-            Contributor (if any), and the Modifications made by that
-            particular Contributor.
-            1.3. "Covered Software" means (a) the Original Software, or
-            (b) Modifications, or (c) the combination of files
-            containing Original Software with files containing
-            Modifications, in each case including portions thereof.
-            1.4. "Executable" means the Covered Software in any form
-            other than Source Code. 
-            1.5. "Initial Developer" means the individual or entity
-            that first makes Original Software available under this
-            License. 
-            1.6. "Larger Work" means a work which combines Covered
-            Software or portions thereof with code not governed by the
-            terms of this License.
-            1.7. "License" means this document.
-            1.8. "Licensable" means having the right to grant, to the
-            maximum extent possible, whether at the time of the initial
-            grant or subsequently acquired, any and all of the rights
-            conveyed herein.
-            1.9. "Modifications" means the Source Code and Executable
-            form of any of the following: 
-                  A. Any file that results from an addition to,
-                  deletion from or modification of the contents of a
-                  file containing Original Software or previous
-                  Modifications; 
-                  B. Any new file that contains any part of the
-                  Original Software or previous Modification; or 
-                  C. Any new file that is contributed or otherwise made
-                  available under the terms of this License.
-            1.10. "Original Software" means the Source Code and
-            Executable form of computer software code that is
-            originally released under this License. 
-            1.11. "Patent Claims" means any patent claim(s), now owned
-            or hereafter acquired, including without limitation,
-            method, process, and apparatus claims, in any patent
-            Licensable by grantor. 
-            1.12. "Source Code" means (a) the common form of computer
-            software code in which modifications are made and (b)
-            associated documentation included in or with such code.
-            1.13. "You" (or "Your") means an individual or a legal
-            entity exercising rights under, and complying with all of
-            the terms of, this License. For legal entities, "You"
-            includes any entity which controls, is controlled by, or is
-            under common control with You. For purposes of this
-            definition, "control" means (a) the power, direct or
-            indirect, to cause the direction or management of such
-            entity, whether by contract or otherwise, or (b) ownership
-            of more than fifty percent (50%) of the outstanding shares
-            or beneficial ownership of such entity.
-      2. License Grants. 
-            2.1. The Initial Developer Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, the
-            Initial Developer hereby grants You a world-wide,
-            royalty-free, non-exclusive license: 
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Initial Developer,
-                  to use, reproduce, modify, display, perform,
-                  sublicense and distribute the Original Software (or
-                  portions thereof), with or without Modifications,
-                  and/or as part of a Larger Work; and 
-                  (b) under Patent Claims infringed by the making,
-                  using or selling of Original Software, to make, have
-                  made, use, practice, sell, and offer for sale, and/or
-                  otherwise dispose of the Original Software (or
-                  portions thereof). 
-                  (c) The licenses granted in Sections 2.1(a) and (b)
-                  are effective on the date Initial Developer first
-                  distributes or otherwise makes the Original Software
-                  available to a third party under the terms of this
-                  License. 
-                  (d) Notwithstanding Section 2.1(b) above, no patent
-                  license is granted: (1) for code that You delete from
-                  the Original Software, or (2) for infringements
-                  caused by: (i) the modification of the Original
-                  Software, or (ii) the combination of the Original
-                  Software with other software or devices. 
-            2.2. Contributor Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, each
-            Contributor hereby grants You a world-wide, royalty-free,
-            non-exclusive license:
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Contributor to
-                  use, reproduce, modify, display, perform, sublicense
-                  and distribute the Modifications created by such
-                  Contributor (or portions thereof), either on an
-                  unmodified basis, with other Modifications, as
-                  Covered Software and/or as part of a Larger Work; and
-                  (b) under Patent Claims infringed by the making,
-                  using, or selling of Modifications made by that
-                  Contributor either alone and/or in combination with
-                  its Contributor Version (or portions of such
-                  combination), to make, use, sell, offer for sale,
-                  have made, and/or otherwise dispose of: (1)
-                  Modifications made by that Contributor (or portions
-                  thereof); and (2) the combination of Modifications
-                  made by that Contributor with its Contributor Version
-                  (or portions of such combination). 
-                  (c) The licenses granted in Sections 2.2(a) and
-                  2.2(b) are effective on the date Contributor first
-                  distributes or otherwise makes the Modifications
-                  available to a third party. 
-                  (d) Notwithstanding Section 2.2(b) above, no patent
-                  license is granted: (1) for any code that Contributor
-                  has deleted from the Contributor Version; (2) for
-                  infringements caused by: (i) third party
-                  modifications of Contributor Version, or (ii) the
-                  combination of Modifications made by that Contributor
-                  with other software (except as part of the
-                  Contributor Version) or other devices; or (3) under
-                  Patent Claims infringed by Covered Software in the
-                  absence of Modifications made by that Contributor. 
-      3. Distribution Obligations.
-            3.1. Availability of Source Code.
-            Any Covered Software that You distribute or otherwise make
-            available in Executable form must also be made available in
-            Source Code form and that Source Code form must be
-            distributed only under the terms of this License. You must
-            include a copy of this License with every copy of the
-            Source Code form of the Covered Software You distribute or
-            otherwise make available. You must inform recipients of any
-            such Covered Software in Executable form as to how they can
-            obtain such Covered Software in Source Code form in a
-            reasonable manner on or through a medium customarily used
-            for software exchange.
-            3.2. Modifications.
-            The Modifications that You create or to which You
-            contribute are governed by the terms of this License. You
-            represent that You believe Your Modifications are Your
-            original creation(s) and/or You have sufficient rights to
-            grant the rights conveyed by this License.
-            3.3. Required Notices.
-            You must include a notice in each of Your Modifications
-            that identifies You as the Contributor of the Modification.
-            You may not remove or alter any copyright, patent or
-            trademark notices contained within the Covered Software, or
-            any notices of licensing or any descriptive text giving
-            attribution to any Contributor or the Initial Developer.
-            3.4. Application of Additional Terms.
-            You may not offer or impose any terms on any Covered
-            Software in Source Code form that alters or restricts the
-            applicable version of this License or the recipients'
-            rights hereunder. You may choose to offer, and to charge a
-            fee for, warranty, support, indemnity or liability
-            obligations to one or more recipients of Covered Software.
-            However, you may do so only on Your own behalf, and not on
-            behalf of the Initial Developer or any Contributor. You
-            must make it absolutely clear that any such warranty,
-            support, indemnity or liability obligation is offered by
-            You alone, and You hereby agree to indemnify the Initial
-            Developer and every Contributor for any liability incurred
-            by the Initial Developer or such Contributor as a result of
-            warranty, support, indemnity or liability terms You offer.
-            3.5. Distribution of Executable Versions.
-            You may distribute the Executable form of the Covered
-            Software under the terms of this License or under the terms
-            of a license of Your choice, which may contain terms
-            different from this License, provided that You are in
-            compliance with the terms of this License and that the
-            license for the Executable form does not attempt to limit
-            or alter the recipient's rights in the Source Code form
-            from the rights set forth in this License. If You
-            distribute the Covered Software in Executable form under a
-            different license, You must make it absolutely clear that
-            any terms which differ from this License are offered by You
-            alone, not by the Initial Developer or Contributor. You
-            hereby agree to indemnify the Initial Developer and every
-            Contributor for any liability incurred by the Initial
-            Developer or such Contributor as a result of any such terms
-            You offer.
-            3.6. Larger Works.
-            You may create a Larger Work by combining Covered Software
-            with other code not governed by the terms of this License
-            and distribute the Larger Work as a single product. In such
-            a case, You must make sure the requirements of this License
-            are fulfilled for the Covered Software. 
-      4. Versions of the License. 
-            4.1. New Versions.
-            Sun Microsystems, Inc. is the initial license steward and
-            may publish revised and/or new versions of this License
-            from time to time. Each version will be given a
-            distinguishing version number. Except as provided in
-            Section 4.3, no one other than the license steward has the
-            right to modify this License. 
-            4.2. Effect of New Versions.
-            You may always continue to use, distribute or otherwise
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. If the Initial Developer includes a
-            notice in the Original Software prohibiting it from being
-            distributed or otherwise made available under any
-            subsequent version of the License, You must distribute and
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. Otherwise, You may also choose to
-            use, distribute or otherwise make the Covered Software
-            available under the terms of any subsequent version of the
-            License published by the license steward. 
-            4.3. Modified Versions.
-            When You are an Initial Developer and You want to create a
-            new license for Your Original Software, You may create and
-            use a modified version of this License if You: (a) rename
-            the license and remove any references to the name of the
-            license steward (except to note that the license differs
-            from this License); and (b) otherwise make it clear that
-            the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
-      BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-      INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
-      SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
-      PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
-      PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
-      COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
-      INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
-      ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
-      WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-      ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
-      DISCLAIMER. 
-      6. TERMINATION. 
-            6.1. This License and the rights granted hereunder will
-            terminate automatically if You fail to comply with terms
-            herein and fail to cure such breach within 30 days of
-            becoming aware of the breach. Provisions which, by their
-            nature, must remain in effect beyond the termination of
-            this License shall survive.
-            6.2. If You assert a patent infringement claim (excluding
-            declaratory judgment actions) against Initial Developer or
-            a Contributor (the Initial Developer or Contributor against
-            whom You assert such claim is referred to as "Participant")
-            alleging that the Participant Software (meaning the
-            Contributor Version where the Participant is a Contributor
-            or the Original Software where the Participant is the
-            Initial Developer) directly or indirectly infringes any
-            patent, then any and all rights granted directly or
-            indirectly to You by such Participant, the Initial
-            Developer (if the Initial Developer is not the Participant)
-            and all Contributors under Sections 2.1 and/or 2.2 of this
-            License shall, upon 60 days notice from Participant
-            terminate prospectively and automatically at the expiration
-            of such 60 day notice period, unless if within such 60 day
-            period You withdraw Your claim with respect to the
-            Participant Software against such Participant either
-            unilaterally or pursuant to a written agreement with
-            Participant.
-            6.3. In the event of termination under Sections 6.1 or 6.2
-            above, all end user licenses that have been validly granted
-            by You or any distributor hereunder prior to termination
-            (excluding licenses granted to You by any distributor)
-            shall survive termination.
-      7. LIMITATION OF LIABILITY.
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-      INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-      COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
-      LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
-      CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
-      LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
-      STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
-      INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
-      APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
-      NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
-      CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
-      APPLY TO YOU.
-      8. U.S. GOVERNMENT END USERS.
-      The Covered Software is a "commercial item," as that term is
-      defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
-      computer software" (as that term is defined at 48 C.F.R. ��
-      252.227-7014(a)(1)) and "commercial computer software
-      documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
-      1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
-      through 227.7202-4 (June 1995), all U.S. Government End Users
-      acquire Covered Software with only those rights set forth herein.
-      This U.S. Government Rights clause is in lieu of, and supersedes,
-      any other FAR, DFAR, or other clause or provision that addresses
-      Government rights in computer software under this License.
-      9. MISCELLANEOUS.
-      This License represents the complete agreement concerning subject
-      matter hereof. If any provision of this License is held to be
-      unenforceable, such provision shall be reformed only to the
-      extent necessary to make it enforceable. This License shall be
-      governed by the law of the jurisdiction specified in a notice
-      contained within the Original Software (except to the extent
-      applicable law, if any, provides otherwise), excluding such
-      jurisdiction's conflict-of-law provisions. Any litigation
-      relating to this License shall be subject to the jurisdiction of
-      the courts located in the jurisdiction and venue specified in a
-      notice contained within the Original Software, with the losing
-      party responsible for costs, including, without limitation, court
-      costs and reasonable attorneys' fees and expenses. The
-      application of the United Nations Convention on Contracts for the
-      International Sale of Goods is expressly excluded. Any law or
-      regulation which provides that the language of a contract shall
-      be construed against the drafter shall not apply to this License.
-      You agree that You alone are responsible for compliance with the
-      United States export administration regulations (and the export
-      control laws and regulation of any other countries) when You use,
-      distribute or otherwise make available any Covered Software.
-      10. RESPONSIBILITY FOR CLAIMS.
-      As between Initial Developer and the Contributors, each party is
-      responsible for claims and damages arising, directly or
-      indirectly, out of its utilization of rights under this License
-      and You agree to work with Initial Developer and Contributors to
-      distribute such responsibility on an equitable basis. Nothing
-      herein is intended or shall be deemed to constitute any admission
-      of liability.
-
-
-=======================================================================
-- SLF4J API Module (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-notice.txt b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-notice.txt
deleted file mode 100644
index d3311e7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly-notice.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS Client Implementation (with dependencies)
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly.xml
deleted file mode 100644
index fc9db40..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-dependencies-assembly.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
-    <id>with-dependencies</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <dependencySets>
-        <dependencySet>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-        </dependencySet>
-    </dependencySets>
-    <files>
-        <file>
-            <source>src/main/assembly/client-with-dependencies-assembly-license.txt</source>
-            <outputDirectory>/</outputDirectory>
-            <destName>LICENSE</destName>
-        </file>
-        <file>
-            <source>src/main/assembly/client-with-dependencies-assembly-notice.txt</source>
-            <outputDirectory>/</outputDirectory>
-            <destName>NOTICE</destName>
-        </file>
-    </files>
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>LICENSE</exclude>
-                <exclude>NOTICE</exclude>
-            </excludes>
-        </fileSet>
-    </fileSets>
-</assembly>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-ri-dependencies-assembly.xml b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-ri-dependencies-assembly.xml
deleted file mode 100644
index 4b5637c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/assembly/client-with-ri-dependencies-assembly.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 assembly is for development only and should not be released!
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
-    <id>with-ri-dependencies</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <dependencySets>
-        <dependencySet>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-        </dependencySet>
-        <dependencySet>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>org.apache.cxf</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-</assembly>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/osgi/Activator.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/osgi/Activator.java
deleted file mode 100644
index 2216dc8..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/osgi/Activator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.osgi;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-
-/**
- * OSGi Bundle activator for the OpenCMIS client which registers an instance of
- * the {@link SessionFactory} in the OSGi service registry.
- */
-public class Activator implements BundleActivator {
-
-    public void start(BundleContext context) {
-        // register the MetaTypeService now, that we are ready
-        Dictionary<String, String> props = new Hashtable<String, String>();
-        props.put(Constants.SERVICE_DESCRIPTION, "Apache Chemistry OpenCMIS Client Session Factory");
-        props.put(Constants.SERVICE_VENDOR, "Apache Software Foundation");
-
-        SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
-        context.registerService(SessionFactory.class.getName(), sessionFactory, props);
-    }
-
-    public void stop(BundleContext context) {
-        // The SessionFactory service will be unregistered automatically
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
deleted file mode 100644
index 9961f70..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
+++ /dev/null
@@ -1,774 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Base class for all persistent session object impl classes.
- */
-public abstract class AbstractCmisObject implements CmisObject, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private SessionImpl session;
-    private ObjectType objectType;
-    private List<SecondaryType> secondaryTypes;
-    private Map<String, Property<?>> properties;
-    private AllowableActions allowableActions;
-    private List<Rendition> renditions;
-    private Acl acl;
-    private List<Policy> policies;
-    private List<Relationship> relationships;
-    private Map<ExtensionLevel, List<CmisExtensionElement>> extensions;
-    private OperationContext creationContext;
-    private long refreshTimestamp;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Initializes the object.
-     */
-    protected void initialize(SessionImpl session, ObjectType objectType, ObjectData objectData,
-            OperationContext context) {
-        if (session == null) {
-            throw new IllegalArgumentException("Session must be set!");
-        }
-
-        if (objectType == null) {
-            throw new IllegalArgumentException("Object type must be set!");
-        }
-
-        if ((objectType.getPropertyDefinitions() == null) || objectType.getPropertyDefinitions().size() < 9) {
-            // there must be at least the 9 standard properties that all objects
-            // have
-            throw new IllegalArgumentException("Object type must have property definitions!");
-        }
-
-        this.session = session;
-        this.objectType = objectType;
-        this.secondaryTypes = null;
-        this.extensions = new EnumMap<ExtensionLevel, List<CmisExtensionElement>>(ExtensionLevel.class);
-        this.creationContext = new OperationContextImpl(context);
-        this.refreshTimestamp = System.currentTimeMillis();
-
-        ObjectFactory of = getObjectFactory();
-
-        if (objectData != null) {
-
-            // handle properties
-            if (objectData.getProperties() != null) {
-
-                // get secondary types
-                if (objectData.getProperties().getProperties() != null
-                        && objectData.getProperties().getProperties()
-                                .containsKey(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
-                    @SuppressWarnings("unchecked")
-                    List<String> stids = (List<String>) objectData.getProperties().getProperties()
-                            .get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues();
-                    if (isNotEmpty(stids)) {
-                        secondaryTypes = new ArrayList<SecondaryType>();
-                        for (String stid : stids) {
-                            if (stid != null) {
-                                ObjectType type = session.getTypeDefinition(stid);
-                                if (type instanceof SecondaryType) {
-                                    secondaryTypes.add((SecondaryType) type);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                this.properties = of.convertProperties(objectType, secondaryTypes, objectData.getProperties());
-                extensions.put(ExtensionLevel.PROPERTIES, objectData.getProperties().getExtensions());
-            }
-
-            // handle allowable actions
-            if (objectData.getAllowableActions() != null) {
-                this.allowableActions = objectData.getAllowableActions();
-                extensions.put(ExtensionLevel.ALLOWABLE_ACTIONS, objectData.getAllowableActions().getExtensions());
-            }
-
-            // handle renditions
-            if (objectData.getRenditions() != null) {
-                this.renditions = new ArrayList<Rendition>();
-                for (RenditionData rd : objectData.getRenditions()) {
-                    this.renditions.add(of.convertRendition(getId(), rd));
-                }
-            }
-
-            // handle ACL
-            if (objectData.getAcl() != null) {
-                acl = objectData.getAcl();
-                extensions.put(ExtensionLevel.ACL, objectData.getAcl().getExtensions());
-
-                if (objectData.isExactAcl() != null) {
-                    final Acl objectAcl = objectData.getAcl();
-                    final Boolean isExact = objectData.isExactAcl();
-                    acl = new Acl() {
-
-                        @Override
-                        public void setExtensions(List<CmisExtensionElement> extensions) {
-                            objectAcl.setExtensions(extensions);
-                        }
-
-                        @Override
-                        public List<CmisExtensionElement> getExtensions() {
-                            return objectAcl.getExtensions();
-                        }
-
-                        @Override
-                        public Boolean isExact() {
-                            return isExact;
-                        }
-
-                        @Override
-                        public List<Ace> getAces() {
-                            return objectAcl.getAces();
-                        }
-                    };
-                }
-            }
-
-            // handle policies
-            if ((objectData.getPolicyIds() != null) && (objectData.getPolicyIds().getPolicyIds() != null)) {
-                policies = new ArrayList<Policy>();
-                for (String pid : objectData.getPolicyIds().getPolicyIds()) {
-                    CmisObject policy = session.getObject(pid);
-                    if (policy instanceof Policy) {
-                        policies.add((Policy) policy);
-                    }
-                }
-                extensions.put(ExtensionLevel.POLICIES, objectData.getPolicyIds().getExtensions());
-            }
-
-            // handle relationships
-            if (objectData.getRelationships() != null) {
-                relationships = new ArrayList<Relationship>();
-                for (ObjectData rod : objectData.getRelationships()) {
-                    CmisObject relationship = of.convertObject(rod, this.creationContext);
-                    if (relationship instanceof Relationship) {
-                        relationships.add((Relationship) relationship);
-                    }
-                }
-            }
-
-            extensions.put(ExtensionLevel.OBJECT, objectData.getExtensions());
-        }
-
-    }
-
-    /**
-     * Acquires a write lock.
-     */
-    protected void writeLock() {
-        lock.writeLock().lock();
-    }
-
-    /**
-     * Releases a write lock.
-     */
-    protected void writeUnlock() {
-        lock.writeLock().unlock();
-    }
-
-    /**
-     * Acquires a read lock.
-     */
-    protected void readLock() {
-        lock.readLock().lock();
-    }
-
-    /**
-     * Releases a read lock.
-     */
-    protected void readUnlock() {
-        lock.readLock().unlock();
-    }
-
-    /**
-     * Returns the session object.
-     */
-    protected SessionImpl getSession() {
-        return session;
-    }
-
-    /**
-     * Returns the repository id.
-     */
-    protected String getRepositoryId() {
-        return getSession().getRepositoryId();
-    }
-
-    /**
-     * Returns the object type.
-     */
-    protected ObjectType getObjectType() {
-        readLock();
-        try {
-            return objectType;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    /**
-     * Returns the binding object.
-     */
-    protected CmisBinding getBinding() {
-        return getSession().getBinding();
-    }
-
-    /**
-     * Returns the object factory.
-     */
-    protected ObjectFactory getObjectFactory() {
-        return getSession().getObjectFactory();
-    }
-
-    /**
-     * Returns the id of this object or throws an exception if the id is
-     * unknown.
-     */
-    protected String getObjectId() {
-        String objectId = getId();
-        if (objectId == null) {
-            throw new IllegalStateException("Object Id is unknown!");
-        }
-
-        return objectId;
-    }
-
-    /**
-     * Returns the {@link OperationContext} that was used to create this object.
-     */
-    protected OperationContext getCreationContext() {
-        return creationContext;
-    }
-
-    /**
-     * Returns the query name of a property.
-     */
-    protected String getPropertyQueryName(String propertyId) {
-        readLock();
-        try {
-            PropertyDefinition<?> propDef = objectType.getPropertyDefinitions().get(propertyId);
-            if (propDef == null) {
-                return null;
-            }
-
-            return propDef.getQueryName();
-        } finally {
-            readUnlock();
-        }
-    }
-
-    // --- delete ---
-
-    public void delete() {
-        delete(true);
-    }
-
-    public void delete(boolean allVersions) {
-        readLock();
-        try {
-            getSession().delete(this, allVersions);
-        } finally {
-            readUnlock();
-        }
-    }
-
-    // --- update properties ---
-
-    public CmisObject updateProperties(Map<String, ?> properties) {
-        ObjectId objectId = updateProperties(properties, true);
-        if (objectId == null) {
-            return null;
-        }
-
-        if (!getObjectId().equals(objectId.getId())) {
-            return getSession().getObject(objectId, getCreationContext());
-        }
-
-        return this;
-    }
-
-    public ObjectId updateProperties(Map<String, ?> properties, boolean refresh) {
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        readLock();
-        String newObjectId = null;
-        try {
-            String objectId = getObjectId();
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-
-            String changeToken = getChangeToken();
-            Holder<String> changeTokenHolder = new Holder<String>(changeToken);
-
-            Set<Updatability> updatebility = EnumSet.noneOf(Updatability.class);
-            updatebility.add(Updatability.READWRITE);
-
-            // check if checked out
-            Boolean isCheckedOut = getPropertyValue(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-            if (Boolean.TRUE.equals(isCheckedOut)) {
-                updatebility.add(Updatability.WHENCHECKEDOUT);
-            }
-
-            // it's time to update
-            getBinding().getObjectService().updateProperties(
-                    getRepositoryId(),
-                    objectIdHolder,
-                    changeTokenHolder,
-                    getObjectFactory()
-                            .convertProperties(properties, this.objectType, this.secondaryTypes, updatebility), null);
-
-            newObjectId = objectIdHolder.getValue();
-
-            // remove the object from the cache, it has been changed
-            getSession().removeObjectFromCache(objectId);
-        } finally {
-            readUnlock();
-        }
-
-        if (refresh) {
-            refresh();
-        }
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public CmisObject rename(String newName) {
-        if (newName == null || newName.length() == 0) {
-            throw new IllegalArgumentException("New name must not be empty!");
-        }
-
-        Map<String, Object> prop = new HashMap<String, Object>();
-        prop.put(PropertyIds.NAME, newName);
-
-        return updateProperties(prop);
-    }
-
-    public ObjectId rename(String newName, boolean refresh) {
-        if (newName == null || newName.length() == 0) {
-            throw new IllegalArgumentException("New name must not be empty!");
-        }
-
-        Map<String, Object> prop = new HashMap<String, Object>();
-        prop.put(PropertyIds.NAME, newName);
-
-        return updateProperties(prop, refresh);
-    }
-
-    // --- properties ---
-
-    public ObjectType getBaseType() {
-        BaseTypeId baseTypeId = getBaseTypeId();
-        if (baseTypeId == null) {
-            return null;
-        }
-
-        return getSession().getTypeDefinition(baseTypeId.value());
-    }
-
-    public BaseTypeId getBaseTypeId() {
-        String baseType = getPropertyValue(PropertyIds.BASE_TYPE_ID);
-        if (baseType == null) {
-            return null;
-        }
-
-        return BaseTypeId.fromValue(baseType);
-    }
-
-    public String getChangeToken() {
-        return getPropertyValue(PropertyIds.CHANGE_TOKEN);
-    }
-
-    public String getCreatedBy() {
-        return getPropertyValue(PropertyIds.CREATED_BY);
-    }
-
-    public GregorianCalendar getCreationDate() {
-        return getPropertyValue(PropertyIds.CREATION_DATE);
-    }
-
-    public String getId() {
-        return getPropertyValue(PropertyIds.OBJECT_ID);
-    }
-
-    public GregorianCalendar getLastModificationDate() {
-        return getPropertyValue(PropertyIds.LAST_MODIFICATION_DATE);
-    }
-
-    public String getLastModifiedBy() {
-        return getPropertyValue(PropertyIds.LAST_MODIFIED_BY);
-    }
-
-    public String getName() {
-        return getPropertyValue(PropertyIds.NAME);
-    }
-
-    public String getDescription() {
-        return getPropertyValue(PropertyIds.DESCRIPTION);
-    }
-
-    public List<Property<?>> getProperties() {
-        readLock();
-        try {
-            return Collections.unmodifiableList(new ArrayList<Property<?>>(this.properties.values()));
-        } finally {
-            readUnlock();
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> Property<T> getProperty(String id) {
-        readLock();
-        try {
-            return (Property<T>) this.properties.get(id);
-        } finally {
-            readUnlock();
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> T getPropertyValue(String id) {
-        Property<T> property = getProperty(id);
-        if (property == null) {
-            return null;
-        }
-        // explicit cast needed by the Sun compiler
-        return (T) property.getValue();
-    }
-
-    public ObjectType getType() {
-        readLock();
-        try {
-            return this.objectType;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public List<SecondaryType> getSecondaryTypes() {
-        readLock();
-        try {
-            return this.secondaryTypes;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public List<ObjectType> findObjectType(String id) {
-        List<ObjectType> result = null;
-
-        readLock();
-        try {
-            if (objectType.getPropertyDefinitions().containsKey(id)) {
-                result = new ArrayList<ObjectType>();
-                result.add(objectType);
-            }
-
-            if (secondaryTypes != null) {
-                for (SecondaryType secondaryType : secondaryTypes) {
-                    if (secondaryType.getPropertyDefinitions() != null
-                            && secondaryType.getPropertyDefinitions().containsKey(id)) {
-                        if (result == null) {
-                            result = new ArrayList<ObjectType>();
-                        }
-                        result.add(secondaryType);
-                    }
-                }
-            }
-        } finally {
-            readUnlock();
-        }
-
-        return result;
-    }
-
-    // --- allowable actions ---
-
-    public AllowableActions getAllowableActions() {
-        readLock();
-        try {
-            return this.allowableActions;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public boolean hasAllowableAction(Action action) {
-        if (action == null) {
-            throw new IllegalArgumentException("Action must be set!");
-        }
-
-        AllowableActions currentAllowableActions = getAllowableActions();
-        if (currentAllowableActions == null || currentAllowableActions.getAllowableActions() == null) {
-            throw new IllegalStateException("Allowable Actions are not available!");
-        }
-
-        return currentAllowableActions.getAllowableActions().contains(action);
-    }
-
-    // --- renditions ---
-
-    public List<Rendition> getRenditions() {
-        readLock();
-        try {
-            return this.renditions;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    // --- ACL ---
-
-    public Acl getAcl(boolean onlyBasicPermissions) {
-        String objectId = getObjectId();
-        return getBinding().getAclService().getAcl(getRepositoryId(), objectId, onlyBasicPermissions, null);
-    }
-
-    public Acl applyAcl(List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation) {
-        Acl result = getSession().applyAcl(this, addAces, removeAces, aclPropagation);
-
-        refresh();
-
-        return result;
-    }
-
-    public Acl addAcl(List<Ace> addAces, AclPropagation aclPropagation) {
-        return applyAcl(addAces, null, aclPropagation);
-    }
-
-    public Acl removeAcl(List<Ace> removeAces, AclPropagation aclPropagation) {
-        return applyAcl(null, removeAces, aclPropagation);
-    }
-
-    public Acl setAcl(List<Ace> aces) {
-        Acl result = getSession().setAcl(this, aces);
-
-        refresh();
-
-        return result;
-    }
-
-    public Acl getAcl() {
-        readLock();
-        try {
-            return this.acl;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public Set<String> getPermissionsForPrincipal(String principalId) {
-        if (principalId == null) {
-            throw new IllegalArgumentException("Principal must be set!");
-        }
-
-        Acl currentAcl = getAcl();
-
-        if (currentAcl == null) {
-            throw new IllegalStateException("ACLs are not available!");
-        }
-
-        if (isNullOrEmpty(acl.getAces())) {
-            return Collections.emptySet();
-        }
-
-        HashSet<String> result = new HashSet<String>();
-
-        for (Ace ace : acl.getAces()) {
-            if (principalId.equals(ace.getPrincipalId()) && ace.getPermissions() != null) {
-                result.addAll(ace.getPermissions());
-            }
-        }
-
-        return result;
-    }
-
-    public Set<String> getPermissonsForPrincipal(String principalId) {
-        return getPermissionsForPrincipal(principalId);
-    }
-
-    // --- policies ---
-
-    public void applyPolicy(ObjectId... policyIds) {
-        readLock();
-        try {
-            getSession().applyPolicy(this, policyIds);
-        } finally {
-            readUnlock();
-        }
-
-        refresh();
-    }
-
-    public void removePolicy(ObjectId... policyIds) {
-        readLock();
-        try {
-            getSession().removePolicy(this, policyIds);
-        } finally {
-            readUnlock();
-        }
-
-        refresh();
-    }
-
-    public List<Policy> getPolicies() {
-        readLock();
-        try {
-            return this.policies;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    // --- relationships ---
-
-    public List<Relationship> getRelationships() {
-        readLock();
-        try {
-            return this.relationships;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    // --- extensions ---
-
-    public List<CmisExtensionElement> getExtensions(ExtensionLevel level) {
-        List<CmisExtensionElement> ext = extensions.get(level);
-        if (ext == null) {
-            return null;
-        }
-
-        return Collections.unmodifiableList(ext);
-    }
-
-    // --- adapters ---
-
-    public <T> T getAdapter(Class<T> adapterInterface) {
-        return null;
-    }
-
-    // --- other ---
-
-    public long getRefreshTimestamp() {
-        readLock();
-        try {
-            return this.refreshTimestamp;
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public void refresh() {
-        writeLock();
-        try {
-            String objectId = getObjectId();
-
-            OperationContext oc = getCreationContext();
-
-            // get the latest data from the repository
-            ObjectData objectData = getSession()
-                    .getBinding()
-                    .getObjectService()
-                    .getObject(getRepositoryId(), objectId, oc.getFilterString(), oc.isIncludeAllowableActions(),
-                            oc.getIncludeRelationships(), oc.getRenditionFilterString(), oc.isIncludePolicies(),
-                            oc.isIncludeAcls(), null);
-
-            // reset this object
-            initialize(session, session.getTypeDefinition(objectType.getId()), objectData, creationContext);
-        } finally {
-            writeUnlock();
-        }
-    }
-
-    public void refreshIfOld(long durationInMillis) {
-        writeLock();
-        try {
-            if (this.refreshTimestamp < System.currentTimeMillis() - durationInMillis) {
-                refresh();
-            }
-        } finally {
-            writeUnlock();
-        }
-    }
-
-    @Override
-    public String toString() {
-        readLock();
-        try {
-            if (objectType == null) {
-                return "<unknown>";
-            }
-
-            return objectType.getBaseTypeId() + " (" + objectType.getId() + "): " + getId();
-        } finally {
-            readUnlock();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractFilableCmisObject.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractFilableCmisObject.java
deleted file mode 100644
index 6041a49..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractFilableCmisObject.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Base class for all filable persistent session object impl classes.
- */
-public abstract class AbstractFilableCmisObject extends AbstractCmisObject implements FileableCmisObject {
-
-    private static final long serialVersionUID = 1L;
-
-    public List<Folder> getParents() {
-        return getParents(getSession().getDefaultContext());
-    }
-
-    public List<Folder> getParents(OperationContext context) {
-        String objectId = getObjectId();
-
-        // get object ids of the parent folders
-        List<ObjectParentData> bindingParents = getBinding().getNavigationService().getObjectParents(getRepositoryId(),
-                objectId, getPropertyQueryName(PropertyIds.OBJECT_ID), false, IncludeRelationships.NONE, null, false,
-                null);
-
-        List<Folder> parents = new ArrayList<Folder>();
-
-        for (ObjectParentData p : bindingParents) {
-            if ((p == null) || (p.getObject() == null) || (p.getObject().getProperties() == null)) {
-                // should not happen...
-                throw new CmisRuntimeException("Repository sent invalid data!");
-            }
-
-            // get id property
-            PropertyData<?> idProperty = p.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID);
-            if (!(idProperty instanceof PropertyId) && !(idProperty instanceof PropertyString)) {
-                // the repository sent an object without a valid object id...
-                throw new CmisRuntimeException("Repository sent invalid data! No object id!");
-            }
-
-            // fetch the object and make sure it is a folder
-            CmisObject parentFolder = getSession().getObject((String) idProperty.getFirstValue(), context);
-            if (!(parentFolder instanceof Folder)) {
-                // the repository sent an object that is not a folder...
-                throw new CmisRuntimeException("Repository sent invalid data! Object is not a folder!");
-            }
-
-            parents.add((Folder) parentFolder);
-        }
-
-        return parents;
-    }
-
-    public List<String> getPaths() {
-        String objectId = getObjectId();
-
-        ObjectType folderType = getSession().getTypeDefinition(BaseTypeId.CMIS_FOLDER.value());
-        PropertyDefinition<?> propDef = folderType.getPropertyDefinitions().get(PropertyIds.PATH);
-        String pathQueryName = (propDef == null ? null : propDef.getQueryName());
-
-        // get object paths of the parent folders
-        List<ObjectParentData> bindingParents = getBinding().getNavigationService().getObjectParents(getRepositoryId(),
-                objectId, pathQueryName, false, IncludeRelationships.NONE, null, true, null);
-
-        List<String> paths = new ArrayList<String>();
-
-        for (ObjectParentData p : bindingParents) {
-            if ((p == null) || (p.getObject() == null) || (p.getObject().getProperties() == null)) {
-                // should not happen...
-                throw new CmisRuntimeException("Repository sent invalid data!");
-            }
-
-            // get path property
-            PropertyData<?> pathProperty = p.getObject().getProperties().getProperties().get(PropertyIds.PATH);
-            if (!(pathProperty instanceof PropertyString)) {
-                // the repository sent a folder without a valid path...
-                throw new CmisRuntimeException("Repository sent invalid data! No path property!");
-            }
-
-            if (p.getRelativePathSegment() == null) {
-                // the repository didn't send a relative path segment
-                throw new CmisRuntimeException("Repository sent invalid data! No relative path segement!");
-            }
-
-            String folderPath = ((String) pathProperty.getFirstValue());
-            paths.add(folderPath + (folderPath.endsWith("/") ? "" : "/") + p.getRelativePathSegment());
-        }
-
-        return paths;
-    }
-
-    public FileableCmisObject move(ObjectId sourceFolderId, ObjectId targetFolderId) {
-        return move(sourceFolderId, targetFolderId, getSession().getDefaultContext());
-    }
-
-    public FileableCmisObject move(ObjectId sourceFolderId, ObjectId targetFolderId, OperationContext context) {
-        String objectId = getObjectId();
-        Holder<String> objectIdHolder = new Holder<String>(objectId);
-
-        if ((sourceFolderId == null) || (sourceFolderId.getId() == null)) {
-            throw new IllegalArgumentException("Source folder id must be set!");
-        }
-
-        if ((targetFolderId == null) || (targetFolderId.getId() == null)) {
-            throw new IllegalArgumentException("Target folder id must be set!");
-        }
-
-        getBinding().getObjectService().moveObject(getRepositoryId(), objectIdHolder, targetFolderId.getId(),
-                sourceFolderId.getId(), null);
-
-        // invalidate path cache
-        getSession().removeObjectFromCache(objectId);
-
-        if (objectIdHolder.getValue() == null) {
-            return null;
-        }
-
-        CmisObject movedObject = getSession().getObject(objectIdHolder.getValue(), context);
-        if (!(movedObject instanceof FileableCmisObject)) {
-            throw new CmisRuntimeException("Moved object is invalid!");
-        }
-
-        return (FileableCmisObject) movedObject;
-    }
-
-    public void addToFolder(ObjectId folderId, boolean allVersions) {
-        String objectId = getObjectId();
-
-        if ((folderId == null) || (folderId.getId() == null)) {
-            throw new IllegalArgumentException("Folder Id must be set!");
-        }
-
-        getBinding().getMultiFilingService().addObjectToFolder(getRepositoryId(), objectId, folderId.getId(),
-                allVersions, null);
-
-        // invalidate path cache
-        getSession().removeObjectFromCache(objectId);
-    }
-
-    public void removeFromFolder(ObjectId folderId) {
-        String objectId = getObjectId();
-
-        getBinding().getMultiFilingService().removeObjectFromFolder(getRepositoryId(), objectId,
-                (folderId != null ? folderId.getId() : null), null);
-
-        // invalidate path cache
-        getSession().removeObjectFromCache(objectId);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventImpl.java
deleted file mode 100644
index 6c308d6..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-
-/**
- * Change Event.
- */
-public class ChangeEventImpl extends ChangeEventInfoDataImpl implements ChangeEvent, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private String objectId;
-    private Map<String, List<?>> properties;
-    private List<String> policyIds;
-    private Acl acl;
-
-    public ChangeEventImpl() {
-    }
-
-    public ChangeEventImpl(ChangeType changeType, GregorianCalendar changeTime, String objectId,
-            Map<String, List<?>> properties, List<String> policyIds, Acl acl) {
-        super(changeType, changeTime);
-        this.objectId = objectId;
-        this.properties = properties;
-        this.policyIds = policyIds;
-        this.acl = acl;
-    }
-
-    public String getObjectId() {
-        return objectId;
-    }
-
-    public void setObjectId(String objectId) {
-        this.objectId = objectId;
-    }
-
-    public Map<String, List<?>> getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Map<String, List<?>> properties) {
-        this.properties = properties;
-    }
-
-    public List<String> getPolicyIds() {
-        return policyIds;
-    }
-
-    public void setPolicyIds(List<String> policyIds) {
-        this.policyIds = policyIds;
-    }
-
-    public Acl getAcl() {
-        return acl;
-    }
-
-    public void setAcl(Acl acl) {
-        this.acl = acl;
-    }
-
-    @Override
-    public String toString() {
-        return "Change Event [change type=" + getChangeType() + ", change time=" + getChangeTime() + ", object id="
-                + objectId + ", properties=" + properties + ", policy ids=" + policyIds + ", ACL=" + acl + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventsImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventsImpl.java
deleted file mode 100644
index faa284c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ChangeEventsImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.ChangeEvents;
-
-public class ChangeEventsImpl implements ChangeEvents {
-
-    private String latestChangeLogToken;
-    private List<ChangeEvent> events;
-    private boolean hasMoreItems = false;
-    private long totalNumItems = -1;
-
-    public ChangeEventsImpl() {
-    }
-
-    public ChangeEventsImpl(String latestChangeLogToken, List<ChangeEvent> events, boolean hasMoreItems,
-            long totalNumItems) {
-        this.latestChangeLogToken = latestChangeLogToken;
-        this.events = events;
-        this.hasMoreItems = hasMoreItems;
-        this.totalNumItems = totalNumItems;
-    }
-
-    public String getLatestChangeLogToken() {
-        return latestChangeLogToken;
-    }
-
-    public void setLatestChangeLogToken(String latestChangeLogToken) {
-        this.latestChangeLogToken = latestChangeLogToken;
-    }
-
-    public List<ChangeEvent> getChangeEvents() {
-        if (events == null) {
-            events = new ArrayList<ChangeEvent>();
-        }
-
-        return events;
-    }
-
-    public void setChangeEvents(List<ChangeEvent> events) {
-        this.events = events;
-    }
-
-    public boolean getHasMoreItems() {
-        return hasMoreItems;
-    }
-
-    public void setHasMoreItems(boolean hasMoreItems) {
-        this.hasMoreItems = hasMoreItems;
-    }
-
-    public void setTotalNumItems(long totalNumItems) {
-        this.totalNumItems = totalNumItems;
-    }
-
-    public long getTotalNumItems() {
-        return totalNumItems;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java
deleted file mode 100644
index d81c316..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Helper methods for binding handling.
- */
-public final class CmisBindingHelper {
-
-    private CmisBindingHelper() {
-    }
-
-    /**
-     * Creates a {@link CmisBinding} object.
-     */
-    public static CmisBinding createBinding(Map<String, String> parameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        if (parameters == null || parameters.isEmpty()) {
-            throw new CmisRuntimeException("Session parameter not set!");
-        }
-
-        if (!parameters.containsKey(SessionParameter.BINDING_TYPE)) {
-            parameters.put(SessionParameter.BINDING_TYPE, BindingType.CUSTOM.value());
-        }
-
-        BindingType bt = BindingType.fromValue(parameters.get(SessionParameter.BINDING_TYPE));
-
-        switch (bt) {
-        case ATOMPUB:
-            return createAtomPubBinding(parameters, authenticationProvider, typeDefCache);
-        case WEBSERVICES:
-            return createWebServiceBinding(parameters, authenticationProvider, typeDefCache);
-        case BROWSER:
-            return createCmisBrowserBinding(parameters, authenticationProvider, typeDefCache);
-        case LOCAL:
-            return createLocalBinding(parameters, typeDefCache);
-        case CUSTOM:
-            return createCustomBinding(parameters, authenticationProvider, typeDefCache);
-        default:
-            throw new CmisRuntimeException("Ambiguous session parameter: " + parameters);
-        }
-    }
-
-    /**
-     * Creates a binding with custom parameters.
-     */
-    private static CmisBinding createCustomBinding(Map<String, String> parameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisBinding(parameters, authenticationProvider, typeDefCache);
-
-        return binding;
-    }
-
-    /**
-     * Creates a Web Services binding.
-     */
-    private static CmisBinding createWebServiceBinding(Map<String, String> parameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisWebServicesBinding(parameters, authenticationProvider, typeDefCache);
-
-        return binding;
-    }
-
-    /**
-     * Creates an AtomPub binding.
-     */
-    private static CmisBinding createAtomPubBinding(Map<String, String> parameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisAtomPubBinding(parameters, authenticationProvider, typeDefCache);
-
-        return binding;
-    }
-
-    /**
-     * Creates an Browser binding.
-     */
-    private static CmisBinding createCmisBrowserBinding(Map<String, String> parameters,
-            AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisBrowserBinding(parameters, authenticationProvider, typeDefCache);
-
-        return binding;
-    }
-
-    /**
-     * Creates a local binding.
-     */
-    private static CmisBinding createLocalBinding(Map<String, String> parameters, TypeDefinitionCache typeDefCache) {
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = factory.createCmisLocalBinding(parameters, typeDefCache);
-
-        return binding;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
deleted file mode 100644
index b96e993..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PartialContentStream;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamHashImpl;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-public class DocumentImpl extends AbstractFilableCmisObject implements Document {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public DocumentImpl(SessionImpl session, ObjectType objectType, ObjectData objectData, OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-    // properties
-
-    public String getCheckinComment() {
-        return getPropertyValue(PropertyIds.CHECKIN_COMMENT);
-    }
-
-    public String getVersionLabel() {
-        return getPropertyValue(PropertyIds.VERSION_LABEL);
-    }
-
-    public String getVersionSeriesId() {
-        return getPropertyValue(PropertyIds.VERSION_SERIES_ID);
-    }
-
-    public String getVersionSeriesCheckedOutId() {
-        return getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
-    }
-
-    public String getVersionSeriesCheckedOutBy() {
-        return getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
-    }
-
-    public Boolean isImmutable() {
-        return getPropertyValue(PropertyIds.IS_IMMUTABLE);
-    }
-
-    public Boolean isLatestMajorVersion() {
-        return getPropertyValue(PropertyIds.IS_LATEST_MAJOR_VERSION);
-    }
-
-    public Boolean isLatestVersion() {
-        return getPropertyValue(PropertyIds.IS_LATEST_VERSION);
-    }
-
-    public Boolean isMajorVersion() {
-        return getPropertyValue(PropertyIds.IS_MAJOR_VERSION);
-    }
-
-    public Boolean isPrivateWorkingCopy() {
-        return getPropertyValue(PropertyIds.IS_PRIVATE_WORKING_COPY);
-    }
-
-    public Boolean isVersionSeriesCheckedOut() {
-        return getPropertyValue(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-    }
-
-    public long getContentStreamLength() {
-        BigInteger bigInt = getPropertyValue(PropertyIds.CONTENT_STREAM_LENGTH);
-        return (bigInt == null) ? (long) -1 : bigInt.longValue();
-    }
-
-    public String getContentStreamMimeType() {
-        return getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-    }
-
-    public String getContentStreamFileName() {
-        return getPropertyValue(PropertyIds.CONTENT_STREAM_FILE_NAME);
-    }
-
-    public String getContentStreamId() {
-        return getPropertyValue(PropertyIds.CONTENT_STREAM_ID);
-    }
-
-    public List<ContentStreamHash> getContentStreamHashes() {
-        List<String> hashes = getPropertyValue(PropertyIds.CONTENT_STREAM_HASH);
-        if (isNullOrEmpty(hashes)) {
-            return null;
-        }
-
-        List<ContentStreamHash> result = new ArrayList<ContentStreamHash>(hashes.size());
-        for (String hash : hashes) {
-            result.add(new ContentStreamHashImpl(hash));
-        }
-
-        return result;
-    }
-
-    // operations
-
-    public Document copy(ObjectId targetFolderId, Map<String, ?> properties, VersioningState versioningState,
-            List<Policy> policies, List<Ace> addAces, List<Ace> removeAces, OperationContext context) {
-
-        ObjectId newId = null;
-        try {
-            newId = getSession().createDocumentFromSource(this, properties, targetFolderId, versioningState, policies,
-                    addAces, removeAces);
-        } catch (CmisNotSupportedException nse) {
-            newId = copyViaClient(targetFolderId, properties, versioningState, policies, addAces, removeAces);
-        }
-
-        // if no context is provided the object will not be fetched
-        if (context == null || newId == null) {
-            return null;
-        }
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Document)) {
-            throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
-        }
-
-        return (Document) object;
-    }
-
-    public Document copy(ObjectId targetFolderId) {
-        return copy(targetFolderId, null, null, null, null, null, getSession().getDefaultContext());
-    }
-
-    /**
-     * Copies the document manually. The content is streamed from the repository
-     * and back.
-     */
-    protected ObjectId copyViaClient(ObjectId targetFolderId, Map<String, ?> properties,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
-        Map<String, Object> newProperties = new HashMap<String, Object>();
-
-        OperationContext allPropsContext = getSession().createOperationContext();
-        allPropsContext.setFilterString("*");
-        allPropsContext.setIncludeAcls(false);
-        allPropsContext.setIncludeAllowableActions(false);
-        allPropsContext.setIncludePathSegments(false);
-        allPropsContext.setIncludePolicies(false);
-        allPropsContext.setIncludeRelationships(IncludeRelationships.NONE);
-        allPropsContext.setRenditionFilterString("cmis:none");
-
-        Document allPropsDoc = (Document) getSession().getObject(this, allPropsContext);
-
-        for (Property<?> prop : allPropsDoc.getProperties()) {
-            if (prop.getDefinition().getUpdatability() == Updatability.READWRITE
-                    || prop.getDefinition().getUpdatability() == Updatability.ONCREATE) {
-                newProperties.put(prop.getId(), prop.getValue());
-            }
-        }
-
-        if (properties != null) {
-            newProperties.putAll(properties);
-        }
-
-        ContentStream contentStream = allPropsDoc.getContentStream();
-        try {
-            return getSession().createDocument(newProperties, targetFolderId, contentStream, versioningState, policies,
-                    addAces, removeAces);
-        } finally {
-            if (contentStream != null) {
-                InputStream stream = contentStream.getStream();
-                if (stream != null) {
-                    try {
-                        stream.close();
-                    } catch (IOException ioe) {
-                        throw new CmisRuntimeException("Cannot close source stream!", ioe);
-                    }
-                }
-            }
-        }
-    }
-
-    public void deleteAllVersions() {
-        delete(true);
-    }
-
-    // versioning
-
-    public ObjectId checkOut() {
-        String newObjectId = null;
-
-        readLock();
-        try {
-            String objectId = getObjectId();
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-
-            getBinding().getVersioningService().checkOut(getRepositoryId(), objectIdHolder, null, null);
-            newObjectId = objectIdHolder.getValue();
-        } finally {
-            readUnlock();
-        }
-
-        // remove original version from cache, the path and a few versioning
-        // properties are not valid anymore
-        getSession().removeObjectFromCache(this);
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public void cancelCheckOut() {
-        String objectId = getObjectId();
-
-        getBinding().getVersioningService().cancelCheckOut(getRepositoryId(), objectId, null);
-
-        // remove PWC from cache, it doesn't exist anymore
-        getSession().removeObjectFromCache(this);
-    }
-
-    public ObjectId checkIn(boolean major, Map<String, ?> properties, ContentStream contentStream,
-            String checkinComment, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
-        String newObjectId = null;
-
-        readLock();
-        try {
-            Holder<String> objectIdHolder = new Holder<String>(getObjectId());
-
-            ObjectFactory of = getObjectFactory();
-
-            Set<Updatability> updatebility = EnumSet.noneOf(Updatability.class);
-            updatebility.add(Updatability.READWRITE);
-            updatebility.add(Updatability.WHENCHECKEDOUT);
-
-            getBinding().getVersioningService().checkIn(getRepositoryId(), objectIdHolder, major,
-                    of.convertProperties(properties, getType(), getSecondaryTypes(), updatebility),
-                    of.convertContentStream(contentStream), checkinComment, of.convertPolicies(policies),
-                    of.convertAces(addAces), of.convertAces(removeAces), null);
-
-            newObjectId = objectIdHolder.getValue();
-        } finally {
-            readUnlock();
-        }
-
-        // remove PWC from cache, it doesn't exist anymore
-        getSession().removeObjectFromCache(this);
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public List<Document> getAllVersions() {
-        return getAllVersions(getSession().getDefaultContext());
-    }
-
-    public List<Document> getAllVersions(OperationContext context) {
-        String objectId;
-        String versionSeriesId;
-
-        readLock();
-        try {
-            objectId = getObjectId();
-            versionSeriesId = getVersionSeriesId();
-        } finally {
-            readUnlock();
-        }
-
-        List<ObjectData> versions = getBinding().getVersioningService().getAllVersions(getRepositoryId(), objectId,
-                versionSeriesId, context.getFilterString(), context.isIncludeAllowableActions(), null);
-
-        ObjectFactory objectFactory = getSession().getObjectFactory();
-
-        List<Document> result = new ArrayList<Document>();
-        if (versions != null) {
-            for (ObjectData objectData : versions) {
-                CmisObject doc = objectFactory.convertObject(objectData, context);
-                if (!(doc instanceof Document)) {
-                    // should not happen...
-                    continue;
-                }
-
-                result.add((Document) doc);
-            }
-        }
-
-        return result;
-
-    }
-
-    public Document getObjectOfLatestVersion(boolean major) {
-        return getObjectOfLatestVersion(major, getSession().getDefaultContext());
-    }
-
-    public Document getObjectOfLatestVersion(boolean major, OperationContext context) {
-        return getSession().getLatestDocumentVersion(this, major, context);
-    }
-
-    // content operations
-
-    public ContentStream getContentStream() {
-        return getContentStream(null, null, null);
-    }
-
-    public ContentStream getContentStream(BigInteger offset, BigInteger length) {
-        return getContentStream(null, offset, length);
-    }
-
-    public ContentStream getContentStream(String streamId) {
-        return getContentStream(streamId, null, null);
-    }
-
-    public ContentStream getContentStream(String streamId, BigInteger offset, BigInteger length) {
-        // get the stream
-        ContentStream contentStream = getSession().getContentStream(this, streamId, offset, length);
-
-        if (contentStream == null) {
-            return null;
-        }
-
-        // the AtomPub binding doesn't return a file name
-        // -> get the file name from properties, if present
-        String filename = contentStream.getFileName();
-        if (filename == null) {
-            filename = getContentStreamFileName();
-        }
-
-        long lengthLong = (contentStream.getBigLength() == null ? -1 : contentStream.getBigLength().longValue());
-
-        // convert and return stream object
-        return getSession().getObjectFactory().createContentStream(filename, lengthLong, contentStream.getMimeType(),
-                contentStream.getStream(), contentStream instanceof PartialContentStream);
-    }
-
-    public String getContentUrl() {
-        return getContentUrl(null);
-    }
-
-    public String getContentUrl(String streamId) {
-        if (getBinding().getObjectService() instanceof LinkAccess) {
-            LinkAccess linkAccess = (LinkAccess) getBinding().getObjectService();
-
-            if (streamId == null) {
-                return linkAccess.loadContentLink(getRepositoryId(), getId());
-            } else {
-                return linkAccess.loadRenditionContentLink(getRepositoryId(), getId(), streamId);
-            }
-        }
-
-        return null;
-    }
-
-    public Document setContentStream(ContentStream contentStream, boolean overwrite) {
-        ObjectId objectId = setContentStream(contentStream, overwrite, true);
-        if (objectId == null) {
-            return null;
-        }
-
-        if (!getObjectId().equals(objectId.getId())) {
-            return (Document) getSession().getObject(objectId, getCreationContext());
-        }
-
-        return this;
-    }
-
-    public ObjectId setContentStream(ContentStream contentStream, boolean overwrite, boolean refresh) {
-        String newObjectId = null;
-
-        readLock();
-        try {
-            Holder<String> objectIdHolder = new Holder<String>(getObjectId());
-            Holder<String> changeTokenHolder = new Holder<String>((String) getPropertyValue(PropertyIds.CHANGE_TOKEN));
-
-            getBinding().getObjectService().setContentStream(getRepositoryId(), objectIdHolder, overwrite,
-                    changeTokenHolder, getObjectFactory().convertContentStream(contentStream), null);
-
-            newObjectId = objectIdHolder.getValue();
-        } finally {
-            readUnlock();
-        }
-
-        if (refresh) {
-            refresh();
-        }
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public Document appendContentStream(ContentStream contentStream, boolean isLastChunk) {
-        if (getSession().getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("This method is not supported for CMIS 1.0 repositories.");
-        }
-
-        ObjectId objectId = appendContentStream(contentStream, isLastChunk, true);
-        if (objectId == null) {
-            return null;
-        }
-
-        if (!getObjectId().equals(objectId.getId())) {
-            return (Document) getSession().getObject(objectId, getCreationContext());
-        }
-
-        return this;
-    }
-
-    public ObjectId appendContentStream(ContentStream contentStream, boolean isLastChunk, boolean refresh) {
-        String newObjectId = null;
-
-        readLock();
-        try {
-            Holder<String> objectIdHolder = new Holder<String>(getObjectId());
-            Holder<String> changeTokenHolder = new Holder<String>((String) getPropertyValue(PropertyIds.CHANGE_TOKEN));
-
-            getBinding().getObjectService().appendContentStream(getRepositoryId(), objectIdHolder, changeTokenHolder,
-                    getObjectFactory().convertContentStream(contentStream), isLastChunk, null);
-
-            newObjectId = objectIdHolder.getValue();
-        } finally {
-            readUnlock();
-        }
-
-        if (refresh) {
-            refresh();
-        }
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public Document deleteContentStream() {
-        ObjectId objectId = deleteContentStream(true);
-        if (objectId == null) {
-            return null;
-        }
-
-        if (!getObjectId().equals(objectId.getId())) {
-            return (Document) getSession().getObject(objectId, getCreationContext());
-        }
-
-        return this;
-    }
-
-    public ObjectId deleteContentStream(boolean refresh) {
-        String newObjectId = null;
-
-        readLock();
-        try {
-            Holder<String> objectIdHolder = new Holder<String>(getObjectId());
-            Holder<String> changeTokenHolder = new Holder<String>((String) getPropertyValue(PropertyIds.CHANGE_TOKEN));
-
-            getBinding().getObjectService().deleteContentStream(getRepositoryId(), objectIdHolder, changeTokenHolder,
-                    null);
-
-            newObjectId = objectIdHolder.getValue();
-        } finally {
-            readUnlock();
-        }
-
-        if (refresh) {
-            refresh();
-        }
-
-        if (newObjectId == null) {
-            return null;
-        }
-
-        return getSession().createObjectId(newObjectId);
-    }
-
-    public ObjectId checkIn(boolean major, Map<String, ?> properties, ContentStream contentStream, String checkinComment) {
-        return this.checkIn(major, properties, contentStream, checkinComment, null, null, null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java
deleted file mode 100644
index 3fff1e3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Item;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher;
-import org.apache.chemistry.opencmis.client.runtime.util.CollectionIterable;
-import org.apache.chemistry.opencmis.client.runtime.util.TreeImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-
-public class FolderImpl extends AbstractFilableCmisObject implements Folder {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public FolderImpl(SessionImpl session, ObjectType objectType, ObjectData objectData, OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-    public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context) {
-
-        ObjectId newId = getSession().createDocument(properties, this, contentStream, versioningState, policies,
-                addAces, removeAces);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Document)) {
-            throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
-        }
-
-        return (Document) object;
-    }
-
-    public Document createDocumentFromSource(ObjectId source, Map<String, ?> properties,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context) {
-
-        ObjectId newId = getSession().createDocumentFromSource(source, properties, this, versioningState, policies,
-                addAces, removeAces);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Document)) {
-            throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
-        }
-
-        return (Document) object;
-    }
-
-    public Folder createFolder(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces, OperationContext context) {
-
-        ObjectId newId = getSession().createFolder(properties, this, policies, addAces, removeAces);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Folder)) {
-            throw new CmisRuntimeException("Newly created object is not a folder! New id: " + newId);
-        }
-
-        return (Folder) object;
-    }
-
-    public Policy createPolicy(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces, OperationContext context) {
-
-        ObjectId newId = getSession().createPolicy(properties, this, policies, addAces, removeAces);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Policy)) {
-            throw new CmisRuntimeException("Newly created object is not a policy! New id: " + newId);
-        }
-
-        return (Policy) object;
-    }
-
-    public Item createItem(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
-            OperationContext context) {
-
-        ObjectId newId = getSession().createItem(properties, this, policies, addAces, removeAces);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(newId, context);
-        if (!(object instanceof Item)) {
-            throw new CmisRuntimeException("Newly created object is not an item! New id: " + newId);
-        }
-
-        return (Item) object;
-    }
-
-    public List<String> deleteTree(boolean allVersions, UnfileObject unfile, boolean continueOnFailure) {
-        String repositoryId = getRepositoryId();
-        String objectId = getObjectId();
-
-        FailedToDeleteData failed = getBinding().getObjectService().deleteTree(repositoryId, objectId, allVersions,
-                unfile, continueOnFailure, null);
-
-        if (failed == null || isNullOrEmpty(failed.getIds())) {
-            getSession().removeObjectFromCache(this);
-        }
-
-        return (failed != null ? failed.getIds() : null);
-    }
-
-    public String getParentId() {
-        return getPropertyValue(PropertyIds.PARENT_ID);
-    }
-
-    public List<ObjectType> getAllowedChildObjectTypes() {
-        List<ObjectType> result = new ArrayList<ObjectType>();
-
-        readLock();
-        try {
-            List<String> otids = getPropertyValue(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
-            if (otids == null) {
-                return result;
-            }
-
-            for (String otid : otids) {
-                result.add(getSession().getTypeDefinition(otid));
-            }
-        } finally {
-            readUnlock();
-        }
-
-        return result;
-    }
-
-    public ItemIterable<Document> getCheckedOutDocs() {
-        return getCheckedOutDocs(getSession().getDefaultContext());
-    }
-
-    public ItemIterable<Document> getCheckedOutDocs(OperationContext context) {
-        final String objectId = getObjectId();
-        final NavigationService navigationService = getBinding().getNavigationService();
-        final ObjectFactory objectFactory = getSession().getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<Document>(new AbstractPageFetcher<Document>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<Document> fetchPage(long skipCount) {
-
-                // get checked out documents for this folder
-                ObjectList checkedOutDocs = navigationService.getCheckedOutDocs(getRepositoryId(), objectId,
-                        ctxt.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(),
-                        ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(),
-                        BigInteger.valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
-                // convert objects
-                List<Document> page = new ArrayList<Document>();
-                if (checkedOutDocs.getObjects() != null) {
-                    for (ObjectData objectData : checkedOutDocs.getObjects()) {
-                        CmisObject doc = objectFactory.convertObject(objectData, ctxt);
-                        if (!(doc instanceof Document)) {
-                            // should not happen...
-                            continue;
-                        }
-
-                        page.add((Document) doc);
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<Document>(page, checkedOutDocs.getNumItems(),
-                        checkedOutDocs.hasMoreItems());
-            }
-        });
-    }
-
-    public ItemIterable<CmisObject> getChildren() {
-        return getChildren(getSession().getDefaultContext());
-    }
-
-    public ItemIterable<CmisObject> getChildren(OperationContext context) {
-        final String objectId = getObjectId();
-        final NavigationService navigationService = getBinding().getNavigationService();
-        final ObjectFactory objectFactory = getSession().getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<CmisObject>(new AbstractPageFetcher<CmisObject>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<CmisObject> fetchPage(long skipCount) {
-
-                // get the children
-                ObjectInFolderList children = navigationService.getChildren(getRepositoryId(), objectId,
-                        ctxt.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(),
-                        ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(), ctxt.isIncludePathSegments(),
-                        BigInteger.valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
-                // convert objects
-                List<CmisObject> page = new ArrayList<CmisObject>();
-                List<ObjectInFolderData> childObjects = children.getObjects();
-                if (childObjects != null) {
-                    for (ObjectInFolderData objectData : childObjects) {
-                        if (objectData.getObject() != null) {
-                            page.add(objectFactory.convertObject(objectData.getObject(), ctxt));
-                        }
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<CmisObject>(page, children.getNumItems(), children.hasMoreItems());
-            }
-        });
-    }
-
-    public List<Tree<FileableCmisObject>> getDescendants(int depth) {
-        return getDescendants(depth, getSession().getDefaultContext());
-    }
-
-    public List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext context) {
-        String objectId = getObjectId();
-
-        // get the descendants
-        List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getDescendants(
-                getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-                context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePathSegments(), null);
-
-        return convertBindingContainer(providerContainerList, context);
-    }
-
-    public List<Tree<FileableCmisObject>> getFolderTree(int depth) {
-        return getFolderTree(depth, getSession().getDefaultContext());
-    }
-
-    public List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext context) {
-        String objectId = getObjectId();
-
-        // get the folder tree
-        List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getFolderTree(
-                getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-                context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePathSegments(), null);
-
-        return convertBindingContainer(providerContainerList, context);
-    }
-
-    /**
-     * Converts a binding container into an API container.
-     */
-    private List<Tree<FileableCmisObject>> convertBindingContainer(List<ObjectInFolderContainer> bindingContainerList,
-            OperationContext context) {
-        if (bindingContainerList == null) {
-            return null;
-        }
-
-        ObjectFactory of = getSession().getObjectFactory();
-
-        List<Tree<FileableCmisObject>> result = new ArrayList<Tree<FileableCmisObject>>();
-        for (ObjectInFolderContainer oifc : bindingContainerList) {
-            if ((oifc.getObject() == null) || (oifc.getObject().getObject() == null)) {
-                // shouldn't happen ...
-                continue;
-            }
-
-            // convert the object
-            CmisObject object = of.convertObject(oifc.getObject().getObject(), context);
-            if (!(object instanceof FileableCmisObject)) {
-                // the repository must not return objects that are not fileable,
-                // but you never know...
-                continue;
-            }
-
-            // convert the children
-            List<Tree<FileableCmisObject>> children = convertBindingContainer(oifc.getChildren(), context);
-
-            // add both to current container
-            result.add(new TreeImpl<FileableCmisObject>((FileableCmisObject) object, children));
-        }
-
-        return result;
-    }
-
-    public boolean isRootFolder() {
-        String objectId = getObjectId();
-        String rootFolderId = getSession().getRepositoryInfo().getRootFolderId();
-
-        return objectId.equals(rootFolderId);
-    }
-
-    public Folder getFolderParent() {
-        if (isRootFolder()) {
-            return null;
-        }
-
-        List<Folder> parents = getParents(getSession().getDefaultContext());
-        if (isNullOrEmpty(parents)) {
-            return null;
-        }
-
-        return parents.get(0);
-    }
-
-    public String getPath() {
-        String path;
-
-        readLock();
-        try {
-            // get the path property
-            path = getPropertyValue(PropertyIds.PATH);
-
-            // if the path property isn't set, get it
-            if (path == null) {
-                String objectId = getObjectId();
-                ObjectData objectData = getBinding().getObjectService().getObject(getRepositoryId(), objectId,
-                        getPropertyQueryName(PropertyIds.PATH), false, IncludeRelationships.NONE, "cmis:none", false,
-                        false, null);
-
-                if ((objectData.getProperties() != null) && (objectData.getProperties().getProperties() != null)) {
-                    PropertyData<?> pathProperty = objectData.getProperties().getProperties().get(PropertyIds.PATH);
-
-                    if (pathProperty instanceof PropertyString) {
-                        path = ((PropertyString) pathProperty).getFirstValue();
-                    }
-                }
-            }
-        } finally {
-            readUnlock();
-        }
-
-        // we still don't know the path ... it's not a CMIS compliant repository
-        if (path == null) {
-            throw new CmisRuntimeException("Repository didn't return " + PropertyIds.PATH + "!");
-        }
-
-        return path;
-    }
-
-    @Override
-    public List<Folder> getParents(OperationContext context) {
-        if (isRootFolder()) {
-            return Collections.emptyList();
-        }
-
-        String objectId = getObjectId();
-
-        ObjectData bindingParent = getBinding().getNavigationService().getFolderParent(getRepositoryId(), objectId,
-                getPropertyQueryName(PropertyIds.OBJECT_ID), null);
-
-        if (bindingParent.getProperties() == null) {
-            // should not happen...
-            throw new CmisRuntimeException("Repository sent invalid data!");
-        }
-
-        // get id property
-        PropertyData<?> idProperty = bindingParent.getProperties().getProperties().get(PropertyIds.OBJECT_ID);
-        if (!(idProperty instanceof PropertyId) && !(idProperty instanceof PropertyString)) {
-            // the repository sent an object without a valid object id...
-            throw new CmisRuntimeException("Repository sent invalid data! No object id!");
-        }
-
-        // fetch the object and make sure it is a folder
-        CmisObject parentFolder = getSession().getObject((String) idProperty.getFirstValue(), context);
-        if (!(parentFolder instanceof Folder)) {
-            // the repository sent an object that is not a folder...
-            throw new CmisRuntimeException("Repository sent invalid data! Object is not a folder!");
-        }
-
-        return Collections.singletonList((Folder) parentFolder);
-    }
-
-    @Override
-    public List<String> getPaths() {
-        return Collections.singletonList(getPath());
-    }
-
-    public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
-            VersioningState versioningState) {
-        return this.createDocument(properties, contentStream, versioningState, null, null, null, getSession()
-                .getDefaultContext());
-    }
-
-    public Document createDocumentFromSource(ObjectId source, Map<String, ?> properties, VersioningState versioningState) {
-        return this.createDocumentFromSource(source, properties, versioningState, null, null, null, getSession()
-                .getDefaultContext());
-    }
-
-    public Folder createFolder(Map<String, ?> properties) {
-        return this.createFolder(properties, null, null, null, getSession().getDefaultContext());
-    }
-
-    public Policy createPolicy(Map<String, ?> properties) {
-        return this.createPolicy(properties, null, null, null, getSession().getDefaultContext());
-    }
-
-    public Item createItem(Map<String, ?> properties) {
-        return this.createItem(properties, null, null, null, getSession().getDefaultContext());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java
deleted file mode 100644
index f512628..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import org.apache.chemistry.opencmis.client.api.Item;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-
-public class ItemImpl extends AbstractFilableCmisObject implements Item {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public ItemImpl(SessionImpl session, ObjectType objectType, ObjectData objectData, OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ObjectIdImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ObjectIdImpl.java
deleted file mode 100644
index 4d0c1eb..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ObjectIdImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-
-/**
- * Implementation of <code>ObjectId</code>.
- */
-public class ObjectIdImpl implements ObjectId, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-
-    /**
-     * Constructor.
-     */
-    public ObjectIdImpl(String id) {
-        if (id == null || id.length() == 0) {
-            throw new IllegalArgumentException("Id must be set!");
-        }
-
-        this.id = id;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * Sets the id.
-     */
-    public void setId(String id) {
-        if (id == null || id.length() == 0) {
-            throw new IllegalArgumentException("Id must be set!");
-        }
-
-        this.id = id;
-    }
-
-    @Override
-    public String toString() {
-        return "Object Id: " + id;
-    }
-
-    @Override
-    public int hashCode() {
-        return id.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj == null || getClass() != obj.getClass()) {
-            return false;
-        }
-
-        return id.equals(((ObjectIdImpl) obj).id);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/OperationContextImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/OperationContextImpl.java
deleted file mode 100644
index 034c652..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/OperationContextImpl.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * {@link OperationContext} implementation.
- */
-public class OperationContextImpl implements OperationContext, Serializable {
-
-    public static final String PROPERTIES_STAR = "*";
-    public static final String RENDITION_NONE = "cmis:none";
-
-    private static final long serialVersionUID = 1L;
-
-    private TreeSet<String> filter;
-    private boolean loadSecondaryTypeProperties;
-    private boolean includeAcls;
-    private boolean includeAllowableActions;
-    private boolean includePolicies;
-    private IncludeRelationships includeRelationships;
-    private TreeSet<String> renditionFilter;
-    private boolean includePathSegments;
-    private String orderBy;
-    private boolean cacheEnabled;
-    private String cacheKey;
-    private int maxItemsPerPage;
-
-    /**
-     * Default constructor.
-     */
-    public OperationContextImpl() {
-        setFilter(null);
-        setLoadSecondaryTypeProperties(false);
-        setIncludeAcls(false);
-        setIncludeAllowableActions(true);
-        setIncludePolicies(false);
-        setIncludeRelationships(IncludeRelationships.NONE);
-        setRenditionFilter(null);
-        setIncludePathSegments(true);
-        setOrderBy(null);
-        setCacheEnabled(false);
-        generateCacheKey();
-
-        // default page size is 100
-        setMaxItemsPerPage(100);
-    }
-
-    /**
-     * Copy constructor.
-     */
-    public OperationContextImpl(OperationContext source) {
-        setFilter(source.getFilter());
-        setLoadSecondaryTypeProperties(source.loadSecondaryTypeProperties());
-        setIncludeAcls(source.isIncludeAcls());
-        setIncludeAllowableActions(source.isIncludeAllowableActions());
-        setIncludePolicies(source.isIncludePolicies());
-        setIncludeRelationships(source.getIncludeRelationships());
-        setRenditionFilter(source.getRenditionFilter());
-        setIncludePathSegments(source.isIncludePathSegments());
-        setOrderBy(source.getOrderBy());
-        setCacheEnabled(source.isCacheEnabled());
-        generateCacheKey();
-
-        setMaxItemsPerPage(source.getMaxItemsPerPage());
-    }
-
-    /**
-     * Constructor with parameters.
-     */
-    public OperationContextImpl(Set<String> propertyFilter, boolean includeAcls, boolean includeAllowableActions,
-            boolean includePolicies, IncludeRelationships includeRelationships, Set<String> renditionFilter,
-            boolean includePathSegments, String orderBy, boolean cacheEnabled, int maxItemsPerPage) {
-        setFilter(propertyFilter);
-        setIncludeAcls(includeAcls);
-        setIncludeAllowableActions(includeAllowableActions);
-        setIncludePolicies(includePolicies);
-        setIncludeRelationships(includeRelationships);
-        setRenditionFilter(renditionFilter);
-        setIncludePathSegments(includePathSegments);
-        setOrderBy(orderBy);
-        setCacheEnabled(cacheEnabled);
-        generateCacheKey();
-
-        setMaxItemsPerPage(maxItemsPerPage);
-    }
-
-    public final Set<String> getFilter() {
-        if (filter == null) {
-            return null;
-        }
-
-        return Collections.unmodifiableSet(filter);
-    }
-
-    public final void setFilter(Set<String> propertyFilter) {
-        if (propertyFilter != null) {
-            TreeSet<String> tempSet = new TreeSet<String>();
-
-            for (String oid : propertyFilter) {
-                if (oid == null) {
-                    continue;
-                }
-
-                String toid = oid.trim();
-                if (toid.length() == 0) {
-                    continue;
-                }
-                if (toid.equals(PROPERTIES_STAR)) {
-                    tempSet = new TreeSet<String>();
-                    tempSet.add(PROPERTIES_STAR);
-                    break;
-                }
-                if (toid.indexOf(',') > -1) {
-                    throw new IllegalArgumentException("Query id must not contain a comma!");
-                }
-
-                tempSet.add(toid);
-            }
-
-            if (tempSet.isEmpty()) {
-                filter = null;
-            } else {
-                filter = tempSet;
-            }
-        } else {
-            filter = null;
-        }
-
-        generateCacheKey();
-    }
-
-    public final void setFilterString(String propertyFilter) {
-        if ((propertyFilter == null) || (propertyFilter.trim().length() == 0)) {
-            setFilter(null);
-            return;
-        }
-
-        String[] propertyIds = propertyFilter.split(",");
-        TreeSet<String> tempSet = new TreeSet<String>();
-        for (String pid : propertyIds) {
-            tempSet.add(pid);
-        }
-
-        setFilter(tempSet);
-    }
-
-    public final String getFilterString() {
-        if (filter == null) {
-            return null;
-        }
-
-        if (filter.contains(PROPERTIES_STAR)) {
-            return PROPERTIES_STAR;
-        }
-
-        filter.add(PropertyIds.OBJECT_ID);
-        filter.add(PropertyIds.BASE_TYPE_ID);
-        filter.add(PropertyIds.OBJECT_TYPE_ID);
-        if (loadSecondaryTypeProperties) {
-            filter.add(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        for (String oid : filter) {
-            if (sb.length() > 0) {
-                sb.append(',');
-            }
-
-            sb.append(oid);
-        }
-
-        return sb.toString();
-    }
-
-    public final void setLoadSecondaryTypeProperties(boolean load) {
-        loadSecondaryTypeProperties = load;
-    }
-
-    public final boolean loadSecondaryTypeProperties() {
-        return loadSecondaryTypeProperties;
-    }
-
-    public final boolean isIncludeAcls() {
-        return includeAcls;
-    }
-
-    public final void setIncludeAcls(boolean include) {
-        includeAcls = include;
-        generateCacheKey();
-    }
-
-    public final boolean isIncludeAllowableActions() {
-        return includeAllowableActions;
-    }
-
-    public final void setIncludeAllowableActions(boolean include) {
-        includeAllowableActions = include;
-        generateCacheKey();
-    }
-
-    public final boolean isIncludePolicies() {
-        return includePolicies;
-    }
-
-    public final void setIncludePolicies(boolean include) {
-        includePolicies = include;
-        generateCacheKey();
-    }
-
-    public final IncludeRelationships getIncludeRelationships() {
-        return includeRelationships;
-    }
-
-    public final void setIncludeRelationships(IncludeRelationships include) {
-        includeRelationships = include;
-        generateCacheKey();
-    }
-
-    public final Set<String> getRenditionFilter() {
-        if (renditionFilter == null) {
-            return null;
-        }
-
-        return Collections.unmodifiableSet(renditionFilter);
-    }
-
-    public final void setRenditionFilter(Set<String> renditionFilter) {
-        TreeSet<String> tempSet = new TreeSet<String>();
-
-        if (renditionFilter != null) {
-            for (String rf : renditionFilter) {
-                if (rf == null) {
-                    continue;
-                }
-
-                String trf = rf.trim();
-                if (trf.length() == 0) {
-                    continue;
-                }
-                if (trf.indexOf(',') > -1) {
-                    throw new IllegalArgumentException("Rendition must not contain a comma!");
-                }
-
-                tempSet.add(trf);
-            }
-
-            if (tempSet.isEmpty()) {
-                tempSet.add(RENDITION_NONE);
-            }
-        } else {
-            tempSet.add(RENDITION_NONE);
-        }
-
-        this.renditionFilter = tempSet;
-        generateCacheKey();
-    }
-
-    public final void setRenditionFilterString(String renditionFilter) {
-        if (renditionFilter == null || renditionFilter.trim().length() == 0) {
-            setRenditionFilter(null);
-            return;
-        }
-
-        String[] renditions = renditionFilter.split(",");
-        TreeSet<String> tempSet = new TreeSet<String>();
-        for (String rend : renditions) {
-            tempSet.add(rend);
-        }
-
-        setRenditionFilter(tempSet);
-    }
-
-    public final String getRenditionFilterString() {
-        if (renditionFilter == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        for (String rf : renditionFilter) {
-            if (sb.length() > 0) {
-                sb.append(',');
-            }
-
-            sb.append(rf);
-        }
-
-        return sb.toString();
-    }
-
-    public final boolean isIncludePathSegments() {
-        return includePathSegments;
-    }
-
-    public final void setIncludePathSegments(boolean include) {
-        includePathSegments = include;
-    }
-
-    public final String getOrderBy() {
-        return orderBy;
-    }
-
-    public final void setOrderBy(String orderBy) {
-        this.orderBy = orderBy;
-    }
-
-    public final boolean isCacheEnabled() {
-        return cacheEnabled;
-    }
-
-    public final void setCacheEnabled(boolean cacheEnabled) {
-        this.cacheEnabled = cacheEnabled;
-    }
-
-    public final String getCacheKey() {
-        return cacheKey;
-    }
-
-    /**
-     * Generates a new cache key from all parameters that are relevant for
-     * caching.
-     */
-    protected final void generateCacheKey() {
-        if (!cacheEnabled) {
-            cacheKey = null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        sb.append(includeAcls ? '1' : '0');
-        sb.append(includeAllowableActions ? '1' : '0');
-        sb.append(includePolicies ? '1' : '0');
-        sb.append('|');
-        sb.append(filter == null ? "" : getFilterString());
-        sb.append('|');
-        sb.append(includeRelationships == null ? "" : includeRelationships.value());
-
-        sb.append('|');
-        sb.append(renditionFilter == null ? "" : getRenditionFilterString());
-
-        cacheKey = sb.toString();
-    }
-
-    public final int getMaxItemsPerPage() {
-        return maxItemsPerPage;
-    }
-
-    public final void setMaxItemsPerPage(int maxItemsPerPage) {
-        if (maxItemsPerPage < 1) {
-            throw new IllegalArgumentException("itemsPerPage must be > 0!");
-        }
-
-        this.maxItemsPerPage = maxItemsPerPage;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java
deleted file mode 100644
index dda895b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-
-public class PolicyImpl extends AbstractFilableCmisObject implements Policy {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public PolicyImpl(SessionImpl session, ObjectType objectType, ObjectData objectData, OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-    public String getPolicyText() {
-        return getPropertyValue(PropertyIds.POLICY_TEXT);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PropertyImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PropertyImpl.java
deleted file mode 100644
index 5e6a61d..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PropertyImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-
-/**
- * Property Implementation.
- */
-public class PropertyImpl<T> extends AbstractPropertyData<T> implements Property<T>, Serializable {
-
-    private static final long serialVersionUID = 1L;
-    private final PropertyDefinition<T> propertyDefinition;
-
-    protected void initialize(PropertyDefinition<?> pd) {
-        setId(pd.getId());
-        setDisplayName(pd.getDisplayName());
-        setLocalName(pd.getLocalName());
-        setQueryName(pd.getQueryName());
-    }
-
-    /**
-     * Constructs a property from a list of values.
-     */
-    public PropertyImpl(PropertyDefinition<T> pd, List<T> values) {
-        if (pd == null) {
-            throw new IllegalArgumentException("Type must be set!");
-        }
-        if (values == null) {
-            throw new IllegalArgumentException("Value must be set!");
-        }
-        propertyDefinition = pd;
-        initialize(pd);
-        setValues(values);
-    }
-
-    /**
-     * Copy constructor.
-     */
-    public PropertyImpl(Property<T> property) {
-        if (property == null) {
-            throw new IllegalArgumentException("Source must be set!");
-        }
-
-        propertyDefinition = property.getDefinition();
-        initialize(property.getDefinition());
-        setValues(new ArrayList<T>(property.getValues()));
-    }
-
-    public PropertyDefinition<T> getDefinition() {
-        return propertyDefinition;
-    }
-
-    public PropertyType getType() {
-        return propertyDefinition.getPropertyType();
-    }
-
-    @SuppressWarnings("unchecked")
-    public <U> U getValue() {
-        List<T> values = getValues();
-        if (propertyDefinition.getCardinality() == Cardinality.SINGLE) {
-            return values.isEmpty() ? null : (U) values.get(0);
-        } else {
-            return (U) values;
-        }
-    }
-
-    public String getValueAsString() {
-        List<T> values = getValues();
-        if (values.isEmpty()) {
-            return null;
-        }
-
-        return formatValue(values.get(0));
-    }
-
-    public String getValuesAsString() {
-        List<T> values = getValues();
-
-        StringBuilder result = new StringBuilder();
-        for (T value : values) {
-            if (result.length() > 0) {
-                result.append(", ");
-            }
-
-            result.append(formatValue(value));
-        }
-
-        return "[" + result.toString() + "]";
-    }
-
-    private String formatValue(T value) {
-        String result;
-
-        if (value == null) {
-            return null;
-        }
-
-        if (value instanceof GregorianCalendar) {
-            result = ((GregorianCalendar) value).getTime().toString();
-        } else {
-            result = value.toString();
-        }
-
-        return result;
-    }
-
-    public boolean isMultiValued() {
-        return propertyDefinition.getCardinality() == Cardinality.MULTI;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.java
deleted file mode 100644
index 3a14780..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-
-/**
- * Implementation of <code>QueryResult</code>.
- */
-public class QueryResultImpl implements QueryResult, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Map<String, PropertyData<?>> propertiesById;
-    private Map<String, PropertyData<?>> propertiesByQueryName;
-    private AllowableActions allowableActions;
-    private List<Relationship> relationships;
-    private List<Rendition> renditions;
-
-    /**
-     * Constructor.
-     */
-    public QueryResultImpl(Session session, ObjectData objectData) {
-        propertiesById = new LinkedHashMap<String, PropertyData<?>>();
-        propertiesByQueryName = new LinkedHashMap<String, PropertyData<?>>();
-
-        if (objectData != null) {
-
-            ObjectFactory of = session.getObjectFactory();
-
-            // handle properties
-            if (objectData.getProperties() != null) {
-                List<PropertyData<?>> queryProperties = of.convertQueryProperties(objectData.getProperties());
-
-                for (PropertyData<?> property : queryProperties) {
-                    propertiesById.put(property.getId(), property);
-                    propertiesByQueryName.put(property.getQueryName(), property);
-                }
-            }
-
-            // handle allowable actions
-            if (objectData.getAllowableActions() != null) {
-                this.allowableActions = objectData.getAllowableActions();
-            }
-
-            // handle relationships
-            if (objectData.getRelationships() != null) {
-                relationships = new ArrayList<Relationship>();
-                for (ObjectData rod : objectData.getRelationships()) {
-                    CmisObject relationship = of.convertObject(rod, session.getDefaultContext());
-                    if (relationship instanceof Relationship) {
-                        relationships.add((Relationship) relationship);
-                    }
-                }
-            }
-
-            // handle renditions
-            if (objectData.getRenditions() != null) {
-                this.renditions = new ArrayList<Rendition>();
-                for (RenditionData rd : objectData.getRenditions()) {
-                    this.renditions.add(of.convertRendition(null, rd));
-                }
-            }
-        }
-    }
-
-    public List<PropertyData<?>> getProperties() {
-        return new ArrayList<PropertyData<?>>(propertiesByQueryName.values());
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> PropertyData<T> getPropertyById(String id) {
-        return (PropertyData<T>) propertiesById.get(id);
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> PropertyData<T> getPropertyByQueryName(String queryName) {
-        return (PropertyData<T>) propertiesByQueryName.get(queryName);
-    }
-
-    public <T> T getPropertyValueById(String id) {
-        PropertyData<T> property = getPropertyById(id);
-        if (property == null) {
-            return null;
-        }
-
-        return property.getFirstValue();
-    }
-
-    public <T> T getPropertyValueByQueryName(String queryName) {
-        PropertyData<T> property = getPropertyByQueryName(queryName);
-        if (property == null) {
-            return null;
-        }
-
-        return property.getFirstValue();
-    }
-
-    public <T> List<T> getPropertyMultivalueById(String id) {
-        PropertyData<T> property = getPropertyById(id);
-        if (property == null) {
-            return null;
-        }
-
-        return property.getValues();
-    }
-
-    public <T> List<T> getPropertyMultivalueByQueryName(String queryName) {
-        PropertyData<T> property = getPropertyByQueryName(queryName);
-        if (property == null) {
-            return null;
-        }
-
-        return property.getValues();
-    }
-
-    public AllowableActions getAllowableActions() {
-        return allowableActions;
-    }
-
-    public List<Relationship> getRelationships() {
-        return relationships;
-    }
-
-    public List<Rendition> getRenditions() {
-        return renditions;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java
deleted file mode 100644
index bdce85e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-
-import java.net.URI;
-import java.net.URL;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.impl.StringListBuilder;
-
-/**
- * QueryStatement implementation.
- */
-public class QueryStatementImpl implements QueryStatement, Cloneable {
-
-    private final Session session;
-    private final String statement;
-    private final Map<Integer, String> parametersMap = new HashMap<Integer, String>();
-
-    /**
-     * Creates a QueryStatement object with a given statement.
-     * 
-     * @param session
-     *            the Session object, must not be {@code null}
-     * @param statement
-     *            the query statement with placeholders ('?'), see
-     *            {@link QueryStatement} for details
-     */
-    public QueryStatementImpl(Session session, String statement) {
-        if (session == null) {
-            throw new IllegalArgumentException("Session must be set!");
-        }
-
-        if (statement == null) {
-            throw new IllegalArgumentException("Statement must be set!");
-        }
-
-        this.session = session;
-        this.statement = statement.trim();
-    }
-
-    /**
-     * Creates a QueryStatement object for a query of one primary type joined by
-     * zero or more secondary types.
-     * 
-     * @param session
-     *            the Session object, must not be {@code null}
-     * @param selectPropertyIds
-     *            the property IDs in the SELECT statement, if {@code null} all
-     *            properties are selected
-     * @param fromTypes
-     *            a Map of type aliases (keys) and type IDs (values), the Map
-     *            must contain exactly one primary type and zero or more
-     *            secondary types
-     * @param whereClause
-     *            an optional WHERE clause with placeholders ('?'), see
-     *            {@link QueryStatement} for details
-     * @param orderByPropertyIds
-     *            an optional list of properties IDs for the ORDER BY clause
-     */
-    public QueryStatementImpl(Session session, Collection<String> selectPropertyIds, Map<String, String> fromTypes,
-            String whereClause, List<String> orderByPropertyIds) {
-        if (session == null) {
-            throw new IllegalArgumentException("Session must be set!");
-        }
-
-        if (isNullOrEmpty(fromTypes)) {
-            throw new IllegalArgumentException("Types must be set!");
-        }
-
-        this.session = session;
-
-        StringBuilder stmt = new StringBuilder();
-
-        // find the primary type and check if all types are queryable
-        ObjectType primaryType = null;
-        String primaryAlias = null;
-
-        Map<String, ObjectType> types = new HashMap<String, ObjectType>();
-        for (Map.Entry<String, String> fte : fromTypes.entrySet()) {
-            ObjectType type = session.getTypeDefinition(fte.getValue());
-
-            if (Boolean.FALSE.equals(type.isQueryable())) {
-                throw new IllegalArgumentException("Type '" + fte.getValue() + "' is not queryable!");
-            }
-
-            String alias = fte.getKey().trim();
-            if (alias.length() < 1) {
-                throw new IllegalArgumentException("Invalid alias for type '" + fte.getValue() + "'!");
-            }
-
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_SECONDARY) {
-                if (primaryType == null) {
-                    primaryType = type;
-                    primaryAlias = alias;
-                } else {
-                    throw new IllegalArgumentException("Two primary types found: " + primaryType.getId() + " and "
-                            + type.getId());
-                }
-            }
-
-            // exclude secondary types without properties
-            if (isNotEmpty(type.getPropertyDefinitions())) {
-                types.put(alias, type);
-            }
-        }
-
-        if (primaryType == null) {
-            throw new IllegalArgumentException("No primary type found!");
-        }
-
-        // SELECT
-        stmt.append("SELECT ");
-
-        StringListBuilder selectList = new StringListBuilder(",", stmt);
-
-        if (isNullOrEmpty(selectPropertyIds)) {
-            // select all properties
-            for (String alias : types.keySet()) {
-                selectList.add(alias + ".*");
-            }
-        } else {
-            // select provided properties
-            for (String propertyId : selectPropertyIds) {
-
-                propertyId = propertyId.trim();
-
-                if (propertyId.equals("*")) {
-                    // found property "*" -> select all properties
-                    for (String alias : types.keySet()) {
-                        selectList.add(alias + ".*");
-                    }
-                    continue;
-                }
-
-                if (propertyId.endsWith(".*")) {
-                    // found property "x.*"
-                    // -> select all properties of the type with alias "x"
-                    String starAlias = propertyId.substring(0, propertyId.length() - 2);
-                    if (types.containsKey(starAlias)) {
-                        selectList.add(starAlias + ".*");
-                        continue;
-                    } else {
-                        throw new IllegalArgumentException("Alias '" + starAlias + "' is not defined!");
-                    }
-                }
-
-                PropertyDefinition<?> propertyDef = null;
-                String alias = null;
-
-                for (Map.Entry<String, ObjectType> te : types.entrySet()) {
-                    propertyDef = te.getValue().getPropertyDefinitions().get(propertyId);
-                    if (propertyDef != null) {
-                        alias = te.getKey();
-                        break;
-                    }
-                }
-
-                if (propertyDef == null) {
-                    throw new IllegalArgumentException("Property '" + propertyId
-                            + "' is not defined in the provided object types!");
-                }
-
-                if (propertyDef.getQueryName() == null) {
-                    throw new IllegalArgumentException("Property '" + propertyId + "' has no query name!");
-                }
-
-                selectList.add(alias + "." + propertyDef.getQueryName());
-            }
-        }
-
-        // FROM
-        stmt.append(" FROM ");
-
-        stmt.append(primaryType.getQueryName());
-        stmt.append(" AS ");
-        stmt.append(primaryAlias);
-
-        for (Map.Entry<String, ObjectType> te : types.entrySet()) {
-            if (te.getKey().equals(primaryAlias)) {
-                continue;
-            }
-
-            stmt.append(" JOIN ");
-            stmt.append(te.getValue().getQueryName());
-            stmt.append(" AS ");
-            stmt.append(te.getKey());
-            stmt.append(" ON ");
-            stmt.append(primaryAlias);
-            stmt.append(".cmis:objectId=");
-            stmt.append(te.getKey());
-            stmt.append(".cmis:objectId");
-        }
-
-        // WHERE
-        if (whereClause != null && whereClause.trim().length() > 0) {
-            stmt.append(" WHERE ");
-            stmt.append(whereClause.trim());
-        }
-
-        // ORDER BY
-        if (isNotEmpty(orderByPropertyIds)) {
-            stmt.append(" ORDER BY ");
-
-            StringListBuilder orderByList = new StringListBuilder(",", stmt);
-
-            for (String propertyId : orderByPropertyIds) {
-                String realPropertyId = propertyId.trim();
-                String realPropertyIdLower = realPropertyId.toLowerCase(Locale.ENGLISH);
-                boolean desc = false;
-
-                if (realPropertyIdLower.endsWith(" asc")) {
-                    // property ends with " asc" -> remove it
-                    realPropertyId = realPropertyId.substring(0, realPropertyId.length() - 4);
-                }
-
-                if (realPropertyIdLower.endsWith(" desc")) {
-                    // property ends with " desc" -> remove it and mark it as
-                    // descending
-                    realPropertyId = realPropertyId.substring(0, realPropertyId.length() - 5);
-                    desc = true;
-                }
-
-                PropertyDefinition<?> propertyDef = null;
-                String alias = null;
-
-                for (Map.Entry<String, ObjectType> te : types.entrySet()) {
-                    propertyDef = te.getValue().getPropertyDefinitions().get(realPropertyId);
-                    if (propertyDef != null) {
-                        alias = te.getKey();
-                        break;
-                    }
-                }
-
-                if (propertyDef == null) {
-                    throw new IllegalArgumentException("Property '" + realPropertyId
-                            + "' is not defined in the provided object types!");
-                }
-
-                if (propertyDef.getQueryName() == null) {
-                    throw new IllegalArgumentException("Property '" + realPropertyId + "' has no query name!");
-                }
-
-                if (Boolean.FALSE.equals(propertyDef.isOrderable())) {
-                    throw new IllegalArgumentException("Property '" + realPropertyId + "' is not orderable!");
-                }
-
-                orderByList.add(alias + "." + propertyDef.getQueryName() + (desc ? " DESC" : ""));
-            }
-        }
-
-        this.statement = stmt.toString();
-    }
-
-    public void setType(int parameterIndex, String typeId) {
-        setType(parameterIndex, session.getTypeDefinition(typeId));
-    }
-
-    public void setType(int parameterIndex, ObjectType type) {
-        if (type == null) {
-            throw new IllegalArgumentException("Type must be set!");
-        }
-
-        String queryName = type.getQueryName();
-        if (queryName == null) {
-            throw new IllegalArgumentException("Type has no query name!");
-        }
-
-        parametersMap.put(parameterIndex, queryName);
-    }
-
-    public void setProperty(int parameterIndex, String typeId, String propertyId) {
-        ObjectType type = session.getTypeDefinition(typeId);
-
-        PropertyDefinition<?> propertyDefinition = type.getPropertyDefinitions().get(propertyId);
-        if (propertyDefinition == null) {
-            throw new IllegalArgumentException("Property does not exist!");
-        }
-
-        setProperty(parameterIndex, propertyDefinition);
-    }
-
-    public void setProperty(int parameterIndex, PropertyDefinition<?> propertyDefinition) {
-        if (propertyDefinition == null) {
-            throw new IllegalArgumentException("Property must be set!");
-        }
-
-        String queryName = propertyDefinition.getQueryName();
-        if (queryName == null) {
-            throw new IllegalArgumentException("Property has no query name!");
-        }
-
-        parametersMap.put(parameterIndex, queryName);
-    }
-
-    public void setNumber(int parameterIndex, Number... num) {
-        if (num == null || num.length == 0) {
-            throw new IllegalArgumentException("Number must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (Number n : num) {
-            if (n == null) {
-                throw new IllegalArgumentException("Number is null!");
-            }
-
-            slb.add(n.toString());
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setString(int parameterIndex, String... str) {
-        if (str == null || str.length == 0) {
-            throw new IllegalArgumentException("String must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (String s : str) {
-            if (s == null) {
-                throw new IllegalArgumentException("String is null!");
-            }
-
-            slb.add(escape(s));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setStringContains(int parameterIndex, String str) {
-        if (str == null) {
-            throw new IllegalArgumentException("String must be set!");
-        }
-
-        parametersMap.put(parameterIndex, escapeContains(str));
-    }
-
-    public void setStringLike(int parameterIndex, String str) {
-        if (str == null) {
-            throw new IllegalArgumentException("String must be set!");
-        }
-
-        parametersMap.put(parameterIndex, escapeLike(str));
-    }
-
-    public void setId(int parameterIndex, ObjectId... id) {
-        if (id == null || id.length == 0) {
-            throw new IllegalArgumentException("Id must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (ObjectId oid : id) {
-            if (oid == null || oid.getId() == null) {
-                throw new IllegalArgumentException("Id is null!");
-            }
-
-            slb.add(escape(oid.getId()));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setUri(int parameterIndex, URI... uri) {
-        if (uri == null) {
-            throw new IllegalArgumentException("URI must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (URI u : uri) {
-            if (u == null) {
-                throw new IllegalArgumentException("URI is null!");
-            }
-
-            slb.add(escape(u.toString()));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setUrl(int parameterIndex, URL... url) {
-        if (url == null) {
-            throw new IllegalArgumentException("URL must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (URL u : url) {
-            if (u == null) {
-                throw new IllegalArgumentException("URI is null!");
-            }
-
-            slb.add(escape(u.toString()));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setBoolean(int parameterIndex, boolean... bool) {
-        if (bool == null || bool.length == 0) {
-            throw new IllegalArgumentException("Boolean must not be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (boolean b : bool) {
-            slb.add(b ? "TRUE" : "FALSE");
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setDateTime(int parameterIndex, Calendar... cal) {
-        setDateTime(parameterIndex, false, cal);
-    }
-
-    public void setDateTimeTimestamp(int parameterIndex, Calendar... cal) {
-        setDateTime(parameterIndex, true, cal);
-    }
-
-    protected void setDateTime(int parameterIndex, boolean prefix, Calendar... cal) {
-        if (cal == null || cal.length == 0) {
-            throw new IllegalArgumentException("Calendar must be set!");
-        }
-
-        StringBuilder sb = new StringBuilder();
-        for (Calendar c : cal) {
-            if (c == null) {
-                throw new IllegalArgumentException("DateTime is null!");
-            }
-
-            if (sb.length() > 0) {
-                sb.append(',');
-            }
-
-            if (prefix) {
-                sb.append("TIMESTAMP ");
-            }
-
-            sb.append(convert(c.getTime()));
-        }
-
-        parametersMap.put(parameterIndex, sb.toString());
-    }
-
-    public void setDateTime(int parameterIndex, Date... date) {
-        setDateTime(parameterIndex, false, date);
-    }
-
-    public void setDateTimeTimestamp(int parameterIndex, Date... date) {
-        setDateTime(parameterIndex, true, date);
-    }
-
-    protected void setDateTime(int parameterIndex, boolean prefix, Date... date) {
-        if (date == null || date.length == 0) {
-            throw new IllegalArgumentException("Date must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (Date d : date) {
-            if (d == null) {
-                throw new IllegalArgumentException("DateTime is null!");
-            }
-
-            slb.add((prefix ? "TIMESTAMP " : "") + convert(d));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public void setDateTime(int parameterIndex, long... ms) {
-        setDateTime(parameterIndex, false, ms);
-    }
-
-    public void setDateTimeTimestamp(int parameterIndex, long... ms) {
-        setDateTime(parameterIndex, true, ms);
-    }
-
-    protected void setDateTime(int parameterIndex, boolean prefix, long... ms) {
-        if (ms == null || ms.length == 0) {
-            throw new IllegalArgumentException("Timestamp must be set!");
-        }
-
-        StringListBuilder slb = new StringListBuilder(",");
-        for (long l : ms) {
-            slb.add((prefix ? "TIMESTAMP " : "") + convert(new Date(l)));
-        }
-
-        parametersMap.put(parameterIndex, slb.toString());
-    }
-
-    public String toQueryString() {
-        boolean inStr = false;
-        int parameterIndex = 0;
-
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < statement.length(); i++) {
-            char c = statement.charAt(i);
-
-            if (c == '\'') {
-                if (inStr && statement.charAt(i - 1) == '\\') {
-                    inStr = true;
-                } else {
-                    inStr = !inStr;
-                }
-                sb.append(c);
-            } else if (c == '?' && !inStr) {
-                parameterIndex++;
-                String s = parametersMap.get(parameterIndex);
-                if (s == null) {
-                    sb.append(c);
-                } else {
-                    sb.append(s);
-                }
-            } else {
-                sb.append(c);
-            }
-        }
-
-        return sb.toString();
-    }
-
-    public ItemIterable<QueryResult> query(boolean searchAllVersions) {
-        return session.query(toQueryString(), searchAllVersions);
-    }
-
-    public ItemIterable<QueryResult> query(boolean searchAllVersions, OperationContext context) {
-        return session.query(toQueryString(), searchAllVersions, context);
-    }
-
-    @Override
-    protected QueryStatementImpl clone() throws CloneNotSupportedException {
-        QueryStatementImpl qs = new QueryStatementImpl(session, statement);
-        qs.parametersMap.putAll(parametersMap);
-
-        return qs;
-    }
-
-    @Override
-    public String toString() {
-        return toQueryString();
-    }
-
-    // --- internal ---
-
-    private static String escape(String str) {
-        StringBuilder sb = new StringBuilder("'");
-        for (int i = 0; i < str.length(); i++) {
-            char c = str.charAt(i);
-
-            if (c == '\'' || c == '\\') {
-                sb.append('\\');
-            }
-
-            sb.append(c);
-        }
-
-        sb.append('\'');
-
-        return sb.toString();
-    }
-
-    private static String escapeLike(String str) {
-        StringBuilder sb = new StringBuilder("'");
-        for (int i = 0; i < str.length(); i++) {
-            char c = str.charAt(i);
-
-            if (c == '\'') {
-                sb.append('\\');
-            } else if (c == '\\') {
-                if (i + 1 < str.length() && (str.charAt(i + 1) == '%' || str.charAt(i + 1) == '_')) {
-                    // no additional back slash
-                } else {
-                    sb.append('\\');
-                }
-            }
-
-            sb.append(c);
-        }
-
-        sb.append('\'');
-
-        return sb.toString();
-    }
-
-    private static String escapeContains(String str) {
-        StringBuilder sb = new StringBuilder("'");
-        for (int i = 0; i < str.length(); i++) {
-            char c = str.charAt(i);
-
-            if (c == '\\') {
-                sb.append('\\');
-            } else if (c == '\'' || c == '\"') {
-                sb.append("\\\\\\");
-            }
-
-            sb.append(c);
-        }
-
-        sb.append('\'');
-
-        return sb.toString();
-    }
-
-    private static String convert(Date date) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
-        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
-
-        return "'" + sdf.format(date) + "'";
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java
deleted file mode 100644
index 0115a35..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-
-public class RelationshipImpl extends AbstractCmisObject implements Relationship {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public RelationshipImpl(SessionImpl session, ObjectType objectType, ObjectData objectData, OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-    public CmisObject getSource() {
-        return getSource(getSession().getDefaultContext());
-    }
-
-    public CmisObject getSource(OperationContext context) {
-        readLock();
-        try {
-            ObjectId sourceId = getSourceId();
-            if (sourceId == null) {
-                return null;
-            }
-
-            return getSession().getObject(sourceId, context);
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public ObjectId getSourceId() {
-        String sourceId = getPropertyValue(PropertyIds.SOURCE_ID);
-        if ((sourceId == null) || (sourceId.length() == 0)) {
-            return null;
-        }
-
-        return getSession().createObjectId(sourceId);
-    }
-
-    public CmisObject getTarget() {
-        return getTarget(getSession().getDefaultContext());
-    }
-
-    public CmisObject getTarget(OperationContext context) {
-        readLock();
-        try {
-            ObjectId targetId = getTargetId();
-            if (targetId == null) {
-                return null;
-            }
-
-            return getSession().getObject(targetId, context);
-        } finally {
-            readUnlock();
-        }
-    }
-
-    public ObjectId getTargetId() {
-        String targetId = getPropertyValue(PropertyIds.TARGET_ID);
-        if ((targetId == null) || (targetId.length() == 0)) {
-            return null;
-        }
-
-        return getSession().createObjectId(targetId);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.java
deleted file mode 100644
index 6f93fd2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-
-/**
- * Implementation of <code>Rendition</code>.
- */
-public class RenditionImpl extends RenditionDataImpl implements Rendition {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Session session;
-    private final String objectId;
-
-    /**
-     * Constructor.
-     */
-    public RenditionImpl(Session session, String objectId, String streamId, String renditionDocumentId, String kind,
-            long length, String mimeType, String title, int height, int width) {
-        super(streamId, mimeType, BigInteger.valueOf(length), kind, title, BigInteger.valueOf(width), BigInteger
-                .valueOf(height), renditionDocumentId);
-        this.session = session;
-        this.objectId = objectId;
-    }
-
-    public long getLength() {
-        return getBigLength() == null ? -1 : getBigLength().longValue();
-    }
-
-    public long getHeight() {
-        return getBigHeight() == null ? -1 : getBigHeight().longValue();
-    }
-
-    public long getWidth() {
-        return getBigWidth() == null ? -1 : getBigWidth().longValue();
-    }
-
-    public Document getRenditionDocument() {
-        return getRenditionDocument(session.getDefaultContext());
-    }
-
-    public Document getRenditionDocument(OperationContext context) {
-        if (getRenditionDocumentId() == null) {
-            return null;
-        }
-        CmisObject rendDoc = session.getObject(getRenditionDocumentId(), context);
-        if (!(rendDoc instanceof Document)) {
-            return null;
-        }
-
-        return (Document) rendDoc;
-    }
-
-    public ContentStream getContentStream() {
-        if (objectId == null || getStreamId() == null) {
-            return null;
-        }
-
-        ContentStream contentStream;
-        try {
-            contentStream = session.getBinding().getObjectService()
-                    .getContentStream(session.getRepositoryInfo().getId(), objectId, getStreamId(), null, null, null);
-        } catch (CmisConstraintException e) {
-            // no content stream
-            return null;
-        }
-
-        if (contentStream == null) {
-            return null;
-        }
-
-        String filename = contentStream.getFileName();
-        if (filename == null) {
-            filename = getTitle();
-        }
-        BigInteger bigLength = contentStream.getBigLength();
-        if (bigLength == null) {
-            bigLength = getBigLength();
-        }
-        long length = bigLength == null ? -1 : bigLength.longValue();
-
-        return session.getObjectFactory().createContentStream(filename, length, contentStream.getMimeType(),
-                contentStream.getStream());
-    }
-
-    public String getContentUrl() {
-        if (session.getBinding().getObjectService() instanceof LinkAccess) {
-            LinkAccess linkAccess = (LinkAccess) session.getBinding().getObjectService();
-            return linkAccess.loadRenditionContentLink(session.getRepositoryInfo().getId(), objectId, getStreamId());
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
deleted file mode 100644
index 1d82d6f..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.client.runtime.repository.RepositoryImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Default implementation of a session factory. Used by unit tests or
- * applications that depend directly on runtime implementation.
- * <p>
- * <code>
- * SessionFactory sf = new SessionFactoryImpl();<br>
- * Session s = sf.createSession(...);
- * </code>
- * <p>
- * Alternative factory lookup methods:
- * <p>
- * <p>
- * <code>
- * Context ctx = new DefaultContext();<br>
- * SessionFactory = ctx.lookup(jndi_key);
- * </code>
- */
-public class SessionFactoryImpl implements SessionFactory, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    protected SessionFactoryImpl() {
-    }
-
-    public static SessionFactoryImpl newInstance() {
-        return new SessionFactoryImpl();
-    }
-
-    public Session createSession(Map<String, String> parameters) {
-        return createSession(parameters, null, null, null, null);
-    }
-
-    /**
-     * @deprecated Use
-     *             {@link #createSession(Map, ObjectFactory, AuthenticationProvider, Cache)}
-     */
-    @Deprecated
-    public Session createSession(Map<String, String> parameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache) {
-        return createSession(parameters, objectFactory, authenticationProvider, cache, null);
-    }
-
-    /**
-     * Creates a new session. The provided object factory, authentication
-     * provider and cache instance override the values in the session parameters
-     * if they are not <code>null</code>.
-     * 
-     * @param parameters
-     *            a {@code Map} of name/value pairs with parameters for the
-     *            session
-     * @param objectFactory
-     *            an object factory instance
-     * @param authenticationProvider
-     *            an authentication provider instance
-     * @param cache
-     *            a cache instance
-     * @param typeDefCache
-     *            a type definition cache instance
-     * @return a {@link Session} connected to the CMIS repository
-     * @throws CmisBaseException
-     *             if the connection could not be established
-     * 
-     * @see SessionParameter
-     */
-    public Session createSession(Map<String, String> parameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
-        SessionImpl session = new SessionImpl(parameters, objectFactory, authenticationProvider, cache, typeDefCache);
-        session.connect();
-
-        return session;
-    }
-
-    public List<Repository> getRepositories(Map<String, String> parameters) {
-        return getRepositories(parameters, null, null, null, null);
-    }
-
-    /**
-     * @deprecated Use
-     *             {@link #getRepositories(Map, ObjectFactory, AuthenticationProvider, Cache, TypeDefinitionCache)}
-     */
-    @Deprecated
-    public List<Repository> getRepositories(Map<String, String> parameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache) {
-        return getRepositories(parameters, objectFactory, authenticationProvider, cache, null);
-    }
-
-    /**
-     * Returns all repositories that are available at the endpoint. See
-     * {@link #createSession(Map, ObjectFactory, AuthenticationProvider, Cache)}
-     * for parameter details. The parameter
-     * {@code SessionParameter.REPOSITORY_ID} should not be set.
-     */
-    public List<Repository> getRepositories(Map<String, String> parameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
-        CmisBinding binding = CmisBindingHelper.createBinding(parameters, authenticationProvider, typeDefCache);
-
-        List<RepositoryInfo> repositoryInfos = binding.getRepositoryService().getRepositoryInfos(null);
-
-        List<Repository> result = new ArrayList<Repository>();
-        for (RepositoryInfo data : repositoryInfos) {
-            result.add(new RepositoryImpl(data, parameters, this, objectFactory, binding.getAuthenticationProvider(),
-                    cache, typeDefCache));
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
deleted file mode 100644
index bd80f3e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
+++ /dev/null
@@ -1,1476 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.ChangeEvents;
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
-import org.apache.chemistry.opencmis.client.runtime.repository.ObjectFactoryImpl;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher;
-import org.apache.chemistry.opencmis.client.runtime.util.CollectionIterable;
-import org.apache.chemistry.opencmis.client.runtime.util.TreeImpl;
-import org.apache.chemistry.opencmis.client.util.OperationContextUtils;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedAclService;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedHolder;
-import org.apache.chemistry.opencmis.commons.spi.ExtendedRepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Persistent model session.
- */
-public class SessionImpl implements Session {
-
-    private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(null, false, true, false,
-            IncludeRelationships.NONE, null, true, null, true, 100);
-
-    private static final Set<Updatability> CREATE_UPDATABILITY = EnumSet.noneOf(Updatability.class);
-    private static final Set<Updatability> CREATE_AND_CHECKOUT_UPDATABILITY = EnumSet.noneOf(Updatability.class);
-
-    static {
-        CREATE_UPDATABILITY.add(Updatability.ONCREATE);
-        CREATE_UPDATABILITY.add(Updatability.READWRITE);
-        CREATE_AND_CHECKOUT_UPDATABILITY.add(Updatability.ONCREATE);
-        CREATE_AND_CHECKOUT_UPDATABILITY.add(Updatability.READWRITE);
-        CREATE_AND_CHECKOUT_UPDATABILITY.add(Updatability.WHENCHECKEDOUT);
-    }
-
-    // private static Logger log = LoggerFactory.getLogger(SessionImpl.class);
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-    private transient LinkedHashMap<String, ObjectType> objectTypeCache;
-
-    /*
-     * default session context (serializable)
-     */
-    private OperationContext defaultContext = DEFAULT_CONTEXT;
-
-    /*
-     * session parameter (serializable)
-     */
-    private Map<String, String> parameters;
-
-    /*
-     * CMIS binding (serializable)
-     */
-    private CmisBinding binding;
-
-    /*
-     * Session Locale, determined from session parameter (serializable)
-     */
-    private Locale locale;
-
-    /*
-     * Object factory (serializable)
-     */
-    private final ObjectFactory objectFactory;
-
-    /*
-     * Authentication provider (serializable)
-     */
-    private final AuthenticationProvider authenticationProvider;
-
-    /*
-     * Object cache (serializable)
-     */
-    private Cache cache;
-    private final boolean cachePathOmit;
-
-    /*
-     * Type cache.
-     */
-    private TypeDefinitionCache typeDefCache;
-
-    /*
-     * Repository info (serializable)
-     */
-    private RepositoryInfo repositoryInfo;
-
-    /**
-     * required for serialization
-     */
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public SessionImpl(Map<String, String> parameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
-        if (parameters == null) {
-            throw new IllegalArgumentException("No parameters provided!");
-        }
-
-        this.parameters = parameters;
-        this.locale = determineLocale(parameters);
-
-        this.objectFactory = (objectFactory == null ? createObjectFactory() : objectFactory);
-        this.authenticationProvider = authenticationProvider;
-        this.cache = (cache == null ? createCache() : cache);
-        this.typeDefCache = typeDefCache;
-
-        cachePathOmit = Boolean.parseBoolean(parameters.get(SessionParameter.CACHE_PATH_OMIT));
-    }
-
-    private Locale determineLocale(Map<String, String> parameters) {
-        Locale result = null;
-
-        String language = parameters.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
-        String country = parameters.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
-        String variant = parameters.get(SessionParameter.LOCALE_VARIANT);
-
-        if (variant != null) {
-            // all 3 parameter must not be null and valid
-            result = new Locale(language, country, variant);
-        } else {
-            if (country != null) {
-                // 2 parameter must not be null and valid
-                result = new Locale(language, country);
-            } else {
-                if (language != null) {
-                    // 1 parameter must not be null and valid
-                    result = new Locale(language);
-                } else {
-                    result = Locale.getDefault();
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private ObjectFactory createObjectFactory() {
-        try {
-            String classname = parameters.get(SessionParameter.OBJECT_FACTORY_CLASS);
-
-            Class<?> objectFactoryClass;
-            if (classname == null) {
-                objectFactoryClass = ObjectFactoryImpl.class;
-            } else {
-                objectFactoryClass = ClassLoaderUtil.loadClass(classname);
-            }
-
-            Object of = objectFactoryClass.newInstance();
-            if (!(of instanceof ObjectFactory)) {
-                throw new InstantiationException("Class does not implement ObjectFactory!");
-            }
-
-            ((ObjectFactory) of).initialize(this, parameters);
-
-            return (ObjectFactory) of;
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Unable to create object factory: " + e, e);
-        }
-    }
-
-    private Cache createCache() {
-        try {
-            String classname = parameters.get(SessionParameter.CACHE_CLASS);
-
-            Class<?> cacheClass;
-            if (classname == null) {
-                cacheClass = CacheImpl.class;
-            } else {
-                cacheClass = ClassLoaderUtil.loadClass(classname);
-            }
-
-            Object of = cacheClass.newInstance();
-            if (!(of instanceof Cache)) {
-                throw new InstantiationException("Class does not implement Cache!");
-            }
-
-            ((Cache) of).initialize(this, parameters);
-
-            return (Cache) of;
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Unable to create cache: " + e, e);
-        }
-    }
-
-    public void clear() {
-        lock.writeLock().lock();
-        try {
-            // create new object cache
-            cache = createCache();
-
-            // clear object type cache
-            objectTypeCache = null;
-
-            // clear provider cache
-            getBinding().clearAllCaches();
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public ObjectFactory getObjectFactory() {
-        assert objectFactory != null;
-        return objectFactory;
-    }
-
-    public ItemIterable<Document> getCheckedOutDocs() {
-        return getCheckedOutDocs(getDefaultContext());
-    }
-
-    public ItemIterable<Document> getCheckedOutDocs(OperationContext context) {
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        final NavigationService navigationService = getBinding().getNavigationService();
-        final ObjectFactory of = getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<Document>(new AbstractPageFetcher<Document>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<Document> fetchPage(long skipCount) {
-
-                // get all checked out documents
-                ObjectList checkedOutDocs = navigationService.getCheckedOutDocs(getRepositoryId(), null,
-                        ctxt.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(),
-                        ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(),
-                        BigInteger.valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
-                // convert objects
-                List<Document> page = new ArrayList<Document>();
-                if (checkedOutDocs.getObjects() != null) {
-                    for (ObjectData objectData : checkedOutDocs.getObjects()) {
-                        CmisObject doc = of.convertObject(objectData, ctxt);
-                        if (!(doc instanceof Document)) {
-                            // should not happen...
-                            continue;
-                        }
-
-                        page.add((Document) doc);
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<Document>(page, checkedOutDocs.getNumItems(),
-                        checkedOutDocs.hasMoreItems());
-            }
-        });
-    }
-
-    public ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems) {
-        return getContentChanges(changeLogToken, includeProperties, maxNumItems, getDefaultContext());
-    }
-
-    public ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems,
-            OperationContext context) {
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        Holder<String> changeLogTokenHolder = new Holder<String>(changeLogToken);
-        ObjectList objectList = null;
-
-        lock.readLock().lock();
-        try {
-            objectList = getBinding().getDiscoveryService().getContentChanges(getRepositoryInfo().getId(),
-                    changeLogTokenHolder, includeProperties, context.getFilterString(), context.isIncludePolicies(),
-                    context.isIncludeAcls(), BigInteger.valueOf(maxNumItems), null);
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        return objectFactory.convertChangeEvents(changeLogTokenHolder.getValue(), objectList);
-    }
-
-    public ItemIterable<ChangeEvent> getContentChanges(String changeLogToken, final boolean includeProperties) {
-        return getContentChanges(changeLogToken, includeProperties, getDefaultContext());
-    }
-
-    public ItemIterable<ChangeEvent> getContentChanges(final String changeLogToken, final boolean includeProperties,
-            OperationContext context) {
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        final DiscoveryService discoveryService = getBinding().getDiscoveryService();
-        final ObjectFactory of = getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<ChangeEvent>(new AbstractPageFetcher<ChangeEvent>(Integer.MAX_VALUE) {
-
-            private String token = changeLogToken;
-            private String nextLink = null;
-            private boolean firstPage = true;
-
-            @Override
-            protected AbstractPageFetcher.Page<ChangeEvent> fetchPage(long skipCount) {
-                assert firstPage || token != null ? (nextLink == null) : true;
-
-                // fetch the data
-                ExtendedHolder<String> changeLogTokenHolder = new ExtendedHolder<String>(token);
-                if (nextLink != null) {
-                    changeLogTokenHolder.setExtraValue(Constants.REP_REL_CHANGES, nextLink);
-                }
-
-                ObjectList objectList = discoveryService.getContentChanges(getRepositoryInfo().getId(),
-                        changeLogTokenHolder, includeProperties, ctxt.getFilterString(), ctxt.isIncludePolicies(),
-                        ctxt.isIncludeAcls(), BigInteger.valueOf(this.maxNumItems), null);
-
-                // convert type definitions
-                List<ChangeEvent> page = new ArrayList<ChangeEvent>();
-                for (ObjectData objectData : objectList.getObjects()) {
-                    page.add(of.convertChangeEvent(objectData));
-                }
-
-                if (!firstPage) {
-                    // the last entry of the previous page is repeated
-                    // -> remove the first entry
-                    page.remove(0);
-                }
-                firstPage = false;
-
-                if (changeLogTokenHolder.getValue() != null) {
-                    // the web services and the browser binding
-                    // return a new token
-                    token = changeLogTokenHolder.getValue();
-                } else {
-                    // the atompub binding does not return a new token,
-                    // but might return a link to the next Atom feed
-                    token = null;
-                    nextLink = (String) changeLogTokenHolder.getExtraValue(Constants.REP_REL_CHANGES);
-                }
-
-                return new AbstractPageFetcher.Page<ChangeEvent>(page, objectList.getNumItems(),
-                        objectList.hasMoreItems()) {
-                };
-            }
-        }) {
-            @Override
-            public ItemIterable<ChangeEvent> skipTo(long position) {
-                throw new CmisNotSupportedException("Skipping not supported!");
-            }
-
-            @Override
-            public ItemIterable<ChangeEvent> getPage() {
-                throw new CmisNotSupportedException("Paging not supported!");
-            }
-
-            @Override
-            public ItemIterable<ChangeEvent> getPage(int maxNumItems) {
-                throw new CmisNotSupportedException("Paging not supported!");
-            }
-        };
-    }
-
-    public String getLatestChangeLogToken() {
-        return getBinding().getRepositoryService().getRepositoryInfo(getRepositoryId(), null).getLatestChangeLogToken();
-    }
-
-    public OperationContext getDefaultContext() {
-        lock.readLock().lock();
-        try {
-            return defaultContext;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    public void setDefaultContext(OperationContext context) {
-        lock.writeLock().lock();
-        try {
-            this.defaultContext = (context == null ? DEFAULT_CONTEXT : context);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public OperationContext createOperationContext(Set<String> filter, boolean includeAcls,
-            boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships,
-            Set<String> renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled,
-            int maxItemsPerPage) {
-        return OperationContextUtils.createOperationContext(filter, includeAcls, includeAllowableActions,
-                includePolicies, includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled,
-                maxItemsPerPage);
-    }
-
-    public OperationContext createOperationContext() {
-        return OperationContextUtils.createOperationContext();
-    }
-
-    public ObjectId createObjectId(String id) {
-        return new ObjectIdImpl(id);
-    }
-
-    public Locale getLocale() {
-        return locale;
-    }
-
-    public CmisObject getObject(ObjectId objectId) {
-        return getObject(objectId, getDefaultContext());
-    }
-
-    public CmisObject getObject(ObjectId objectId, OperationContext context) {
-        if (objectId == null || objectId.getId() == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-
-        return getObject(objectId.getId(), context);
-    }
-
-    public CmisObject getObject(String objectId) {
-        return getObject(objectId, getDefaultContext());
-    }
-
-    public CmisObject getObject(String objectId, OperationContext context) {
-        if (objectId == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        CmisObject result = null;
-
-        // ask the cache first
-        if (context.isCacheEnabled()) {
-            result = cache.getById(objectId, context.getCacheKey());
-            if (result != null) {
-                return result;
-            }
-        }
-
-        // get the object
-        ObjectData objectData = binding.getObjectService().getObject(getRepositoryId(), objectId,
-                context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
-
-        result = getObjectFactory().convertObject(objectData, context);
-
-        // put into cache
-        if (context.isCacheEnabled()) {
-            cache.put(result, context.getCacheKey());
-        }
-
-        return result;
-    }
-
-    public CmisObject getObjectByPath(String path) {
-        return getObjectByPath(path, getDefaultContext());
-    }
-
-    public CmisObject getObjectByPath(String path, OperationContext context) {
-        if (path == null) {
-            throw new IllegalArgumentException("Path must be set!");
-        }
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        CmisObject result = null;
-
-        // ask the cache first
-        if (context.isCacheEnabled() && !cachePathOmit) {
-            result = cache.getByPath(path, context.getCacheKey());
-            if (result != null) {
-                return result;
-            }
-        }
-
-        // get the object
-        ObjectData objectData = binding.getObjectService().getObjectByPath(getRepositoryId(), path,
-                context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
-
-        result = getObjectFactory().convertObject(objectData, context);
-
-        // put into cache
-        if (context.isCacheEnabled()) {
-            cache.putPath(path, result, context.getCacheKey());
-        }
-
-        return result;
-    }
-
-    public CmisObject getObjectByPath(String parentPath, String name) {
-        return getObjectByPath(parentPath, name, getDefaultContext());
-    }
-
-    public CmisObject getObjectByPath(String parentPath, String name, OperationContext context) {
-        if (parentPath == null || parentPath.length() < 1) {
-            throw new IllegalArgumentException("Parent path must be set!");
-        }
-        if (parentPath.charAt(0) != '/') {
-            throw new IllegalArgumentException("Parent path must start with a '/'!");
-        }
-        if (name == null || name.length() < 1) {
-            throw new IllegalArgumentException("Name must be set!");
-        }
-
-        StringBuilder path = new StringBuilder();
-        path.append(parentPath);
-        if (!parentPath.endsWith("/")) {
-            path.append('/');
-        }
-        path.append(name);
-
-        return getObjectByPath(path.toString(), context);
-    }
-
-    public Document getLatestDocumentVersion(ObjectId objectId) {
-        return getLatestDocumentVersion(objectId, false, getDefaultContext());
-    }
-
-    public Document getLatestDocumentVersion(String objectId, OperationContext context) {
-        if (objectId == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-
-        return getLatestDocumentVersion(createObjectId(objectId), false, context);
-    }
-
-    public Document getLatestDocumentVersion(String objectId, boolean major, OperationContext context) {
-        if (objectId == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-
-        return getLatestDocumentVersion(createObjectId(objectId), major, context);
-    }
-
-    public Document getLatestDocumentVersion(String objectId) {
-        if (objectId == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-
-        return getLatestDocumentVersion(createObjectId(objectId), false, getDefaultContext());
-    }
-
-    public Document getLatestDocumentVersion(ObjectId objectId, OperationContext context) {
-        return getLatestDocumentVersion(objectId, false, context);
-    }
-
-    public Document getLatestDocumentVersion(ObjectId objectId, boolean major, OperationContext context) {
-        if (objectId == null || objectId.getId() == null) {
-            throw new IllegalArgumentException("Object ID must be set!");
-        }
-
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        CmisObject result = null;
-
-        String versionSeriesId = null;
-
-        // first attempt: if we got a Document object, try getting the version
-        // series ID from it
-        if (objectId instanceof Document) {
-            versionSeriesId = ((Document) objectId).getVersionSeriesId();
-        }
-
-        // second attempt: if we have a Document object in the cache, retrieve
-        // the version series ID form there
-        if (versionSeriesId == null) {
-            if (context.isCacheEnabled()) {
-                CmisObject sourceDoc = cache.getById(objectId.getId(), context.getCacheKey());
-                if (sourceDoc instanceof Document) {
-                    versionSeriesId = ((Document) sourceDoc).getVersionSeriesId();
-                }
-            }
-        }
-
-        // third attempt (Web Services only): get the version series ID from the
-        // repository
-        // (the AtomPub and Browser binding don't need the version series ID ->
-        // avoid roundtrip)
-        if (versionSeriesId == null) {
-            BindingType bindingType = getBinding().getBindingType();
-            if (bindingType == BindingType.WEBSERVICES || bindingType == BindingType.CUSTOM) {
-
-                // get the document to find the version series ID
-                ObjectData sourceObjectData = binding.getObjectService().getObject(getRepositoryId(), objectId.getId(),
-                        PropertyIds.OBJECT_ID + "," + PropertyIds.VERSION_SERIES_ID, false, IncludeRelationships.NONE,
-                        "cmis:none", false, false, null);
-
-                if (sourceObjectData.getProperties() != null
-                        && sourceObjectData.getProperties().getProperties() != null) {
-                    PropertyData<?> verionsSeriesIdProp = sourceObjectData.getProperties().getProperties()
-                            .get(PropertyIds.VERSION_SERIES_ID);
-                    if (verionsSeriesIdProp != null && verionsSeriesIdProp.getFirstValue() instanceof String) {
-                        versionSeriesId = (String) verionsSeriesIdProp.getFirstValue();
-                    }
-                }
-
-                // the Web Services binding needs the version series ID -> fail
-                if (versionSeriesId == null) {
-                    throw new IllegalArgumentException("Object is not a document or not versionable!");
-                }
-            }
-        }
-
-        // get the object
-        ObjectData objectData = binding.getVersioningService().getObjectOfLatestVersion(getRepositoryId(),
-                objectId.getId(), versionSeriesId, major, context.getFilterString(),
-                context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
-
-        result = getObjectFactory().convertObject(objectData, context);
-
-        // put into cache
-        if (context.isCacheEnabled()) {
-            cache.put(result, context.getCacheKey());
-        }
-
-        // check result
-        if (!(result instanceof Document)) {
-            throw new IllegalArgumentException("Latest version is not a document!");
-        }
-
-        return (Document) result;
-    }
-
-    public void removeObjectFromCache(ObjectId objectId) {
-        if (objectId == null || objectId.getId() == null) {
-            return;
-        }
-
-        removeObjectFromCache(objectId.getId());
-    }
-
-    public void removeObjectFromCache(String objectId) {
-        cache.remove(objectId);
-    }
-
-    public RepositoryInfo getRepositoryInfo() {
-        lock.readLock().lock();
-        try {
-            return repositoryInfo;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    public Folder getRootFolder() {
-        return getRootFolder(getDefaultContext());
-    }
-
-    public Folder getRootFolder(OperationContext context) {
-        String rootFolderId = getRepositoryInfo().getRootFolderId();
-
-        CmisObject rootFolder = getObject(rootFolderId, context);
-        if (!(rootFolder instanceof Folder)) {
-            throw new CmisRuntimeException("Root folder object is not a folder!");
-        }
-
-        return (Folder) rootFolder;
-    }
-
-    public ItemIterable<ObjectType> getTypeChildren(final String typeId, final boolean includePropertyDefinitions) {
-        final RepositoryService repositoryService = getBinding().getRepositoryService();
-
-        return new CollectionIterable<ObjectType>(new AbstractPageFetcher<ObjectType>(getDefaultContext()
-                .getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<ObjectType> fetchPage(long skipCount) {
-
-                // fetch the data
-                TypeDefinitionList tdl = repositoryService.getTypeChildren(SessionImpl.this.getRepositoryId(), typeId,
-                        includePropertyDefinitions, BigInteger.valueOf(this.maxNumItems),
-                        BigInteger.valueOf(skipCount), null);
-
-                // convert type definitions
-                List<ObjectType> page = new ArrayList<ObjectType>(tdl.getList().size());
-                for (TypeDefinition typeDefinition : tdl.getList()) {
-                    page.add(convertTypeDefinition(typeDefinition));
-                }
-
-                return new AbstractPageFetcher.Page<ObjectType>(page, tdl.getNumItems(), tdl.hasMoreItems()) {
-                };
-            }
-        });
-    }
-
-    public ObjectType getTypeDefinition(String typeId) {
-        TypeDefinition typeDefinition = getBinding().getRepositoryService().getTypeDefinition(getRepositoryId(),
-                typeId, null);
-
-        return convertAndCacheTypeDefinition(typeDefinition, true);
-    }
-
-    public ObjectType getTypeDefinition(String typeId, boolean useCache) {
-        RepositoryService service = getBinding().getRepositoryService();
-        if (!(service instanceof ExtendedRepositoryService)) {
-            throw new CmisRuntimeException(
-                    "Internal error: Repository Service does not implement ExtendedRepositoryService!");
-        }
-
-        ExtendedRepositoryService extRepSrv = (ExtendedRepositoryService) service;
-        TypeDefinition typeDefinition = extRepSrv.getTypeDefinition(getRepositoryId(), typeId, null, useCache);
-
-        return convertAndCacheTypeDefinition(typeDefinition, useCache);
-    }
-
-    public List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions) {
-        List<TypeDefinitionContainer> descendants = getBinding().getRepositoryService().getTypeDescendants(
-                getRepositoryId(), typeId, BigInteger.valueOf(depth), includePropertyDefinitions, null);
-
-        return convertTypeDescendants(descendants);
-    }
-
-    /**
-     * Converts binding <code>TypeDefinitionContainer</code> to API
-     * <code>Container</code>.
-     */
-    private List<Tree<ObjectType>> convertTypeDescendants(List<TypeDefinitionContainer> descendantsList) {
-        List<Tree<ObjectType>> result = new ArrayList<Tree<ObjectType>>();
-
-        for (TypeDefinitionContainer container : descendantsList) {
-            ObjectType objectType = convertTypeDefinition(container.getTypeDefinition());
-            List<Tree<ObjectType>> children = convertTypeDescendants(container.getChildren());
-
-            result.add(new TreeImpl<ObjectType>(objectType, children));
-        }
-
-        return result;
-    }
-
-    private ObjectType convertTypeDefinition(TypeDefinition typeDefinition) {
-        return objectFactory.convertTypeDefinition(typeDefinition);
-    }
-
-    /**
-     * Converts a type definition into an object type and caches the result.
-     * 
-     * The cache should only be used for type definitions that have been fetched
-     * with getTypeDefinition() because the high level cache should roughly
-     * correspond to the low level type cache. The type definitions returned by
-     * getTypeChildren() and getTypeDescendants() are not cached in the low
-     * level cache and therefore shouldn't be cached here.
-     */
-    private ObjectType convertAndCacheTypeDefinition(TypeDefinition typeDefinition, boolean useCache) {
-        ObjectType result = null;
-
-        lock.writeLock().lock();
-        try {
-            if (objectTypeCache == null) {
-                int cacheSize;
-                try {
-                    cacheSize = Integer.valueOf(parameters.get(SessionParameter.CACHE_SIZE_TYPES));
-                    if (cacheSize < 0) {
-                        cacheSize = SessionParameterDefaults.CACHE_SIZE_TYPES;
-                    }
-                } catch (NumberFormatException nfe) {
-                    cacheSize = SessionParameterDefaults.CACHE_SIZE_TYPES;
-                }
-
-                final int maxEntries = cacheSize;
-
-                objectTypeCache = new LinkedHashMap<String, ObjectType>(maxEntries + 1, 0.70f, true) {
-                    private static final long serialVersionUID = 1L;
-
-                    @Override
-                    public boolean removeEldestEntry(Map.Entry<String, ObjectType> eldest) {
-                        return size() > maxEntries;
-                    }
-                };
-            }
-
-            if (!useCache) {
-                result = objectFactory.convertTypeDefinition(typeDefinition);
-                objectTypeCache.put(result.getId(), result);
-            } else {
-                result = objectTypeCache.get(typeDefinition.getId());
-                if (result == null) {
-                    result = objectFactory.convertTypeDefinition(typeDefinition);
-                    objectTypeCache.put(result.getId(), result);
-                }
-            }
-
-            return result;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Removes the object type object with the given type ID from the cache.
-     */
-    private void removeFromObjectTypeCache(String typeId) {
-        lock.writeLock().lock();
-        try {
-            if (objectTypeCache != null) {
-                objectTypeCache.remove(typeId);
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public ObjectType createType(TypeDefinition type) {
-        if (repositoryInfo.getCmisVersion() == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("This method is not supported for CMIS 1.0 repositories.");
-        }
-
-        TypeDefinition newType = getBinding().getRepositoryService().createType(getRepositoryId(), type, null);
-        return convertTypeDefinition(newType);
-    }
-
-    public ObjectType updateType(TypeDefinition type) {
-        if (repositoryInfo.getCmisVersion() == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("This method is not supported for CMIS 1.0 repositories.");
-        }
-
-        TypeDefinition updatedType = getBinding().getRepositoryService().updateType(getRepositoryId(), type, null);
-
-        removeFromObjectTypeCache(updatedType.getId());
-
-        return convertTypeDefinition(updatedType);
-    }
-
-    public void deleteType(String typeId) {
-        if (repositoryInfo.getCmisVersion() == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("This method is not supported for CMIS 1.0 repositories.");
-        }
-
-        getBinding().getRepositoryService().deleteType(getRepositoryId(), typeId, null);
-        removeFromObjectTypeCache(typeId);
-    }
-
-    public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions) {
-        return query(statement, searchAllVersions, getDefaultContext());
-    }
-
-    public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions,
-            OperationContext context) {
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        final DiscoveryService discoveryService = getBinding().getDiscoveryService();
-        final ObjectFactory of = getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<QueryResult>(new AbstractPageFetcher<QueryResult>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<QueryResult> fetchPage(long skipCount) {
-
-                // fetch the data
-                ObjectList resultList = discoveryService.query(getRepositoryId(), statement, searchAllVersions,
-                        ctxt.isIncludeAllowableActions(), ctxt.getIncludeRelationships(),
-                        ctxt.getRenditionFilterString(), BigInteger.valueOf(this.maxNumItems),
-                        BigInteger.valueOf(skipCount), null);
-
-                // convert query results
-                List<QueryResult> page = new ArrayList<QueryResult>();
-                if (resultList.getObjects() != null) {
-                    for (ObjectData objectData : resultList.getObjects()) {
-                        if (objectData == null) {
-                            continue;
-                        }
-
-                        page.add(of.convertQueryResult(objectData));
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<QueryResult>(page, resultList.getNumItems(),
-                        resultList.hasMoreItems());
-            }
-        });
-    }
-
-    public ItemIterable<CmisObject> queryObjects(String typeId, String where, final boolean searchAllVersions,
-            OperationContext context) {
-        if (typeId == null || typeId.trim().length() == 0) {
-            throw new IllegalArgumentException("Type ID must be set!");
-        }
-
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        final DiscoveryService discoveryService = getBinding().getDiscoveryService();
-        final ObjectFactory of = getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-        final StringBuilder statement = new StringBuilder("SELECT ");
-
-        String select = ctxt.getFilterString();
-        if (select == null) {
-            statement.append('*');
-        } else {
-            statement.append(select);
-        }
-
-        final ObjectType type = getTypeDefinition(typeId);
-        statement.append(" FROM ");
-        statement.append(type.getQueryName());
-
-        if (where != null && where.trim().length() > 0) {
-            statement.append(" WHERE ");
-            statement.append(where);
-        }
-
-        String orderBy = ctxt.getOrderBy();
-        if (orderBy != null && orderBy.trim().length() > 0) {
-            statement.append(" ORDER BY ");
-            statement.append(orderBy);
-        }
-
-        return new CollectionIterable<CmisObject>(new AbstractPageFetcher<CmisObject>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<CmisObject> fetchPage(long skipCount) {
-
-                // fetch the data
-                ObjectList resultList = discoveryService.query(getRepositoryId(), statement.toString(),
-                        searchAllVersions, ctxt.isIncludeAllowableActions(), ctxt.getIncludeRelationships(),
-                        ctxt.getRenditionFilterString(), BigInteger.valueOf(this.maxNumItems),
-                        BigInteger.valueOf(skipCount), null);
-
-                // convert query results
-                List<CmisObject> page = new ArrayList<CmisObject>();
-                if (resultList.getObjects() != null) {
-                    for (ObjectData objectData : resultList.getObjects()) {
-                        if (objectData == null) {
-                            continue;
-                        }
-
-                        page.add(of.convertObject(objectData, ctxt));
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<CmisObject>(page, resultList.getNumItems(),
-                        resultList.hasMoreItems());
-            }
-        });
-    }
-
-    public QueryStatement createQueryStatement(final String statement) {
-        return new QueryStatementImpl(this, statement);
-    }
-
-    public QueryStatement createQueryStatement(final Collection<String> selectPropertyIds,
-            final Map<String, String> fromTypes, final String whereClause, final List<String> orderByPropertyIds) {
-        return new QueryStatementImpl(this, selectPropertyIds, fromTypes, whereClause, orderByPropertyIds);
-    }
-
-    /**
-     * Connect session object to the provider. This is the very first call after
-     * a session is created.
-     * <p>
-     * In dependency of the parameter set an {@code AtomPub}, a
-     * {@code WebService} or an {@code InMemory} provider is selected.
-     */
-    public void connect() {
-        lock.writeLock().lock();
-        try {
-            binding = CmisBindingHelper.createBinding(parameters, authenticationProvider, typeDefCache);
-
-            /* get initial repository ID from session parameter */
-            String repositoryId = parameters.get(SessionParameter.REPOSITORY_ID);
-            if (repositoryId == null) {
-                throw new IllegalStateException("Repository ID is not set!");
-            }
-
-            repositoryInfo = objectFactory.convertRepositoryInfo(getBinding().getRepositoryService().getRepositoryInfo(
-                    repositoryId, null));
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public CmisBinding getBinding() {
-        lock.readLock().lock();
-        try {
-            return binding;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    public Cache getCache() {
-        lock.readLock().lock();
-        try {
-            return cache;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Returns the repository id.
-     */
-    public String getRepositoryId() {
-        return getRepositoryInfo().getId();
-    }
-
-    // --- creates ---
-
-    public ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
-                objectFactory.convertProperties(properties, null, null, CREATE_AND_CHECKOUT_UPDATABILITY),
-                (folderId == null ? null : folderId.getId()), objectFactory.convertContentStream(contentStream),
-                versioningState, objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
-                objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
-            VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
-        if ((source == null) || (source.getId() == null)) {
-            throw new IllegalArgumentException("Source must be set!");
-        }
-
-        // get the type of the source document
-        ObjectType type = null;
-        List<SecondaryType> secondaryTypes = null;
-        if (source instanceof CmisObject) {
-            type = ((CmisObject) source).getType();
-            secondaryTypes = ((CmisObject) source).getSecondaryTypes();
-        } else {
-            CmisObject sourceObj = getObject(source);
-            type = sourceObj.getType();
-            secondaryTypes = sourceObj.getSecondaryTypes();
-        }
-
-        if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-            throw new IllegalArgumentException("Source object must be a document!");
-        }
-
-        String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(), source.getId(),
-                objectFactory.convertProperties(properties, type, secondaryTypes, CREATE_AND_CHECKOUT_UPDATABILITY),
-                (folderId == null ? null : folderId.getId()), versioningState, objectFactory.convertPolicies(policies),
-                objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
-            List<Ace> addAces, List<Ace> removeAces) {
-        if ((folderId == null) || (folderId.getId() == null)) {
-            throw new IllegalArgumentException("Folder ID must be set!");
-        }
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
-                objectFactory.convertProperties(properties, null, null, CREATE_UPDATABILITY), folderId.getId(),
-                objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
-                objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
-            List<Ace> addAces, List<Ace> removeAces) {
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
-                objectFactory.convertProperties(properties, null, null, CREATE_UPDATABILITY),
-                (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
-                objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createItem(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces) {
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        String newId = getBinding().getObjectService().createItem(getRepositoryId(),
-                objectFactory.convertProperties(properties, null, null, CREATE_UPDATABILITY),
-                (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
-                objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-            List<Ace> removeAces) {
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Properties must not be empty!");
-        }
-
-        String newId = getBinding().getObjectService().createRelationship(getRepositoryId(),
-                objectFactory.convertProperties(properties, null, null, CREATE_UPDATABILITY),
-                objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
-                objectFactory.convertAces(removeAces), null);
-
-        if (newId == null) {
-            return null;
-        }
-
-        return createObjectId(newId);
-    }
-
-    public ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
-            VersioningState versioningState) {
-        return createDocument(properties, folderId, contentStream, versioningState, null, null, null);
-    }
-
-    public ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
-            VersioningState versioningState) {
-        return createDocumentFromSource(source, properties, folderId, versioningState, null, null, null);
-    }
-
-    public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId) {
-        return createFolder(properties, folderId, null, null, null);
-    }
-
-    public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId) {
-        return createPolicy(properties, folderId, null, null, null);
-    }
-
-    public ObjectId createItem(Map<String, ?> properties, ObjectId folderId) {
-        return createItem(properties, folderId, null, null, null);
-    }
-
-    // --- relationships ---
-
-    public ObjectId createRelationship(Map<String, ?> properties) {
-        return createRelationship(properties, null, null, null);
-    }
-
-    public ItemIterable<Relationship> getRelationships(ObjectId objectId, final boolean includeSubRelationshipTypes,
-            final RelationshipDirection relationshipDirection, ObjectType type, OperationContext context) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-        if (context == null) {
-            throw new IllegalArgumentException("Operation context must be set!");
-        }
-
-        final String id = objectId.getId();
-        final String typeId = (type == null ? null : type.getId());
-        final RelationshipService relationshipService = getBinding().getRelationshipService();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new CollectionIterable<Relationship>(new AbstractPageFetcher<Relationship>(ctxt.getMaxItemsPerPage()) {
-
-            @Override
-            protected AbstractPageFetcher.Page<Relationship> fetchPage(long skipCount) {
-
-                // fetch the relationships
-                ObjectList relList = relationshipService.getObjectRelationships(getRepositoryId(), id,
-                        includeSubRelationshipTypes, relationshipDirection, typeId, ctxt.getFilterString(),
-                        ctxt.isIncludeAllowableActions(), BigInteger.valueOf(this.maxNumItems),
-                        BigInteger.valueOf(skipCount), null);
-
-                // convert relationship objects
-                List<Relationship> page = new ArrayList<Relationship>();
-                if (relList.getObjects() != null) {
-                    for (ObjectData rod : relList.getObjects()) {
-                        CmisObject relationship = getObject(rod.getId(), ctxt);
-                        if (!(relationship instanceof Relationship)) {
-                            throw new CmisRuntimeException("Repository returned an object that is not a relationship!");
-                        }
-
-                        page.add((Relationship) relationship);
-                    }
-                }
-
-                return new AbstractPageFetcher.Page<Relationship>(page, relList.getNumItems(), relList.hasMoreItems());
-            }
-        });
-    }
-
-    // --- bulk update ---
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(List<CmisObject> objects,
-            Map<String, ?> properties, List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds) {
-        if (repositoryInfo.getCmisVersion() == CmisVersion.CMIS_1_0) {
-            throw new CmisNotSupportedException("This method is not supported for CMIS 1.0 repositories.");
-        }
-
-        if (isNullOrEmpty(properties)) {
-            throw new IllegalArgumentException("Objects must be set!");
-        }
-
-        ObjectType objectType = null;
-        Map<String, SecondaryType> secondaryTypes = new HashMap<String, SecondaryType>();
-
-        // gather secondary types
-        if (addSecondaryTypeIds != null) {
-            for (String stid : addSecondaryTypeIds) {
-                ObjectType secondaryType = getTypeDefinition(stid);
-
-                if (!(secondaryType instanceof SecondaryType)) {
-                    throw new IllegalArgumentException("Secondary types contains a type that is not a secondary type: "
-                            + secondaryType.getId());
-                }
-
-                secondaryTypes.put(secondaryType.getId(), (SecondaryType) secondaryType);
-            }
-        }
-
-        // gather ids and change tokens
-        List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-        for (CmisObject object : objects) {
-            if (object == null) {
-                continue;
-            }
-
-            objectIdsAndChangeTokens.add(new BulkUpdateObjectIdAndChangeTokenImpl(object.getId(), object
-                    .getChangeToken()));
-
-            if (objectType == null) {
-                objectType = object.getType();
-            }
-
-            if (object.getSecondaryTypes() != null) {
-                for (SecondaryType secondaryType : object.getSecondaryTypes()) {
-                    secondaryTypes.put(secondaryType.getId(), secondaryType);
-                }
-            }
-        }
-
-        Set<Updatability> updatebility = EnumSet.noneOf(Updatability.class);
-        updatebility.add(Updatability.READWRITE);
-
-        return getBinding().getObjectService().bulkUpdateProperties(getRepositoryId(), objectIdsAndChangeTokens,
-                objectFactory.convertProperties(properties, objectType, secondaryTypes.values(), updatebility),
-                addSecondaryTypeIds, removeSecondaryTypeIds, null);
-    }
-
-    // --- delete ---
-
-    public void delete(ObjectId objectId) {
-        delete(objectId, true);
-    }
-
-    public void delete(ObjectId objectId, boolean allVersions) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-
-        getBinding().getObjectService().deleteObject(getRepositoryId(), objectId.getId(), allVersions, null);
-        removeObjectFromCache(objectId);
-    }
-
-    // --- content stream ---
-
-    public ContentStream getContentStream(ObjectId docId) {
-        return getContentStream(docId, null, null, null);
-    }
-
-    public ContentStream getContentStream(ObjectId docId, String streamId, BigInteger offset, BigInteger length) {
-        if ((docId == null) || (docId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid document ID!");
-        }
-
-        // get the stream
-        ContentStream contentStream = null;
-        try {
-            contentStream = getBinding().getObjectService().getContentStream(getRepositoryId(), docId.getId(),
-                    streamId, offset, length, null);
-        } catch (CmisConstraintException e) {
-            // no content stream
-            return null;
-        }
-
-        return contentStream;
-    }
-
-    // --- ACL ---
-
-    public Acl getAcl(ObjectId objectId, boolean onlyBasicPermissions) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-
-        String id = objectId.getId();
-
-        return getBinding().getAclService().getAcl(getRepositoryId(), id, onlyBasicPermissions, null);
-    }
-
-    public Acl applyAcl(ObjectId objectId, List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-
-        ObjectFactory of = getObjectFactory();
-
-        return getBinding().getAclService().applyAcl(getRepositoryId(), objectId.getId(), of.convertAces(addAces),
-                of.convertAces(removeAces), aclPropagation, null);
-    }
-
-    public Acl setAcl(ObjectId objectId, List<Ace> aces) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-        if (aces == null) {
-            aces = Collections.emptyList();
-        }
-
-        AclService aclService = getBinding().getAclService();
-        if (!(aclService instanceof ExtendedAclService)) {
-            throw new CmisNotSupportedException("setAcl() is not supported by the binding implementation.");
-        }
-
-        ObjectFactory of = getObjectFactory();
-
-        return ((ExtendedAclService) aclService).setAcl(getRepositoryId(), objectId.getId(), of.convertAces(aces));
-    }
-
-    // --- Policies ---
-
-    public void applyPolicy(ObjectId objectId, ObjectId... policyIds) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-
-        if ((policyIds == null) || (policyIds.length == 0)) {
-            throw new IllegalArgumentException("No Policies provided!");
-        }
-
-        String[] ids = new String[policyIds.length];
-        for (int i = 0; i < policyIds.length; i++) {
-            if ((policyIds[i] == null) || (policyIds[i].getId() == null)) {
-                throw new IllegalArgumentException("A Policy ID is not set!");
-            }
-
-            ids[i] = policyIds[i].getId();
-        }
-
-        for (String id : ids) {
-            getBinding().getPolicyService().applyPolicy(getRepositoryId(), id, objectId.getId(), null);
-        }
-    }
-
-    public void removePolicy(ObjectId objectId, ObjectId... policyIds) {
-        if ((objectId == null) || (objectId.getId() == null)) {
-            throw new IllegalArgumentException("Invalid object ID!");
-        }
-
-        if ((policyIds == null) || (policyIds.length == 0)) {
-            throw new IllegalArgumentException("No Policies provided!");
-        }
-
-        String[] ids = new String[policyIds.length];
-        for (int i = 0; i < policyIds.length; i++) {
-            if ((policyIds[i] == null) || (policyIds[i].getId() == null)) {
-                throw new IllegalArgumentException("A Policy ID is not set!");
-            }
-
-            ids[i] = policyIds[i].getId();
-        }
-
-        for (String id : ids) {
-            getBinding().getPolicyService().removePolicy(getRepositoryId(), id, objectId.getId(), null);
-        }
-    }
-
-    // ----
-
-    @Override
-    public String toString() {
-        return "Session " + getBinding().getSessionId();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java
deleted file mode 100644
index f23e0b2..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.cache;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Session;
-
-/**
- * Implements a session cache providing following capabilities:
- * <p>
- * <ul>
- * <li>access CmisObject by object id</li>
- * <li>access CmisObject by object path</li>
- * </ul>
- */
-public interface Cache extends Serializable {
-
-    void initialize(Session session, Map<String, String> parameters);
-
-    boolean containsId(String objectId, String cacheKey);
-
-    boolean containsPath(String path, String cacheKey);
-
-    void put(CmisObject object, String cacheKey);
-
-    void putPath(String path, CmisObject object, String cacheKey);
-
-    CmisObject getById(String objectId, String cacheKey);
-
-    CmisObject getByPath(String path, String cacheKey);
-
-    void remove(String objectId);
-
-    void clear();
-
-    int getCacheSize();
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/CacheImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/CacheImpl.java
deleted file mode 100644
index 26f5c09..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/CacheImpl.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.cache;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.ref.SoftReference;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.SessionParameterDefaults;
-
-/**
- * Synchronized cache implementation. The cache is limited to a specific size of
- * entries and works in a LRU mode.
- */
-public class CacheImpl implements Cache {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final float HASHTABLE_LOAD_FACTOR = 0.75f;
-
-    private int cacheSize;
-    private int cacheTtl;
-    private int pathToIdSize;
-    private int pathToIdTtl;
-
-    private LinkedHashMap<String, CacheItem<Map<String, CmisObject>>> objectMap;
-    private LinkedHashMap<String, CacheItem<String>> pathToIdMap;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Default constructor.
-     */
-    public CacheImpl() {
-    }
-
-    public void initialize(Session session, Map<String, String> parameters) {
-        assert parameters != null;
-
-        lock.writeLock().lock();
-        try {
-            // cache size
-            try {
-                cacheSize = Integer.valueOf(parameters.get(SessionParameter.CACHE_SIZE_OBJECTS));
-                if (cacheSize < 0) {
-                    cacheSize = 0;
-                }
-            } catch (Exception e) {
-                cacheSize = SessionParameterDefaults.CACHE_SIZE_OBJECTS;
-            }
-
-            // cache time-to-live
-            try {
-                cacheTtl = Integer.valueOf(parameters.get(SessionParameter.CACHE_TTL_OBJECTS));
-                if (cacheTtl < 0) {
-                    cacheTtl = SessionParameterDefaults.CACHE_TTL_OBJECTS;
-                }
-            } catch (Exception e) {
-                cacheTtl = SessionParameterDefaults.CACHE_TTL_OBJECTS;
-            }
-
-            // path-to-id size
-            try {
-                pathToIdSize = Integer.valueOf(parameters.get(SessionParameter.CACHE_SIZE_PATHTOID));
-                if (pathToIdSize < 0) {
-                    pathToIdSize = 0;
-                }
-            } catch (Exception e) {
-                pathToIdSize = SessionParameterDefaults.CACHE_SIZE_PATHTOID;
-            }
-
-            // path-to-id time-to-live
-            try {
-                pathToIdTtl = Integer.valueOf(parameters.get(SessionParameter.CACHE_TTL_PATHTOID));
-                if (pathToIdTtl < 0) {
-                    pathToIdTtl = SessionParameterDefaults.CACHE_TTL_PATHTOID;
-                }
-            } catch (Exception e) {
-                pathToIdTtl = SessionParameterDefaults.CACHE_TTL_PATHTOID;
-            }
-
-            initializeInternals();
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Sets up the internal objects.
-     */
-    private void initializeInternals() {
-        lock.writeLock().lock();
-        try {
-            // object cache
-            int cacheHashTableCapacity = (int) Math.ceil(cacheSize / HASHTABLE_LOAD_FACTOR) + 1;
-
-            final int cs = cacheSize;
-
-            objectMap = new LinkedHashMap<String, CacheItem<Map<String, CmisObject>>>(cacheHashTableCapacity,
-                    HASHTABLE_LOAD_FACTOR) {
-
-                private static final long serialVersionUID = 1L;
-
-                @Override
-                protected boolean removeEldestEntry(Map.Entry<String, CacheItem<Map<String, CmisObject>>> eldest) {
-                    return size() > cs;
-                }
-            };
-
-            // path-to-id mapping
-            int pathtoidHashTableCapacity = (int) Math.ceil(pathToIdSize / HASHTABLE_LOAD_FACTOR) + 1;
-
-            final int ptis = pathToIdSize;
-
-            pathToIdMap = new LinkedHashMap<String, CacheItem<String>>(pathtoidHashTableCapacity, HASHTABLE_LOAD_FACTOR) {
-
-                private static final long serialVersionUID = 1L;
-
-                @Override
-                protected boolean removeEldestEntry(Map.Entry<String, CacheItem<String>> eldest) {
-                    return size() > ptis;
-                }
-            };
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void clear() {
-        initializeInternals();
-    }
-
-    public boolean containsId(String objectId, String cacheKey) {
-        lock.writeLock().lock();
-        try {
-            if (!objectMap.containsKey(objectId)) {
-                return false;
-            }
-
-            CacheItem<Map<String, CmisObject>> item = objectMap.get(objectId);
-            if (item.isExpired()) {
-                objectMap.remove(objectId);
-                return false;
-            }
-
-            return true;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public boolean containsPath(String path, String cacheKey) {
-        lock.writeLock().lock();
-        try {
-            if (!pathToIdMap.containsKey(path)) {
-                return false;
-            }
-
-            CacheItem<String> item = pathToIdMap.get(path);
-            if (item.isExpired() || !containsId(item.getItem(), cacheKey)) {
-                pathToIdMap.remove(path);
-                return false;
-            }
-
-            return true;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public CmisObject getById(String objectId, String cacheKey) {
-        lock.writeLock().lock();
-        try {
-            if (!containsId(objectId, cacheKey)) {
-                return null;
-            }
-
-            Map<String, CmisObject> item = objectMap.get(objectId).getItem();
-            return (item == null ? null : item.get(cacheKey));
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public CmisObject getByPath(String path, String cacheKey) {
-        lock.writeLock().lock();
-        try {
-            if (!containsPath(path, cacheKey)) {
-                return null;
-            }
-
-            CacheItem<String> item = pathToIdMap.get(path);
-            return getById(item.getItem(), cacheKey);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void put(CmisObject object, String cacheKey) {
-        // no object, no cache key - no cache
-        if ((object == null) || (cacheKey == null)) {
-            return;
-        }
-
-        // no id - no cache
-        if (object.getId() == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            // get cache key map
-            CacheItem<Map<String, CmisObject>> cacheKeyMap = objectMap.get(object.getId());
-            if (cacheKeyMap == null) {
-                cacheKeyMap = new CacheItem<Map<String, CmisObject>>(new HashMap<String, CmisObject>(), cacheTtl);
-                objectMap.put(object.getId(), cacheKeyMap);
-            }
-
-            // put into id cache
-            Map<String, CmisObject> m = cacheKeyMap.getItem();
-            if (m != null) {
-                m.put(cacheKey, object);
-            }
-
-            // folders may have a path, use it!
-            String path = object.getPropertyValue(PropertyIds.PATH);
-            if (path != null) {
-                pathToIdMap.put(path, new CacheItem<String>(object.getId(), pathToIdTtl));
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void putPath(String path, CmisObject object, String cacheKey) {
-        if (path == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            put(object, cacheKey);
-
-            if ((object != null) && (object.getId() != null) && (cacheKey != null)) {
-                pathToIdMap.put(path, new CacheItem<String>(object.getId(), pathToIdTtl));
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void remove(String objectId) {
-        if (objectId == null) {
-            return;
-        }
-
-        lock.writeLock().lock();
-        try {
-            objectMap.remove(objectId);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public int getCacheSize() {
-        return this.cacheSize;
-    }
-
-    // --- cache item ---
-
-    private static class CacheItem<T> implements Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        private SoftReference<T> item;
-        private long timestamp;
-        private int ttl;
-
-        public CacheItem(T item, int ttl) {
-            this.item = new SoftReference<T>(item);
-            timestamp = System.currentTimeMillis();
-            this.ttl = ttl;
-        }
-
-        public synchronized boolean isExpired() {
-            if ((item == null) || (item.get() == null)) {
-                return true;
-            }
-
-            return (timestamp + ttl < System.currentTimeMillis());
-        }
-
-        public synchronized T getItem() {
-            if (isExpired()) {
-                item = null;
-                return null;
-            }
-
-            return item.get();
-        }
-
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            out.writeObject(isExpired() ? null : item.get());
-            out.writeLong(timestamp);
-            out.writeInt(ttl);
-        }
-
-        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-            @SuppressWarnings("unchecked")
-            T object = (T) in.readObject();
-            timestamp = in.readLong();
-            ttl = in.readInt();
-
-            if ((object != null) && (timestamp + ttl >= System.currentTimeMillis())) {
-                this.item = new SoftReference<T>(object);
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/NoCacheImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/NoCacheImpl.java
deleted file mode 100644
index e59f61e..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/NoCacheImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.cache;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Session;
-
-public class NoCacheImpl implements Cache {
-
-    private static final long serialVersionUID = 1L;
-
-    public void initialize(Session session, Map<String, String> parameters) {
-    }
-
-    public boolean containsId(String objectId, String cacheKey) {
-        return false;
-    }
-
-    public boolean containsPath(String path, String cacheKey) {
-        return false;
-    }
-
-    public void put(CmisObject object, String cacheKey) {
-    }
-
-    public void putPath(String path, CmisObject object, String cacheKey) {
-    }
-
-    public CmisObject getById(String objectId, String cacheKey) {
-        return null;
-    }
-
-    public CmisObject getByPath(String path, String cacheKey) {
-        return null;
-    }
-
-    public void remove(String objectId) {
-    }
-
-    public void clear() {
-    }
-
-    public int getCacheSize() {
-        return 0;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java
deleted file mode 100644
index b15d0da..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.DocumentType;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-
-/**
- * Document type.
- */
-public class DocumentTypeImpl extends DocumentTypeDefinitionImpl implements DocumentType, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-
-    public DocumentTypeImpl(Session session, DocumentTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        setContentStreamAllowed(typeDefinition.getContentStreamAllowed());
-        setIsVersionable(typeDefinition.isVersionable());
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java
deleted file mode 100644
index 1f494d8..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.FolderType;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-
-/**
- * Folder type.
- */
-public class FolderTypeImpl extends FolderTypeDefinitionImpl implements FolderType {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-
-    public FolderTypeImpl(Session session, FolderTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ItemTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ItemTypeImpl.java
deleted file mode 100644
index 09d66b1..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ItemTypeImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ItemType;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-
-public class ItemTypeImpl extends ItemTypeDefinitionImpl implements ItemType {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-
-    public ItemTypeImpl(Session session, ItemTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java
deleted file mode 100644
index 22601a3..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-
-/**
- * Helper for object types, containing session-related info.
- * <p>
- * This is needed because Java doesn't support multiple inheritance.
- */
-public class ObjectTypeHelper implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Session session;
-    private final ObjectType objectType;
-    private ObjectType baseType;
-    private ObjectType parentType;
-
-    public ObjectTypeHelper(Session session, ObjectType objectType) {
-        assert session != null;
-        assert objectType != null;
-
-        this.session = session;
-        this.objectType = objectType;
-    }
-
-    public Session getSession() {
-        return session;
-    }
-
-    public boolean isBaseType() {
-        return objectType.getParentTypeId() == null || objectType.getParentTypeId().length() == 0;
-    }
-
-    public ObjectType getBaseType() {
-        if (isBaseType()) {
-            return null;
-        }
-        if (baseType != null) {
-            return baseType;
-        }
-        if (objectType.getBaseTypeId() == null) {
-            return null;
-        }
-        baseType = session.getTypeDefinition(objectType.getBaseTypeId().value());
-        return baseType;
-    }
-
-    public ObjectType getParentType() {
-        if (parentType != null) {
-            return parentType;
-        }
-        if (objectType.getParentTypeId() == null || objectType.getParentTypeId().length() == 0) {
-            return null;
-        }
-        parentType = session.getTypeDefinition(objectType.getParentTypeId());
-        return parentType;
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return session.getTypeChildren(objectType.getId(), true);
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return session.getTypeDescendants(objectType.getId(), depth, true);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java
deleted file mode 100644
index 8f6cbfb..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PolicyType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-
-/**
- * Policy type.
- */
-public class PolicyTypeImpl extends PolicyTypeDefinitionImpl implements PolicyType, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-
-    public PolicyTypeImpl(Session session, PolicyTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java
deleted file mode 100644
index cf64358..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.RelationshipType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-
-/**
- * Relationship type.
- */
-public class RelationshipTypeImpl extends RelationshipTypeDefinitionImpl implements RelationshipType, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-    private List<ObjectType> allowedSourceTypes;
-    private List<ObjectType> allowedTargetTypes;
-
-    public RelationshipTypeImpl(Session session, RelationshipTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        setAllowedSourceTypes(typeDefinition.getAllowedSourceTypeIds());
-        setAllowedTargetTypes(typeDefinition.getAllowedTargetTypeIds());
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-
-    public List<ObjectType> getAllowedSourceTypes() {
-        if (allowedSourceTypes == null) {
-            List<String> ids = getAllowedSourceTypeIds();
-            List<ObjectType> types = new ArrayList<ObjectType>(ids == null ? 0 : ids.size());
-            if (ids != null) {
-                for (String id : ids) {
-                    types.add(helper.getSession().getTypeDefinition(id));
-                }
-            }
-            allowedSourceTypes = types;
-        }
-        return allowedSourceTypes;
-    }
-
-    public List<ObjectType> getAllowedTargetTypes() {
-        if (allowedTargetTypes == null) {
-            List<String> ids = getAllowedTargetTypeIds();
-            List<ObjectType> types = new ArrayList<ObjectType>(ids == null ? 0 : ids.size());
-            if (ids != null) {
-                for (String id : ids) {
-                    types.add(helper.getSession().getTypeDefinition(id));
-                }
-            }
-            allowedTargetTypes = types;
-        }
-        return allowedTargetTypes;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/SecondaryTypeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/SecondaryTypeImpl.java
deleted file mode 100644
index bd57ab4..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/SecondaryTypeImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.chemistry.opencmis.client.runtime.objecttype;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-
-public class SecondaryTypeImpl extends SecondaryTypeDefinitionImpl implements SecondaryType {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ObjectTypeHelper helper;
-
-    public SecondaryTypeImpl(Session session, SecondaryTypeDefinition typeDefinition) {
-        assert session != null;
-        assert typeDefinition != null;
-
-        initialize(typeDefinition);
-        helper = new ObjectTypeHelper(session, this);
-    }
-
-    public ObjectType getBaseType() {
-        return helper.getBaseType();
-    }
-
-    public ItemIterable<ObjectType> getChildren() {
-        return helper.getChildren();
-    }
-
-    public List<Tree<ObjectType>> getDescendants(int depth) {
-        return helper.getDescendants(depth);
-    }
-
-    public ObjectType getParentType() {
-        return helper.getParentType();
-    }
-
-    public boolean isBaseType() {
-        return helper.isBaseType();
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/ObjectFactoryImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/ObjectFactoryImpl.java
deleted file mode 100644
index 0561422..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/ObjectFactoryImpl.java
+++ /dev/null
@@ -1,704 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.repository;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-
-import java.io.InputStream;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.ChangeEvents;
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.runtime.ChangeEventImpl;
-import org.apache.chemistry.opencmis.client.runtime.ChangeEventsImpl;
-import org.apache.chemistry.opencmis.client.runtime.DocumentImpl;
-import org.apache.chemistry.opencmis.client.runtime.FolderImpl;
-import org.apache.chemistry.opencmis.client.runtime.ItemImpl;
-import org.apache.chemistry.opencmis.client.runtime.PolicyImpl;
-import org.apache.chemistry.opencmis.client.runtime.PropertyImpl;
-import org.apache.chemistry.opencmis.client.runtime.QueryResultImpl;
-import org.apache.chemistry.opencmis.client.runtime.RelationshipImpl;
-import org.apache.chemistry.opencmis.client.runtime.RenditionImpl;
-import org.apache.chemistry.opencmis.client.runtime.SessionImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.DocumentTypeImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.FolderTypeImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.ItemTypeImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.PolicyTypeImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.RelationshipTypeImpl;
-import org.apache.chemistry.opencmis.client.runtime.objecttype.SecondaryTypeImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-
-/**
- * Persistent model object factory.
- */
-public class ObjectFactoryImpl implements ObjectFactory, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Session session;
-
-    /**
-     * Default constructor.
-     */
-    public ObjectFactoryImpl() {
-    }
-
-    public void initialize(Session session, Map<String, String> parameters) {
-        assert session != null;
-
-        this.session = session;
-    }
-
-    /**
-     * Returns the bindings object factory.
-     */
-    protected BindingsObjectFactory getBindingsObjectFactory() {
-        return session.getBinding().getObjectFactory();
-    }
-
-    // repository info
-
-    public RepositoryInfo convertRepositoryInfo(RepositoryInfo repositoryInfo) {
-        return repositoryInfo;
-    }
-
-    // ACL and ACE
-
-    public Acl convertAces(List<Ace> aces) {
-        if (aces == null) {
-            return null;
-        }
-
-        BindingsObjectFactory bof = getBindingsObjectFactory();
-
-        List<Ace> bindingAces = new ArrayList<Ace>();
-        for (Ace ace : aces) {
-            bindingAces.add(bof.createAccessControlEntry(ace.getPrincipalId(), ace.getPermissions()));
-        }
-
-        return bof.createAccessControlList(bindingAces);
-    }
-
-    public Ace createAce(String principal, List<String> permissions) {
-        BindingsObjectFactory bof = getBindingsObjectFactory();
-
-        Ace ace = bof.createAccessControlEntry(principal, permissions);
-
-        return ace;
-    }
-
-    public Acl createAcl(List<Ace> aces) {
-        BindingsObjectFactory bof = getBindingsObjectFactory();
-
-        Acl acl = bof.createAccessControlList(aces);
-
-        return acl;
-    }
-
-    // policies
-
-    public List<String> convertPolicies(List<Policy> policies) {
-        if (policies == null) {
-            return null;
-        }
-
-        List<String> result = new ArrayList<String>();
-
-        for (Policy policy : policies) {
-            if ((policy != null) && (policy.getId() != null)) {
-                result.add(policy.getId());
-            }
-        }
-
-        return result;
-    }
-
-    // renditions
-
-    public Rendition convertRendition(String objectId, RenditionData rendition) {
-        if (rendition == null) {
-            throw new IllegalArgumentException("Rendition must be set!");
-        }
-
-        long length = (rendition.getBigLength() == null ? -1 : rendition.getBigLength().longValue());
-        int height = (rendition.getBigHeight() == null ? -1 : rendition.getBigHeight().intValue());
-        int width = (rendition.getBigWidth() == null ? -1 : rendition.getBigWidth().intValue());
-
-        return new RenditionImpl(this.session, objectId, rendition.getStreamId(), rendition.getRenditionDocumentId(),
-                rendition.getKind(), length, rendition.getMimeType(), rendition.getTitle(), height, width);
-    }
-
-    // content stream
-
-    public ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream) {
-        return createContentStream(filename, length, mimetype, stream, false);
-    }
-
-    public ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream,
-            boolean partial) {
-        if (partial) {
-            return new PartialContentStreamImpl(filename, (length < 0 ? null : BigInteger.valueOf(length)), mimetype,
-                    stream);
-        } else {
-            return new ContentStreamImpl(filename, (length < 0 ? null : BigInteger.valueOf(length)), mimetype, stream);
-        }
-    }
-
-    public ContentStream convertContentStream(ContentStream contentStream) {
-        if (contentStream == null) {
-            return null;
-        }
-
-        BigInteger length = (contentStream.getLength() < 0 ? null : BigInteger.valueOf(contentStream.getLength()));
-
-        return getBindingsObjectFactory().createContentStream(contentStream.getFileName(), length,
-                contentStream.getMimeType(), contentStream.getStream());
-    }
-
-    // types
-
-    public ObjectType convertTypeDefinition(TypeDefinition typeDefinition) {
-        if (typeDefinition instanceof DocumentTypeDefinition) {
-            return new DocumentTypeImpl(this.session, (DocumentTypeDefinition) typeDefinition);
-        } else if (typeDefinition instanceof FolderTypeDefinition) {
-            return new FolderTypeImpl(this.session, (FolderTypeDefinition) typeDefinition);
-        } else if (typeDefinition instanceof RelationshipTypeDefinition) {
-            return new RelationshipTypeImpl(this.session, (RelationshipTypeDefinition) typeDefinition);
-        } else if (typeDefinition instanceof PolicyTypeDefinition) {
-            return new PolicyTypeImpl(this.session, (PolicyTypeDefinition) typeDefinition);
-        } else if (typeDefinition instanceof ItemTypeDefinition) {
-            return new ItemTypeImpl(this.session, (ItemTypeDefinition) typeDefinition);
-        } else if (typeDefinition instanceof SecondaryTypeDefinition) {
-            return new SecondaryTypeImpl(this.session, (SecondaryTypeDefinition) typeDefinition);
-        } else if (typeDefinition == null) {
-            throw new CmisRuntimeException("No base type supplied!");
-        } else {
-            throw new CmisRuntimeException("Unknown base type! Received " + typeDefinition.getClass().getName());
-        }
-    }
-
-    public ObjectType getTypeFromObjectData(ObjectData objectData) {
-        if ((objectData == null) || (objectData.getProperties() == null)
-                || (objectData.getProperties().getProperties() == null)) {
-            return null;
-        }
-
-        PropertyData<?> typeProperty = objectData.getProperties().getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        if (!(typeProperty instanceof PropertyId)) {
-            return null;
-        }
-
-        return this.session.getTypeDefinition((String) typeProperty.getFirstValue());
-    }
-
-    // properties
-
-    public <T> Property<T> createProperty(PropertyDefinition<T> type, List<T> values) {
-        return new PropertyImpl<T>(type, values);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected <T> Property<T> convertProperty(ObjectType objectType, Collection<SecondaryType> secondaryTypes,
-            PropertyData<T> pd) {
-        PropertyDefinition<T> definition = (PropertyDefinition<T>) objectType.getPropertyDefinitions().get(pd.getId());
-
-        // search secondary types
-        if (definition == null && secondaryTypes != null) {
-            for (SecondaryType secondaryType : secondaryTypes) {
-                if (secondaryType != null && secondaryType.getPropertyDefinitions() != null) {
-                    definition = (PropertyDefinition<T>) secondaryType.getPropertyDefinitions().get(pd.getId());
-                    if (definition != null) {
-                        break;
-                    }
-                }
-            }
-        }
-
-        // the type might have changed -> reload type definitions
-        if (definition == null) {
-            TypeDefinition reloadedObjectType = session.getTypeDefinition(objectType.getId(), false);
-            definition = (PropertyDefinition<T>) reloadedObjectType.getPropertyDefinitions().get(pd.getId());
-
-            if (definition == null && secondaryTypes != null) {
-                for (SecondaryType secondaryType : secondaryTypes) {
-                    if (secondaryType != null) {
-                        TypeDefinition reloadedSecondaryType = session.getTypeDefinition(secondaryType.getId(), false);
-                        if (reloadedSecondaryType.getPropertyDefinitions() != null) {
-                            definition = (PropertyDefinition<T>) reloadedSecondaryType.getPropertyDefinitions().get(
-                                    pd.getId());
-                            if (definition != null) {
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (definition == null) {
-            // property without definition
-            throw new CmisRuntimeException("Property '" + pd.getId() + "' doesn't exist!");
-        }
-
-        return createProperty(definition, pd.getValues());
-    }
-
-    public Map<String, Property<?>> convertProperties(ObjectType objectType, Collection<SecondaryType> secondaryTypes,
-            Properties properties) {
-        // check input
-        if (objectType == null) {
-            throw new IllegalArgumentException("Object type must set!");
-        }
-
-        if (objectType.getPropertyDefinitions() == null) {
-            throw new IllegalArgumentException("Object type has no property defintions!");
-        }
-
-        if ((properties == null) || (properties.getProperties() == null)) {
-            throw new IllegalArgumentException("Properties must be set!");
-        }
-
-        // iterate through properties and convert them
-        Map<String, Property<?>> result = new LinkedHashMap<String, Property<?>>();
-        for (Map.Entry<String, PropertyData<?>> entry : properties.getProperties().entrySet()) {
-            // find property definition
-            Property<?> apiProperty = convertProperty(objectType, secondaryTypes, entry.getValue());
-            result.put(entry.getKey(), apiProperty);
-        }
-
-        return result;
-    }
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public Properties convertProperties(Map<String, ?> properties, ObjectType type,
-            Collection<SecondaryType> secondaryTypes, Set<Updatability> updatabilityFilter) {
-        // check input
-        if (properties == null) {
-            return null;
-        }
-
-        // get the type
-        if (type == null) {
-            Object typeId = properties.get(PropertyIds.OBJECT_TYPE_ID);
-
-            if (typeId instanceof String) {
-                type = session.getTypeDefinition(typeId.toString());
-            } else if (typeId instanceof List && !((List) typeId).isEmpty() && ((List) typeId).get(0) instanceof String) {
-                type = session.getTypeDefinition(((List) typeId).get(0).toString());
-            } else {
-                throw new IllegalArgumentException("Type or type property must be set!");
-            }
-        }
-
-        // get secondary types
-        Collection<SecondaryType> allSecondaryTypes = null;
-        Object secondaryTypeIds = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        if (secondaryTypeIds instanceof List) {
-            allSecondaryTypes = new ArrayList<SecondaryType>();
-
-            for (Object secondaryTypeId : (List<?>) secondaryTypeIds) {
-                if (!(secondaryTypeId instanceof String)) {
-                    throw new IllegalArgumentException("Secondary types property contains an invalid entry: "
-                            + secondaryTypeId);
-                }
-
-                ObjectType secondaryType = session.getTypeDefinition(secondaryTypeId.toString());
-                if (!(secondaryType instanceof SecondaryType)) {
-                    throw new IllegalArgumentException(
-                            "Secondary types property contains a type that is not a secondary type: " + secondaryTypeId);
-                }
-
-                allSecondaryTypes.add((SecondaryType) secondaryType);
-            }
-        }
-
-        if (secondaryTypes != null && allSecondaryTypes == null) {
-            allSecondaryTypes = secondaryTypes;
-        }
-
-        // some preparation
-        BindingsObjectFactory bof = getBindingsObjectFactory();
-        List<PropertyData<?>> propertyList = new ArrayList<PropertyData<?>>();
-
-        // the big loop
-        for (Map.Entry<String, ?> property : properties.entrySet()) {
-            if ((property == null) || (property.getKey() == null)) {
-                continue;
-            }
-
-            String id = property.getKey();
-            Object value = property.getValue();
-
-            if (value instanceof Property<?>) {
-                Property<?> p = (Property<?>) value;
-                if (!id.equals(p.getId())) {
-                    throw new IllegalArgumentException("Property id mismatch: '" + id + "' != '" + p.getId() + "'!");
-                }
-                value = (p.getDefinition().getCardinality() == Cardinality.SINGLE ? p.getFirstValue() : p.getValues());
-            }
-
-            // get the property definition
-            PropertyDefinition<?> definition = type.getPropertyDefinitions().get(id);
-
-            if (definition == null && allSecondaryTypes != null) {
-                for (SecondaryType secondaryType : allSecondaryTypes) {
-                    if (secondaryType != null && secondaryType.getPropertyDefinitions() != null) {
-                        definition = (PropertyDefinition<?>) secondaryType.getPropertyDefinitions().get(id);
-                        if (definition != null) {
-                            break;
-                        }
-                    }
-                }
-            }
-
-            if (definition == null) {
-                throw new IllegalArgumentException("Property '" + id
-                        + "' is not valid for this type or one of the secondary types!");
-            }
-
-            // check updatability
-            if (updatabilityFilter != null) {
-                if (!updatabilityFilter.contains(definition.getUpdatability())) {
-                    continue;
-                }
-            }
-
-            // single and multi value check
-            List<?> values;
-            if (value == null) {
-                values = null;
-            } else if (value instanceof List<?>) {
-                if (definition.getCardinality() != Cardinality.MULTI) {
-                    throw new IllegalArgumentException("Property '" + id + "' is not a multi value property!");
-                }
-                values = (List<?>) value;
-
-                // check if the list is homogeneous and does not contain null
-                // values
-                Class<?> valueClazz = null;
-                for (Object o : values) {
-                    if (o == null) {
-                        throw new IllegalArgumentException("Property '" + id + "' contains null values!");
-                    }
-                    if (valueClazz == null) {
-                        valueClazz = o.getClass();
-                    } else {
-                        if (!valueClazz.isInstance(o)) {
-                            throw new IllegalArgumentException("Property '" + id + "' is inhomogeneous!");
-                        }
-                    }
-                }
-            } else {
-                if (definition.getCardinality() != Cardinality.SINGLE) {
-                    throw new IllegalArgumentException("Property '" + id + "' is not a single value property!");
-                }
-                values = Collections.singletonList(value);
-            }
-
-            // assemble property
-            PropertyData<?> propertyData = null;
-            Object firstValue = (isNullOrEmpty(values) ? null : values.get(0));
-
-            if (definition instanceof PropertyStringDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyStringData(id, (List<String>) null);
-                } else if (firstValue instanceof String) {
-                    propertyData = bof.createPropertyStringData(id, (List<String>) values);
-                } else {
-                    throwWrongTypeError(firstValue, "string", String.class, id);
-                }
-            } else if (definition instanceof PropertyIdDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyIdData(id, (List<String>) null);
-                } else if (firstValue instanceof String) {
-                    propertyData = bof.createPropertyIdData(id, (List<String>) values);
-                } else {
-                    throwWrongTypeError(firstValue, "string", String.class, id);
-                }
-            } else if (definition instanceof PropertyHtmlDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyHtmlData(id, (List<String>) values);
-                } else if (firstValue instanceof String) {
-                    propertyData = bof.createPropertyHtmlData(id, (List<String>) values);
-                } else {
-                    throwWrongTypeError(firstValue, "html", String.class, id);
-                }
-            } else if (definition instanceof PropertyUriDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyUriData(id, (List<String>) null);
-                } else if (firstValue instanceof String) {
-                    propertyData = bof.createPropertyUriData(id, (List<String>) values);
-                } else {
-                    throwWrongTypeError(firstValue, "uri", String.class, id);
-                }
-            } else if (definition instanceof PropertyIntegerDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyIntegerData(id, (List<BigInteger>) null);
-                } else if (firstValue instanceof BigInteger) {
-                    propertyData = bof.createPropertyIntegerData(id, (List<BigInteger>) values);
-                } else if ((firstValue instanceof Byte) || (firstValue instanceof Short)
-                        || (firstValue instanceof Integer) || (firstValue instanceof Long)) {
-                    // we accept all kinds of integers
-                    List<BigInteger> list = new ArrayList<BigInteger>(values.size());
-                    for (Object v : values) {
-                        list.add(BigInteger.valueOf(((Number) v).longValue()));
-                    }
-
-                    propertyData = bof.createPropertyIntegerData(id, list);
-                } else {
-                    throwWrongTypeError(firstValue, "integer", BigInteger.class, id);
-                }
-            } else if (definition instanceof PropertyBooleanDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyBooleanData(id, (List<Boolean>) null);
-                } else if (firstValue instanceof Boolean) {
-                    propertyData = bof.createPropertyBooleanData(id, (List<Boolean>) values);
-                } else {
-                    throwWrongTypeError(firstValue, "boolean", Boolean.class, id);
-                }
-            } else if (definition instanceof PropertyDecimalDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyDecimalData(id, (List<BigDecimal>) null);
-                } else if (firstValue instanceof BigDecimal) {
-                    propertyData = bof.createPropertyDecimalData(id, (List<BigDecimal>) values);
-                } else if ((firstValue instanceof Float) || (firstValue instanceof Double)
-                        || (firstValue instanceof Byte) || (firstValue instanceof Short)
-                        || (firstValue instanceof Integer) || (firstValue instanceof Long)) {
-                    // we accept all kinds of integers
-                    // as well as floats and doubles
-                    List<BigDecimal> list = new ArrayList<BigDecimal>(values.size());
-                    for (Object v : values) {
-                        list.add(new BigDecimal(v.toString()));
-                    }
-
-                    propertyData = bof.createPropertyDecimalData(id, list);
-                } else {
-                    throwWrongTypeError(firstValue, "decimal", BigDecimal.class, id);
-                }
-            } else if (definition instanceof PropertyDateTimeDefinition) {
-                if (firstValue == null) {
-                    propertyData = bof.createPropertyDateTimeData(id, (List<GregorianCalendar>) null);
-                } else if (firstValue instanceof GregorianCalendar) {
-                    propertyData = bof.createPropertyDateTimeData(id, (List<GregorianCalendar>) values);
-                } else if (firstValue instanceof Date) {
-                    List<GregorianCalendar> list = new ArrayList<GregorianCalendar>(values.size());
-                    for (Object d : values) {
-                        GregorianCalendar cal = new GregorianCalendar();
-                        cal.setTime((Date) d);
-                        list.add(cal);
-                    }
-                    propertyData = bof.createPropertyDateTimeData(id, list);
-                } else {
-                    throwWrongTypeError(firstValue, "datetime", GregorianCalendar.class, id);
-                }
-            }
-
-            // do we have something?
-            if (propertyData == null) {
-                throw new IllegalArgumentException("Property '" + id + "' doesn't match the property defintion!");
-            }
-
-            propertyList.add(propertyData);
-        }
-
-        return bof.createPropertiesData(propertyList);
-    }
-
-    public List<PropertyData<?>> convertQueryProperties(Properties properties) {
-        // check input
-        if ((properties == null) || (properties.getProperties() == null)) {
-            throw new IllegalArgumentException("Properties must be set!");
-        }
-        return new ArrayList<PropertyData<?>>(properties.getPropertyList());
-    }
-
-    // objects
-
-    public CmisObject convertObject(ObjectData objectData, OperationContext context) {
-        if (objectData == null) {
-            throw new IllegalArgumentException("Object data is null!");
-        }
-
-        if (objectData.getBaseTypeId() == null) {
-            throw new IllegalArgumentException("Base type ID property not set!");
-        }
-
-        ObjectType type = getTypeFromObjectData(objectData);
-
-        /* determine type */
-        switch (objectData.getBaseTypeId()) {
-        case CMIS_DOCUMENT:
-            return new DocumentImpl((SessionImpl) this.session, type, objectData, context);
-        case CMIS_FOLDER:
-            return new FolderImpl((SessionImpl) this.session, type, objectData, context);
-        case CMIS_POLICY:
-            return new PolicyImpl((SessionImpl) this.session, type, objectData, context);
-        case CMIS_RELATIONSHIP:
-            return new RelationshipImpl((SessionImpl) this.session, type, objectData, context);
-        case CMIS_ITEM:
-            return new ItemImpl((SessionImpl) this.session, type, objectData, context);
-        case CMIS_SECONDARY:
-            throw new CmisRuntimeException("Secondary type is used as object type: " + objectData.getBaseTypeId());
-        default:
-            throw new CmisRuntimeException("Unsupported base type: " + objectData.getBaseTypeId());
-        }
-    }
-
-    public QueryResult convertQueryResult(ObjectData objectData) {
-        if (objectData == null) {
-            throw new IllegalArgumentException("Object data is null!");
-        }
-
-        return new QueryResultImpl(session, objectData);
-    }
-
-    public ChangeEvent convertChangeEvent(ObjectData objectData) {
-        ChangeType changeType = null;
-        GregorianCalendar changeTime = null;
-        String objectId = null;
-        Map<String, List<?>> properties = null;
-        List<String> policyIds = null;
-        Acl acl = null;
-
-        if (objectData.getChangeEventInfo() != null) {
-            changeType = objectData.getChangeEventInfo().getChangeType();
-            changeTime = objectData.getChangeEventInfo().getChangeTime();
-        }
-
-        if ((objectData.getProperties() != null) && (objectData.getProperties().getPropertyList() != null)) {
-            properties = new HashMap<String, List<?>>();
-
-            for (PropertyData<?> property : objectData.getProperties().getPropertyList()) {
-                properties.put(property.getId(), property.getValues());
-            }
-
-            if (properties.containsKey(PropertyIds.OBJECT_ID)) {
-                List<?> objectIdList = properties.get(PropertyIds.OBJECT_ID);
-                if (isNotEmpty(objectIdList)) {
-                    objectId = objectIdList.get(0).toString();
-                }
-            }
-
-            if ((objectData.getPolicyIds() != null) && (objectData.getPolicyIds().getPolicyIds() != null)) {
-                policyIds = objectData.getPolicyIds().getPolicyIds();
-            }
-
-            if (objectData.getAcl() != null) {
-                acl = objectData.getAcl();
-            }
-        }
-
-        return new ChangeEventImpl(changeType, changeTime, objectId, properties, policyIds, acl);
-    }
-
-    public ChangeEvents convertChangeEvents(String changeLogToken, ObjectList objectList) {
-        if (objectList == null) {
-            return null;
-        }
-
-        List<ChangeEvent> events = new ArrayList<ChangeEvent>();
-        if (objectList.getObjects() != null) {
-            for (ObjectData objectData : objectList.getObjects()) {
-                if (objectData == null) {
-                    continue;
-                }
-
-                events.add(convertChangeEvent(objectData));
-            }
-        }
-
-        boolean hasMoreItems = (objectList.hasMoreItems() == null ? false : objectList.hasMoreItems().booleanValue());
-        long totalNumItems = (objectList.getNumItems() == null ? -1 : objectList.getNumItems().longValue());
-
-        return new ChangeEventsImpl(changeLogToken, events, hasMoreItems, totalNumItems);
-    }
-
-    private void throwWrongTypeError(Object obj, String type, Class<?> clazz, String id) {
-        String expectedTypes;
-        if (BigInteger.class.isAssignableFrom(clazz)) {
-            expectedTypes = "<BigInteger, Byte, Short, Integer, Long>";
-        } else if (BigDecimal.class.isAssignableFrom(clazz)) {
-            expectedTypes = "<BigDecimal, Double, Float, Byte, Short, Integer, Long>";
-        } else if (GregorianCalendar.class.isAssignableFrom(clazz)) {
-            expectedTypes = "<java.util.GregorianCalendar, java.util.Date>";
-        } else {
-            expectedTypes = clazz.getName();
-        }
-
-        String message = "Property '" + id + "' is a " + type + " property. Expected type '" + expectedTypes
-                + "' but received a '" + obj.getClass().getName() + "' property.";
-
-        throw new IllegalArgumentException(message);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java
deleted file mode 100644
index 6af9262..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.repository;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-
-public class RepositoryImpl extends RepositoryInfoImpl implements Repository {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Map<String, String> parameters;
-    private final SessionFactoryImpl sessionFactory;
-    private final ObjectFactory objectFactory;
-    private final AuthenticationProvider authenticationProvider;
-    private final Cache cache;
-    private final TypeDefinitionCache typeDefCache;
-
-    /**
-     * Constructor.
-     */
-    public RepositoryImpl(RepositoryInfo data, Map<String, String> parameters, SessionFactoryImpl sessionFactory,
-            ObjectFactory objectFactory, AuthenticationProvider authenticationProvider, Cache cache,
-            TypeDefinitionCache typeDefCache) {
-        super(data);
-
-        assert sessionFactory != null;
-
-        this.parameters = new HashMap<String, String>(parameters);
-        this.parameters.put(SessionParameter.REPOSITORY_ID, getId());
-
-        this.sessionFactory = sessionFactory;
-        this.objectFactory = objectFactory;
-        this.authenticationProvider = authenticationProvider;
-        this.cache = cache;
-        this.typeDefCache = typeDefCache;
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T extends Session> T createSession() {
-        return (T) sessionFactory.createSession(parameters, objectFactory, authenticationProvider, cache, typeDefCache);
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterable.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterable.java
deleted file mode 100644
index 7cf7321..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterable.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-
-/**
- * Abstract <code>ItemIterable</code> implementation.
- *
- * @param <T> the type returned by the iterable's iterator
- */
-public abstract class AbstractIterable<T> implements ItemIterable<T> {
-
-    private final AbstractPageFetcher<T> pageFetcher;
-    private final long skipCount;
-    private AbstractIterator<T> iterator;
-
-    protected AbstractIterable(AbstractPageFetcher<T> pageFetcher) {
-        this(0, pageFetcher);
-    }
-
-    protected AbstractIterable(long position, AbstractPageFetcher<T> pageFetcher) {
-        this.pageFetcher = pageFetcher;
-        this.skipCount = position;
-    }
-
-    /**
-     * Gets the skip count
-     *
-     * @return  skip count
-     */
-    protected long getSkipCount() {
-        return skipCount;
-    }
-
-    /**
-     * Gets the page fetcher
-     *
-     * @return  page fetcher
-     */
-    protected AbstractPageFetcher<T> getPageFetcher() {
-        return pageFetcher;
-    }
-
-    /**
-     * Construct the iterator
-     *
-     * @return  iterator
-     */
-    protected abstract AbstractIterator<T> createIterator();
-
-    public AbstractIterator<T> iterator() {
-        return getIterator();
-    }
-
-    public ItemIterable<T> skipTo(long position) {
-        return new CollectionIterable<T>(position, pageFetcher);
-    }
-
-    public ItemIterable<T> getPage() {
-        return new CollectionPageIterable<T>(skipCount, pageFetcher);
-    }
-
-    public ItemIterable<T> getPage(int maxNumItems) {
-        this.pageFetcher.setMaxNumItems(maxNumItems);
-        return new CollectionPageIterable<T>(skipCount, pageFetcher);
-    }
-
-    public long getPageNumItems() {
-        return getIterator().getPageNumItems();
-    }
-
-    public boolean getHasMoreItems() {
-        return getIterator().getHasMoreItems();
-    }
-
-    public long getTotalNumItems() {
-        return getIterator().getTotalNumItems();
-    }
-
-    private AbstractIterator<T> getIterator() {
-        if (this.iterator == null) {
-            this.iterator = createIterator();
-        }
-        return this.iterator;
-    }
-}
-
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterator.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterator.java
deleted file mode 100644
index 61c5223..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractIterator.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher.Page;
-
-/**
- * Abstract <code>Iterator</code> implementation.
- *
- * @param <T> the type returned by the iterator
- */
-public abstract class AbstractIterator<T> implements Iterator<T> {
-
-    private long skipCount;
-    private int skipOffset;
-    private final AbstractPageFetcher<T> pageFetcher;
-
-    private Page<T> page;
-    private Long totalNumItems;
-    private Boolean hasMoreItems;
-
-    /**
-     * Construct
-     *
-     * @param skipCount
-     * @param pageFetcher
-     */
-    protected AbstractIterator(long skipCount, AbstractPageFetcher<T> pageFetcher) {
-        this.skipCount = skipCount;
-        this.pageFetcher = pageFetcher;
-    }
-
-    public long getPosition() {
-        return skipCount + skipOffset;
-    }
-
-    public long getPageNumItems() {
-        Page<T> currentPage = getCurrentPage();
-        if (currentPage != null) {
-            List<T> items = currentPage.getItems();
-            if (items != null) {
-                return items.size();
-            }
-        }
-        return 0L;
-    }
-
-    public long getTotalNumItems() {
-        if (totalNumItems == null) {
-            totalNumItems = Long.valueOf(-1);
-            Page<T> currentPage = getCurrentPage();
-            if (currentPage != null) {
-                // set number of items
-                if (currentPage.getTotalNumItems() != null) {
-                    totalNumItems = currentPage.getTotalNumItems();
-                }
-            }
-        }
-        return totalNumItems.longValue();
-    }
-
-    public boolean getHasMoreItems() {
-        if (hasMoreItems == null) {
-            hasMoreItems = Boolean.FALSE;
-            Page<T> currentPage = getCurrentPage();
-            if (currentPage != null) {
-                if (currentPage.getHasMoreItems() != null) {
-                    hasMoreItems = currentPage.getHasMoreItems();
-                }
-            }
-        }
-        return hasMoreItems.booleanValue();
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Gets current skip count
-     *
-     * @return skip count
-     */
-    protected long getSkipCount() {
-        return skipCount;
-    }
-
-    /**
-     * Gets current skip offset (from skip count)
-     *
-     * @return skip offset
-     */
-    protected int getSkipOffset() {
-        return skipOffset;
-    }
-
-    /**
-     * Increment the skip offset by one
-     *
-     * @return incremented skip offset
-     */
-    protected int incrementSkipOffset() {
-        return skipOffset++;
-    }
-
-    /**
-     * Gets the current page of items within collection
-     *
-     * @return current page
-     */
-    protected Page<T> getCurrentPage() {
-        if (page == null) {
-            page = pageFetcher.fetchPage(skipCount);
-        }
-        return page;
-    }
-
-    /**
-     * Skip to the next page of items within collection
-     *
-     * @return next page
-     */
-    protected Page<T> incrementPage() {
-        skipCount += skipOffset;
-        skipOffset = 0;
-        totalNumItems = null;
-        hasMoreItems = null;
-        page = pageFetcher.fetchPage(skipCount);
-        return page;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetcher.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetcher.java
deleted file mode 100644
index 032070c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetcher.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.math.BigInteger;
-import java.util.List;
-
-/**
- * Abstract page fetcher.
- *
- * @param <T> the type of items fetched
- */
-public abstract class AbstractPageFetcher<T> {
-
-    protected long maxNumItems;
-
-    protected AbstractPageFetcher(long maxNumItems) {
-        this.maxNumItems = maxNumItems;
-    }
-
-    /**
-     * Fetches the given page from the server.
-     *
-     * @param skipCount initial offset where to start fetching
-     */
-    protected abstract Page<T> fetchPage(long skipCount);
-
-    /**
-     * A fetched page.
-     *
-     * @param <T> the type of items fetched
-     */
-    public static class Page<T> {
-        private final List<T> items;
-        private final Long totalNumItems;
-        private final Boolean hasMoreItems;
-
-        public Page(List<T> items, BigInteger totalNumItems, Boolean hasMoreItems) {
-            this.items = items;
-            this.totalNumItems = totalNumItems == null ? null
-                    : Long.valueOf(totalNumItems.longValue());
-            this.hasMoreItems = hasMoreItems;
-        }
-
-        public Page(List<T> items, long totalNumItems, boolean hasMoreItems) {
-            this.items = items;
-            this.totalNumItems = Long.valueOf(totalNumItems);
-            this.hasMoreItems = Boolean.valueOf(hasMoreItems);
-        }
-
-        public List<T> getItems() {
-            return items;
-        }
-
-        public Long getTotalNumItems() {
-            return totalNumItems;
-        }
-
-        public Boolean getHasMoreItems() {
-            return hasMoreItems;
-        }
-    }
-
-    public void setMaxNumItems(int maxNumItems) {
-        this.maxNumItems = maxNumItems;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterable.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterable.java
deleted file mode 100644
index f98a7b7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterable.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-
-/**
- * CMIS Collection Iterable.
- */
-public class CollectionIterable<T> extends AbstractIterable<T> {
-
-    /**
-     * Constructor.
-     *
-     * @param pageFetcher
-     */
-    public CollectionIterable(AbstractPageFetcher<T> pageFetcher) {
-        this(0, pageFetcher);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param position
-     * @param pageFetcher
-     */
-    protected CollectionIterable(long position, AbstractPageFetcher<T> pageFetcher) {
-        super(position, pageFetcher);
-    }
-
-    @Override
-    protected AbstractIterator<T> createIterator() {
-        return new CollectionIterator<T>(getSkipCount(), getPageFetcher());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterator.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterator.java
deleted file mode 100644
index e862926..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionIterator.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher.Page;
-
-/**
- * Iterator for iterating over all items in a CMIS Collection.
- *
- * @param <T>
- */
-public class CollectionIterator<T> extends AbstractIterator<T> {
-
-    /**
-     * Construct
-     *
-     * @param skipCount
-     * @param pageFetcher
-     */
-    public CollectionIterator(long skipCount, AbstractPageFetcher<T> pageFetcher) {
-        super(skipCount, pageFetcher);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.util.Iterator#hasNext()
-     */
-    public boolean hasNext() {
-        Page<T> page = getCurrentPage();
-        if (page == null) {
-            return false;
-        }
-
-        List<T> items = page.getItems();
-        if (items != null && getSkipOffset() < items.size()) {
-            return true;
-        }
-
-        if (!getHasMoreItems()) {
-            return false;
-        }
-
-        long totalItems = getTotalNumItems();
-        if (totalItems < 0) {
-            // we don't know better
-            return true;
-        }
-
-        return (getSkipCount() + getSkipOffset()) < totalItems;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.util.Iterator#next()
-     */
-    public T next() {
-        Page<T> page = getCurrentPage();
-        if (page == null) {
-            return null;
-        }
-
-        List<T> items = page.getItems();
-        if (items == null || items.isEmpty()) {
-            return null;
-        }
-
-        if (getSkipOffset() == items.size()) {
-            page = incrementPage();
-            items = page == null ? null : page.getItems();
-        }
-
-        if (items == null || items.isEmpty() || getSkipOffset() == items.size()) {
-            return null;
-        }
-
-        return items.get(incrementSkipOffset());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterable.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterable.java
deleted file mode 100644
index b57cebc..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterable.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-
-/**
- * Iterable for a CMIS Collection Page.
- */
-public class CollectionPageIterable<T> extends AbstractIterable<T> {
-
-    /**
-     * Constructor.
-     *
-     * @param pageFetcher
-     */
-    public CollectionPageIterable(AbstractPageFetcher<T> pageFetcher) {
-        this(0, pageFetcher);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param position
-     * @param pageFetcher
-     */
-    protected CollectionPageIterable(long position, AbstractPageFetcher<T> pageFetcher) {
-        super(position, pageFetcher);
-    }
-
-    @Override
-    protected AbstractIterator<T> createIterator() {
-        return new CollectionPageIterator<T>(getSkipCount(), getPageFetcher());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterator.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterator.java
deleted file mode 100644
index f0c776b..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/CollectionPageIterator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher.Page;
-
-/**
- * Iterator for iterating over a page of items in a CMIS Collection.
- *
- * @param <T>
- */
-public class CollectionPageIterator<T> extends AbstractIterator<T> {
-
-    /**
-     * Construct
-     *
-     * @param skipCount
-     * @param pageFetcher
-     */
-    public CollectionPageIterator(long skipCount, AbstractPageFetcher<T> pageFetcher) {
-        super(skipCount, pageFetcher);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.util.Iterator#hasNext()
-     */
-    public boolean hasNext() {
-        Page<T> page = getCurrentPage();
-        if (page == null) {
-            return false;
-        }
-
-        List<T> items = page.getItems();
-        if (items == null || getSkipOffset() >= items.size()) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.util.Iterator#next()
-     */
-    public T next() {
-        Page<T> page = getCurrentPage();
-        if (page == null) {
-            return null;
-        }
-
-        List<T> items = page.getItems();
-        if (items == null || items.isEmpty() || getSkipOffset() == items.size()) {
-            return null;
-        }
-
-        return items.get(incrementSkipOffset());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/EmptyItemIterable.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/EmptyItemIterable.java
deleted file mode 100644
index f94a547..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/EmptyItemIterable.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-
-/**
- * An empty item iterable.
- */
-public class EmptyItemIterable<T> implements ItemIterable<T> {
-
-    public static final EmptyItemIterable<?> INSTANCE = new EmptyItemIterable<Object>();
-
-    @SuppressWarnings("unchecked")
-    public static <U> EmptyItemIterable<U> instance() {
-        return (EmptyItemIterable<U>) INSTANCE;
-    }
-
-    public ItemIterable<T> skipTo(long position) {
-        if (position != 0) {
-            throw new IllegalArgumentException(String.valueOf(position));
-        }
-        return this;
-    }
-
-    public ItemIterable<T> getPage() {
-        return this;
-    }
-
-    public ItemIterable<T> getPage(int maxNumItems) {
-        return this;
-    }
-
-    @SuppressWarnings("unchecked")
-    public Iterator<T> iterator() {
-        return (Iterator<T>) EmptyIterator.INSTANCE;
-    }
-
-    public long getPageNumItems() {
-        return 0;
-    }
-
-    public boolean getHasMoreItems() {
-        return false;
-    }
-
-    public long getTotalNumItems() {
-        return 0;
-    }
-
-    /**
-     * An empty iterator.
-     */
-    public static class EmptyIterator<V> implements Iterator<V> {
-        public static final Iterator<?> INSTANCE = new EmptyIterator<Object>();
-
-        public boolean hasNext() {
-            return false;
-        }
-
-        public V next() {
-            throw new NoSuchElementException();
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/TreeImpl.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/TreeImpl.java
deleted file mode 100644
index fb8c495..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/TreeImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime.util;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.client.api.Tree;
-
-public class TreeImpl<T> implements Tree<T> {
-
-    private final T item;
-    private final List<Tree<T>> children;
-
-    public TreeImpl(T item, List<Tree<T>> children) {
-        if (item == null) {
-            throw new IllegalArgumentException("Item must be set!");
-        }
-        this.item = item;
-        this.children = children;
-    }
-
-    public T getItem() {
-        return item;
-    }
-
-    public List<Tree<T>> getChildren() {
-        return this.children;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/FileUtils.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/FileUtils.java
deleted file mode 100644
index 9b11f3c..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/FileUtils.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeTypes;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-
-/**
- * A set of utility methods that simplify file and folder operations.
- */
-public final class FileUtils {
-
-    private FileUtils() {
-    }
-
-    /**
-     * Gets an object by path or object id.
-     * 
-     * @param pathOrIdOfObject
-     *            the path or object id
-     * @param session
-     *            the session
-     * @return the object
-     * @throws CmisBaseException
-     */
-    public static CmisObject getObject(String pathOrIdOfObject, Session session) {
-        if (session == null) {
-            throw new IllegalArgumentException("session must be set!");
-        }
-        if (pathOrIdOfObject == null || pathOrIdOfObject.length() == 0) {
-            throw new IllegalArgumentException("pathOrIdOfObject must be set!");
-        }
-
-        CmisObject result = null;
-        if (pathOrIdOfObject.charAt(0) == '/') {
-            result = session.getObjectByPath(pathOrIdOfObject);
-        } else {
-            result = session.getObject(pathOrIdOfObject);
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets a folder by path or object id.
-     * 
-     * @param pathOrIdOfObject
-     *            the path or folder id
-     * @param session
-     *            the session
-     * @return the folder object
-     * @throws CmisBaseException
-     */
-    public static Folder getFolder(String pathOrIdOfObject, Session session) {
-        CmisObject folder = getObject(pathOrIdOfObject, session);
-
-        if (folder instanceof Folder) {
-            return (Folder) folder;
-        } else {
-            throw new IllegalArgumentException("Object is not a folder!");
-        }
-    }
-
-    /**
-     * Creates a document from a file.
-     * 
-     * @param parentIdOrPath
-     *            the id or path of the parent folder
-     * @param file
-     *            the source file
-     * @param type
-     *            the document type (defaults to <code>cmis:document</code>)
-     * @param versioningState
-     *            the versioning state or <code>null</code>
-     * @return the newly created document
-     * @throws FileNotFoundException
-     * @throws CmisBaseException
-     */
-    public static Document createDocumentFromFile(String parentIdOrPath, File file, String type,
-            VersioningState versioningState, Session session) throws FileNotFoundException {
-        if (type == null) {
-            type = BaseTypeId.CMIS_DOCUMENT.value(); // "cmis:document";
-        }
-
-        Folder parentFolder = getFolder(parentIdOrPath, session);
-
-        String name = file.getName();
-        String mimetype = MimeTypes.getMIMEType(file);
-
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-        properties.put(PropertyIds.NAME, name);
-
-        InputStream stream = new FileInputStream(file);
-        ContentStream contentStream = new ContentStreamImpl(name, BigInteger.valueOf(file.length()), mimetype, stream);
-
-        try {
-            return parentFolder.createDocument(properties, contentStream, versioningState);
-        } finally {
-            if (stream != null) {
-                try {
-                    stream.close();
-                } catch (IOException ioe) {
-                    throw new CmisRuntimeException("Cannot close source stream!", ioe);
-                }
-            }
-        }
-    }
-
-    /**
-     * Creates a text document from a string.
-     * 
-     * @param parentIdOrPath
-     *            the id or path of the parent folder
-     * @param name
-     *            the document name
-     * @param content
-     *            the content string
-     * @param type
-     *            the document type (defaults to <code>cmis:document</code>)
-     * @param versioningState
-     *            the versioning state or <code>null</code>
-     * @param session
-     *            the session
-     * @return the newly created document
-     */
-    public static Document createTextDocument(String parentIdOrPath, String name, String content, String type,
-            VersioningState versioningState, Session session) {
-        if (type == null) {
-            type = BaseTypeId.CMIS_DOCUMENT.value(); // "cmis:document";
-        }
-
-        Folder parentFolder = getFolder(parentIdOrPath, session);
-
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-        properties.put(PropertyIds.NAME, name);
-
-        byte[] contentBytes = new byte[0];
-        if (content != null) {
-            contentBytes = IOUtils.toUTF8Bytes(content);
-        }
-
-        ByteArrayInputStream bais = new ByteArrayInputStream(contentBytes);
-        ContentStream contentStream = new ContentStreamImpl(name, BigInteger.valueOf(contentBytes.length),
-                "text/plain", bais);
-
-        return parentFolder.createDocument(properties, contentStream, versioningState);
-    }
-
-    /**
-     * Creates a child folder with the name specified of the type specified. If
-     * type is null then will default to cmis:folder.
-     * 
-     * @param parentFolder
-     *            the parent folder
-     * @param name
-     *            the folder name
-     * @param type
-     *            the folder type (defaults to <code>cmis:folder</code>)
-     * @return the newly created folder
-     * @throws CmisBaseException
-     */
-    public static Folder createFolder(Folder parentFolder, String name, String type) {
-        if (type == null) {
-            type = BaseTypeId.CMIS_FOLDER.value();
-        }
-
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-        properties.put(PropertyIds.NAME, name);
-
-        return parentFolder.createFolder(properties);
-    }
-
-    /**
-     * Creates a folder using a String identifier.
-     * 
-     * @param parentIdOrPath
-     *            the id or path of the parent folder
-     * @param name
-     *            the folder name
-     * @param type
-     *            the folder type (defaults to <code>cmis:folder</code>)
-     * @param session
-     *            the session
-     * @return the newly created folder
-     * @throws CmisBaseException
-     */
-    public static Folder createFolder(String parentIdOrPath, String name, String type, Session session) {
-        Folder parentFolder = getFolder(parentIdOrPath, session);
-
-        if (type == null) {
-            type = BaseTypeId.CMIS_FOLDER.value();
-        }
-
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-        properties.put(PropertyIds.NAME, name);
-
-        return parentFolder.createFolder(properties);
-    }
-
-    /**
-     * Downloads the contentStream for the given doc to the specified path.
-     * 
-     * @param doc
-     *            the document
-     * @param destinationPath
-     *            the destination path
-     * @throws IOException
-     * @throws CmisBaseException
-     */
-    public static void download(Document doc, String destinationPath) throws IOException {
-        FileOutputStream out = new FileOutputStream(destinationPath);
-        try {
-            IOUtils.copy(doc.getContentStream().getStream(), out, 64 * 1024);
-        } finally {
-            IOUtils.closeQuietly(out);
-        }
-    }
-
-    /**
-     * Downloads a document by its id or path.
-     * 
-     * @param docIdOrPath
-     *            the id or path of the document
-     * @param destinationPath
-     *            the destination path
-     * @param session
-     *            the session
-     * @throws IOException
-     * @throws CmisBaseException
-     */
-    public static void download(String docIdOrPath, String destinationPath, Session session) throws IOException {
-        CmisObject doc = getObject(docIdOrPath, session);
-
-        if (doc instanceof Document) {
-            download((Document) doc, destinationPath);
-        } else {
-            throw new IllegalArgumentException("Object is not a document!");
-        }
-    }
-
-    /**
-     * Deletes an object by path or id (string identifier).
-     * 
-     * @param pathOrIdOfObject
-     *            the id or path of the object
-     * @param session
-     *            the session
-     * @throws CmisBaseException
-     */
-    public static void delete(String pathOrIdOfObject, Session session) {
-        CmisObject object = getObject(pathOrIdOfObject, session);
-
-        if (object instanceof Folder) {
-            ((Folder) object).deleteTree(true, UnfileObject.DELETE, true);
-        } else {
-            object.delete(true);
-        }
-    }
-
-    /**
-     * Prints out all of the properties for this object to System.out.
-     * 
-     * @param object
-     *            the object
-     */
-    public static void printProperties(CmisObject object) {
-        printProperties(object, System.out);
-    }
-
-    /**
-     * Prints out all of the properties for this object to the given
-     * PrintStream.
-     * 
-     * @param object
-     *            the object
-     */
-    public static void printProperties(CmisObject object, PrintStream out) {
-        for (Property<?> prop : object.getProperties()) {
-            printProperty(prop, out);
-        }
-    }
-
-    public static void printProperty(Property<?> prop) {
-        printProperty(prop, System.out);
-    }
-
-    public static void printProperty(Property<?> prop, PrintStream out) {
-        out.println(prop.getId() + ": " + prop.getValuesAsString());
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/OperationContextUtils.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/OperationContextUtils.java
deleted file mode 100644
index d2c21f0..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/OperationContextUtils.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.util;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * Constants and methods to create and manipulate {@link OperationContext}
- * objects.
- */
-public final class OperationContextUtils {
-
-    public static final String PROPERTIES_STAR = "*";
-    public static final String RENDITION_NONE = "cmis:none";
-
-    private OperationContextUtils() {
-    }
-
-    /**
-     * Creates a new OperationContext object.
-     */
-    public static OperationContext createOperationContext() {
-        return new OperationContextImpl();
-    }
-
-    /**
-     * Copies an OperationContext object.
-     */
-    public static OperationContext copyOperationContext(OperationContext context) {
-        return new OperationContextImpl(context);
-    }
-
-    /**
-     * Creates a new OperationContext object with the given parameters.
-     */
-    public static OperationContext createOperationContext(Set<String> filter, boolean includeAcls,
-            boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships,
-            Set<String> renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled,
-            int maxItemsPerPage) {
-        return new OperationContextImpl(filter, includeAcls, includeAllowableActions, includePolicies,
-                includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled, maxItemsPerPage);
-    }
-
-    /**
-     * Creates a new OperationContext object that only selects the bare minimum.
-     */
-    public static OperationContext createMinimumOperationContext() {
-        Set<String> filter = new HashSet<String>();
-        filter.add(PropertyIds.OBJECT_ID);
-        filter.add(PropertyIds.OBJECT_TYPE_ID);
-        filter.add(PropertyIds.BASE_TYPE_ID);
-
-        return new OperationContextImpl(filter, false, false, false, IncludeRelationships.NONE,
-                Collections.singleton(RENDITION_NONE), false, null, true, 100);
-    }
-
-    /**
-     * Creates a new OperationContext object that selects everything.
-     */
-    public static OperationContext createMaximumOperationContext() {
-        return new OperationContextImpl(Collections.singleton(PROPERTIES_STAR), true, true, true,
-                IncludeRelationships.BOTH, Collections.singleton("*"), false, null, true, 100);
-    }
-
-    /**
-     * Returns an unmodifiable view of the specified OperationContext.
-     * 
-     * Attempts to modify the returned OperationContext object result in an
-     * {@code UnsupportedOperationException}.
-     */
-    public static OperationContext unmodifiableOperationContext(final OperationContext context) {
-        return new OperationContext() {
-
-            private static final long serialVersionUID = 1L;
-
-            public Set<String> getFilter() {
-                return Collections.unmodifiableSet(context.getFilter());
-            }
-
-            public void setFilter(Set<String> propertyFilter) {
-                throw new UnsupportedOperationException();
-            }
-
-            public void setFilterString(String propertyFilter) {
-                throw new UnsupportedOperationException();
-            }
-
-            public String getFilterString() {
-                return context.getFilterString();
-            }
-
-            public void setLoadSecondaryTypeProperties(boolean load) {
-                throw new UnsupportedOperationException();
-            }
-
-            public boolean loadSecondaryTypeProperties() {
-                return context.loadSecondaryTypeProperties();
-            }
-
-            public boolean isIncludeAllowableActions() {
-                return context.isIncludeAllowableActions();
-            }
-
-            public void setIncludeAllowableActions(boolean include) {
-                throw new UnsupportedOperationException();
-            }
-
-            public boolean isIncludeAcls() {
-                return context.isIncludeAcls();
-            }
-
-            public void setIncludeAcls(boolean include) {
-                throw new UnsupportedOperationException();
-            }
-
-            public IncludeRelationships getIncludeRelationships() {
-                return context.getIncludeRelationships();
-            }
-
-            public void setIncludeRelationships(IncludeRelationships include) {
-                throw new UnsupportedOperationException();
-            }
-
-            public boolean isIncludePolicies() {
-                return context.isIncludePolicies();
-            }
-
-            public void setIncludePolicies(boolean include) {
-                throw new UnsupportedOperationException();
-            }
-
-            public Set<String> getRenditionFilter() {
-                return Collections.unmodifiableSet(context.getRenditionFilter());
-            }
-
-            public void setRenditionFilter(Set<String> renditionFilter) {
-                throw new UnsupportedOperationException();
-            }
-
-            public void setRenditionFilterString(String renditionFilter) {
-                throw new UnsupportedOperationException();
-            }
-
-            public String getRenditionFilterString() {
-                return context.getRenditionFilterString();
-            }
-
-            public boolean isIncludePathSegments() {
-                return context.isIncludePathSegments();
-            }
-
-            public void setIncludePathSegments(boolean include) {
-                throw new UnsupportedOperationException();
-            }
-
-            public String getOrderBy() {
-                return context.getOrderBy();
-            }
-
-            public void setOrderBy(String orderBy) {
-                throw new UnsupportedOperationException();
-            }
-
-            public boolean isCacheEnabled() {
-                return context.isCacheEnabled();
-            }
-
-            public void setCacheEnabled(boolean cacheEnabled) {
-                throw new UnsupportedOperationException();
-            }
-
-            public String getCacheKey() {
-                return context.getCacheKey();
-            }
-
-            public void setMaxItemsPerPage(int maxItemsPerPage) {
-                throw new UnsupportedOperationException();
-            }
-
-            public int getMaxItemsPerPage() {
-                return context.getMaxItemsPerPage();
-            }
-
-            @Override
-            public String toString() {
-                return context.toString();
-            }
-        };
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/TypeUtils.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/TypeUtils.java
deleted file mode 100644
index f56e1c7..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/util/TypeUtils.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.util;
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-
-public final class TypeUtils {
-
-    private TypeUtils() {
-    }
-
-    /**
-     * Serializes the type definition to XML, using the format defined in the
-     * CMIS specification.
-     * 
-     * The XML is UTF-8 encoded and the stream is not closed.
-     */
-    public static void writeToXML(TypeDefinition type, OutputStream stream) throws XMLStreamException {
-        if (type == null) {
-            throw new IllegalArgumentException("Type must be set!");
-        }
-        if (stream == null) {
-            throw new IllegalArgumentException("Output stream must be set!");
-        }
-
-        XMLStreamWriter writer = XMLUtils.createWriter(stream);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeTypeDefinition(writer, CmisVersion.CMIS_1_1, XMLConstants.NAMESPACE_CMIS, type);
-        XMLUtils.endXmlDocument(writer);
-        writer.close();
-    }
-
-    /**
-     * Serializes the type definition to JSON, using the format defined in the
-     * CMIS specification.
-     * 
-     * The JSON is UTF-8 encoded and the stream is not closed.
-     */
-    public static void writeToJSON(TypeDefinition type, OutputStream stream) throws IOException {
-        if (type == null) {
-            throw new IllegalArgumentException("Type must be set!");
-        }
-        if (stream == null) {
-            throw new IllegalArgumentException("Output stream must be set!");
-        }
-
-        Writer writer = new BufferedWriter(new OutputStreamWriter(stream, IOUtils.UTF8));
-        JSONConverter.convert(type, DateTimeFormat.SIMPLE).writeJSONString(writer);
-        writer.flush();
-    }
-
-    /**
-     * Reads a type definition from a XML stream.
-     * 
-     * The stream must be UTF-8 encoded.
-     */
-    public static TypeDefinition readFromXML(InputStream stream) throws XMLStreamException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Input stream must be set!");
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(stream);
-        if (!XMLUtils.findNextStartElemenet(parser)) {
-            return null;
-        }
-
-        TypeDefinition typeDef = XMLConverter.convertTypeDefinition(parser);
-
-        parser.close();
-
-        return typeDef;
-    }
-
-    /**
-     * Reads a type definition from a JSON stream.
-     * 
-     * The stream must be UTF-8 encoded.
-     */
-    @SuppressWarnings("unchecked")
-    public static TypeDefinition readFromJSON(InputStream stream) throws IOException, JSONParseException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Input stream must be set!");
-        }
-
-        JSONParser parser = new JSONParser();
-        Object json = parser.parse(new InputStreamReader(stream, IOUtils.UTF8));
-
-        if (!(json instanceof Map)) {
-            throw new CmisRuntimeException("Invalid stream! Not a type definition!");
-        }
-
-        return JSONConverter.convertTypeDefinition((Map<String, Object>) json);
-    }
-
-    private static boolean checkQueryName(String queryName) {
-        return queryName != null && queryName.length() > 0 && queryName.indexOf(' ') < 0 && queryName.indexOf('\t') < 0
-                && queryName.indexOf('\n') < 0 && queryName.indexOf('\r') < 0 && queryName.indexOf('\f') < 0
-                && queryName.indexOf(',') < 0 && queryName.indexOf('"') < 0 && queryName.indexOf('\'') < 0
-                && queryName.indexOf('\\') < 0 && queryName.indexOf('.') < 0 && queryName.indexOf('(') < 0
-                && queryName.indexOf(')') < 0;
-    }
-
-    /**
-     * Validates a type definition.
-     * 
-     * @return the list of validation errors
-     */
-    public static List<ValidationError> validateTypeDefinition(TypeDefinition type) {
-        if (type == null) {
-            throw new IllegalArgumentException("Type is null!");
-        }
-
-        List<ValidationError> errors = new ArrayList<TypeUtils.ValidationError>();
-
-        if (type.getId() == null || type.getId().length() == 0) {
-            errors.add(new ValidationError("id", "Type id must be set."));
-        }
-
-        if (type.getLocalName() == null || type.getLocalName().length() == 0) {
-            errors.add(new ValidationError("localName", "Local name must be set."));
-        }
-
-        if (type.getQueryName() != null) {
-            if (type.getQueryName().length() == 0) {
-                errors.add(new ValidationError("queryName", "Query name must not be empty."));
-            } else if (!checkQueryName(type.getQueryName())) {
-                errors.add(new ValidationError("queryName", "Query name contains invalid characters."));
-            }
-        }
-
-        if (type.isCreatable() == null) {
-            errors.add(new ValidationError("creatable", "Creatable flag must be set."));
-        }
-
-        if (type.isFileable() == null) {
-            errors.add(new ValidationError("fileable", "Fileable flag must be set."));
-        }
-
-        if (type.isQueryable() == null) {
-            errors.add(new ValidationError("queryable", "Queryable flag must be set."));
-        } else if (type.isQueryable().booleanValue()) {
-            if (type.getQueryName() == null || type.getQueryName().length() == 0) {
-                errors.add(new ValidationError("queryable",
-                        "Queryable flag is set to TRUE, but the query name is not set."));
-            }
-        }
-
-        if (type.isControllablePolicy() == null) {
-            errors.add(new ValidationError("controllablePolicy", "ControllablePolicy flag must be set."));
-        }
-
-        if (type.isControllableAcl() == null) {
-            errors.add(new ValidationError("controllableACL", "ControllableACL flag must be set."));
-        }
-
-        if (type.isFulltextIndexed() == null) {
-            errors.add(new ValidationError("fulltextIndexed", "FulltextIndexed flag must be set."));
-        }
-
-        if (type.isIncludedInSupertypeQuery() == null) {
-            errors.add(new ValidationError("includedInSupertypeQuery", "IncludedInSupertypeQuery flag must be set."));
-        }
-
-        if (type.getBaseTypeId() == null) {
-            errors.add(new ValidationError("baseId", "Base type id must be set."));
-        } else if (!type.getBaseTypeId().value().equals(type.getParentTypeId())) {
-            if (type.getParentTypeId() == null || type.getParentTypeId().length() == 0) {
-                errors.add(new ValidationError("parentTypeId", "Parent type id must be set."));
-            }
-        }
-
-        if (type instanceof DocumentTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-
-            if (docType.isVersionable() == null) {
-                errors.add(new ValidationError("versionable", "Versionable flag must be set."));
-            }
-
-            if (docType.getContentStreamAllowed() == null) {
-                errors.add(new ValidationError("contentStreamAllowed", "ContentStreamAllowed flag must be set."));
-            }
-
-        } else if (type instanceof FolderTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_FOLDER) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-        } else if (type instanceof RelationshipTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_RELATIONSHIP) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-        } else if (type instanceof PolicyTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_POLICY) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-        } else if (type instanceof ItemTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_ITEM) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-        } else if (type instanceof SecondaryTypeDefinition) {
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_SECONDARY) {
-                errors.add(new ValidationError("baseId", "Base type id does not match the type."));
-            }
-
-        } else {
-            errors.add(new ValidationError("baseId", "Unknown base interface."));
-        }
-
-        return errors;
-    }
-
-    /**
-     * Validates a property definition.
-     * 
-     * @return the list of validation errors
-     */
-    public static List<ValidationError> validatePropertyDefinition(PropertyDefinition<?> propDef) {
-        if (propDef == null) {
-            throw new IllegalArgumentException("Type is null!");
-        }
-
-        List<ValidationError> errors = new ArrayList<TypeUtils.ValidationError>();
-
-        if (propDef.getId() == null || propDef.getId().length() == 0) {
-            errors.add(new ValidationError("id", "Type id must be set."));
-        }
-
-        if (propDef.getQueryName() != null) {
-            if (propDef.getQueryName().length() == 0) {
-                errors.add(new ValidationError("queryName", "Query name must not be empty."));
-            } else if (!checkQueryName(propDef.getQueryName())) {
-                errors.add(new ValidationError("queryName", "Query name contains invalid characters."));
-            }
-        }
-
-        if (propDef.getCardinality() == null) {
-            errors.add(new ValidationError("cardinality", "Cardinality must be set."));
-        }
-
-        if (propDef.getUpdatability() == null) {
-            errors.add(new ValidationError("updatability", "Updatability must be set."));
-        }
-
-        if (propDef.isInherited() == null) {
-            errors.add(new ValidationError("inherited", "Inherited flag must be set."));
-        }
-
-        if (propDef.isRequired() == null) {
-            errors.add(new ValidationError("required", "Required flag must be set."));
-        }
-
-        if (propDef.isQueryable() == null) {
-            errors.add(new ValidationError("queryable", "Queryable flag must be set."));
-        } else if (propDef.isQueryable().booleanValue()) {
-            if (propDef.getQueryName() == null || propDef.getQueryName().length() == 0) {
-                errors.add(new ValidationError("queryable",
-                        "Queryable flag is set to TRUE, but the query name is not set."));
-            }
-        }
-
-        if (propDef.isOrderable() == null) {
-            errors.add(new ValidationError("orderable", "Orderable flag must be set."));
-        } else if (propDef.isOrderable().booleanValue()) {
-            if (propDef.getCardinality() == Cardinality.MULTI) {
-                errors.add(new ValidationError("orderable", "Orderable flag is set to TRUE for a multi-value property."));
-            }
-        }
-
-        if (propDef.getPropertyType() == null) {
-            errors.add(new ValidationError("propertyType", "Property type id must be set."));
-        }
-
-        if (propDef instanceof PropertyIdDefinition) {
-            if (propDef.getPropertyType() != PropertyType.ID) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyStringDefinition) {
-            if (propDef.getPropertyType() != PropertyType.STRING) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyIntegerDefinition) {
-            if (propDef.getPropertyType() != PropertyType.INTEGER) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyDecimalDefinition) {
-            if (propDef.getPropertyType() != PropertyType.DECIMAL) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyBooleanDefinition) {
-            if (propDef.getPropertyType() != PropertyType.BOOLEAN) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyDateTimeDefinition) {
-            if (propDef.getPropertyType() != PropertyType.DATETIME) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyHtmlDefinition) {
-            if (propDef.getPropertyType() != PropertyType.HTML) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        } else if (propDef instanceof PropertyUriDefinition) {
-            if (propDef.getPropertyType() != PropertyType.URI) {
-                errors.add(new ValidationError("propertyType", "Property type does not match the property definition."));
-            }
-        }
-
-        return errors;
-    }
-
-    public static class ValidationError {
-        private final String attribute;
-        private final String error;
-
-        public ValidationError(String attribute, String error) {
-            this.attribute = attribute;
-            this.error = error;
-        }
-
-        public String getAttribute() {
-            return attribute;
-        }
-
-        public String getError() {
-            return error;
-        }
-
-        @Override
-        public String toString() {
-            return attribute + ": " + error;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CacheTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CacheTest.java
deleted file mode 100644
index 062a6af..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CacheTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.junit.Before;
-import org.junit.Test;
-
-public class CacheTest {
-
-    @Before
-    public void setup() {
-    }
-
-    @Test
-    public void cacheSingleObjectTest() {
-        Cache cache = createCache(100, 3600 * 1000);
-
-        String id = "1";
-        // String path = "/1";
-        String cacheKey = "key";
-
-        // add object
-        CmisObject obj1 = createCmisObject(id);
-        cache.put(obj1, cacheKey);
-
-        // access object
-        assertTrue(cache.containsId(id, cacheKey));
-
-        // access object
-        CmisObject obj2 = cache.getById(id, cacheKey);
-        assertEquals(obj1, obj2);
-
-        // clear cache
-        cache.clear();
-
-        // access object (not found)
-        assertFalse(cache.containsId(id, cacheKey));
-
-        // access object (not found)
-        CmisObject obj4 = cache.getById(id, cacheKey);
-        assertNull(obj4);
-    }
-
-    @Test
-    public void cacheSizeTest() {
-        int cacheSize = 50000;
-        Cache cache = createCache(cacheSize, 3600 * 1000);
-        assertEquals(cacheSize, cache.getCacheSize());
-    }
-
-    @Test
-    public void lruTest() {
-        int cacheSize = 3;
-        Cache cache = createCache(cacheSize, 3600 * 1000);
-
-        String cacheKey = "key";
-
-        for (int i = 0; i < cacheSize + 1; i++) {
-            CmisObject obj = createCmisObject("id" + i);
-            cache.put(obj, cacheKey);
-        }
-
-        assertNull(cache.getById("id0", cacheKey)); // thrown out
-        assertNotNull(cache.getById("id1", cacheKey));
-        assertNotNull(cache.getById("id2", cacheKey));
-        assertNotNull(cache.getById("id3", cacheKey));
-    }
-
-    @SuppressWarnings("static-access")
-    @Test
-    public void ttlTest() throws InterruptedException {
-        Cache cache = createCache(10, 500);
-
-        String cacheKey = "key";
-        String id = "id";
-
-        CmisObject obj = this.createCmisObject(id);
-        cache.put(obj, cacheKey);
-
-        assertNotNull(cache.getById(id, cacheKey));
-
-        Thread.currentThread().sleep(750);
-
-        assertNull(cache.getById(id, cacheKey));
-    }
-
-    @Test
-    public void serializationTest() throws Exception {
-        int cacheSize = 10;
-        Cache cache = createCache(cacheSize, 3600 * 1000);
-
-        String cacheKey = "key";
-
-        for (int i = 0; i < cacheSize; i++) {
-            CmisObject obj = createCmisObject("id" + i);
-            cache.put(obj, cacheKey);
-        }
-
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        ObjectOutputStream out = new ObjectOutputStream(buffer);
-        out.writeObject(cache);
-        out.close();
-
-        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray()));
-        Cache cache2 = (Cache) in.readObject();
-        in.close();
-
-        for (int k = 0; k < cacheSize; k++) {
-            CmisObject o1 = cache.getById("id" + k, cacheKey);
-            CmisObject o2 = cache2.getById("id" + k, cacheKey);
-            assertEquals(o1.getId(), o2.getId());
-        }
-    }
-
-    /**
-     * Create a Mock for testing Cache is sufficient.
-     * 
-     * @param id
-     * @return a mocked object
-     */
-    private static CmisObject createCmisObject(final String id) {
-        return new CmisObjectMock(id);
-    }
-
-    private static Cache createCache(int cacheSize, int ttl) {
-        Cache cache = new CacheImpl();
-
-        Map<String, String> parameters = new HashMap<String, String>();
-        parameters.put(SessionParameter.CACHE_SIZE_OBJECTS, "" + cacheSize);
-        parameters.put(SessionParameter.CACHE_TTL_OBJECTS, "" + ttl);
-
-        cache.initialize(null, parameters);
-
-        return cache;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java
deleted file mode 100644
index d868199..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-
-public class CmisObjectMock implements CmisObject, Serializable {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1L;
-
-    private final String id;
-
-    public CmisObjectMock(String id) {
-        this.id = id;
-    }
-
-    public Acl addAcl(List<Ace> addAces, AclPropagation aclPropagation) {
-        return null;
-    }
-
-    public Acl applyAcl(List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation) {
-        return null;
-    }
-
-    public Acl setAcl(List<Ace> aces) {
-        return null;
-    }
-
-    public void applyPolicy(ObjectId policyId) {
-    }
-
-    public void delete() {
-    }
-
-    public void delete(boolean allVersions) {
-    }
-
-    public Acl getAcl() {
-        return null;
-    }
-
-    public Set<String> getPermissionsForPrincipal(String principalId) {
-        return null;
-    }
-
-    public Set<String> getPermissonsForPrincipal(String principalId) {
-        return null;
-    }
-
-    public Acl getAcl(boolean onlyBasicPermissions) {
-        return null;
-    }
-
-    public AllowableActions getAllowableActions() {
-        return null;
-    }
-
-    public boolean hasAllowableAction(Action action) {
-        return false;
-    }
-
-    public ObjectType getBaseType() {
-        return null;
-    }
-
-    public BaseTypeId getBaseTypeId() {
-        return null;
-    }
-
-    public String getChangeToken() {
-        return null;
-    }
-
-    public String getCreatedBy() {
-        return null;
-    }
-
-    public GregorianCalendar getCreationDate() {
-        return null;
-    }
-
-    public GregorianCalendar getLastModificationDate() {
-        return null;
-    }
-
-    public String getLastModifiedBy() {
-        return null;
-    }
-
-    public String getName() {
-        return null;
-    }
-
-    public String getDescription() {
-        return null;
-    }
-
-    public List<Policy> getPolicies() {
-        return null;
-    }
-
-    public List<Property<?>> getProperties() {
-        return null;
-    }
-
-    public <T> Property<T> getProperty(String id) {
-        return null;
-    }
-
-    public <T> T getPropertyValue(String id) {
-        return null;
-    }
-
-    public long getRefreshTimestamp() {
-        return 0;
-    }
-
-    public List<Relationship> getRelationships() {
-        return null;
-    }
-
-    public ItemIterable<Relationship> getRelationships(boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, ObjectType type, OperationContext context) {
-        return null;
-    }
-
-    public List<Rendition> getRenditions() {
-        return null;
-    }
-
-    public ObjectType getType() {
-        return null;
-    }
-
-    public List<SecondaryType> getSecondaryTypes() {
-        return null;
-    }
-
-    public List<ObjectType> findObjectType(String id) {
-        return null;
-    }
-
-    public List<CmisExtensionElement> getExtensions(ExtensionLevel level) {
-        return null;
-    }
-
-    public void refresh() {
-
-    }
-
-    public void refreshIfOld(long durationInMillis) {
-
-    }
-
-    public Acl removeAcl(List<Ace> removeAces, AclPropagation aclPropagation) {
-        return null;
-    }
-
-    public ObjectId updateProperties() {
-        return null;
-    }
-
-    public CmisObject updateProperties(Map<String, ?> properties) {
-        return null;
-    }
-
-    public ObjectId updateProperties(Map<String, ?> properties, boolean refresh) {
-        return null;
-    }
-
-    public CmisObject rename(String newName) {
-        return null;
-    }
-
-    public ObjectId rename(String newName, boolean refresh) {
-        return null;
-    }
-
-    public void applyPolicy(ObjectId... policyIds) {
-
-    }
-
-    public void removePolicy(ObjectId... policyIds) {
-    }
-
-    public String getId() {
-        return this.id;
-    }
-
-    public <T> T getAdapter(Class<T> adapterInterface) {
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/ItemIterableTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/ItemIterableTest.java
deleted file mode 100644
index de425a5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/ItemIterableTest.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher;
-import org.apache.chemistry.opencmis.client.runtime.util.CollectionIterable;
-import org.apache.log4j.PropertyConfigurator;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ItemIterableTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ItemIterableTest.class);
-    static {
-        Properties p = new Properties();
-        try {
-            p.load(ItemIterableTest.class.getResourceAsStream("/log4j.properties"));
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        PropertyConfigurator.configure(p);
-
-    }
-    private final String[] data10 = { "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9" };
-    private final String[] data1 = { "A0" };
-    private final String[] data0 = {};
-
-    private ItemIterable<String> getIterable(final String[] data, long pageSize) {
-        return new CollectionIterable<String>(new AbstractPageFetcher<String>(pageSize) {
-
-            @Override
-            protected Page<String> fetchPage(long skipCount) {
-                boolean hasMoreItems = true;
-                List<String> page = new ArrayList<String>();
-
-                ItemIterableTest.LOG.info("(" + skipCount + "|" + this.maxNumItems + ") ");
-
-                int from = (int) skipCount;
-                int to = (int) (skipCount + this.maxNumItems);
-
-                if (to >= data.length) {
-                    to = data.length;
-                    hasMoreItems = false;
-                }
-
-                // . simulate rolling total number of items (for repositories
-                // that don't necessarily know up front)
-                int totalItems = (to == data.length) ? to : to + 1;
-
-                for (int i = from; i < to; i++) {
-                    page.add(data[i]);
-                }
-
-                Page<String> result = new AbstractPageFetcher.Page<String>(
-                        page, totalItems, hasMoreItems);
-
-                return result;
-            }
-        });
-    }
-
-    @Test
-    public void loopAll() {
-        this.loopAll(this.data10, 100); // tolerate out of bound
-        this.loopAll(this.data10, 10);
-        this.loopAll(this.data10, 9);
-        this.loopAll(this.data10, 8);
-
-        this.loopAll(this.data10, 2);
-        this.loopAll(this.data10, 1);
-        // this.loopAll(0); maxNumItems must be > 0
-
-        this.loopAll(this.data1, 1);
-        this.loopAll(this.data1, 5);
-
-        this.loopAll(this.data0, 1);
-        this.loopAll(this.data0, 5);
-    }
-
-    @Test
-    public void loopSubPage() {
-        this.loopSubPage(this.data10, 0, 3, 5);
-        this.loopSubPage(this.data10, 2, 3, 5);
-        this.loopSubPage(this.data10, 9, 3, 5);
-        this.loopSubPage(this.data10, 10, 3, 5);
-
-        this.loopSubPage(this.data10, 2, 3, 3);
-        this.loopSubPage(this.data10, 2, 1000, 1000);
-    }
-
-    @Test
-    public void loopSkip() {
-        this.loopSkip(this.data10, 0, 5);
-        this.loopSkip(this.data10, 1, 5);
-        this.loopSkip(this.data10, 2, 5);
-        this.loopSkip(this.data10, 3, 5);
-
-        this.loopSkip(this.data10, 8, 5);
-        this.loopSkip(this.data10, 9, 5);
-        this.loopSkip(this.data10, 10, 5);
-        // this.loopSkip(100, 5); skip out of bound
-
-        // this.loopSkip(0, 0);
-        this.loopSkip(this.data10, 0, 1);
-        this.loopSkip(this.data10, 0, 10);
-        this.loopSkip(this.data10, 0, 100);
-
-        // this.loopSkip(0, 0);
-        this.loopSkip(this.data10, 10, 1);
-        this.loopSkip(this.data10, 10, 10);
-        this.loopSkip(this.data10, 10, 100);
-
-        this.loopSkip(this.data1, 0, 5);
-        this.loopSkip(this.data1, 1, 5);
-
-        this.loopSkip(this.data0, 0, 5);
-    }
-
-    @Test
-    public void loopPage() {
-        this.loopPage(this.data10, 0, 5);
-        this.loopPage(this.data10, 1, 5);
-        this.loopPage(this.data10, 2, 5);
-        this.loopPage(this.data10, 3, 5);
-
-        this.loopPage(this.data10, 8, 5);
-        this.loopPage(this.data10, 9, 5);
-        this.loopPage(this.data10, 10, 5);
-        // this.loopPage(100, 5); skip out of bound
-
-        // this.loopPage(0, 0);
-        this.loopPage(this.data10, 0, 1);
-        this.loopPage(this.data10, 0, 10);
-        this.loopPage(this.data10, 0, 100);
-
-        // this.loopPage(0, 0);
-        this.loopPage(this.data10, 10, 1);
-        this.loopPage(this.data10, 10, 10);
-        this.loopPage(this.data10, 10, 100);
-
-        this.loopPage(this.data1, 0, 5);
-        this.loopPage(this.data1, 1, 5);
-
-        this.loopPage(this.data0, 0, 5);
-    }
-
-    @Test
-    public void totalNumItems() {
-        ItemIterableTest.LOG.info("totalNumItems");
-
-        int pageSize = 5;
-        ItemIterable<String> p = this.getIterable(this.data10, pageSize);
-        assertNotNull(p);
-        Iterator<String> i = p.iterator();
-        assertNotNull(i);
-        assertEquals(pageSize + 1, p.getTotalNumItems());
-        for (int idx = 0; i.hasNext() && idx < (pageSize + 1); idx++) {
-            assertNotNull(i.next());
-        }
-        assertEquals(this.data10.length, p.getTotalNumItems());
-    }
-
-    @Test
-    public void hasMoreItems() {
-        ItemIterableTest.LOG.info("totalHasMoreItems");
-
-        int pageSize = 5;
-        ItemIterable<String> p = this.getIterable(this.data10, pageSize);
-        assertNotNull(p);
-        Iterator<String> i = p.iterator();
-        assertNotNull(i);
-        assertTrue(p.getHasMoreItems());
-        for (int idx = 0; i.hasNext() && idx < (pageSize + 1); idx++) {
-            i.next();
-        }
-        assertFalse(p.getHasMoreItems());
-    }
-
-    @Test
-    public void pageNumItems() {
-        ItemIterableTest.LOG.info("totalPageNumItems");
-
-        int pageSize = 7;
-        ItemIterable<String> p = this.getIterable(this.data10, pageSize);
-        assertNotNull(p);
-        Iterator<String> i = p.iterator();
-        assertNotNull(i);
-        assertEquals(pageSize, p.getPageNumItems());
-        for (int idx = 0; i.hasNext() && idx < (pageSize + 1); idx++) {
-            assertNotNull(i.next());
-        }
-        assertEquals(this.data10.length - pageSize, p.getPageNumItems());
-    }
-
-    private void loopSubPage(String[] data, int skipCount, int maxItems, int pageSize) {
-        ItemIterableTest.LOG.info("loopSubPage (" + skipCount + ", " + maxItems + ", " + pageSize + ")");
-        String msg = "";
-
-        ItemIterable<String> p = this.getIterable(data, pageSize);
-        assertNotNull(p);
-        ItemIterable<String> pp = p.skipTo(skipCount);
-        assertNotNull(pp);
-        ItemIterable<String> ppp = pp.getPage(maxItems);
-        assertNotNull(ppp);
-
-        int count = 0;
-        for (String s : ppp) {
-            assertNotNull(s);
-            assertEquals("A" + (count + skipCount), s);
-            msg += (s + " ");
-            count++;
-        }
-        ItemIterableTest.LOG.info(msg);
-        assertTrue(count <= pageSize);
-    }
-
-    private void loopSkip(String[] data, int skipCount, int pageSize) {
-        ItemIterableTest.LOG.info("loopSkip (" + skipCount + ", " + pageSize + ")");
-        String msg = "";
-
-        ItemIterable<String> p = this.getIterable(data, pageSize);
-        assertNotNull(p);
-        ItemIterable<String> pp = p.skipTo(skipCount);
-        assertNotNull(pp);
-
-        int count = 0;
-        for (String s : pp) {
-            assertNotNull(s);
-            assertEquals("A" + (count + skipCount), s);
-            msg += (s + " ");
-            count++;
-        }
-        ItemIterableTest.LOG.info(msg);
-        assertEquals(data.length - skipCount, count);
-    }
-
-    private void loopAll(String[] data, int pageSize) {
-        ItemIterableTest.LOG.info("loopAll (" + pageSize + ")");
-        String msg = "";
-
-        ItemIterable<String> p = this.getIterable(data, pageSize);
-        assertNotNull(p);
-
-        int count = 0;
-        for (String s : p) {
-            assertNotNull(s);
-            assertEquals("A" + count, s);
-            msg += (s + " ");
-            count++;
-        }
-        ItemIterableTest.LOG.info(msg);
-        assertEquals(data.length, count);
-    }
-
-    private void loopPage(String[] data, int skipCount, int pageSize) {
-        ItemIterableTest.LOG.info("loopPage (" + skipCount + ", " + pageSize + ")");
-        String msg = "";
-
-        ItemIterable<String> p = this.getIterable(data, pageSize);
-        assertNotNull(p);
-        ItemIterable<String> pp = p.skipTo(skipCount).getPage();
-        assertNotNull(pp);
-
-        int count = 0;
-        for (String s : pp) {
-            assertNotNull(s);
-            assertEquals("A" + (count + skipCount), s);
-            msg += (s + " ");
-            count++;
-        }
-        ItemIterableTest.LOG.info(msg);
-        assertEquals(Math.min(data.length - skipCount, pageSize), count);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
deleted file mode 100644
index c314f40..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.junit.Test;
-
-public class QueryStatementTest {
-
-    @Test
-    public void testStaticQueries() {
-        Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
-        String query;
-        QueryStatement st;
-
-        query = "SELECT cmis:name FROM cmis:folder";
-        st = new QueryStatementImpl(session, query);
-        assertEquals(query, st.toQueryString());
-
-        query = "SELECT * FROM cmis:document WHERE cmis:createdBy = \'admin\' AND abc:int = 42";
-        st = new QueryStatementImpl(session, query);
-        assertEquals(query, st.toQueryString());
-
-        query = "SELECT * FROM cmis:document WHERE abc:test = 'x?z'";
-        st = new QueryStatementImpl(session, query);
-        st.setString(1, "y");
-        assertEquals(query, st.toQueryString());
-    }
-
-    @Test
-    public void testWherePlacholder() {
-        Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
-        String query;
-        QueryStatement st;
-
-        // strings
-        query = "SELECT * FROM cmis:document WHERE abc:string = ?";
-        st = new QueryStatementImpl(session, query);
-        st.setString(1, "test");
-        assertEquals("SELECT * FROM cmis:document WHERE abc:string = 'test'", st.toQueryString());
-
-        query = "SELECT * FROM cmis:document WHERE abc:string = ?";
-        st = new QueryStatementImpl(session, query);
-        st.setString(1, "te'st");
-        assertEquals("SELECT * FROM cmis:document WHERE abc:string = 'te\\'st'", st.toQueryString());
-
-        // likes
-        query = "SELECT * FROM cmis:document WHERE abc:string LIKE ?";
-        st = new QueryStatementImpl(session, query);
-        st.setStringLike(1, "%test%");
-        assertEquals("SELECT * FROM cmis:document WHERE abc:string LIKE '%test%'", st.toQueryString());
-
-        query = "SELECT * FROM cmis:document WHERE abc:string LIKE ?";
-        st = new QueryStatementImpl(session, query);
-        st.setStringLike(1, "\\_test\\%blah\\\\blah");
-        assertEquals("SELECT * FROM cmis:document WHERE abc:string LIKE '\\_test\\%blah\\\\\\\\blah'",
-                st.toQueryString());
-
-        // contains
-
-        // *, ? and - are treated as text search operators: 1st level escaping:
-        // none, 2nd level escaping: none
-        // \*, \? and \- are used as literals, 1st level escaping: none, 2nd
-        // level escaping: \\*, \\?, \\-
-        // ' and " are used as literals, 1st level escaping: \', \", 2nd level
-        // escaping: \\\', \\\",
-        // \ plus any other character, 1st level escaping \\ plus character, 2nd
-        // level: \\\\ plus character
-
-        query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
-        st = new QueryStatementImpl(session, query);
-        st.setStringContains(1, "John's");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'s')", st.toQueryString());
-        st.setStringContains(1, "foo -bar");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo -bar')", st.toQueryString());
-        st.setStringContains(1, "foo*");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo*')", st.toQueryString());
-        st.setStringContains(1, "foo?");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo?')", st.toQueryString());
-        st.setStringContains(1, "foo\\-bar");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\-bar')", st.toQueryString());
-        st.setStringContains(1, "foo\\*");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\*')", st.toQueryString());
-        st.setStringContains(1, "foo\\?");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\?')", st.toQueryString());
-        st.setStringContains(1, "\"Cool\"");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\\\"Cool\\\\\\\"')", st.toQueryString());
-        st.setStringContains(1, "c:\\MyDcuments");
-        assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\MyDcuments')", st.toQueryString());
-
-        // ids
-        query = "SELECT * FROM cmis:document WHERE abc:id = ?";
-        st = new QueryStatementImpl(session, query);
-        st.setId(1, new ObjectIdImpl("123"));
-        assertEquals("SELECT * FROM cmis:document WHERE abc:id = '123'", st.toQueryString());
-
-        // booleans
-        query = "SELECT * FROM cmis:document WHERE abc:bool = ?";
-        st = new QueryStatementImpl(session, query);
-        st.setBoolean(1, true);
-        assertEquals("SELECT * FROM cmis:document WHERE abc:bool = TRUE", st.toQueryString());
-
-        // numbers
-        query = "SELECT * FROM cmis:document WHERE abc:int = ? AND abc:int2 = 123";
-        st = new QueryStatementImpl(session, query);
-        st.setNumber(1, 42);
-        assertEquals("SELECT * FROM cmis:document WHERE abc:int = 42 AND abc:int2 = 123", st.toQueryString());
-
-        // dateTime
-        query = "SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP ?";
-        GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal.clear();
-        cal.set(2012, 1, 2, 3, 4, 5);
-
-        st = new QueryStatementImpl(session, query);
-        st.setDateTime(1, cal);
-        assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
-                st.toQueryString());
-
-        st = new QueryStatementImpl(session, query);
-        st.setDateTime(1, cal.getTimeInMillis());
-        assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
-                st.toQueryString());
-
-        // dateTime Timestamp
-        query = "SELECT * FROM cmis:document WHERE abc:dateTime = ?";
-
-        st = new QueryStatementImpl(session, query);
-        st.setDateTimeTimestamp(1, cal);
-        assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
-                st.toQueryString());
-
-        st = new QueryStatementImpl(session, query);
-        st.setDateTimeTimestamp(1, cal.getTimeInMillis());
-        assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
-                st.toQueryString());
-
-        query = "SELECT * FROM cmis:document WHERE abc:dateTime IN (?)";
-
-        st = new QueryStatementImpl(session, query);
-        st.setDateTimeTimestamp(1, cal.getTime(), cal.getTime());
-        assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime "
-                + "IN (TIMESTAMP '2012-02-02T03:04:05.000Z',TIMESTAMP '2012-02-02T03:04:05.000Z')", st.toQueryString());
-    }
-
-    // @Test
-    public void testQueryApiEscaping() {
-        // contains
-        Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
-
-        String query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
-        String ss = "a\\xc";
-        assertEquals(4, ss.length());
-        System.out.println(ss);
-        QueryStatement st = new QueryStatementImpl(session, query);
-        st.setStringContains(1, "John's");
-        System.out.println("setStringContains: " + st.toQueryString());
-        String expected = "SELECT * FROM cmis:document WHERE CONTAINS('John\\\'s')";
-        System.out.println("Expected: " + expected);
-
-        assertEquals(expected, st.toQueryString());
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryFinderTest.java b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryFinderTest.java
deleted file mode 100644
index ea68e32..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryFinderTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.SessionFactoryFinder;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.junit.Test;
-
-public class SessionFactoryFinderTest {
-
-    @Test
-    public void testFind() throws ClassNotFoundException, InstantiationException {
-        SessionFactory sf = SessionFactoryFinder.find();
-
-        assertNotNull(sf);
-        assertTrue(sf instanceof SessionFactoryImpl);
-    }
-
-    @Test
-    public void testFindWithClassloader() throws ClassNotFoundException, InstantiationException {
-        SessionFactory sf = SessionFactoryFinder.find(null, this.getClass().getClassLoader());
-
-        assertNotNull(sf);
-        assertTrue(sf instanceof SessionFactoryImpl);
-    }
-
-    @Test()
-    public void testFindWithProperty1() throws ClassNotFoundException, InstantiationException {
-        System.setProperty("org.apache.chemistry.test.sessionfactory1", MockSessionFactory1.class.getName());
-
-        SessionFactory sf = SessionFactoryFinder.find("org.apache.chemistry.test.sessionfactory1");
-
-        assertNotNull(sf);
-        assertTrue(sf instanceof MockSessionFactory1);
-    }
-
-    @Test(expected = ClassNotFoundException.class)
-    public void testFindWithProperty2() throws ClassNotFoundException, InstantiationException {
-        System.setProperty("org.apache.chemistry.test.sessionfactory2", SessionFactoryFinderTest.class.getName());
-
-        SessionFactoryFinder.find("org.apache.chemistry.test.sessionfactory2");
-    }
-
-    @Test()
-    public void testFindWithProperty3() throws ClassNotFoundException, InstantiationException {
-        System.setProperty("org.apache.chemistry.test.sessionfactory3", MockSessionFactory2.class.getName());
-
-        SessionFactory sf = SessionFactoryFinder.find("org.apache.chemistry.test.sessionfactory3");
-
-        assertNotNull(sf);
-        assertTrue(sf instanceof MockSessionFactory2);
-    }
-
-    public static class MockSessionFactory1 implements SessionFactory {
-
-        public MockSessionFactory1() {
-        }
-
-        public Session createSession(Map<String, String> parameters) {
-            return null;
-        }
-
-        public List<Repository> getRepositories(Map<String, String> parameters) {
-            return null;
-        }
-    }
-
-    public static class MockSessionFactory2 extends SessionFactoryImpl {
-
-        private MockSessionFactory2() {
-        }
-
-        public static MockSessionFactory2 newInstance() {
-            return new MockSessionFactory2();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/resources/log4j.properties
deleted file mode 100644
index 27d42e5..0000000
--- a/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-#sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.chemistry.opencmis.client.provider.spi=O
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/pom.xml b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/pom.xml
deleted file mode 100644
index 9018007..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-commons-api</artifactId>
-    <name>OpenCMIS Commons API</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                          org.apache.chemistry.opencmis.commons.*;version=${project.version}
-                        </Export-Package>
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/BasicPermissions.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/BasicPermissions.java
deleted file mode 100644
index f2cf92d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/BasicPermissions.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-/**
- * CMIS basic permissions constants.
- */
-public final class BasicPermissions {
-
-    private BasicPermissions() {
-    }
-
-    /** CMIS read permission {@code cmis:read}. */
-    public static final String READ = "cmis:read";
-    /** CMIS write permission {@code cmis:write}. */
-    public static final String WRITE = "cmis:write";
-    /** CMIS all permission {@code cmis:all}. */
-    public static final String ALL = "cmis:all";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/ExtensionFeatures.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/ExtensionFeatures.java
deleted file mode 100644
index 6ecff0f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/ExtensionFeatures.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-
-public final class ExtensionFeatures {
-
-    public static final ExtensionFeature EXTENDED_DATETIME_FORMAT = new ExtensionFeature() {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public String getId() {
-            return "http://docs.oasis-open.org/ns/cmis/extension/datetimeformat";
-        }
-
-        @Override
-        public String getUrl() {
-            return "https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cmis";
-        }
-
-        @Override
-        public String getCommonName() {
-            return "Browser Binding DateTime Format";
-        }
-
-        @Override
-        public String getVersionLabel() {
-            return "1.0";
-        }
-
-        @Override
-        public String getDescription() {
-            return "Adds an additional DateTime format for the Browser Binding.";
-        }
-
-        @Override
-        public Map<String, String> getFeatureData() {
-            return null;
-        }
-
-        @Override
-        public void setExtensions(List<CmisExtensionElement> extensions) {
-        }
-
-        @Override
-        public List<CmisExtensionElement> getExtensions() {
-            return null;
-        }
-    };
-
-    public static final ExtensionFeature CONTENT_STREAM_HASH = new ExtensionFeature() {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public String getId() {
-            return "http://docs.oasis-open.org/ns/cmis/extension/contentstreamhash";
-        }
-
-        @Override
-        public String getUrl() {
-            return "https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cmis";
-        }
-
-        @Override
-        public String getCommonName() {
-            return "Content Stream Hash";
-        }
-
-        @Override
-        public String getVersionLabel() {
-            return "1.0";
-        }
-
-        @Override
-        public String getDescription() {
-            return "Adds the property cmis:contentStreamHash, which represents the hash of the document content.";
-        }
-
-        @Override
-        public Map<String, String> getFeatureData() {
-            return null;
-        }
-
-        @Override
-        public void setExtensions(List<CmisExtensionElement> extensions) {
-        }
-
-        @Override
-        public List<CmisExtensionElement> getExtensions() {
-            return null;
-        }
-    };
-
-    public static final ExtensionFeature LATEST_ACCESSIBLE_STATE = new ExtensionFeature() {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public String getId() {
-            return "http://docs.oasis-open.org/ns/cmis/extension/latestAccessibleState/1.1";
-        }
-
-        @Override
-        public String getUrl() {
-            return "https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cmis";
-        }
-
-        @Override
-        public String getCommonName() {
-            return "Latest Accessible State";
-        }
-
-        @Override
-        public String getVersionLabel() {
-            return "1.1";
-        }
-
-        @Override
-        public String getDescription() {
-            return "This extension provides for an identifier of each cmis:document that retrieves "
-                    + "the latest accessible state of the document whether the document is versioned or not.";
-        }
-
-        @Override
-        public Map<String, String> getFeatureData() {
-            return null;
-        }
-
-        @Override
-        public void setExtensions(List<CmisExtensionElement> extensions) {
-        }
-
-        @Override
-        public List<CmisExtensionElement> getExtensions() {
-            return null;
-        }
-    };
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
deleted file mode 100644
index b4908f6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-/**
- * CMIS property id constants.
- */
-public final class PropertyIds {
-
-    private PropertyIds() {
-    }
-
-    // ---- base ----
-    /**
-     * CMIS property {@code cmis:name}: name of the object.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String NAME = "cmis:name";
-    /**
-     * CMIS property {@code cmis:objectId}: ID of the object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String OBJECT_ID = "cmis:objectId";
-    /**
-     * CMIS property {@code cmis:objectTypeId}: ID of primary type of the
-     * object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String OBJECT_TYPE_ID = "cmis:objectTypeId";
-    /**
-     * CMIS property {@code cmis:baseTypeId}: ID of the base type of the object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String BASE_TYPE_ID = "cmis:baseTypeId";
-    /**
-     * CMIS property {@code cmis:createdBy}: creator of the object.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CREATED_BY = "cmis:createdBy";
-    /**
-     * CMIS property {@code cmis:creationDate}: creation date.
-     * <p>
-     * CMIS data type: datetime<br>
-     * Java type: GregorianCalendar
-     * 
-     * @cmis 1.0
-     */
-    public static final String CREATION_DATE = "cmis:creationDate";
-    /**
-     * CMIS property {@code cmis:lastModifiedBy}: last modifier of the object.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String LAST_MODIFIED_BY = "cmis:lastModifiedBy";
-    /**
-     * CMIS property {@code cmis:lastModificationDate}: last modification date.
-     * <p>
-     * CMIS data type: datetime<br>
-     * Java type: GregorianCalendar
-     * 
-     * @cmis 1.0
-     */
-    public static final String LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
-    /**
-     * CMIS property {@code cmis:changeToken}: change token of the object.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CHANGE_TOKEN = "cmis:changeToken";
-    /**
-     * CMIS property {@code cmis:description}: description of the object.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.1
-     */
-    public static final String DESCRIPTION = "cmis:description";
-    /**
-     * CMIS property {@code cmis:secondaryObjectTypeIds} (multivalue): list of
-     * IDs of the secondary types of the object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.1
-     */
-    public static final String SECONDARY_OBJECT_TYPE_IDS = "cmis:secondaryObjectTypeIds";
-
-    // ---- document ----
-    /**
-     * CMIS document property {@code cmis:isImmutable}: flag the indicates if
-     * the document is immutable.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.0
-     */
-    public static final String IS_IMMUTABLE = "cmis:isImmutable";
-    /**
-     * CMIS document property {@code cmis:isLatestVersion}: flag the indicates
-     * if the document is the latest version.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.0
-     */
-    public static final String IS_LATEST_VERSION = "cmis:isLatestVersion";
-    /**
-     * CMIS document property {@code cmis:isMajorVersion}: flag the indicates if
-     * the document is a major version.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.0
-     */
-    public static final String IS_MAJOR_VERSION = "cmis:isMajorVersion";
-    /**
-     * CMIS document property {@code cmis:isLatestMajorVersion}: flag the
-     * indicates if the document is the latest major version.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.0
-     */
-    public static final String IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
-    /**
-     * CMIS document property {@code cmis:versionLabel}: version label of the
-     * document.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String VERSION_LABEL = "cmis:versionLabel";
-    /**
-     * CMIS document property {@code cmis:versionSeriesId}: ID of the version
-     * series.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String VERSION_SERIES_ID = "cmis:versionSeriesId";
-    /**
-     * CMIS document property {@code cmis:isVersionSeriesCheckedOut}: flag the
-     * indicates if the document is checked out.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.0
-     */
-    public static final String IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
-    /**
-     * CMIS document property {@code cmis:versionSeriesCheckedOutBy}: user who
-     * checked out the document, if the document is checked out.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
-    /**
-     * CMIS document property {@code cmis:versionSeriesCheckedOutId}: ID of the
-     * PWC, if the document is checked out.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
-    /**
-     * CMIS document property {@code cmis:checkinComment}: check-in comment for
-     * the document version.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CHECKIN_COMMENT = "cmis:checkinComment";
-    /**
-     * CMIS document property {@code cmis:contentStreamLength}: length of the
-     * content stream, if the document has content.
-     * <p>
-     * CMIS data type: integer<br>
-     * Java type: BigInteger
-     * 
-     * @cmis 1.0
-     */
-    public static final String CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
-    /**
-     * CMIS document property {@code cmis:contentStreamMimeType}: MIME type of
-     * the content stream, if the document has content.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
-    /**
-     * CMIS document property {@code cmis:contentStreamFileName}: file name, if
-     * the document has content.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
-    /**
-     * CMIS document property {@code cmis:contentStreamId}: content stream ID.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String CONTENT_STREAM_ID = "cmis:contentStreamId";
-    /**
-     * CMIS document property {@code cmis:isPrivateWorkingCopy}: flag the
-     * indicates if the document is a PWC.
-     * <p>
-     * CMIS data type: boolean<br>
-     * Java type: Boolean
-     * 
-     * @cmis 1.1
-     */
-    public static final String IS_PRIVATE_WORKING_COPY = "cmis:isPrivateWorkingCopy";
-
-    // ---- folder ----
-    /**
-     * CMIS folder property {@code cmis:parentId}: ID of the parent folder.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String PARENT_ID = "cmis:parentId";
-    /**
-     * CMIS folder property {@code cmis:allowedChildObjectTypeIds} (multivalue):
-     * IDs of the types that can be filed in the folder.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
-    /**
-     * CMIS folder property {@code cmis:path}: folder path.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String PATH = "cmis:path";
-
-    // ---- relationship ----
-    /**
-     * CMIS relationship property {@code cmis:sourceId}: ID of the source
-     * object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String SOURCE_ID = "cmis:sourceId";
-    /**
-     * CMIS relationship property {@code cmis:targetId}: ID of the target
-     * object.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String TARGET_ID = "cmis:targetId";
-
-    // ---- policy ----
-    /**
-     * CMIS policy property {@code cmis:policyText}: policy text.
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis 1.0
-     */
-    public static final String POLICY_TEXT = "cmis:policyText";
-
-    // ---- retention ----
-    /**
-     * CMIS retention property {@code cmis:rm_expirationDate}: expiration date.
-     * <p>
-     * CMIS data type: datetime<br>
-     * Java type: GregorianCalendar
-     * 
-     * @cmis 1.1
-     */
-    public static final String EXPIRATION_DATE = "cmis:rm_expirationDate";
-    /**
-     * CMIS retention property {@code cmis:rm_startOfRetention}: start date.
-     * <p>
-     * CMIS data type: datetime<br>
-     * Java type: GregorianCalendar
-     * 
-     * @cmis 1.1
-     */
-    public static final String START_OF_RETENTION = "cmis:rm_startOfRetention";
-    /**
-     * CMIS retention property {@code cmis:rm_destructionDate}: destruction
-     * date.
-     * <p>
-     * CMIS data type: datetime<br>
-     * Java type: GregorianCalendar
-     * 
-     * @cmis 1.1
-     */
-    public static final String DESTRUCTION_DATE = "cmis:rm_destructionDate";
-    /**
-     * CMIS retention property {@code cmis:rm_holdIds} (multivalue): IDs of the
-     * holds that are applied.
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis 1.1
-     */
-    public static final String HOLD_IDS = "cmis:rm_holdIds";
-
-    // ---- extensions ----
-    /**
-     * Content Hash property {@code cmis:contentStreamHash} (multivalue): hashes
-     * of the content stream
-     * <p>
-     * CMIS data type: string<br>
-     * Java type: String
-     * 
-     * @cmis Extension
-     */
-    public static final String CONTENT_STREAM_HASH = "cmis:contentStreamHash";
-
-    /**
-     * Latest accessible state property {@code cmis:latestAccessibleStateId}: ID
-     * of the latest accessible version of a document
-     * <p>
-     * CMIS data type: id<br>
-     * Java type: String
-     * 
-     * @cmis Extension
-     */
-    public static final String LATEST_ACCESSIBLE_STATE_ID = "cmis:latestAccessibleStateId";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SecondaryTypeIds.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SecondaryTypeIds.java
deleted file mode 100644
index fd667c6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SecondaryTypeIds.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-/**
- * Secondary type IDs that are defined in the CMIS specification.
- * 
- * @cmis 1.1
- */
-public final class SecondaryTypeIds {
-
-    private SecondaryTypeIds() {
-    }
-
-    /** Repository managed retention type. */
-    public static final String REPOSITORY_MANAGED_RETENTION = "cmis:rm_repMgtRetention";
-    /** Client managed retention type. */
-    public static final String CLIENT_MANAGED_RETENTION = "cmis:rm_clientMgtRetention";
-    /** Client managed retention type with destruction date. */
-    public static final String DESTRUCTION_CLIENT_MANAGED_RETENTION = "cmis:rm_destructionRetention";
-    /** Legal hold type. */
-    public static final String HOLD = "cmis:rm_hold";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java
deleted file mode 100644
index 1a22701..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java
+++ /dev/null
@@ -1,715 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-/**
- * Session parameter constants.
- * 
- * <table border="2" rules="all" cellpadding="4">
- * <tr>
- * <th>Constant</th>
- * <th>Description</th>
- * <th>Binding</th>
- * <th>Value</th>
- * <th>Required</th>
- * <th>Default</th>
- * </tr>
- * <tr>
- * <td colspan="6"><b>General settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #BINDING_TYPE}</td>
- * <td>Defines the binding to use for the session</td>
- * <td>all</td>
- * <td>"atompub", "webservices", "browser", "local", "custom"</td>
- * <td>yes</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #BINDING_SPI_CLASS}</td>
- * <td>Binding implementation class</td>
- * <td>all</td>
- * <td>class name</td>
- * <td>Custom binding: yes<br>
- * all other binding: no</td>
- * <td>depends on {@link #BINDING_TYPE}</td>
- * </tr>
- * <tr>
- * <td>{@link #REPOSITORY_ID}</td>
- * <td>Repository ID</td>
- * <td>all</td>
- * <td>repository id</td>
- * <td>SessionFactory.createSession(): yes<br>
- * SessionFactory.getRepositories(): no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #LOCALE_ISO639_LANGUAGE}</td>
- * <td>Language code sent to server</td>
- * <td>all</td>
- * <td>ISO 639 code</td>
- * <td>no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #LOCALE_ISO3166_COUNTRY}</td>
- * <td>Country code sent to server if language code is set</td>
- * <td>all</td>
- * <td>ISO 3166 code</td>
- * <td>no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <tr>
- * <td>{@link #OBJECT_FACTORY_CLASS}</td>
- * <td>Object factory implementation class</td>
- * <td>all</td>
- * <td>class name</td>
- * <td>no</td>
- * <td>org.apache.chemistry.opencmis.client.runtime.repository.ObjectFactoryImpl
- * </td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Authentication settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #USER}</td>
- * <td>User name (used by the standard authentication provider)</td>
- * <td>all</td>
- * <td>user name</td>
- * <td>depends on the server</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #PASSWORD}</td>
- * <td>Password (used by the standard authentication provider)</td>
- * <td>all</td>
- * <td>password</td>
- * <td>depends on the server</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #AUTHENTICATION_PROVIDER_CLASS}</td>
- * <td>Authentication Provider class</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>class name</td>
- * <td>no</td>
- * <td>org.apache.chemistry.opencmis.client.bindings.spi.
- * StandardAuthenticationProvider</td>
- * </tr>
- * <tr>
- * <td>{@link #AUTH_HTTP_BASIC}</td>
- * <td>Switch to turn HTTP basic authentication on or off</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>depends on {@link #BINDING_TYPE}</td>
- * </tr>
- * <tr>
- * <td>{@link #AUTH_HTTP_BASIC_CHARSET}</td>
- * <td>Charset to encode HTTP basic authentication username and password</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>character set name</td>
- * <td>no</td>
- * <td>UTF-8</td>
- * </tr>
- * <tr>
- * <td>{@link #AUTH_SOAP_USERNAMETOKEN}</td>
- * <td>Switch to turn UsernameTokens on or off</td>
- * <td>Web Services</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>true</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>HTTP and network settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #HTTP_INVOKER_CLASS}</td>
- * <td>HTTP invoker class</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>class name</td>
- * <td>no</td>
- * <td>org.apache.chemistry.opencmis.client.bindings.spi.http.DefaultHttpInvoker
- * </td>
- * </tr>
- * <tr>
- * <td>{@link #COMPRESSION}</td>
- * <td>Switch to turn HTTP response compression on or off</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>false</td>
- * </tr>
- * <tr>
- * <td>{@link #CLIENT_COMPRESSION}</td>
- * <td>Switch to turn HTTP request compression on or off</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>false</td>
- * </tr>
- * <tr>
- * <td>{@link #COOKIES}</td>
- * <td>Switch to turn cookie support on or off</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>false</td>
- * </tr>
- * <tr>
- * <td>{@link #HEADER}</td>
- * <td>HTTP header</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>header header</td>
- * <td>no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #PROXY_USER}</td>
- * <td>Proxy user (used by the standard authentication provider)</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>user name</td>
- * <td>no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #PROXY_PASSWORD}</td>
- * <td>Proxy password (used by the standard authentication provider)</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>password</td>
- * <td>no</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #CONNECT_TIMEOUT}</td>
- * <td>HTTP connect timeout</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>time in milliseconds</td>
- * <td>no</td>
- * <td>JVM default</td>
- * </tr>
- * <tr>
- * <td>{@link #READ_TIMEOUT}</td>
- * <td>HTTP read timeout</td>
- * <td>AtomPub, Web Services, Browser</td>
- * <td>time in milliseconds</td>
- * <td>no</td>
- * <td>JVM default</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Cache settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_CLASS}</td>
- * <td>Cache implementation class</td>
- * <td>all</td>
- * <td>class name</td>
- * <td>no</td>
- * <td>org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl</td>
- * </tr>
- * <tr>
- * <td>{@link #TYPE_DEFINITION_CACHE_CLASS}</td>
- * <td>Type definition cache implementation class</td>
- * <td>all</td>
- * <td>class name</td>
- * <td>no</td>
- * <td>
- * org.apache.chemistry.opencmis.client.bindings.impl.TypeDefinitionCacheImpl</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_SIZE_OBJECTS}</td>
- * <td>Object cache size</td>
- * <td>all</td>
- * <td>number of object entries</td>
- * <td>no</td>
- * <td>1000</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_TTL_OBJECTS}</td>
- * <td>Object cache time-to-live</td>
- * <td>all</td>
- * <td>time in milliseconds</td>
- * <td>no</td>
- * <td>7200000 (2 hours)</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_SIZE_PATHTOID}</td>
- * <td>Path-to-id cache size</td>
- * <td>all</td>
- * <td>number of path to object link entries</td>
- * <td>no</td>
- * <td>1000</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_TTL_PATHTOID}</td>
- * <td>Path-to-id cache time-to-live</td>
- * <td>all</td>
- * <td>time in milliseconds</td>
- * <td>no</td>
- * <td>180000 (30 minutes)</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_PATH_OMIT}</td>
- * <td>Turn off path-to-id cache</td>
- * <td>all</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>false</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_SIZE_REPOSITORIES}</td>
- * <td>Repository info cache size</td>
- * <td>all</td>
- * <td>number of repository info entries</td>
- * <td>no</td>
- * <td>10</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_SIZE_TYPES}</td>
- * <td>Type definition cache size</td>
- * <td>all</td>
- * <td>number of type definition entries</td>
- * <td>no</td>
- * <td>100</td>
- * </tr>
- * <tr>
- * <td>{@link #CACHE_SIZE_LINKS}</td>
- * <td>AtomPub link cache size</td>
- * <td>AtomPub</td>
- * <td>number of link entries</td>
- * <td>no</td>
- * <td>400</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>AtomPub Binding settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #ATOMPUB_URL}</td>
- * <td>AtomPub service document URL</td>
- * <td>AtomPub</td>
- * <td>URL</td>
- * <td>yes</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Web Services Binding settings</b></td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_REPOSITORY_SERVICE}</td>
- * <td>Repository Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_REPOSITORY_SERVICE} or
- * {@link #WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT}</td>
- * <td>Repository Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_REPOSITORY_SERVICE} or
- * {@link #WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_NAVIGATION_SERVICE}</td>
- * <td>Navigation Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_NAVIGATION_SERVICE} or
- * {@link #WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT}</td>
- * <td>Navigation Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_NAVIGATION_SERVICE} or
- * {@link #WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_OBJECT_SERVICE}</td>
- * <td>Object Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_OBJECT_SERVICE} or
- * {@link #WEBSERVICES_OBJECT_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_OBJECT_SERVICE_ENDPOINT}</td>
- * <td>Object Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_OBJECT_SERVICE} or
- * {@link #WEBSERVICES_OBJECT_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_VERSIONING_SERVICE}</td>
- * <td>Versioning Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_VERSIONING_SERVICE} or
- * {@link #WEBSERVICES_VERSIONING_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_VERSIONING_SERVICE_ENDPOINT}</td>
- * <td>Versioning Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_VERSIONING_SERVICE} or
- * {@link #WEBSERVICES_VERSIONING_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_DISCOVERY_SERVICE}</td>
- * <td>Discovery Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_DISCOVERY_SERVICE} or
- * {@link #WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT}</td>
- * <td>Discovery Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_DISCOVERY_SERVICE} or
- * {@link #WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_RELATIONSHIP_SERVICE}</td>
- * <td>Relationship Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_RELATIONSHIP_SERVICE} or
- * {@link #WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT}</td>
- * <td>Relationship Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_DISCOVERY_SERVICE} or
- * {@link #WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_MULTIFILING_SERVICE}</td>
- * <td>Multifiling Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_MULTIFILING_SERVICE} or
- * {@link #WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT}</td>
- * <td>Multifiling Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_MULTIFILING_SERVICE} or
- * {@link #WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_POLICY_SERVICE}</td>
- * <td>Policy Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_POLICY_SERVICE} or
- * {@link #WEBSERVICES_POLICY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_POLICY_SERVICE_ENDPOINT}</td>
- * <td>Policy Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_POLICY_SERVICE} or
- * {@link #WEBSERVICES_POLICY_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_ACL_SERVICE}</td>
- * <td>ACL Service WSDL URL</td>
- * <td>Web Services</td>
- * <td>WSDL URL</td>
- * <td>either {@link #WEBSERVICES_ACL_SERVICE} or
- * {@link #WEBSERVICES_ACL_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_ACL_SERVICE_ENDPOINT}</td>
- * <td>ACL Service endpoint URL</td>
- * <td>Web Services</td>
- * <td>Endpoint URL</td>
- * <td>either {@link #WEBSERVICES_ACL_SERVICE} or
- * {@link #WEBSERVICES_ACL_SERVICE_ENDPOINT} must be set</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_MEMORY_THRESHOLD}</td>
- * <td>Documents smaller than the threshold are kept in main memory, larger
- * documents are written to a temporary file</td>
- * <td>Web Services</td>
- * <td>size in bytes</td>
- * <td>no</td>
- * <td>4194304 (4MB)</td>
- * </tr>
- * <tr>
- * <td>{@link #WEBSERVICES_REPSONSE_MEMORY_THRESHOLD}</td>
- * <td>Web Service responses (XML SOAP parts) smaller than the threshold are
- * kept in main memory, larger responses are written to a temporary file</td>
- * <td>Web Services</td>
- * <td>size in bytes</td>
- * <td>no</td>
- * <td>(JAX-WS implementation default)</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Browser Binding</b></td>
- * </tr>
- * <tr>
- * <td>{@link #BROWSER_URL}</td>
- * <td>Browser binding service document URL</td>
- * <td>Browser</td>
- * <td>URL</td>
- * <td>yes</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td>{@link #BROWSER_SUCCINCT}</td>
- * <td>Defines if properties should be sent in the succinct format</td>
- * <td>Browser</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>"true"</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Local Binding</b></td>
- * </tr>
- * <tr>
- * <td>{@link #LOCAL_FACTORY}</td>
- * <td>Class name of the local service factory (if client and server reside in
- * the same JVM)</td>
- * <td>Local</td>
- * <td>class name</td>
- * <td>yes</td>
- * <td>-</td>
- * </tr>
- * <tr>
- * <td colspan="6"><b>Workarounds</b></td>
- * </tr>
- * <tr>
- * <td>{@link #INCLUDE_OBJECTID_URL_PARAM_ON_CHECKOUT}</td>
- * <td>Defines if the object ID should be added to the check out URL<br>
- * (Workaround for SharePoint 2010)</td>
- * <td>AtomPub</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>"false"</td>
- * </tr>
- * <tr>
- * <td>{@link #INCLUDE_OBJECTID_URL_PARAM_ON_MOVE}</td>
- * <td>Defines if the object ID should be added to the move URL<br>
- * (Workaround for SharePoint 2010)</td>
- * <td>AtomPub</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>"false"</td>
- * </tr>
- * <tr>
- * <td>{@link #OMIT_CHANGE_TOKENS}</td>
- * <td>Defines if the change token should be omitted for updating calls<br>
- * (Workaround for SharePoint 2010 and SharePoint 2013)</td>
- * <td>all</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>"false"</td>
- * </tr>
- * <tr>
- * <td>{@link #ADD_NAME_ON_CHECK_IN}</td>
- * <td>Defines if the document name should be added to the properties on check
- * in if no properties are updated<br>
- * (Workaround for SharePoint 2010 and SharePoint 2013)</td>
- * <td>AtomPub</td>
- * <td>"true", "false"</td>
- * <td>no</td>
- * <td>"false"</td>
- * </tr>
- * </table>
- */
-public final class SessionParameter {
-
-    // utility class
-    private SessionParameter() {
-    }
-
-    // ---- general parameter ----
-    public static final String USER = "org.apache.chemistry.opencmis.user";
-    public static final String PASSWORD = "org.apache.chemistry.opencmis.password";
-
-    // --- binding parameter ----
-    /** Predefined binding types (see {@code BindingType}). */
-    public static final String BINDING_TYPE = "org.apache.chemistry.opencmis.binding.spi.type";
-
-    /** Class name of the binding class. */
-    public static final String BINDING_SPI_CLASS = "org.apache.chemistry.opencmis.binding.spi.classname";
-
-    /**
-     * Forces OpenCMIS to use the specified CMIS version and ignore the CMIS
-     * version reported by the repository.
-     */
-    public static final String FORCE_CMIS_VERSION = "org.apache.chemistry.opencmis.cmisversion";
-
-    /** URL of the AtomPub service document. */
-    public static final String ATOMPUB_URL = "org.apache.chemistry.opencmis.binding.atompub.url";
-
-    /** WSDL URLs for Web Services. */
-    public static final String WEBSERVICES_REPOSITORY_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.RepositoryService";
-    public static final String WEBSERVICES_NAVIGATION_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.NavigationService";
-    public static final String WEBSERVICES_OBJECT_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.ObjectService";
-    public static final String WEBSERVICES_VERSIONING_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.VersioningService";
-    public static final String WEBSERVICES_DISCOVERY_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.DiscoveryService";
-    public static final String WEBSERVICES_RELATIONSHIP_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.RelationshipService";
-    public static final String WEBSERVICES_MULTIFILING_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.MultiFilingService";
-    public static final String WEBSERVICES_POLICY_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.PolicyService";
-    public static final String WEBSERVICES_ACL_SERVICE = "org.apache.chemistry.opencmis.binding.webservices.ACLService";
-
-    /** Endpoint URLs for Web Services. */
-    public static final String WEBSERVICES_REPOSITORY_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.RepositoryService.endpoint";
-    public static final String WEBSERVICES_NAVIGATION_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.NavigationService.endpoint";
-    public static final String WEBSERVICES_OBJECT_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.ObjectService.endpoint";
-    public static final String WEBSERVICES_VERSIONING_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.VersioningService.endpoint";
-    public static final String WEBSERVICES_DISCOVERY_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.DiscoveryService.endpoint";
-    public static final String WEBSERVICES_RELATIONSHIP_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.RelationshipService.endpoint";
-    public static final String WEBSERVICES_MULTIFILING_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.MultiFilingService.endpoint";
-    public static final String WEBSERVICES_POLICY_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.PolicyService.endpoint";
-    public static final String WEBSERVICES_ACL_SERVICE_ENDPOINT = "org.apache.chemistry.opencmis.binding.webservices.ACLService.endpoint";
-
-    public static final String WEBSERVICES_MEMORY_THRESHOLD = "org.apache.chemistry.opencmis.binding.webservices.memoryThreshold";
-    public static final String WEBSERVICES_REPSONSE_MEMORY_THRESHOLD = "org.apache.chemistry.opencmis.binding.webservices.responseMemoryThreshold";
-
-    public static final String WEBSERVICES_PORT_PROVIDER_CLASS = "org.apache.chemistry.opencmis.binding.webservices.portprovider.classname";
-
-    public static final String WEBSERVICES_JAXWS_IMPL = "org.apache.chemistry.opencmis.binding.webservices.jaxws.impl";
-
-    /** URL of the Browser Binding entry point. */
-    public static final String BROWSER_URL = "org.apache.chemistry.opencmis.binding.browser.url";
-    public static final String BROWSER_SUCCINCT = "org.apache.chemistry.opencmis.binding.browser.succinct";
-    public static final String BROWSER_DATETIME_FORMAT = "org.apache.chemistry.opencmis.binding.browser.datetimeformat";
-
-    /** Factory class name for the local binding. */
-    public static final String LOCAL_FACTORY = "org.apache.chemistry.opencmis.binding.local.classname";
-
-    // --- authentication ---
-
-    /** Class name of the authentication provider. */
-    public static final String AUTHENTICATION_PROVIDER_CLASS = "org.apache.chemistry.opencmis.binding.auth.classname";
-
-    /**
-     * Toggle for HTTP basic authentication. Evaluated by the standard
-     * authentication provider.
-     */
-    public static final String AUTH_HTTP_BASIC = "org.apache.chemistry.opencmis.binding.auth.http.basic";
-    public static final String AUTH_HTTP_BASIC_CHARSET = "org.apache.chemistry.opencmis.binding.auth.http.basic.charset";
-
-    /**
-     * Toggle for OAuth Bearer token authentication. Evaluated by the standard
-     * authentication provider.
-     */
-    public static final String AUTH_OAUTH_BEARER = "org.apache.chemistry.opencmis.binding.auth.http.oauth.bearer";
-
-    /**
-     * Toggle for WS-Security UsernameToken authentication. Evaluated by the
-     * standard authentication provider.
-     */
-    public static final String AUTH_SOAP_USERNAMETOKEN = "org.apache.chemistry.opencmis.binding.auth.soap.usernametoken";
-
-    // --- OAuth ---
-
-    public static final String OAUTH_CLIENT_ID = "org.apache.chemistry.opencmis.oauth.clientId";
-    public static final String OAUTH_CLIENT_SECRET = "org.apache.chemistry.opencmis.oauth.clientSecret";
-    public static final String OAUTH_CODE = "org.apache.chemistry.opencmis.oauth.code";
-    public static final String OAUTH_TOKEN_ENDPOINT = "org.apache.chemistry.opencmis.oauth.tokenEndpoint";
-    public static final String OAUTH_REDIRECT_URI = "org.apache.chemistry.opencmis.oauth.redirectUri";
-
-    public static final String OAUTH_ACCESS_TOKEN = "org.apache.chemistry.opencmis.oauth.accessToken";
-    public static final String OAUTH_REFRESH_TOKEN = "org.apache.chemistry.opencmis.oauth.refreshToken";
-    public static final String OAUTH_EXPIRATION_TIMESTAMP = "org.apache.chemistry.opencmis.oauth.expirationTimestamp";
-    public static final String OAUTH_DEFAULT_TOKEN_LIFETIME = "org.apache.chemistry.opencmis.oauth.defaultTokenLifetime";
-
-    // --- connection ---
-
-    public static final String HTTP_INVOKER_CLASS = "org.apache.chemistry.opencmis.binding.httpinvoker.classname";
-
-    public static final String COMPRESSION = "org.apache.chemistry.opencmis.binding.compression";
-    public static final String CLIENT_COMPRESSION = "org.apache.chemistry.opencmis.binding.clientcompression";
-
-    public static final String COOKIES = "org.apache.chemistry.opencmis.binding.cookies";
-
-    public static final String HEADER = "org.apache.chemistry.opencmis.binding.header";
-
-    public static final String CONNECT_TIMEOUT = "org.apache.chemistry.opencmis.binding.connecttimeout";
-    public static final String READ_TIMEOUT = "org.apache.chemistry.opencmis.binding.readtimeout";
-
-    public static final String PROXY_USER = "org.apache.chemistry.opencmis.binding.proxyuser";
-    public static final String PROXY_PASSWORD = "org.apache.chemistry.opencmis.binding.proxypassword";
-
-    // --- cache ---
-
-    public static final String CACHE_SIZE_OBJECTS = "org.apache.chemistry.opencmis.cache.objects.size";
-    public static final String CACHE_TTL_OBJECTS = "org.apache.chemistry.opencmis.cache.objects.ttl";
-    public static final String CACHE_SIZE_PATHTOID = "org.apache.chemistry.opencmis.cache.pathtoid.size";
-    public static final String CACHE_TTL_PATHTOID = "org.apache.chemistry.opencmis.cache.pathtoid.ttl";
-    public static final String CACHE_PATH_OMIT = "org.apache.chemistry.opencmis.cache.path.omit";
-
-    public static final String CACHE_SIZE_REPOSITORIES = "org.apache.chemistry.opencmis.binding.cache.repositories.size";
-    public static final String CACHE_SIZE_TYPES = "org.apache.chemistry.opencmis.binding.cache.types.size";
-    public static final String CACHE_SIZE_LINKS = "org.apache.chemistry.opencmis.binding.cache.links.size";
-
-    // --- session control ---
-
-    public static final String LOCALE_ISO639_LANGUAGE = "org.apache.chemistry.opencmis.locale.iso639";
-    public static final String LOCALE_ISO3166_COUNTRY = "org.apache.chemistry.opencmis.locale.iso3166";
-    public static final String LOCALE_VARIANT = "org.apache.chemistry.opencmis.locale.variant";
-
-    public static final String OBJECT_FACTORY_CLASS = "org.apache.chemistry.opencmis.objectfactory.classname";
-    public static final String CACHE_CLASS = "org.apache.chemistry.opencmis.cache.classname";
-    public static final String TYPE_DEFINITION_CACHE_CLASS = "org.apache.chemistry.opencmis.cache.types.classname";
-
-    public static final String REPOSITORY_ID = "org.apache.chemistry.opencmis.session.repository.id";
-
-    // --- workarounds ---
-
-    public static final String INCLUDE_OBJECTID_URL_PARAM_ON_CHECKOUT = "org.apache.chemistry.opencmis.workaround.includeObjectIdOnCheckout";
-    public static final String INCLUDE_OBJECTID_URL_PARAM_ON_MOVE = "org.apache.chemistry.opencmis.workaround.includeObjectIdOnMove";
-    public static final String OMIT_CHANGE_TOKENS = "org.apache.chemistry.opencmis.workaround.omitChangeTokens";
-    public static final String ADD_NAME_ON_CHECK_IN = "org.apache.chemistry.opencmis.workaround.addNameOnCheckIn";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameterDefaults.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameterDefaults.java
deleted file mode 100644
index 41227a6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameterDefaults.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons;
-
-public class SessionParameterDefaults {
-
-    // utility class
-    private SessionParameterDefaults() {
-    }
-
-    public static final int CACHE_SIZE_OBJECTS = 1000;
-    public static final int CACHE_TTL_OBJECTS = 2 * 60 * 60 * 1000;
-    public static final int CACHE_SIZE_PATHTOID = 1000;
-    public static final int CACHE_TTL_PATHTOID = 30 * 60 * 1000;
-
-    public static final int CACHE_SIZE_REPOSITORIES = 10;
-    public static final int CACHE_SIZE_TYPES = 100;
-    public static final int CACHE_SIZE_LINKS = 400;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Ace.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Ace.java
deleted file mode 100644
index a837373..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Ace.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Access Control Entry (ACE).
- */
-public interface Ace extends ExtensionsData {
-
-    /**
-     * Returns the ACE principal.
-     * 
-     * @return the principal
-     */
-    Principal getPrincipal();
-
-    /**
-     * Returns the ACE principal ID.
-     * <p>
-     * Shortcut for <code>getPrincipal().getId()</code>.
-     * 
-     * @return the principal ID or {@code null} if no principal is set
-     */
-    String getPrincipalId();
-
-    /**
-     * Returns the permissions granted to the principal.
-     * 
-     * @return the list of permissions, not {@code null}
-     */
-    List<String> getPermissions();
-
-    /**
-     * Indicates if the ACE was directly applied to the object or has been
-     * inherited from another object (for example from the folder it resides
-     * in).
-     * 
-     * @return {@code true} if it is direct ACE, {@code false} if it is
-     *         non-direct ACE
-     */
-    boolean isDirect();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Acl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Acl.java
deleted file mode 100644
index ef51f1b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Acl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Access Control List (ACL).
- */
-public interface Acl extends ExtensionsData {
-
-    /**
-     * Returns the list of Access Control Entries (ACEs).
-     * 
-     * @return the list of ACEs, not {@code null}
-     */
-    List<Ace> getAces();
-
-    /**
-     * Indicates whether this ACL expresses all permissions of the object.
-     * 
-     * @return {@code true} if the ACL expresses the exact permission set,
-     *         {@code false} if there are other permission rules that cannot be
-     *         expressed through ACEs, and {@code null} if this in unknown (the
-     *         repository did not provide this information)
-     */
-    Boolean isExact();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AclCapabilities.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AclCapabilities.java
deleted file mode 100644
index 267db71..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AclCapabilities.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-
-/**
- * Acl Capabilities.
- * 
- * @cmis 1.0
- */
-public interface AclCapabilities extends Serializable, ExtensionsData {
-
-    SupportedPermissions getSupportedPermissions();
-
-    AclPropagation getAclPropagation();
-
-    List<PermissionDefinition> getPermissions();
-
-    Map<String, PermissionMapping> getPermissionMapping();
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AllowableActions.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AllowableActions.java
deleted file mode 100644
index c1f6c55..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/AllowableActions.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-
-/**
- * Allowable Actions.
- * 
- * @cmis 1.0
- */
-public interface AllowableActions extends ExtensionsData {
-
-    /**
-     * Returns the Allowable Actions that are set.
-     * 
-     * @return the Allowable Actions that are set, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    Set<Action> getAllowableActions();
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/BulkUpdateObjectIdAndChangeToken.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/BulkUpdateObjectIdAndChangeToken.java
deleted file mode 100644
index ff86c61..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/BulkUpdateObjectIdAndChangeToken.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Holder for bulkUpdateObject data.
- * 
- * @cmis 1.1
- */
-public interface BulkUpdateObjectIdAndChangeToken extends ExtensionsData {
-
-    /**
-     * Returns the object ID.
-     * 
-     * @return the object ID
-     */
-    String getId();
-
-    /**
-     * Returns the new object ID if the repository created a new object during
-     * the update.
-     * 
-     * @return the new object ID or {@code null} if no new object has been
-     *         created
-     */
-    String getNewId();
-
-    /**
-     * Returns the change token of the object.
-     * 
-     * @return the change token or {@code null} if the repository does not
-     *         support change tokens
-     */
-    String getChangeToken();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CacheHeaderContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CacheHeaderContentStream.java
deleted file mode 100644
index 00a8b71..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CacheHeaderContentStream.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.GregorianCalendar;
-
-/**
- * Content stream with HTTP cache headers. (AtomPub binding and Browser binding
- * server only.)
- */
-public interface CacheHeaderContentStream extends ContentStream {
-
-    /**
-     * Returns the Cache-Control header.
-     * 
-     * @return the value of the Cache-Control header or {@code null} if the
-     *         header should not be set
-     */
-    String getCacheControl();
-
-    /**
-     * Returns the ETag header.
-     * 
-     * @return the value of the ETag header or {@code null} if the header
-     *         should not be set
-     */
-    String getETag();
-
-    /**
-     * Returns the Expires header.
-     * 
-     * @return the value of the Expires header or {@code null} if the header
-     *         should not be set
-     */
-    GregorianCalendar getExpires();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ChangeEventInfo.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ChangeEventInfo.java
deleted file mode 100644
index 376b4e4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ChangeEventInfo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-
-/**
- * Basic change event.
- */
-public interface ChangeEventInfo extends ExtensionsData {
-
-    /**
-     * Returns the change event type.
-     * 
-     * @return the change event type, not {@code null}
-     */
-    ChangeType getChangeType();
-
-    /**
-     * Returns when the change took place.
-     * 
-     * @return the timespamp of the change, not {@code null}
-     */
-    GregorianCalendar getChangeTime();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CmisExtensionElement.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CmisExtensionElement.java
deleted file mode 100644
index f32c45d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CmisExtensionElement.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Represents one node in the extension tree.
- * <p>
- * An extension element can have a value or children, but not both.
- */
-public interface CmisExtensionElement extends Serializable {
-
-    /**
-     * Returns the name of the extension.
-     * 
-     * @return the name, not {@code null}
-     */
-    String getName();
-
-    /**
-     * Returns the namespace of the extension.
-     * <p>
-     * The namespace must follow the XML rules for namespaces. Don't rely on
-     * namespaces because the Browser binding does not support namespaces!
-     * 
-     * @return the extension namespace or {@code null} if the namespace is not
-     *         set or not supported by the binding
-     */
-    String getNamespace();
-
-    /**
-     * Returns the value of the extension as a String.
-     * 
-     * @return the extension value as a String or {@code null} if the value is
-     *         {@code null} or the extension has children
-     */
-    String getValue();
-
-    /**
-     * Returns the attributes of the extension.
-     * <p>
-     * The attributes must follow the XML rules for attributes. Don't rely on
-     * attributes because the Browser binding does not support attributes!
-     * 
-     * @return the extension attributes or {@code null} if the attributes are
-     *         not set or not supported by the binding
-     */
-    Map<String, String> getAttributes();
-
-    /**
-     * Returns the children of this extension.
-     * 
-     * @return the children of this extension or {@code null} if the extension
-     *         has a value
-     */
-    List<CmisExtensionElement> getChildren();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentLengthContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentLengthContentStream.java
deleted file mode 100644
index 43528a1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentLengthContentStream.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Content stream that should not be chunked. (AtomPub binding and Browser
- * binding server only.)
- */
-public interface ContentLengthContentStream extends ContentStream {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStream.java
deleted file mode 100644
index 1d72ba5..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStream.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.InputStream;
-import java.math.BigInteger;
-
-/**
- * Content stream.
- */
-public interface ContentStream extends ExtensionsData {
-
-    /**
-     * Returns the length of the stream.
-     * 
-     * @return the length of the stream in bytes or -1 if the length is unknown
-     */
-    long getLength();
-
-    /**
-     * Returns the length of the stream.
-     * 
-     * @return the length of the stream in bytes or {@code null} if the length
-     *         is unknown
-     */
-    BigInteger getBigLength();
-
-    /**
-     * Returns the MIME type of the stream.
-     * 
-     * @return the MIME type of the stream or {@code null} if the MIME type is
-     *         unknown
-     */
-    String getMimeType();
-
-    /**
-     * Returns the file name of the stream.
-     * 
-     * @return the file name of the stream or {@code null} if the file name is
-     *         unknown
-     */
-    String getFileName();
-
-    /**
-     * Returns the stream.
-     * <p>
-     * It is important to close this stream properly!
-     * 
-     * @return the stream
-     */
-    InputStream getStream();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
deleted file mode 100644
index e176394..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Content hash.
- */
-public interface ContentStreamHash {
-
-    /**
-     * Returns the content hash property value ({@code cmis:contentStreamHash}).
-     * 
-     * @return the content hash property value
-     */
-    String getPropertyValue();
-
-    /**
-     * Returns the hash algorithm.
-     * 
-     * @return the hash algorithm or {@code null} if the property value is
-     *         invalid
-     */
-    String getAlgorithm();
-
-    /**
-     * Returns the hash value.
-     * 
-     * @return the hash value or {@code null} if the property value is invalid
-     */
-    String getHash();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CreatablePropertyTypes.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CreatablePropertyTypes.java
deleted file mode 100644
index bb3208b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/CreatablePropertyTypes.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-
-/**
- * Holds the set of property data types for type creation and update.
- * 
- * @cmis 1.1
- */
-public interface CreatablePropertyTypes extends ExtensionsData {
-
-    /**
-     * Returns the set of property data types that can used to create or update
-     * a type definition.
-     * 
-     * @return the available set of property data types
-     * 
-     * @cmis 1.1
-     */
-    Set<PropertyType> canCreate();
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionFeature.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionFeature.java
deleted file mode 100644
index cd78f62..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionFeature.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * Representation of an extension feature.
- * 
- * @cmis 1.1
- */
-public interface ExtensionFeature extends Serializable, ExtensionsData {
-
-    /**
-     * Returns the unique feature ID.
-     * 
-     * @return the feature ID, not {@code null}
-     * 
-     * @cmis 1.1
-     */
-    String getId();
-
-    /**
-     * Returns a URL that provides more information about the feature.
-     * 
-     * @return the feature URL, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    String getUrl();
-
-    /**
-     * Returns a human-readable name for the feature.
-     * 
-     * @return the feature name, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    String getCommonName();
-
-    /**
-     * Returns a feature version label.
-     * 
-     * @return the feature version label, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    String getVersionLabel();
-
-    /**
-     * Returns a human-readable description of the feature.
-     * 
-     * @return the feature description, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    String getDescription();
-
-    /**
-     * Returns extra feature data.
-     * 
-     * @return the key-value pairs of extra data, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    Map<String, String> getFeatureData();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionsData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionsData.java
deleted file mode 100644
index 9c1c62e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ExtensionsData.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Holds extension data either set by the CMIS repository or the client.
- */
-public interface ExtensionsData {
-
-    /**
-     * Returns the list of top-level extension elements.
-     * 
-     * @return the list of extension elements or {@code null} if no extension
-     *         are set
-     */
-    List<CmisExtensionElement> getExtensions();
-
-    /**
-     * Sets the list of top-level extension elements.
-     * 
-     * @param extensions
-     *            the list of extensions, may be {@code null}
-     */
-    void setExtensions(List<CmisExtensionElement> extensions);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/FailedToDeleteData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/FailedToDeleteData.java
deleted file mode 100644
index 90ea23b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/FailedToDeleteData.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-/**
- * Holder for object IDs of objects that could not be deleted.
- * 
- * @see ObjectService#deleteTree(String, String, Boolean,
- *      org.apache.chemistry.opencmis.commons.enums.UnfileObject, Boolean,
- *      ExtensionsData)
- */
-public interface FailedToDeleteData extends ExtensionsData {
-
-    /**
-     * Returns the list of object IDs of the objects that haven't been deleted.
-     * 
-     * @return the list of IDs, not {@code null}
-     */
-    List<String> getIds();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/LastModifiedContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/LastModifiedContentStream.java
deleted file mode 100644
index 88f3441..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/LastModifiedContentStream.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.GregorianCalendar;
-
-/**
- * Content stream with last modified date. (AtomPub binding and Browser binding
- * server only.)
- */
-public interface LastModifiedContentStream extends ContentStream {
-
-    /**
-     * Returns the last modified date of this content.
-     * 
-     * @return the date of the last content modification
-     */
-    GregorianCalendar getLastModified();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAce.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAce.java
deleted file mode 100644
index fba067f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAce.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Mutable Access Control Entry (ACE).
- */
-public interface MutableAce extends Ace {
-
-    /**
-     * Sets the ACE principal.
-     * 
-     * @param principal
-     *            the principal
-     */
-    void setPrincipal(Principal principal);
-
-    /**
-     * Sets the permissions granted to the principal.
-     * 
-     * @param permissions
-     *            the list of permission
-     */
-    void setPermissions(List<String> permissions);
-
-    /**
-     * Sets whether this ACE is a direct ACE or not.
-     * 
-     * @param direct
-     *            {@code true} if the ACE is a direct ACE, {@code false}
-     *            otherwise
-     */
-    void setDirect(boolean direct);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAcl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAcl.java
deleted file mode 100644
index 0e97bf9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableAcl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Mutable Access Control List (ACL).
- */
-public interface MutableAcl extends Acl {
-
-    /**
-     * Sets the list of ACEs.
-     * 
-     * @param aces
-     *            list of ACEs
-     */
-    void setAces(List<Ace> aces);
-
-    /**
-     * Sets whether this ACL expresses all permissions of the object.
-     * 
-     * @param isExact
-     *            {@code true} if the ACL expresses the exact permission set,
-     *            {@code false} if there are other permission rules that cannot
-     *            be expressed through ACEs
-     */
-    void setExact(Boolean isExact);
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableContentStream.java
deleted file mode 100644
index 64bc30d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableContentStream.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.InputStream;
-import java.math.BigInteger;
-
-/**
- * Mutable ContentStream.
- */
-public interface MutableContentStream extends ContentStream {
-
-    /**
-     * Sets the file name.
-     * 
-     * @param filename
-     *            the file name
-     */
-    void setFileName(String filename);
-
-    /**
-     * Sets the length of the stream.
-     * 
-     * @param length
-     *            the length of the stream in bytes or {@code null} if the
-     *            length is unknown
-     */
-    void setLength(BigInteger length);
-
-    /**
-     * Sets the MIME type of the stream.
-     * 
-     * @param mimeType
-     *            the MIME type
-     */
-    void setMimeType(String mimeType);
-
-    /**
-     * Sets the stream.
-     * 
-     * @param stream
-     *            the stream
-     */
-    void setStream(InputStream stream);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableObjectData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableObjectData.java
deleted file mode 100644
index 2255fe9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableObjectData.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Mutable ObjectData.
- */
-public interface MutableObjectData extends ObjectData {
-
-    /**
-     * Sets the properties.
-     * 
-     * @param properties
-     *            the properties of {@code null} to remove all properties
-     */
-    void setProperties(Properties properties);
-
-    /**
-     * Sets the change event info.
-     * 
-     * @param changeEventInfo
-     *            the change event info of {@code null} to remove the change
-     *            event info
-     */
-    void setChangeEventInfo(ChangeEventInfo changeEventInfo);
-
-    /**
-     * Sets the relationships.
-     * 
-     * @param relationships
-     *            the list of relationships of {@code null} to remove all
-     *            relationships
-     */
-    void setRelationships(List<ObjectData> relationships);
-
-    /**
-     * Sets the renditions.
-     * 
-     * @param renditions
-     *            the list of renditions of {@code null} to remove all
-     *            renditions
-     */
-    void setRenditions(List<RenditionData> renditions);
-
-    /**
-     * Sets the policy IDs.
-     * 
-     * @param policyIds
-     *            the policy ID of {@code null} to remove all policy IDs
-     */
-    void setPolicyIds(PolicyIdList policyIds);
-
-    /**
-     * Sets the Allowable Actions.
-     * 
-     * @param allowableActions
-     *            the Allowable Actions of {@code null} to remove the Allowable
-     *            Actions
-     */
-    void setAllowableActions(AllowableActions allowableActions);
-
-    /**
-     * Sets the access control list.
-     * 
-     * @param acl
-     *            the access control list of {@code null} to remove the access
-     *            control list
-     */
-    void setAcl(Acl acl);
-
-    /**
-     * Sets if the access control list reflects the exact permission set in the
-     * repository.
-     * <p>
-     * Should be set to {@code true} or {@code false} if an access control list
-     * exists. Should be set to {@code null} if no access control list exists.
-     * 
-     * @param isExactACL
-     *            the exact flag.
-     */
-    void setIsExactAcl(Boolean isExactACL);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePrincipal.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePrincipal.java
deleted file mode 100644
index aa0501b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePrincipal.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePrincipal extends Principal {
-
-    /**
-     * Sets the principal ID.
-     * 
-     * @param principalId
-     *            the principal ID
-     */
-    void setId(String principalId);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableProperties.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableProperties.java
deleted file mode 100644
index c041c1c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutableProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Mutable Properties.
- */
-public interface MutableProperties extends Properties {
-
-    /**
-     * Adds a property to the end of the property list.
-     * 
-     * @param property
-     *            the property, {@code null} values are ignored
-     */
-    void addProperty(PropertyData<?> property);
-
-    /**
-     * Replaces a property.
-     * <p>
-     * Removes the property from the property list if it exists and adds the new
-     * version to the end of the property list.
-     * 
-     * @param property
-     *            the property, {@code null} values are ignored
-     */
-    void replaceProperty(PropertyData<?> property);
-
-    /**
-     * Removes a property.
-     * 
-     * @param id
-     *            the property ID, {@code null} values are ignored
-     */
-    void removeProperty(String id);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyBoolean.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyBoolean.java
deleted file mode 100644
index 10deb14..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyBoolean.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePropertyBoolean extends PropertyBoolean, MutablePropertyData<Boolean> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyData.java
deleted file mode 100644
index fbca4f7..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyData.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Mutable PropertyData.
- */
-public interface MutablePropertyData<T> extends PropertyData<T> {
-
-    /**
-     * Sets the property ID.
-     * 
-     * @param id
-     *            the property ID, should not be {@code null}
-     */
-    void setId(String id);
-
-    /**
-     * Set the display name.
-     * 
-     * @param the
-     *            display name
-     */
-    void setDisplayName(String displayName);
-
-    /**
-     * Set the local name.
-     * 
-     * @param the
-     *            local name
-     */
-    void setLocalName(String localName);
-
-    /**
-     * Set the query name.
-     * 
-     * @param the
-     *            query name
-     */
-    void setQueryName(String queryName);
-
-    /**
-     * Sets the property value.
-     * <p>
-     * If this property is a single value property, this list must either be
-     * empty or {@code null} (= unset) or must only contain one entry.
-     * 
-     * @param values
-     *            the property value or {@code null} to unset the property
-     */
-    void setValues(List<T> values);
-
-    /**
-     * Sets a property value.
-     * <p>
-     * If this property is a multi value property, this value becomes the only
-     * value in the list of values.
-     * 
-     * @param value
-     *            the property value or {@code null} to unset the property
-     */
-    void setValue(T value);
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDateTime.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDateTime.java
deleted file mode 100644
index 6a1005a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDateTime.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.GregorianCalendar;
-
-public interface MutablePropertyDateTime extends PropertyDateTime, MutablePropertyData<GregorianCalendar> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDecimal.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDecimal.java
deleted file mode 100644
index 8672a28..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyDecimal.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigDecimal;
-
-public interface MutablePropertyDecimal extends PropertyDecimal, MutablePropertyData<BigDecimal> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyHtml.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyHtml.java
deleted file mode 100644
index 016589c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyHtml.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePropertyHtml extends PropertyHtml, MutablePropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyId.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyId.java
deleted file mode 100644
index db8d0b9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyId.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePropertyId extends PropertyId, MutablePropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyInteger.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyInteger.java
deleted file mode 100644
index ddc918a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyInteger.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigInteger;
-
-public interface MutablePropertyInteger extends PropertyInteger, MutablePropertyData<BigInteger> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyString.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyString.java
deleted file mode 100644
index fa30808..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyString.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePropertyString extends PropertyString, MutablePropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyUri.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyUri.java
deleted file mode 100644
index 0f491a8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/MutablePropertyUri.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-public interface MutablePropertyUri extends PropertyUri, MutablePropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/NewTypeSettableAttributes.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/NewTypeSettableAttributes.java
deleted file mode 100644
index 68898bd..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/NewTypeSettableAttributes.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * ;License;); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * ;AS IS; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * A collection of flags that indicate which type attributes can be set at type
- * creation.
- * 
- * @cmis 1.1
- */
-public interface NewTypeSettableAttributes extends ExtensionsData {
-
-    /**
-     * Indicates if the "id" attribute can be set.
-     * 
-     * @return {@code true} if the "id" attribute can be set, {@code false}
-     *         otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetId();
-
-    /**
-     * Indicates if the "localName" attribute can be set.
-     * 
-     * @return {@code true} if the "localName" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetLocalName();
-
-    /**
-     * Indicates if the "localNamespace" attribute can be set.
-     * 
-     * @return {@code true} if the "localNamespace" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetLocalNamespace();
-
-    /**
-     * Indicates if the "displayName" attribute can be set.
-     * 
-     * @return {@code true} if the "displayName" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetDisplayName();
-
-    /**
-     * Indicates if the "queryName" attribute can be set.
-     * 
-     * @return {@code true} if the "queryName" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetQueryName();
-
-    /**
-     * Indicates if the "description" attribute can be set.
-     * 
-     * @return {@code true} if the "description" attribute can be set,
-     *         {@code false} otherwise
-     * @cmis 1.1
-     */
-    Boolean canSetDescription();
-
-    /**
-     * Indicates if the "creatable" attribute can be set.
-     * 
-     * @return {@code true} if the "creatable" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetCreatable();
-
-    /**
-     * Indicates if the "fileable" attribute can be set.
-     * 
-     * @return {@code true} if the "fileable" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetFileable();
-
-    /**
-     * Indicates if the "queryable" attribute can be set.
-     * 
-     * @return {@code true} if the "queryable" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetQueryable();
-
-    /**
-     * Indicates if the "fulltextIndexed" attribute can be set.
-     * 
-     * @return {@code true} if the "fulltextIndexed" attribute can be set,
-     *         {@code false} otherwise
-     */
-    Boolean canSetFulltextIndexed();
-
-    /**
-     * Indicates if the "includedInSupertypeQuery" attribute can be set.
-     * 
-     * @return {@code true} if the "includedInSupertypeQuery" attribute can be
-     *         set, {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetIncludedInSupertypeQuery();
-
-    /**
-     * Indicates if the "controllablePolicy" attribute can be set.
-     * 
-     * @return {@code true} if the "controllablePolicy" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetControllablePolicy();
-
-    /**
-     * Indicates if the "controllableACL" attribute can be set.
-     * 
-     * @return {@code true} if the "controllableACL" attribute can be set,
-     *         {@code false} otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canSetControllableAcl();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectData.java
deleted file mode 100644
index 3d2bb40..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectData.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * Base object for CMIS documents, folders, relationships, policies, and items.
- */
-public interface ObjectData extends ExtensionsData {
-
-    /**
-     * Returns the object ID.
-     * 
-     * @return the object ID or {@code null} if the object ID is unknown
-     */
-    String getId();
-
-    /**
-     * Returns the base object type.
-     * 
-     * @return the base object type or {@code null} if the base object type is
-     *         unknown
-     */
-    BaseTypeId getBaseTypeId();
-
-    /**
-     * Returns the object properties. The properties can be incomplete if a
-     * property filter was used.
-     * 
-     * @return the properties or {@code null} if no properties are known
-     */
-    Properties getProperties();
-
-    /**
-     * Returns the allowable actions.
-     * 
-     * @return the allowable actions or {@code null} if the allowable actions
-     *         are unknown
-     */
-    AllowableActions getAllowableActions();
-
-    /**
-     * Returns the relationships from and to this object.
-     * 
-     * @return the list of relationship objects, not {@code null}
-     */
-    List<ObjectData> getRelationships();
-
-    /**
-     * Returns the change event infos.
-     * 
-     * @return the change event infos or {@code null} if the infos are unknown
-     */
-    ChangeEventInfo getChangeEventInfo();
-
-    /**
-     * Returns the access control list.
-     * 
-     * @return the access control list or {@code null} if the access control
-     *         list is unknown
-     */
-    Acl getAcl();
-
-    /**
-     * Returns if the access control list reflects the exact permission set in
-     * the repository.
-     * 
-     * @return {@code true} - exact; {@code false} - not exact, other permission
-     *         constraints exist; {@code null} - unknown
-     */
-    Boolean isExactAcl();
-
-    /**
-     * Returns the IDs of the applied policies.
-     * 
-     * @return the policy IDs or {@code null} if no policies are applied or the
-     *         IDs are unknown
-     */
-    PolicyIdList getPolicyIds();
-
-    /**
-     * Returns the renditions of this object.
-     * 
-     * @return the list of renditions, not {@code null}
-     */
-    List<RenditionData> getRenditions();
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderContainer.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderContainer.java
deleted file mode 100644
index 9e1aaf4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderContainer.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Container used for trees that represent objects in a folder hierarchy.
- */
-public interface ObjectInFolderContainer extends ExtensionsData {
-
-    /**
-     * Returns the object at this level.
-     * 
-     * @return the object, not {@code null}
-     */
-    ObjectInFolderData getObject();
-
-    /**
-     * Returns the object containers of the next level.
-     * 
-     * @return the child object, not {@code null}
-     */
-    List<ObjectInFolderContainer> getChildren();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderData.java
deleted file mode 100644
index 0cf9d71..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderData.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Represents an object in a folder.
- */
-public interface ObjectInFolderData extends ExtensionsData {
-
-    /**
-     * Returns the object.
-     * 
-     * @return the object, not {@code null}
-     */
-    ObjectData getObject();
-
-    /**
-     * Returns the path segment of the object in the folder.
-     * 
-     * @return the path segment or {@code null} if the path segment has not been
-     *         requested
-     */
-    String getPathSegment();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderList.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderList.java
deleted file mode 100644
index cf9973f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectInFolderList.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigInteger;
-import java.util.List;
-
-/**
- * Represents the objects in a folder.
- */
-public interface ObjectInFolderList extends ExtensionsData {
-
-    /**
-     * Returns the objects in the folder.
-     * 
-     * @return the objects in the folder, not {@code null}
-     */
-    List<ObjectInFolderData> getObjects();
-
-    /**
-     * Indicates if there are more objects in the folder.
-     * 
-     * @return {@code true} if there are more objects, {@code false} if there
-     *         are not more objects, or {@code null} if the repository didn't
-     *         provide this flag
-     */
-    Boolean hasMoreItems();
-
-    /**
-     * Returns the total number of the objects in the folder.
-     * 
-     * @return the total number of the objects in the folder or {@code null} if
-     *         the repository didn't provide the number
-     */
-    BigInteger getNumItems();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectList.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectList.java
deleted file mode 100644
index 80488a7..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectList.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigInteger;
-import java.util.List;
-
-/**
- * Represents a list of objects.
- */
-public interface ObjectList extends ExtensionsData {
-
-    /**
-     * Returns the list of objects.
-     * 
-     * @return the list of objects, not {@code null}
-     */
-    List<ObjectData> getObjects();
-
-    /**
-     * Indicates if there are more objects.
-     * 
-     * @return {@code true} if there are more objects, {@code false} if there
-     *         are not more objects, or {@code null} if the repository didn't
-     *         provide this flag
-     */
-    Boolean hasMoreItems();
-
-    /**
-     * Returns the total number of the objects.
-     * 
-     * @return the total number of the objects or {@code null} if the repository
-     *         didn't provide the number
-     */
-    BigInteger getNumItems();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectParentData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectParentData.java
deleted file mode 100644
index 89f7343..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ObjectParentData.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Represents a parent of object of a child object.
- */
-public interface ObjectParentData extends ExtensionsData {
-
-    /**
-     * Returns the parent object.
-     * 
-     * @return the parent object, not {@code null}
-     */
-    ObjectData getObject();
-
-    /**
-     * Returns the relative path segment of the child object relative to the
-     * parent object.
-     * 
-     * @return the relative path segment or {@code null} if the relative path
-     *         segment has not been requested
-     */
-    String getRelativePathSegment();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PartialContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PartialContentStream.java
deleted file mode 100644
index 5a79787..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PartialContentStream.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Content stream that indicates that this stream may not represent the complete
- * document content. (Client only.)
- * <p>
- * Note that if the client provides an offset and/or a length that cover the
- * whole document content, the server might report this as partial content.
- */
-public interface PartialContentStream extends ContentStream {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PermissionMapping.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PermissionMapping.java
deleted file mode 100644
index 1c066f6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PermissionMapping.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-import java.util.List;
-
-public interface PermissionMapping extends Serializable, ExtensionsData {
-    String CAN_GET_DESCENDENTS_FOLDER = "canGetDescendents.Folder";
-    String CAN_GET_CHILDREN_FOLDER = "canGetChildren.Folder";
-    String CAN_GET_PARENTS_FOLDER = "canGetParents.Folder";
-    String CAN_GET_FOLDER_PARENT_OBJECT = "canGetFolderParent.Object";
-    String CAN_CREATE_DOCUMENT_FOLDER = "canCreateDocument.Folder";
-    String CAN_CREATE_FOLDER_FOLDER = "canCreateFolder.Folder";
-    String CAN_CREATE_POLICY_FOLDER = "canCreatePolicy.Folder";
-    String CAN_CREATE_RELATIONSHIP_SOURCE = "canCreateRelationship.Source";
-    String CAN_CREATE_RELATIONSHIP_TARGET = "canCreateRelationship.Target";
-    String CAN_GET_PROPERTIES_OBJECT = "canGetProperties.Object";
-    String CAN_VIEW_CONTENT_OBJECT = "canViewContent.Object";
-    String CAN_UPDATE_PROPERTIES_OBJECT = "canUpdateProperties.Object";
-    String CAN_MOVE_OBJECT = "canMove.Object";
-    String CAN_MOVE_TARGET = "canMove.Target";
-    String CAN_MOVE_SOURCE = "canMove.Source";
-    String CAN_DELETE_OBJECT = "canDelete.Object";
-    String CAN_DELETE_TREE_FOLDER = "canDeleteTree.Folder";
-    String CAN_SET_CONTENT_DOCUMENT = "canSetContent.Document";
-    String CAN_DELETE_CONTENT_DOCUMENT = "canDeleteContent.Document";
-    String CAN_ADD_TO_FOLDER_OBJECT = "canAddToFolder.Object";
-    String CAN_ADD_TO_FOLDER_FOLDER = "canAddToFolder.Folder";
-    String CAN_REMOVE_FROM_FOLDER_OBJECT = "canRemoveFromFolder.Object";
-    String CAN_REMOVE_FROM_FOLDER_FOLDER = "canRemoveFromFolder.Folder";
-    String CAN_CHECKOUT_DOCUMENT = "canCheckout.Document";
-    String CAN_CANCEL_CHECKOUT_DOCUMENT = "canCancelCheckout.Document";
-    String CAN_CHECKIN_DOCUMENT = "canCheckin.Document";
-    String CAN_GET_ALL_VERSIONS_VERSION_SERIES = "canGetAllVersions.VersionSeries";
-    String CAN_GET_OBJECT_RELATIONSHIPS_OBJECT = "canGetObjectRelationships.Object";
-    String CAN_ADD_POLICY_OBJECT = "canAddPolicy.Object";
-    String CAN_ADD_POLICY_POLICY = "canAddPolicy.Policy";
-    String CAN_REMOVE_POLICY_OBJECT = "canRemovePolicy.Object";
-    String CAN_REMOVE_POLICY_POLICY = "canRemovePolicy.Policy";
-    String CAN_GET_APPLIED_POLICIES_OBJECT = "canGetAppliedPolicies.Object";
-    String CAN_GET_ACL_OBJECT = "canGetACL.Object";
-    String CAN_APPLY_ACL_OBJECT = "canApplyACL.Object";
-
-    String getKey();
-
-    List<String> getPermissions();
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PolicyIdList.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PolicyIdList.java
deleted file mode 100644
index 8bcd0a9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PolicyIdList.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * List of policy IDs.
- */
-public interface PolicyIdList extends ExtensionsData {
-
-    /**
-     * Returns the list policy IDs.
-     * 
-     * @return the list policy IDs, not {@code null}
-     */
-    List<String> getPolicyIds();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Principal.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Principal.java
deleted file mode 100644
index baada8c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Principal.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * ACE Principal.
- */
-public interface Principal extends ExtensionsData {
-
-    /**
-     * Returns the principal ID.
-     * 
-     * @return the principal ID
-     */
-    String getId();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Properties.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Properties.java
deleted file mode 100644
index 550e064..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/Properties.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Represents a set of properties.
- */
-public interface Properties extends ExtensionsData {
-
-    /**
-     * Returns a map of properties (property ID => property).
-     * <p>
-     * This method should not be used with queries because some repositories
-     * don't set property IDs, and because when dealing with queries the proper
-     * key is usually the query name (when using JOINs, several properties with
-     * the same ID may be returned).
-     * 
-     * @return the map of properties, not {@code null}
-     */
-    Map<String, PropertyData<?>> getProperties();
-
-    /**
-     * Returns the list of properties.
-     * 
-     * @return the list of properties, not {@code null}
-     */
-    List<PropertyData<?>> getPropertyList();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyBoolean.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyBoolean.java
deleted file mode 100644
index ebff505..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyBoolean.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Boolean property.
- */
-public interface PropertyBoolean extends PropertyData<Boolean> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyData.java
deleted file mode 100644
index b134f31..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyData.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.List;
-
-/**
- * Base property interface.
- */
-public interface PropertyData<T> extends ExtensionsData {
-
-    /**
-     * Returns the property ID.
-     * <p>
-     * The property ID may not be set if the object is used in a query result.
-     * 
-     * 
-     * @return the property ID, may be {@code null}
-     */
-    String getId();
-
-    /**
-     * Returns the local name.
-     * 
-     * @return the local name, may be {@code null}
-     */
-    String getLocalName();
-
-    /**
-     * Returns the display name.
-     * 
-     * @return the display name, may be {@code null}
-     */
-    String getDisplayName();
-
-    /**
-     * Returns the query name.
-     * <p>
-     * The property query name must be set if the object is used in a query
-     * result.
-     * 
-     * @return the query name, may be {@code null}
-     */
-    String getQueryName();
-
-    /**
-     * Returns the list of values of this property. For a single value property
-     * this is a list with one entry.
-     * 
-     * @return the list of values, not {@code null}
-     */
-    List<T> getValues();
-
-    /**
-     * Returns the first entry of the list of values.
-     * 
-     * @return first entry in the list of values or {@code null} if the list of
-     *         values is empty
-     */
-    T getFirstValue();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDataWithDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDataWithDefinition.java
deleted file mode 100644
index 985d4b1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDataWithDefinition.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * PropertyData objects implementing this interface also may provide the
- * property definition.
- */
-public interface PropertyDataWithDefinition<T> extends PropertyData<T> {
-
-    PropertyDefinition<T> getPropertyDefinition();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDateTime.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDateTime.java
deleted file mode 100644
index d67fe02..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDateTime.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.util.GregorianCalendar;
-
-/**
- * DateTime property.
- */
-public interface PropertyDateTime extends PropertyData<GregorianCalendar> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDecimal.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDecimal.java
deleted file mode 100644
index a8f23e3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyDecimal.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigDecimal;
-
-/**
- * Decimal property.
- */
-public interface PropertyDecimal extends PropertyData<BigDecimal> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyHtml.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyHtml.java
deleted file mode 100644
index 68bef37..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyHtml.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * HTML property.
- */
-public interface PropertyHtml extends PropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyId.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyId.java
deleted file mode 100644
index 7c98eb5..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyId.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Id property.
- */
-public interface PropertyId extends PropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyInteger.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyInteger.java
deleted file mode 100644
index 56c8196..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyInteger.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigInteger;
-
-/**
- * Integer property.
- */
-public interface PropertyInteger extends PropertyData<BigInteger> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyString.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyString.java
deleted file mode 100644
index 354b06f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyString.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * String property.
- */
-public interface PropertyString extends PropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyUri.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyUri.java
deleted file mode 100644
index 76d7edf..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/PropertyUri.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * URI property.
- */
-public interface PropertyUri extends PropertyData<String> {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RedirectingContentStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RedirectingContentStream.java
deleted file mode 100644
index becf0cc..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RedirectingContentStream.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-/**
- * Content stream redirecting to another location. (AtomPub binding and Browser
- * binding server only.)
- */
-public interface RedirectingContentStream {
-
-    /**
-     * Returns the HTTP status code, for example 301 (moved permanently) or 307
-     * (temporary redirect).
-     * 
-     * @return the HTTP status code
-     */
-    int getStatus();
-
-    /**
-     * Returns the location to redirect to.
-     * 
-     * This should be an absolute URL, although many clients can also handle a
-     * relative path.
-     * 
-     * @return the location to redirect to
-     */
-    String getLocation();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RenditionData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RenditionData.java
deleted file mode 100644
index 0114d42..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RenditionData.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.math.BigInteger;
-
-/**
- * Represents a rendition.
- * 
- * @cmis 1.0
- */
-public interface RenditionData extends ExtensionsData {
-
-    /**
-     * Returns the stream ID of the rendition.
-     * <p>
-     * The stream ID is required to fetch the content of the rendition.
-     * 
-     * @return the stream ID, not {@code null}
-     */
-    String getStreamId();
-
-    /**
-     * Returns the MIME type of the rendition.
-     * 
-     * @return the MIME type, should not be {@code null}
-     */
-    String getMimeType();
-
-    /**
-     * Returns the size of the rendition in bytes, if available.
-     * 
-     * @return the size of the rendition in bytes, may be {@code null}
-     */
-    BigInteger getBigLength();
-
-    /**
-     * Returns the kind of the rendition.
-     * <p>
-     * The CMIS specification only defines the kind {@code cmis:thumbnail}, but
-     * a repository can provide other kinds.
-     * 
-     * @return the rendition kind, may be {@code null}
-     */
-    String getKind();
-
-    /**
-     * Returns the title of the rendition.
-     * 
-     * @returns the rendition title, may be {@code null}
-     */
-    String getTitle();
-
-    /**
-     * Returns the height in pixels, if the rendition is an image.
-     * 
-     * @returns the height in pixels, may be {@code null}
-     */
-    BigInteger getBigHeight();
-
-    /**
-     * Returns the width in pixels, if the rendition is an image.
-     * 
-     * @returns the width in pixels, may be {@code null}
-     */
-    BigInteger getBigWidth();
-
-    /**
-     * Returns the object id of the rendition document if the rendition is a
-     * stand-alone document.
-     * 
-     * @return the rendition document ID, may be {@code null}
-     */
-    String getRenditionDocumentId();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryCapabilities.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryCapabilities.java
deleted file mode 100644
index 0af9616..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryCapabilities.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-
-public interface RepositoryCapabilities extends Serializable, ExtensionsData {
-
-    // Object
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityContentStreamUpdates getContentStreamUpdatesCapability();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityChanges getChangesCapability();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityRenditions getRenditionsCapability();
-
-    // Navigation
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isGetDescendantsSupported();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isGetFolderTreeSupported();
-
-    /**
-     * 
-     * @cmis 1.1
-     */
-    CapabilityOrderBy getOrderByCapability();
-
-    // Filing
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isMultifilingSupported();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isUnfilingSupported();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isVersionSpecificFilingSupported();
-
-    // Versioning
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isPwcSearchableSupported();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isPwcUpdatableSupported();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    Boolean isAllVersionsSearchableSupported();
-
-    // Query
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityQuery getQueryCapability();
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityJoin getJoinCapability();
-
-    // ACLs
-
-    /**
-     * 
-     * @cmis 1.0
-     */
-    CapabilityAcl getAclCapability();
-
-    // Type mutability
-
-    /**
-     * 
-     * @cmis 1.1
-     */
-    CreatablePropertyTypes getCreatablePropertyTypes();
-
-    /**
-     * 
-     * @cmis 1.1
-     */
-    NewTypeSettableAttributes getNewTypeSettableAttributes();
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryInfo.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryInfo.java
deleted file mode 100644
index d22b516..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/RepositoryInfo.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.data;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-/**
- * Repository Info.
- * 
- * @cmis 1.0
- */
-public interface RepositoryInfo extends Serializable, ExtensionsData {
-
-    /**
-     * Returns the repository ID.
-     * 
-     * @return the repository ID, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getId();
-
-    /**
-     * Returns the repository name.
-     * 
-     * @return the repository name, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getName();
-
-    /**
-     * Returns the repository description.
-     * 
-     * @return the repository description, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getDescription();
-
-    /**
-     * Returns the repository vendor name.
-     * 
-     * @return the repository vendor name, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getVendorName();
-
-    /**
-     * Returns the repository product name.
-     * 
-     * @return the repository product name, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getProductName();
-
-    /**
-     * Returns the repository product version.
-     * 
-     * @return the repository product version, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getProductVersion();
-
-    /**
-     * Returns the object ID of the root folder.
-     * 
-     * @return the root folder ID, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getRootFolderId();
-
-    /**
-     * Returns the repository capabilities.
-     * 
-     * @return the repository capabilities, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    RepositoryCapabilities getCapabilities();
-
-    /**
-     * Returns the ACL capabilities.
-     * 
-     * @return the ACL capabilities, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    AclCapabilities getAclCapabilities();
-
-    /**
-     * Returns the latest change log token.
-     * 
-     * @return the latest change log token, may be {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getLatestChangeLogToken();
-
-    /**
-     * Returns the CMIS version supported by this repository as a string.
-     * 
-     * @return the supported CMIS version, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getCmisVersionSupported();
-
-    /**
-     * Returns the CMIS version supported by this repository as a
-     * {@link CmisVersion} enum.
-     * 
-     * @return the supported CMIS version, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    CmisVersion getCmisVersion();
-
-    /**
-     * Returns the URL of a web interface for this repository, if available.
-     * 
-     * @return the thin client URL, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getThinClientUri();
-
-    /**
-     * Indicates whether the entries in the change log are incomplete or
-     * complete.
-     * 
-     * @return {@code true} if the changes are incomplete, {@code false} if the
-     *         changes are complete, or {@code null} if the repository didn't
-     *         provide this flag
-     * 
-     * @cmis 1.0
-     */
-    Boolean getChangesIncomplete();
-
-    /**
-     * Returns which types of objects are considered in the change log.
-     * 
-     * @return the list of type IDs, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    List<BaseTypeId> getChangesOnType();
-
-    /**
-     * Returns principal ID for an anonymous user (any authenticated user). This
-     * principal ID is supposed to be used in an {@link Ace}.
-     * 
-     * @return the principal ID for an anonymous user or {@code null} if the
-     *         repository does not support anonymous users
-     * 
-     * @cmis 1.0
-     */
-    String getPrincipalIdAnonymous();
-
-    /**
-     * Returns principal ID for unauthenticated user (guest user). This
-     * principal ID is supposed to be used in an {@link Ace}.
-     * 
-     * @return the principal ID for unauthenticated user or {@code null} if the
-     *         repository does not support unauthenticated users
-     * 
-     * @cmis 1.0
-     */
-    String getPrincipalIdAnyone();
-
-    /**
-     * Returns the list of CMIS extension features supported by this repository.
-     * 
-     * @return the list of features, may be {@code null}
-     * 
-     * @cmis 1.1
-     */
-    List<ExtensionFeature> getExtensionFeatures();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/package.html b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/package.html
deleted file mode 100644
index eb362e8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/package.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-</head>
-<body>
-OpenCMIS data interfaces.
-<p>This package contains the interfaces for classes that transport
-data.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/Choice.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/Choice.java
deleted file mode 100644
index 95257dc..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/Choice.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Choice value interface.
- * 
- * @cmis 1.0
- */
-public interface Choice<T> extends Serializable {
-
-    /**
-     * Return the display name of the choice value.
-     */
-    String getDisplayName();
-
-    /**
-     * Return the value of the choice value. Single value properties return a
-     * list with exactly one value.
-     */
-    List<T> getValue();
-
-    List<Choice<T>> getChoice();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/DocumentTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/DocumentTypeDefinition.java
deleted file mode 100644
index 44d174b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/DocumentTypeDefinition.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-
-/**
- * Document Type Definition.
- * 
- * @cmis 1.0
- */
-public interface DocumentTypeDefinition extends TypeDefinition {
-
-    /**
-     * Returns whether objects of this type are versionable or not.
-     * 
-     * @cmis 1.0
-     */
-    Boolean isVersionable();
-
-    /**
-     * Returns if a content stream must be set.
-     * 
-     * @cmis 1.0
-     */
-    ContentStreamAllowed getContentStreamAllowed();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/FolderTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/FolderTypeDefinition.java
deleted file mode 100644
index fb5abb0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/FolderTypeDefinition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Folder Type Definition.
- * 
- * @cmis 1.0
- */
-public interface FolderTypeDefinition extends TypeDefinition {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/ItemTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/ItemTypeDefinition.java
deleted file mode 100644
index 5948b85..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/ItemTypeDefinition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Item Type Definition.
- * 
- * @cmis 1.1
- */
-public interface ItemTypeDefinition extends TypeDefinition {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableDocumentTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableDocumentTypeDefinition.java
deleted file mode 100644
index f92b13c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableDocumentTypeDefinition.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-
-/**
- * Mutable Document Type Definition.
- * 
- * @cmis 1.0
- */
-public interface MutableDocumentTypeDefinition extends DocumentTypeDefinition, MutableTypeDefinition {
-
-    void setContentStreamAllowed(ContentStreamAllowed contentStreamAllowed);
-
-    void setIsVersionable(Boolean isVersionable);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableFolderTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableFolderTypeDefinition.java
deleted file mode 100644
index bf0aa5a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableFolderTypeDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Mutable Folder Type Definition.
- * 
- * @cmis 1.0
- */
-public interface MutableFolderTypeDefinition extends FolderTypeDefinition, MutableTypeDefinition {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableItemTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableItemTypeDefinition.java
deleted file mode 100644
index 59a6f00..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableItemTypeDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Mutable Item Type Definition.
- * 
- * @cmis 1.1
- */
-public interface MutableItemTypeDefinition extends ItemTypeDefinition, MutableTypeDefinition {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePolicyTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePolicyTypeDefinition.java
deleted file mode 100644
index 94f52b3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePolicyTypeDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Mutable Policy Type Definition.
- * 
- * @cmis 1.0
- */
-public interface MutablePolicyTypeDefinition extends PolicyTypeDefinition, MutableTypeDefinition {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyBooleanDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyBooleanDefinition.java
deleted file mode 100644
index 84136d2..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyBooleanDefinition.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-public interface MutablePropertyBooleanDefinition extends PropertyBooleanDefinition, MutablePropertyDefinition<Boolean> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDateTimeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDateTimeDefinition.java
deleted file mode 100644
index e075be3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDateTimeDefinition.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-
-public interface MutablePropertyDateTimeDefinition extends PropertyDateTimeDefinition,
-        MutablePropertyDefinition<GregorianCalendar> {
-
-    void setDateTimeResolution(DateTimeResolution dateTimeResolution);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDecimalDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDecimalDefinition.java
deleted file mode 100644
index 5bc6857..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDecimalDefinition.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigDecimal;
-
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-
-public interface MutablePropertyDecimalDefinition extends PropertyDecimalDefinition,
-        MutablePropertyDefinition<BigDecimal> {
-
-    void setMinValue(BigDecimal minValue);
-
-    void setMaxValue(BigDecimal maxValue);
-
-    void setPrecision(DecimalPrecision precision);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDefinition.java
deleted file mode 100644
index 2986992..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyDefinition.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-
-/**
- * Mutable base property definition interface.
- * 
- * @cmis 1.0
- */
-public interface MutablePropertyDefinition<T> extends PropertyDefinition<T> {
-
-    void setId(String id);
-
-    void setLocalName(String localName);
-
-    void setLocalNamespace(String localNamespace);
-
-    void setQueryName(String queryName);
-
-    void setDisplayName(String displayName);
-
-    void setDescription(String description);
-
-    void setPropertyType(PropertyType propertyType);
-
-    void setCardinality(Cardinality cardinality);
-
-    void setChoices(List<Choice<T>> choiceList);
-
-    void setDefaultValue(List<T> defaultValue);
-
-    void setUpdatability(Updatability updatability);
-
-    void setIsInherited(Boolean isInherited);
-
-    void setIsQueryable(Boolean isQueryable);
-
-    void setIsOrderable(Boolean isOrderable);
-
-    void setIsRequired(Boolean isRequired);
-
-    void setIsOpenChoice(Boolean isOpenChoice);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyHtmlDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyHtmlDefinition.java
deleted file mode 100644
index cf9a231..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyHtmlDefinition.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-public interface MutablePropertyHtmlDefinition extends PropertyHtmlDefinition, MutablePropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIdDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIdDefinition.java
deleted file mode 100644
index 0c5861a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIdDefinition.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-public interface MutablePropertyIdDefinition extends PropertyIdDefinition, MutablePropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIntegerDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIntegerDefinition.java
deleted file mode 100644
index ed0483c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyIntegerDefinition.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigInteger;
-
-public interface MutablePropertyIntegerDefinition extends PropertyIntegerDefinition,
-        MutablePropertyDefinition<BigInteger> {
-
-    void setMinValue(BigInteger minValue);
-
-    void setMaxValue(BigInteger maxValue);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyStringDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyStringDefinition.java
deleted file mode 100644
index 1fe1bf0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyStringDefinition.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigInteger;
-
-public interface MutablePropertyStringDefinition extends PropertyStringDefinition, MutablePropertyDefinition<String> {
-
-    void setMaxLength(BigInteger maxLength);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyUriDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyUriDefinition.java
deleted file mode 100644
index a03432a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutablePropertyUriDefinition.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-public interface MutablePropertyUriDefinition extends PropertyUriDefinition, MutablePropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableRelationshipTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableRelationshipTypeDefinition.java
deleted file mode 100644
index fd0cf12..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableRelationshipTypeDefinition.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.List;
-
-/**
- * Mutable Relationship Type Definition.
- * 
- * @cmis 1.0
- */
-public interface MutableRelationshipTypeDefinition extends RelationshipTypeDefinition, MutableTypeDefinition {
-
-    void setAllowedSourceTypes(List<String> allowedSourceTypes);
-
-    void setAllowedTargetTypes(List<String> allowedTargetTypes);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableSecondaryTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableSecondaryTypeDefinition.java
deleted file mode 100644
index 15911f4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableSecondaryTypeDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Mutable Secondary Type Definition.
- * 
- * @cmis 1.1
- */
-public interface MutableSecondaryTypeDefinition extends SecondaryTypeDefinition, MutableTypeDefinition {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableTypeDefinition.java
deleted file mode 100644
index eb2e87e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/MutableTypeDefinition.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-public interface MutableTypeDefinition extends TypeDefinition {
-
-    void setId(String id);
-
-    void setLocalName(String localName);
-
-    void setLocalNamespace(String localNamespace);
-
-    void setQueryName(String queryName);
-
-    void setDisplayName(String displayName);
-
-    void setDescription(String description);
-
-    void setBaseTypeId(BaseTypeId baseId);
-
-    void setParentTypeId(String parentId);
-
-    void setIsCreatable(Boolean isCreatable);
-
-    void setIsFileable(Boolean isFileable);
-
-    void setIsQueryable(Boolean isQueryable);
-
-    void setIsIncludedInSupertypeQuery(Boolean isIncludedInSupertypeQuery);
-
-    void setIsFulltextIndexed(Boolean isFulltextIndexed);
-
-    void setIsControllableAcl(Boolean isControllableACL);
-
-    void setIsControllablePolicy(Boolean isControllablePolicy);
-
-    void setTypeMutability(TypeMutability typeMutability);
-
-    // --- property definitions ---
-
-    /**
-     * Adds or replaces a property definition.
-     */
-    void addPropertyDefinition(PropertyDefinition<?> propertyDefinition);
-
-    /**
-     * Removes a property definition.
-     */
-    void removePropertyDefinition(String propertyId);
-
-    /**
-     * Removes all property definitions.
-     */
-    void removeAllPropertyDefinitions();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PermissionDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PermissionDefinition.java
deleted file mode 100644
index 0889b0d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PermissionDefinition.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * Permission definition.
- */
-public interface PermissionDefinition extends Serializable, ExtensionsData {
-
-    /**
-     * Returns the permission ID.
-     */
-    String getId();
-
-    /**
-     * Returns a human readable description of the permission.
-     */
-    String getDescription();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PolicyTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PolicyTypeDefinition.java
deleted file mode 100644
index 087d7b9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PolicyTypeDefinition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Policy Type Definition.
- * 
- * @cmis 1.0
- */
-public interface PolicyTypeDefinition extends TypeDefinition {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyBooleanDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyBooleanDefinition.java
deleted file mode 100644
index 36ae531..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyBooleanDefinition.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Property definition of a boolean property.
- */
-public interface PropertyBooleanDefinition extends PropertyDefinition<Boolean> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDateTimeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDateTimeDefinition.java
deleted file mode 100644
index 1ea89ae..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDateTimeDefinition.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-
-/**
- * Property definition of a datetime property.
- */
-public interface PropertyDateTimeDefinition extends PropertyDefinition<GregorianCalendar> {
-
-    /**
-     * Returns which datetime resolution is supported by this property.
-     * 
-     * @see DateTimeResolution
-     */
-    DateTimeResolution getDateTimeResolution();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDecimalDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDecimalDefinition.java
deleted file mode 100644
index aa2f333..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDecimalDefinition.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigDecimal;
-
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-
-/**
- * Property definition of a decimal property.
- */
-public interface PropertyDecimalDefinition extends PropertyDefinition<BigDecimal> {
-
-    /**
-     * Returns the min value of this decimal.
-     * 
-     * @return the min value or <code>null</code> if no limit is specified
-     */
-    BigDecimal getMinValue();
-
-    /**
-     * Returns the max value of this decimal.
-     * 
-     * @return the max value or <code>null</code> if no limit is specified
-     */
-    BigDecimal getMaxValue();
-
-    /**
-     * Returns the precision this decimal.
-     * 
-     * @return the precision or <code>null</code> if the decimal supports any
-     *         value
-     * 
-     * @see DecimalPrecision
-     */
-    DecimalPrecision getPrecision();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDefinition.java
deleted file mode 100644
index f0d88d3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyDefinition.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-
-/**
- * Base property definition interface.
- * 
- * @cmis 1.0
- */
-public interface PropertyDefinition<T> extends Serializable, ExtensionsData {
-
-    /**
-     * Returns the property definition ID.
-     * 
-     * @return the property definition ID
-     * 
-     * @cmis 1.0
-     */
-    String getId();
-
-    /**
-     * Returns the local name.
-     * 
-     * @return the local name
-     * 
-     * @cmis 1.0
-     */
-    String getLocalName();
-
-    /**
-     * Returns the local namespace.
-     * 
-     * @return the local namespace
-     * 
-     * @cmis 1.0
-     */
-    String getLocalNamespace();
-
-    /**
-     * Returns the display name.
-     * 
-     * @return the display name
-     * 
-     * @cmis 1.0
-     */
-    String getDisplayName();
-
-    /**
-     * Returns the query name
-     * 
-     * @return the query name
-     * 
-     * @cmis 1.0
-     */
-    String getQueryName();
-
-    /**
-     * Returns the property description.
-     * 
-     * @return returns the description
-     * 
-     * @cmis 1.0
-     */
-    String getDescription();
-
-    /**
-     * Returns the property type.
-     * 
-     * @return the property type
-     * 
-     * @cmis 1.0
-     */
-    PropertyType getPropertyType();
-
-    /**
-     * Returns the cardinality.
-     * 
-     * @return the cardinality
-     * 
-     * @cmis 1.0
-     */
-    Cardinality getCardinality();
-
-    /**
-     * Returns the updatability.
-     * 
-     * @return the updatability
-     * 
-     * @cmis 1.0
-     */
-    Updatability getUpdatability();
-
-    /**
-     * Returns if the property is inherited by a parent type.
-     * 
-     * @return {@code true} - is inherited; {@code false} - is not inherited;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isInherited();
-
-    /**
-     * Returns if the property is required.
-     * 
-     * @return {@code true} - is required; {@code false} - is not required;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isRequired();
-
-    /**
-     * Returns if the property is queryable.
-     * 
-     * @return {@code true} - is queryable; {@code false} - is not queryable;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isQueryable();
-
-    /**
-     * Returns if the property is Orderable.
-     * 
-     * @return {@code true} - is Orderable; {@code false} - is not Orderable;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isOrderable();
-
-    /**
-     * Returns if the property supports open choice.
-     * 
-     * @return {@code true} - supports open choice; {@code false} - does not
-     *         support open choice; {@code null} - unknown or not applicable
-     * 
-     * @cmis 1.0
-     */
-    Boolean isOpenChoice();
-
-    /**
-     * Returns the default value.
-     * 
-     * @return the default value (list) or an empty list if no default value is
-     *         defined
-     * 
-     * @cmis 1.0
-     */
-    List<T> getDefaultValue();
-
-    /**
-     * Returns the choices for this property.
-     * 
-     * @return the choices or an empty list if no choices are defined
-     * 
-     * @cmis 1.0
-     */
-    List<Choice<T>> getChoices();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyHtmlDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyHtmlDefinition.java
deleted file mode 100644
index c11a6ff..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyHtmlDefinition.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Property definition of a HTML property.
- */
-public interface PropertyHtmlDefinition extends PropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIdDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIdDefinition.java
deleted file mode 100644
index 26c71c6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIdDefinition.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Property definition of an ID property.
- */
-public interface PropertyIdDefinition extends PropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIntegerDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIntegerDefinition.java
deleted file mode 100644
index da0873f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyIntegerDefinition.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigInteger;
-
-/**
- * Property definition of an integer property.
- */
-public interface PropertyIntegerDefinition extends PropertyDefinition<BigInteger> {
-
-    /**
-     * Returns the min value of this integer.
-     * 
-     * @return the min value or <code>null</code> if no limit is specified
-     */
-    BigInteger getMinValue();
-
-    /**
-     * Returns the max value of this integer.
-     * 
-     * @return the max value or <code>null</code> if no limit is specified
-     */
-    BigInteger getMaxValue();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyStringDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyStringDefinition.java
deleted file mode 100644
index c584ff8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyStringDefinition.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigInteger;
-
-/**
- * Property definition of a string property.
- */
-public interface PropertyStringDefinition extends PropertyDefinition<String> {
-
-    /**
-     * Returns the max length of the string.
-     * 
-     * @return the max string length in characters or <code>null</code> if the
-     *         the length is not limited
-     */
-    BigInteger getMaxLength();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyUriDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyUriDefinition.java
deleted file mode 100644
index 8481453..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/PropertyUriDefinition.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Property definition of a URI property.
- */
-public interface PropertyUriDefinition extends PropertyDefinition<String> {
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/RelationshipTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/RelationshipTypeDefinition.java
deleted file mode 100644
index 6de9170..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/RelationshipTypeDefinition.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.List;
-
-/**
- * Relationship Type Definition.
- * 
- * @cmis 1.0
- */
-public interface RelationshipTypeDefinition extends TypeDefinition {
-
-    /**
-     * Returns the list of type IDs that are allowed as source objects.
-     * 
-     * @return list of type IDs or {@code null} if all types are allowed
-     * 
-     * @cmis 1.0
-     */
-    List<String> getAllowedSourceTypeIds();
-
-    /**
-     * Returns the list of type IDs that are allowed as target objects.
-     * 
-     * @return list of type IDs or {@code null} if all types are allowed
-     * 
-     * @cmis 1.0
-     */
-    List<String> getAllowedTargetTypeIds();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/SecondaryTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/SecondaryTypeDefinition.java
deleted file mode 100644
index 1ceb424..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/SecondaryTypeDefinition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-/**
- * Secondary Type Definition.
- * 
- * @cmis 1.1
- */
-public interface SecondaryTypeDefinition extends TypeDefinition {
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinition.java
deleted file mode 100644
index eed03b2..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinition.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * Base type definition interface.
- * 
- * @cmis 1.0
- */
-public interface TypeDefinition extends Serializable, ExtensionsData {
-
-    /**
-     * Returns the type ID.
-     * 
-     * @return the type ID, not {@code null}
-     * 
-     * @cmis 1.0
-     */
-    String getId();
-
-    /**
-     * Returns the local name.
-     * 
-     * @return the local name
-     * 
-     * @cmis 1.0
-     */
-    String getLocalName();
-
-    /**
-     * Returns the local namespace.
-     * 
-     * @return the local namespace
-     * 
-     * @cmis 1.0
-     */
-    String getLocalNamespace();
-
-    /**
-     * Returns the display name.
-     * 
-     * @return the display name
-     * 
-     * @cmis 1.0
-     */
-    String getDisplayName();
-
-    /**
-     * Returns the query name
-     * 
-     * @return the query name
-     * 
-     * @cmis 1.0
-     */
-    String getQueryName();
-
-    /**
-     * Returns the property description.
-     * 
-     * @return returns the description
-     * 
-     * @cmis 1.0
-     */
-    String getDescription();
-
-    /**
-     * Returns the base object type ID.
-     * 
-     * @return the base object type ID
-     * 
-     * @cmis 1.0
-     */
-    BaseTypeId getBaseTypeId();
-
-    /**
-     * Returns the parent type ID.
-     * 
-     * @return the parent type ID or {@code null} if the type is a base type
-     * 
-     * @cmis 1.0
-     */
-    String getParentTypeId();
-
-    /**
-     * Returns if an object of this type can be created.
-     * 
-     * @return {@code true} if an object of this type can be created;
-     *         {@code false} if creation of objects of this type is not
-     *         possible; {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isCreatable();
-
-    /**
-     * Returns if an object of this type can be filed.
-     * 
-     * @return {@code true} if an object of this type can be filed;
-     *         {@code false} if an object of this type cannot be filed;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isFileable();
-
-    /**
-     * Returns if this type is queryable.
-     * 
-     * @return {@code true} if this type is queryable; {@code false} if this
-     *         type is not queryable; {@code null} - unknown (noncompliant
-     *         repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isQueryable();
-
-    /**
-     * Returns if this type is full text indexed.
-     * 
-     * @return {@code true} if this type is full text indexed; {@code false} if
-     *         this type is not full text indexed; {@code null} - unknown
-     *         (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isFulltextIndexed();
-
-    /**
-     * Returns if this type is included in queries that query the super type.
-     * 
-     * @return {@code true} if this type is included; {@code false} if this type
-     *         is not included; {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isIncludedInSupertypeQuery();
-
-    /**
-     * Returns if objects of this type are controllable by policies.
-     * 
-     * @return {@code true} if objects are controllable by policies;
-     *         {@code false} if objects are not controllable by policies;
-     *         {@code null} - unknown (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isControllablePolicy();
-
-    /**
-     * Returns if objects of this type are controllable by ACLs.
-     * 
-     * @return {@code true} if objects are controllable by ACLs; {@code false}
-     *         if objects are not controllable by ACLs; {@code null} - unknown
-     *         (noncompliant repository)
-     * 
-     * @cmis 1.0
-     */
-    Boolean isControllableAcl();
-
-    /**
-     * Returns the property definitions of this type.
-     * 
-     * @return the property definitions or {@code null} if the property
-     *         definitions were not requested
-     * 
-     * @cmis 1.0
-     */
-    Map<String, PropertyDefinition<?>> getPropertyDefinitions();
-
-    /**
-     * Returns type mutability flags.
-     * 
-     * @return type mutability flags
-     * 
-     * @cmis 1.1
-     */
-    TypeMutability getTypeMutability();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionContainer.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionContainer.java
deleted file mode 100644
index d6b02d0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionContainer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * Type Definition Container. This class is used to build a tree of type
- * definitions.
- */
-public interface TypeDefinitionContainer extends ExtensionsData {
-
-    /**
-     * Returns the type definition at this level.
-     */
-    TypeDefinition getTypeDefinition();
-
-    /**
-     * Returns direct children of the type definition at this level.
-     */
-    List<TypeDefinitionContainer> getChildren();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionList.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionList.java
deleted file mode 100644
index 7d2c157..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeDefinitionList.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * List of type definitions.
- */
-public interface TypeDefinitionList extends ExtensionsData {
-
-    /**
-     * Returns the list of type definitions.
-     */
-    List<TypeDefinition> getList();
-
-    /**
-     * Returns whether there more type definitions or not.
-     * 
-     * @return {@code true} if there are more type definitions, {@code false} if
-     *         there are no more type definitions, {@code null} if it's unknown
-     */
-    Boolean hasMoreItems();
-
-    /**
-     * Returns the total number of type definitions.
-     * 
-     * @return total number of type definitions or {@code null} if the total
-     *         number is unknown
-     */
-    BigInteger getNumItems();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeMutability.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeMutability.java
deleted file mode 100644
index 758e34f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/TypeMutability.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.definitions;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * Type mutability flags.
- * 
- * @cmis 1.1
- */
-public interface TypeMutability extends ExtensionsData {
-
-    /**
-     * Indicates if a sub type of this type can be created.
-     * 
-     * @return <code>true</code> if a sub type can be created,
-     *         <code>false</code> otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canCreate();
-
-    /**
-     * Indicates if this type can be updated.
-     * 
-     * @return <code>true</code> if this type can be updated, <code>false</code>
-     *         otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canUpdate();
-
-    /**
-     * Indicates if this type can be deleted.
-     * 
-     * @return <code>true</code> if this type can be deleted, <code>false</code>
-     *         otherwise
-     * 
-     * @cmis 1.1
-     */
-    Boolean canDelete();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/package.html b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/package.html
deleted file mode 100644
index 00e00bc..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/definitions/package.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-</head>
-<body>
-OpenCMIS type and property definition interfaces.
-<p>This package contains the interfaces for type and property
-definitions.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/AclPropagation.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/AclPropagation.java
deleted file mode 100644
index 7007ba3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/AclPropagation.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * ACL Propagation Enum.
- */
-public enum AclPropagation {
-
-    REPOSITORYDETERMINED("repositorydetermined"), OBJECTONLY("objectonly"), PROPAGATE("propagate");
-    private final String value;
-
-    AclPropagation(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static AclPropagation fromValue(String v) {
-        for (AclPropagation c : AclPropagation.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Action.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Action.java
deleted file mode 100644
index e53a8e7..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Action.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-public enum Action {
-
-    // important: do not change the order of these values!
-    /** @cmis 1.0 */
-    CAN_DELETE_OBJECT("canDeleteObject"), //
-    /** @cmis 1.0 */
-    CAN_UPDATE_PROPERTIES("canUpdateProperties"), //
-    /** @cmis 1.0 */
-    CAN_GET_FOLDER_TREE("canGetFolderTree"), //
-    /** @cmis 1.0 */
-    CAN_GET_PROPERTIES("canGetProperties"), //
-    /** @cmis 1.0 */
-    CAN_GET_OBJECT_RELATIONSHIPS("canGetObjectRelationships"), //
-    /** @cmis 1.0 */
-    CAN_GET_OBJECT_PARENTS("canGetObjectParents"), //
-    /** @cmis 1.0 */
-    CAN_GET_FOLDER_PARENT("canGetFolderParent"), //
-    /** @cmis 1.0 */
-    CAN_GET_DESCENDANTS("canGetDescendants"), //
-    /** @cmis 1.0 */
-    CAN_MOVE_OBJECT("canMoveObject"), //
-    /** @cmis 1.0 */
-    CAN_DELETE_CONTENT_STREAM("canDeleteContentStream"), //
-    /** @cmis 1.0 */
-    CAN_CHECK_OUT("canCheckOut"), //
-    /** @cmis 1.0 */
-    CAN_CANCEL_CHECK_OUT("canCancelCheckOut"), //
-    /** @cmis 1.0 */
-    CAN_CHECK_IN("canCheckIn"), //
-    /** @cmis 1.0 */
-    CAN_SET_CONTENT_STREAM("canSetContentStream"), //
-    /** @cmis 1.0 */
-    CAN_GET_ALL_VERSIONS("canGetAllVersions"), //
-    /** @cmis 1.0 */
-    CAN_ADD_OBJECT_TO_FOLDER("canAddObjectToFolder"), //
-    /** @cmis 1.0 */
-    CAN_REMOVE_OBJECT_FROM_FOLDER("canRemoveObjectFromFolder"), //
-    /** @cmis 1.0 */
-    CAN_GET_CONTENT_STREAM("canGetContentStream"), //
-    /** @cmis 1.0 */
-    CAN_APPLY_POLICY("canApplyPolicy"), //
-    /** @cmis 1.0 */
-    CAN_GET_APPLIED_POLICIES("canGetAppliedPolicies"), //
-    /** @cmis 1.0 */
-    CAN_REMOVE_POLICY("canRemovePolicy"), //
-    /** @cmis 1.0 */
-    CAN_GET_CHILDREN("canGetChildren"), //
-    /** @cmis 1.0 */
-    CAN_CREATE_DOCUMENT("canCreateDocument"), //
-    /** @cmis 1.0 */
-    CAN_CREATE_FOLDER("canCreateFolder"), //
-    /** @cmis 1.0 */
-    CAN_CREATE_RELATIONSHIP("canCreateRelationship"), //
-    /** @cmis 1.1 */
-    CAN_CREATE_ITEM("canCreateItem"), //
-    /** @cmis 1.0 */
-    CAN_DELETE_TREE("canDeleteTree"), //
-    /** @cmis 1.0 */
-    CAN_GET_RENDITIONS("canGetRenditions"), //
-    /** @cmis 1.0 */
-    CAN_GET_ACL("canGetACL"), //
-    /** @cmis 1.0 */
-    CAN_APPLY_ACL("canApplyACL");
-
-    private final String value;
-
-    Action(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static Action fromValue(String v) {
-        for (Action c : Action.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BaseTypeId.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BaseTypeId.java
deleted file mode 100644
index af003ad..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BaseTypeId.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Base Object Type IDs Enum.
- */
-public enum BaseTypeId {
-
-    /** @cmis 1.0 */
-    CMIS_DOCUMENT("cmis:document"), //
-    /** @cmis 1.0 */
-    CMIS_FOLDER("cmis:folder"), //
-    /** @cmis 1.0 */
-    CMIS_RELATIONSHIP("cmis:relationship"), //
-    /** @cmis 1.0 */
-    CMIS_POLICY("cmis:policy"), //
-    /** @cmis 1.1 */
-    CMIS_ITEM("cmis:item"), //
-    /** @cmis 1.1 */
-    CMIS_SECONDARY("cmis:secondary"); //
-
-    private final String value;
-
-    BaseTypeId(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static BaseTypeId fromValue(String v) {
-        for (BaseTypeId c : BaseTypeId.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BindingType.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BindingType.java
deleted file mode 100644
index 30f0f79..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/BindingType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Binding Type Enum.
- */
-public enum BindingType {
-
-    WEBSERVICES("webservices"), ATOMPUB("atompub"), BROWSER("browser"), LOCAL("local"), CUSTOM("custom");
-
-    private final String value;
-
-    BindingType(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static BindingType fromValue(String v) {
-        for (BindingType c : BindingType.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityAcl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityAcl.java
deleted file mode 100644
index 618402c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityAcl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: ACL.
- */
-public enum CapabilityAcl {
-
-    NONE("none"), DISCOVER("discover"), MANAGE("manage");
-    private final String value;
-
-    CapabilityAcl(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityAcl fromValue(String v) {
-        for (CapabilityAcl c : CapabilityAcl.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityChanges.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityChanges.java
deleted file mode 100644
index f9604e3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityChanges.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: Changes.
- */
-public enum CapabilityChanges {
-
-    NONE("none"), OBJECTIDSONLY("objectidsonly"), PROPERTIES("properties"), ALL("all");
-    private final String value;
-
-    CapabilityChanges(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityChanges fromValue(String v) {
-        for (CapabilityChanges c : CapabilityChanges.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityContentStreamUpdates.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityContentStreamUpdates.java
deleted file mode 100644
index 636b195..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityContentStreamUpdates.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: Content Stream Updates.
- */
-public enum CapabilityContentStreamUpdates {
-
-    ANYTIME("anytime"), PWCONLY("pwconly"), NONE("none");
-    private final String value;
-
-    CapabilityContentStreamUpdates(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityContentStreamUpdates fromValue(String v) {
-        for (CapabilityContentStreamUpdates c : CapabilityContentStreamUpdates.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityJoin.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityJoin.java
deleted file mode 100644
index a514bf1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityJoin.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: Join.
- */
-public enum CapabilityJoin {
-
-    NONE("none"), INNERONLY("inneronly"), INNERANDOUTER("innerandouter");
-    private final String value;
-
-    CapabilityJoin(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityJoin fromValue(String v) {
-        for (CapabilityJoin c : CapabilityJoin.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityOrderBy.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityOrderBy.java
deleted file mode 100644
index ff36b90..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityOrderBy.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-public enum CapabilityOrderBy {
-
-    NONE("none"), COMMON("common"), CUSTOM("custom");
-    private final String value;
-
-    CapabilityOrderBy(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityOrderBy fromValue(String v) {
-        for (CapabilityOrderBy c : CapabilityOrderBy.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityQuery.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityQuery.java
deleted file mode 100644
index 5a49b99..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityQuery.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: Query.
- */
-public enum CapabilityQuery {
-
-    NONE("none"), METADATAONLY("metadataonly"), FULLTEXTONLY("fulltextonly"), BOTHSEPARATE("bothseparate"), BOTHCOMBINED(
-            "bothcombined");
-    private final String value;
-
-    CapabilityQuery(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityQuery fromValue(String v) {
-        for (CapabilityQuery c : CapabilityQuery.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityRenditions.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityRenditions.java
deleted file mode 100644
index 8c3a195..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CapabilityRenditions.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Capability Enum: Rendition.
- */
-public enum CapabilityRenditions {
-
-    NONE("none"), READ("read");
-    private final String value;
-
-    CapabilityRenditions(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CapabilityRenditions fromValue(String v) {
-        for (CapabilityRenditions c : CapabilityRenditions.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Cardinality.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Cardinality.java
deleted file mode 100644
index 1356e62..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Cardinality.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Cardinality Enum.
- */
-public enum Cardinality {
-
-    SINGLE("single"), MULTI("multi");
-    private final String value;
-
-    Cardinality(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static Cardinality fromValue(String v) {
-        for (Cardinality c : Cardinality.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ChangeType.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ChangeType.java
deleted file mode 100644
index 8b19c79..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ChangeType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-public enum ChangeType {
-
-    CREATED("created"), UPDATED("updated"), DELETED("deleted"), SECURITY("security");
-    private final String value;
-
-    ChangeType(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static ChangeType fromValue(String v) {
-        for (ChangeType c : ChangeType.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CmisVersion.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CmisVersion.java
deleted file mode 100644
index 8110a44..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/CmisVersion.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-public enum CmisVersion {
-
-    CMIS_1_0("1.0"), CMIS_1_1("1.1");
-    private final String value;
-
-    CmisVersion(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static CmisVersion fromValue(String v) {
-        for (CmisVersion c : CmisVersion.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ContentStreamAllowed.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ContentStreamAllowed.java
deleted file mode 100644
index e3fe0b3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ContentStreamAllowed.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Content Stream Allowed Enum.
- */
-public enum ContentStreamAllowed {
-
-    NOTALLOWED("notallowed"), ALLOWED("allowed"), REQUIRED("required");
-    private final String value;
-
-    ContentStreamAllowed(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static ContentStreamAllowed fromValue(String v) {
-        for (ContentStreamAllowed c : ContentStreamAllowed.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeFormat.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeFormat.java
deleted file mode 100644
index 8922496..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeFormat.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * DateTime Format Enum for the browser binding.
- */
-public enum DateTimeFormat {
-
-    SIMPLE("simple"), EXTENDED("extended");
-    private final String value;
-
-    DateTimeFormat(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static DateTimeFormat fromValue(String v) {
-        for (DateTimeFormat c : DateTimeFormat.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeResolution.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeResolution.java
deleted file mode 100644
index 5818030..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DateTimeResolution.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Date Time Resolution Enum.
- */
-public enum DateTimeResolution {
-
-    YEAR("year"), DATE("date"), TIME("time");
-    private final String value;
-
-    DateTimeResolution(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static DateTimeResolution fromValue(String v) {
-        for (DateTimeResolution c : DateTimeResolution.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DecimalPrecision.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DecimalPrecision.java
deleted file mode 100644
index 379ffd8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/DecimalPrecision.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-import java.math.BigInteger;
-
-/**
- * Decimal Precision Enum.
- */
-public enum DecimalPrecision {
-
-    BITS32(BigInteger.valueOf(32)), BITS64(BigInteger.valueOf(64));
-    private final BigInteger value;
-
-    DecimalPrecision(BigInteger v) {
-        value = v;
-    }
-
-    public BigInteger value() {
-        return value;
-    }
-
-    public static DecimalPrecision fromValue(BigInteger v) {
-        for (DecimalPrecision c : DecimalPrecision.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v.toString());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ExtensionLevel.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ExtensionLevel.java
deleted file mode 100644
index 6d4e75f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/ExtensionLevel.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-public enum ExtensionLevel {
-
-    OBJECT("object"), //
-    PROPERTIES("properties"), //
-    ALLOWABLE_ACTIONS("allowableActions"), //
-    ACL("acl"), //
-    POLICIES("policies"), //
-    CHANGE_EVENT("changeEvent");
-    private final String value;
-
-    ExtensionLevel(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static ExtensionLevel fromValue(String v) {
-        for (ExtensionLevel c : ExtensionLevel.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/IncludeRelationships.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/IncludeRelationships.java
deleted file mode 100644
index 3c6b532..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/IncludeRelationships.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Include Relationships Enum.
- */
-public enum IncludeRelationships {
-
-    NONE("none"), SOURCE("source"), TARGET("target"), BOTH("both");
-    private final String value;
-
-    IncludeRelationships(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static IncludeRelationships fromValue(String v) {
-        for (IncludeRelationships c : IncludeRelationships.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/PropertyType.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/PropertyType.java
deleted file mode 100644
index 81333e4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/PropertyType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Property Type Enum. 
- */
-public enum PropertyType {
-
-    BOOLEAN("boolean"), ID("id"), INTEGER("integer"), DATETIME("datetime"), DECIMAL("decimal"), HTML("html"), STRING(
-            "string"), URI("uri");
-    private final String value;
-
-    PropertyType(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static PropertyType fromValue(String v) {
-        for (PropertyType c : PropertyType.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/RelationshipDirection.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/RelationshipDirection.java
deleted file mode 100644
index 0927975..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/RelationshipDirection.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Relationship Direction Enum.
- */
-public enum RelationshipDirection {
-
-    SOURCE("source"), TARGET("target"), EITHER("either");
-    private final String value;
-
-    RelationshipDirection(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static RelationshipDirection fromValue(String v) {
-        for (RelationshipDirection c : RelationshipDirection.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/SupportedPermissions.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/SupportedPermissions.java
deleted file mode 100644
index 96870a2..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/SupportedPermissions.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * ACL Capability Enum: Supported Permissions.
- */
-public enum SupportedPermissions {
-
-    BASIC("basic"), REPOSITORY("repository"), BOTH("both");
-    private final String value;
-
-    SupportedPermissions(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static SupportedPermissions fromValue(String v) {
-        for (SupportedPermissions c : SupportedPermissions.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/UnfileObject.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/UnfileObject.java
deleted file mode 100644
index c4fc0aa..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/UnfileObject.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Unfile Object Enum.
- */
-public enum UnfileObject {
-
-    UNFILE("unfile"), //
-    DELETESINGLEFILED("deletesinglefiled"), //
-    DELETE("delete");
-    private final String value;
-
-    UnfileObject(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static UnfileObject fromValue(String v) {
-        for (UnfileObject c : UnfileObject.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Updatability.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Updatability.java
deleted file mode 100644
index 4ac2bab..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/Updatability.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * Updatability Enum.
- */
-public enum Updatability {
-
-    READONLY("readonly"), READWRITE("readwrite"), WHENCHECKEDOUT("whencheckedout"), ONCREATE("oncreate");
-    private final String value;
-
-    Updatability(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static Updatability fromValue(String v) {
-        for (Updatability c : Updatability.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/VersioningState.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/VersioningState.java
deleted file mode 100644
index 990378f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/VersioningState.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.enums;
-
-/**
- * VersioningState Enum.
- */
-public enum VersioningState {
-
-    NONE("none"), MAJOR("major"), MINOR("minor"), CHECKEDOUT("checkedout");
-    private final String value;
-
-    VersioningState(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static VersioningState fromValue(String v) {
-        for (VersioningState c : VersioningState.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/package.html b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/package.html
deleted file mode 100644
index 078e430..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/enums/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-</head>
-<body>
-OpenCMIS enums.
-<p>This package contains all enums used by OpenCMIS.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisBaseException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisBaseException.java
deleted file mode 100644
index 2f9abc9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisBaseException.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * Base exception class for all CMIS exceptions.
- */
-public abstract class CmisBaseException extends RuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    /** Error code used by the Web Services binding. */
-    private BigInteger code = BigInteger.ZERO;
-
-    /** Content the of the error page returned by the AtomPub server. */
-    private String errorContent;
-
-    /**
-     * Default constructor.
-     */
-    protected CmisBaseException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    protected CmisBaseException(String message, BigInteger code, Throwable cause) {
-        super(message, cause);
-        this.code = code;
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    protected CmisBaseException(String message, String errorContent, Throwable cause) {
-        super(message, cause);
-        this.errorContent = errorContent;
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    protected CmisBaseException(String message, BigInteger code) {
-        super(message);
-        this.code = code;
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    protected CmisBaseException(String message, BigInteger code, String errorContent) {
-        super(message);
-        this.code = code;
-        this.errorContent = errorContent;
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    protected CmisBaseException(String message, String errorContent) {
-        super(message);
-        this.errorContent = errorContent;
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    protected CmisBaseException(String message, Throwable cause) {
-        this(message, (BigInteger) null, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    protected CmisBaseException(String message) {
-        this(message, (BigInteger) null);
-    }
-
-    /**
-     * Returns the error code sent by the CMIS repository (Web Services binding
-     * only).
-     * 
-     * @return error code or {@code null} if the CMIS repository didn't send an
-     *         error code or the binding doesn't support error codes.
-     */
-    public BigInteger getCode() {
-        return code;
-    }
-
-    /**
-     * Returns the content of the error page sent by the web server.
-     * 
-     * @return the content of the error page or {@code null} if the server
-     *         didn't send text content.
-     */
-    public String getErrorContent() {
-        return errorContent;
-    }
-
-    /**
-     * Returns the name of the exception as defined in the CMIS specification.
-     */
-    public abstract String getExceptionName();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConnectionException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConnectionException.java
deleted file mode 100644
index c8c8905..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConnectionException.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS Connection Exception.
- */
-public class CmisConnectionException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "connection";
-
-    /**
-     * Default constructor.
-     */
-    public CmisConnectionException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisConnectionException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisConnectionException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisConnectionException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisConnectionException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisConnectionException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisConnectionException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisConnectionException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConstraintException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConstraintException.java
deleted file mode 100644
index 1a0fcde..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisConstraintException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS Constraint Exception.
- * <p>
- * Intent: The operation violates a repository- or object-level constraint
- * defined in the CMIS domain model.
- */
-public class CmisConstraintException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "constraint";
-
-    /**
-     * Default constructor.
-     */
-    public CmisConstraintException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisConstraintException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisConstraintException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisConstraintException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisConstraintException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisConstraintException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisConstraintException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisConstraintException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisContentAlreadyExistsException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisContentAlreadyExistsException.java
deleted file mode 100644
index 0662be0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisContentAlreadyExistsException.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS ContentAlreadyExists Exception.
- * <p>
- * Intent: The operation attempts to set the content stream for a document that
- * already has a content stream without explicitly specifying the
- * "overwriteFlag" parameter.
- */
-public class CmisContentAlreadyExistsException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "contentAlreadyExists";
-
-    /**
-     * Default constructor.
-     */
-    public CmisContentAlreadyExistsException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisContentAlreadyExistsException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisContentAlreadyExistsException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisContentAlreadyExistsException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisContentAlreadyExistsException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisContentAlreadyExistsException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisContentAlreadyExistsException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisContentAlreadyExistsException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisFilterNotValidException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisFilterNotValidException.java
deleted file mode 100644
index c227e96..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisFilterNotValidException.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS FilterNotValid Exception.
- * <p>
- * Intent: The property filter or rendition filter input to the operation is not
- * valid. The repository SHOULD NOT throw this exception if the filter syntax is
- * correct but one or more elements in the filter is unknown. Unknown elements
- * SHOULD be ignored.
- */
-public class CmisFilterNotValidException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "filterNotValid";
-
-    /**
-     * Default constructor.
-     */
-    public CmisFilterNotValidException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisFilterNotValidException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisFilterNotValidException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisFilterNotValidException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisFilterNotValidException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisFilterNotValidException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisFilterNotValidException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisFilterNotValidException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisInvalidArgumentException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisInvalidArgumentException.java
deleted file mode 100644
index 07ee867..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisInvalidArgumentException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS InvalidArgument Exception.
- * <p>
- * Cause: One or more of the input parameters to the service method is missing
- * or invalid.
- */
-public class CmisInvalidArgumentException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "invalidArgument";
-
-    /**
-     * Default constructor.
-     */
-    public CmisInvalidArgumentException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisInvalidArgumentException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisInvalidArgumentException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisInvalidArgumentException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisInvalidArgumentException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisInvalidArgumentException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisInvalidArgumentException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisInvalidArgumentException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNameConstraintViolationException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNameConstraintViolationException.java
deleted file mode 100644
index 21eceed..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNameConstraintViolationException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS NameConstraintViolation Exception.
- * <p>
- * Intent: The repository is not able to store the object that the user is
- * creating/updating due to a name constraint violation.
- */
-public class CmisNameConstraintViolationException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "nameConstraintViolation";
-
-    /**
-     * Default constructor.
-     */
-    public CmisNameConstraintViolationException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisNameConstraintViolationException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisNameConstraintViolationException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisNameConstraintViolationException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisNameConstraintViolationException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisNameConstraintViolationException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisNameConstraintViolationException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisNameConstraintViolationException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNotSupportedException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNotSupportedException.java
deleted file mode 100644
index 7081bcc..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisNotSupportedException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS NotSupported Exception.
- * <p>
- * Cause: The service method invoked requires an optional capability not
- * supported by the repository.
- */
-public class CmisNotSupportedException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "notSupported";
-
-    /**
-     * Default constructor.
-     */
-    public CmisNotSupportedException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisNotSupportedException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisNotSupportedException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisNotSupportedException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisNotSupportedException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisNotSupportedException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisNotSupportedException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisNotSupportedException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisObjectNotFoundException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisObjectNotFoundException.java
deleted file mode 100644
index 302cfc1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisObjectNotFoundException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS ObjectNotFound Exception.
- * <p>
- * Cause: The service call has specified an object, an object-type or a
- * repository that does not exist.
- */
-public class CmisObjectNotFoundException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "objectNotFound";
-
-    /**
-     * Default constructor.
-     */
-    public CmisObjectNotFoundException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisObjectNotFoundException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisObjectNotFoundException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisObjectNotFoundException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisObjectNotFoundException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisObjectNotFoundException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisObjectNotFoundException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisObjectNotFoundException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisPermissionDeniedException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisPermissionDeniedException.java
deleted file mode 100644
index d30b0e6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisPermissionDeniedException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS PermissionDenied Exception.
- * <p>
- * Cause: The caller of the service method does not have sufficient permissions
- * to perform the operation.
- */
-public class CmisPermissionDeniedException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "permissionDenied";
-
-    /**
-     * Default constructor.
-     */
-    public CmisPermissionDeniedException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisPermissionDeniedException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisPermissionDeniedException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisPermissionDeniedException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisPermissionDeniedException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisPermissionDeniedException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisPermissionDeniedException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisPermissionDeniedException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisProxyAuthenticationException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisProxyAuthenticationException.java
deleted file mode 100644
index d82f038..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisProxyAuthenticationException.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * Proxy authentication exception.
- * 
- * (This is exception is not defined in the CMIS specification and is therefore
- * derived from {@link CmisRuntimeException}.)
- */
-public class CmisProxyAuthenticationException extends CmisRuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Default constructor.
-     */
-    public CmisProxyAuthenticationException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisProxyAuthenticationException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisProxyAuthenticationException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisProxyAuthenticationException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisProxyAuthenticationException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisProxyAuthenticationException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisProxyAuthenticationException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisProxyAuthenticationException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisRuntimeException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisRuntimeException.java
deleted file mode 100644
index 1dbfefa..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisRuntimeException.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS Runtime Exception.
- * <p>
- * Cause: Any other cause not expressible by another CMIS exception.
- */
-public class CmisRuntimeException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "runtime";
-
-    /**
-     * Default constructor.
-     */
-    public CmisRuntimeException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisRuntimeException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisRuntimeException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisRuntimeException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisRuntimeException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisRuntimeException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisRuntimeException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisRuntimeException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisServiceUnavailableException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisServiceUnavailableException.java
deleted file mode 100644
index f3abd9a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisServiceUnavailableException.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-public class CmisServiceUnavailableException extends CmisRuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Default constructor.
-     */
-    public CmisServiceUnavailableException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisServiceUnavailableException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisServiceUnavailableException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisServiceUnavailableException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisServiceUnavailableException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisServiceUnavailableException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisServiceUnavailableException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisServiceUnavailableException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStorageException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStorageException.java
deleted file mode 100644
index 97e07ef..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStorageException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS Storage Exception.
- * <p>
- * Intent: The repository is not able to store the object that the user is
- * creating/updating due to an internal storage problem.
- */
-public class CmisStorageException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "storage";
-
-    /**
-     * Default constructor.
-     */
-    public CmisStorageException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisStorageException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisStorageException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisStorageException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisStorageException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisStorageException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisStorageException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisStorageException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStreamNotSupportedException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStreamNotSupportedException.java
deleted file mode 100644
index f8fbe46..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisStreamNotSupportedException.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS StreamNotSupported Exception.
- * <p>
- * Intent: The operation is attempting to get or set a content stream for a
- * document whose object-type specifies that a content stream is not allowed for
- * document's of that type.
- */
-public class CmisStreamNotSupportedException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "streamNotSupported";
-
-    /**
-     * Default constructor.
-     */
-    public CmisStreamNotSupportedException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisStreamNotSupportedException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisStreamNotSupportedException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisStreamNotSupportedException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisStreamNotSupportedException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisStreamNotSupportedException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisStreamNotSupportedException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisStreamNotSupportedException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUnauthorizedException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUnauthorizedException.java
deleted file mode 100644
index 95e4bec..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUnauthorizedException.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * Unauthorized exception.
- * <p>
- * (This is exception is not defined in the CMIS specification and is therefore
- * derived from {@link CmisRuntimeException}.)
- */
-public class CmisUnauthorizedException extends CmisRuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Default constructor.
-     */
-    public CmisUnauthorizedException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisUnauthorizedException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisUnauthorizedException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisUnauthorizedException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisUnauthorizedException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisUnauthorizedException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisUnauthorizedException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisUnauthorizedException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUpdateConflictException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUpdateConflictException.java
deleted file mode 100644
index 41effbe..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisUpdateConflictException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS UpdateConflict Exception.
- * <p>
- * Intent: The operation is attempting to update an object that is no longer
- * current (as determined by the repository).
- */
-public class CmisUpdateConflictException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "updateConflict";
-
-    /**
-     * Default constructor.
-     */
-    public CmisUpdateConflictException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisUpdateConflictException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisUpdateConflictException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisUpdateConflictException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisUpdateConflictException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisUpdateConflictException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisUpdateConflictException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisUpdateConflictException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisVersioningException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisVersioningException.java
deleted file mode 100644
index 91e8e0c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/CmisVersioningException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
-import java.math.BigInteger;
-
-/**
- * CMIS Versioning Exception.
- * <p>
- * Intent: The operation is attempting to perform an action on a non-current
- * version of a document that cannot be performed on a non-current version.
- */
-public class CmisVersioningException extends CmisBaseException {
-
-    private static final long serialVersionUID = 1L;
-    public static final String EXCEPTION_NAME = "versioning";
-
-    /**
-     * Default constructor.
-     */
-    public CmisVersioningException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param cause
-     *            the cause
-     */
-    public CmisVersioningException(String message, BigInteger code, Throwable cause) {
-        super(message, code, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     */
-    public CmisVersioningException(String message, String errorContent) {
-        super(message, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     */
-    public CmisVersioningException(String message, BigInteger code) {
-        super(message, code);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param code
-     *            error code
-     * @param errorContent
-     *            error page content
-     */
-    public CmisVersioningException(String message, BigInteger code, String errorContent) {
-        super(message, code, errorContent);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param errorContent
-     *            error page content
-     * @param cause
-     *            the cause
-     */
-    public CmisVersioningException(String message, String errorContent, Throwable cause) {
-        super(message, errorContent, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     * @param cause
-     *            the cause
-     */
-    public CmisVersioningException(String message, Throwable cause) {
-        super(message, BigInteger.ZERO, cause);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param message
-     *            error message
-     */
-    public CmisVersioningException(String message) {
-        super(message, BigInteger.ZERO);
-    }
-
-    @Override
-    public final String getExceptionName() {
-        return EXCEPTION_NAME;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/package-info.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/package-info.java
deleted file mode 100644
index 64e283a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/exceptions/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * Contains all exceptions used by OpenCMIS.
- */
-package org.apache.chemistry.opencmis.commons.exceptions;
-
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/package-info.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/package-info.java
deleted file mode 100644
index 209278e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * Contains interfaces, classes, exceptions, and constants shared by the client and server implementations.
- */
-package org.apache.chemistry.opencmis.commons;
-
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CallContext.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CallContext.java
deleted file mode 100644
index ef72a04..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CallContext.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.io.File;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-/**
- * An object implementing this interface holds context data of the current call.
- */
-public interface CallContext {
-
-    /** Binding: AtomPub */
-    String BINDING_ATOMPUB = "atompub";
-    /** Binding: Web Services */
-    String BINDING_WEBSERVICES = "webservices";
-    /** Binding: Browser */
-    String BINDING_BROWSER = "browser";
-    /** Binding: Local */
-    String BINDING_LOCAL = "local";
-
-    /** Key: CMIS version (value is a CmisVersion) */
-    String CMIS_VERSION = "cmisVersion";
-
-    /** Key: repository id */
-    String REPOSITORY_ID = "repositoryId";
-    /** Key: username */
-    String USERNAME = "username";
-    /** Key: password */
-    String PASSWORD = "password";
-    /** Key: local */
-    String LOCALE = "locale";
-    /** Key: offset (value is a BigInteger) */
-    String OFFSET = "offset";
-    /** Key: length (value is a BigInteger) */
-    String LENGTH = "length";
-    String LOCALE_ISO639_LANGUAGE = "language";
-    String LOCALE_ISO3166_COUNTRY = "country";
-
-    /** Key: servlet context (value is a ServletContext) */
-    String SERVLET_CONTEXT = "servletContext";
-    /** Key: servlet request (value is a HttpServletRequest) */
-    String HTTP_SERVLET_REQUEST = "httpServletRequest";
-    /** Key: servlet response (value is a HttpServletResponse) */
-    String HTTP_SERVLET_RESPONSE = "httpServletResponse";
-
-    /** Key: temp directory */
-    String TEMP_DIR = "tempDir";
-    /** Key: memory threshold (values is an Integer) */
-    String MEMORY_THRESHOLD = "memoryThreshold";
-    /** Key: max content size (values is a Long) */
-    String MAX_CONTENT_SIZE = "maxContentSize";
-    /** Key: encrypt temp files (values is a Boolean) */
-    String ENCRYPT_TEMP_FILE = "encryptTempFiles";
-    /** Key: factory for threshold streams (value is a TempStoreOutputStreamFactory) */
-    String STREAM_FACTORY = "streamFactory";
-    
-    /**
-     * Returns the binding. Usually it returns
-     * {@link CallContext#BINDING_ATOMPUB},
-     * {@link CallContext#BINDING_WEBSERVICES},
-     * {@link CallContext#BINDING_BROWSER} or {@link CallContext#BINDING_LOCAL}.
-     */
-    String getBinding();
-
-    /**
-     * Returns if <code>true</code> object infos can improve the performance.
-     */
-    boolean isObjectInfoRequired();
-
-    /**
-     * Returns context data by key.
-     * 
-     * @param key
-     *            the key
-     * @return the data if the key is valid, <code>null</code> otherwise
-     */
-    Object get(String key);
-
-    /**
-     * Returns the CMIS version.
-     */
-    CmisVersion getCmisVersion();
-
-    /**
-     * Returns the repository id.
-     */
-    String getRepositoryId();
-
-    /**
-     * Returns the user name.
-     */
-    String getUsername();
-
-    /**
-     * Returns the password.
-     */
-    String getPassword();
-
-    /**
-     * Returns the locale.
-     */
-    String getLocale();
-
-    /**
-     * Returns the content offset if set, <code>null</code> otherwise
-     */
-    BigInteger getOffset();
-
-    /**
-     * Returns the content length if set, <code>null</code> otherwise
-     */
-    BigInteger getLength();
-
-    /**
-     * Returns the temp directory.
-     */
-    File getTempDirectory();
-
-    /**
-     * Returns if temp files should be encrypted.
-     */
-    boolean encryptTempFiles();
-
-    /**
-     * Returns the memory threshold.
-     */
-    int getMemoryThreshold();
-
-    /**
-     * Returns the may size of content.
-     */
-    long getMaxContentSize();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisService.java
deleted file mode 100644
index 5d0035d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisService.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-
-/**
- * OpenCMIS server interface.
- * 
- * <p>
- * <em>
- * See CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- * 
- * <p>
- * This interface adds a few more operations to the operation set defined by
- * CMIS to address binding specific requirements.
- * </p>
- */
-public interface CmisService extends RepositoryService, NavigationService, ObjectService, VersioningService,
-        DiscoveryService, MultiFilingService, RelationshipService, AclService, PolicyService {
-
-    /**
-     * Creates a new document, folder, policy, or item.
-     * 
-     * The property "cmis:objectTypeId" defines the type and implicitly the base
-     * type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that MUST be applied to the newly created
-     *            object
-     * @param folderId
-     *            <em>(optional)</em> if specified, the identifier for the
-     *            folder that MUST be the parent folder for the newly created
-     *            object
-     * @param contentStream
-     *            <em>(optional)</em> if the object to create is a document
-     *            object, the content stream that MUST be stored for the newly
-     *            created document object
-     * @param versioningState
-     *            <em>(optional)</em> if the object to create is a document
-     *            object, it specifies what the versioning state of the newly
-     *            created object MUST be (default is
-     *            {@link VersioningState#MAJOR})
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that MUST be applied
-     *            to the newly created object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that MUST be added to the
-     *            newly created object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that MUST be removed from
-     *            the newly created object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension);
-
-    /**
-     * Deletes an object or cancels a check out.
-     * 
-     * For the Web Services binding this is always an object deletion. For the
-     * AtomPub it depends on the referenced object. If it is a checked out
-     * document then the check out must be canceled. If the object is not a
-     * checked out document then the object must be deleted.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param allVersions
-     *            <em>(optional)</em> If <code>true</code> then delete all
-     *            versions of the document, otherwise delete only the document
-     *            object specified (default is <code>true</code>)
-     */
-    void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension);
-
-    /**
-     * Applies a new ACL to an object.
-     * 
-     * Since it is not possible to transmit an "add ACL" and a "remove ACL" via
-     * AtomPub, the merging has to be done the client side. The ACEs provided
-     * here is supposed to the new complete ACL.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param aces
-     *            the ACEs that should replace the current ACL of the object
-     * @param aclPropagation
-     *            <em>(optional)</em> specifies how ACEs should be handled
-     *            (default is {@link AclPropagation#REPOSITORYDETERMINED})
-     */
-    Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation);
-
-    /**
-     * Returns the {@link ObjectInfo} of the given object id or
-     * <code>null</code> if no object info exists.
-     * 
-     * Only AtomPub requests will require object infos.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     */
-    ObjectInfo getObjectInfo(String repositoryId, String objectId);
-
-    /**
-     * Signals that this object will not be used anymore and resources can
-     * released.
-     */
-    void close();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisServiceFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisServiceFactory.java
deleted file mode 100644
index 9d7646a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/CmisServiceFactory.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.io.File;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-
-/**
- * Factory for {@link CmisService} objects.
- */
-public interface CmisServiceFactory {
-
-    /**
-     * Initializes the factory instance.
-     */
-    void init(Map<String, String> parameters);
-
-    /**
-     * Cleans up the the factory instance.
-     */
-    void destroy();
-
-    /**
-     * Returns a {@link CmisService} object for the given {@link CallContext}.
-     * 
-     * When the {@link CmisService} object is not longer needed
-     * {@link CmisService#close()} will be called.
-     * 
-     * @param context
-     *            the call context
-     * 
-     * @return a {@link CmisService} instance, never {@code null}
-     */
-    CmisService getService(CallContext context);
-
-    /**
-     * Returns the absolute path of the directory that should be used for
-     * temporary files.
-     * 
-     * @return absolute path of temp directory
-     */
-    File getTempDirectory();
-
-    /**
-     * Indicates if temporary files should be encrypted.
-     * 
-     * @return {@code true} if temporary files should be encrypted,
-     *         {@code false} otherwise
-     * 
-     * @see CmisServiceFactory#getTempDirectory()
-     */
-    boolean encryptTempFiles();
-
-    /**
-     * Returns up to which size content should be kept in memory. Documents
-     * bigger than this threshold will be cached in a temporary directory.
-     * 
-     * @return the threshold in bytes
-     * 
-     * @see CmisServiceFactory#getTempDirectory()
-     */
-    int getMemoryThreshold();
-
-    /**
-     * Returns the maximal content size in bytes. If a client provides content
-     * bigger than that, a {@link CmisConstraintException} is thrown.
-     * 
-     * @return the max size in bytes or -1 to disable the size check
-     */
-    long getMaxContentSize();
-
-    /**
-     * Returns a {@link TempStoreOutputStream} object for the given
-     * {@link CallContext}.
-     * 
-     * This method is only called for the AtomPub and the Browser binding
-     * requests. The Web Services binding always used temporary files (see
-     * {@link #getTempDirectory()}).
-     * 
-     * If {@code null} is returned, a default implementation that stores the
-     * document content in temporary files is used (see
-     * {@link #getTempDirectory()}).
-     * 
-     * @param repositoryId
-     *            the repository ID or {@code null} if the repository ID is
-     *            unknown
-     * 
-     * @return a {@link TempStoreOutputStream} instance or {@code null} to use
-     *         the default implementation
-     */
-    TempStoreOutputStream getTempFileOutputStream(String repositoryId);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/LinkInfo.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/LinkInfo.java
deleted file mode 100644
index b2e3235..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/LinkInfo.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-/**
- * This class contains information about an arbitrary Atom link. This data is
- * used to generate the appropriate additional links in AtomPub entries and
- * feeds.
- */
-public interface LinkInfo {
-
-    /**
-     * Returns the link rel attribute.
-     */
-    String getRel();
-
-    /**
-     * Returns the link href attribute.
-     */
-    String getHref();
-
-    /**
-     * Returns the link type attribute.
-     */
-    String getType();
-
-    /**
-     * Returns the link id attribute.
-     */
-    String getId();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/MutableCallContext.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/MutableCallContext.java
deleted file mode 100644
index f565037..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/MutableCallContext.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-/**
- * Mutable CallContext.
- */
-public interface MutableCallContext extends CallContext {
-
-    /**
-     * Adds or replaces an entry
-     * 
-     * @param key
-     *            the entry key
-     * @param value
-     *            the entry object
-     */
-    void put(String key, Object value);
-
-    /**
-     * Removes a parameter.
-     * 
-     * @param key
-     *            the entry key
-     * 
-     * @return the entry object of the removed entry or {@code null} if the
-     *         entry didn't exist
-     */
-    Object remove(String key);
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/NamespaceDefinitions.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/NamespaceDefinitions.java
deleted file mode 100644
index 7c17e31..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/NamespaceDefinitions.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.util.Map;
-
-/**
- * Defines a set of namespaces that are added to the root tag of AtomPub XML
- * responses.
- * 
- * Objects that implement the {@link CmisService} interface may also implement
- * this interface.
- */
-public interface NamespaceDefinitions {
-
-    /**
-     * Returns the namespaces.
-     * 
-     * @return a map of namespaces; key = prefix, value = namespace URI
-     */
-    Map<String, String> getNamespaces();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfo.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfo.java
deleted file mode 100644
index 72fe657..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfo.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * This class contains information about an object. This data is used to
- * generate the appropriate links in AtomPub entries and feeds.
- */
-public interface ObjectInfo {
-
-    /**
-     * Returns the object ID.
-     */
-    String getId();
-
-    /**
-     * Returns an ID for the atom:id tag. This ID must comply with the Atom
-     * specification. If this method returns {@code null}, OpenCMIS generates a
-     * valid ID.
-     */
-    String getAtomId();
-
-    /**
-     * Returns the object name.
-     */
-    String getName();
-
-    /**
-     * Returns the creator.
-     */
-    String getCreatedBy();
-
-    /**
-     * Returns the creation date.
-     */
-    GregorianCalendar getCreationDate();
-
-    /**
-     * Returns the last modification date.
-     */
-    GregorianCalendar getLastModificationDate();
-
-    /**
-     * Returns the type ID.
-     */
-    String getTypeId();
-
-    /**
-     * Returns the base type.
-     */
-    BaseTypeId getBaseType();
-
-    /**
-     * Returns {@code true} if the object is a document and if it is the current
-     * version or it is not versionable, {@code false} otherwise.
-     */
-    boolean isCurrentVersion();
-
-    /**
-     * Returns the version series ID if the object is a document and it is
-     * versionable, {@code null} otherwise.
-     */
-    String getVersionSeriesId();
-
-    /**
-     * Returns the working copy ID if the object is a document and a working
-     * copy exists, {@code null} otherwise.
-     */
-    String getWorkingCopyId();
-
-    /**
-     * Returns the original ID of the working copy if the object is a document
-     * and a working copy, {@code null} otherwise.
-     */
-    String getWorkingCopyOriginalId();
-
-    /**
-     * Returns {@code true} if the object is a document and has content,
-     * {@code false} otherwise.
-     */
-    boolean hasContent();
-
-    /**
-     * Returns the content type of the content if the object is a document and
-     * has content, {@code null} otherwise.
-     */
-    String getContentType();
-
-    /**
-     * Returns the file name of the content if the object is a document and has
-     * content, {@code null} otherwise.
-     */
-    String getFileName();
-
-    /**
-     * Returns rendition information if the object has renditions, {@code null}
-     * otherwise.
-     */
-    List<RenditionInfo> getRenditionInfos();
-
-    /**
-     * Returns {@code true} if the object supports relationships even if no
-     * relationships exist, {@code false} otherwise.
-     */
-    boolean supportsRelationships();
-
-    /**
-     * Returns {@code true} if the object supports policies even if no policies
-     * are applied, {@code false} otherwise.
-     */
-    boolean supportsPolicies();
-
-    /**
-     * Returns {@code true} if the object has an ACL, {@code false} otherwise.
-     */
-    boolean hasAcl();
-
-    /**
-     * Returns {@code true} if the object has at least one parent, {@code false}
-     * otherwise.
-     */
-    boolean hasParent();
-
-    /**
-     * Returns {@code true} if the object is a folder and supports
-     * {@code getDescendants}, {@code false} otherwise.
-     */
-    boolean supportsDescendants();
-
-    /**
-     * Returns {@code true} if the object is a folder and supports
-     * {@code getFolderTree}, {@code false} otherwise.
-     */
-    boolean supportsFolderTree();
-
-    /**
-     * Returns the list of IDs of the relationships that originate from this
-     * object, {@code null} is no such relationships exist.
-     */
-    List<String> getRelationshipSourceIds();
-
-    /**
-     * Returns the list of IDs of the relationships that point to this object,
-     * {@code null} is no such relationships exist.
-     */
-    List<String> getRelationshipTargetIds();
-
-    /**
-     * Returns the full object.
-     */
-    ObjectData getObject();
-
-    /**
-     * Returns the list of additional links related to this object, {@code null}
-     * is no such links exist.
-     */
-    List<LinkInfo> getAdditionalLinks();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfoHandler.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfoHandler.java
deleted file mode 100644
index b2dad65..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ObjectInfoHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-public interface ObjectInfoHandler {
-
-    ObjectInfo getObjectInfo(String repositoryId, String objectId);
-
-    void addObjectInfo(ObjectInfo objectInfo);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ProgressControlCmisService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ProgressControlCmisService.java
deleted file mode 100644
index 4e9c569..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/ProgressControlCmisService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-/**
- * CmisService classes that implement this interface can control whether the
- * server framework continues or stops processing of the request.
- * 
- * The server framework calls {@link #beforeServiceCall()} before the requested
- * service method is called and calls {@link #afterServiceCall()} after the
- * requested service method is called. Both methods return a {@link Progress}
- * enum value. If the return value is {@link Progress#CONTINUE} , the server
- * framework continues processing. If the return value is {@link Progress#STOP},
- * the server framework stops processing.
- * 
- * If the service method throws an exception, {@link #afterServiceCall()} is not
- * called and the server framework or a service wrapper handles the exception.
- * 
- * The effect of stopping the processing is binding specific. <b>Dealing with
- * that requires good knowledge of CMIS, HTTP, and SOAP.</b>
- * 
- * If an AtomPub or Browser Binding request is stopped, the framework doesn't
- * send any HTTP response. It's the responsibility of the {@link CmisService}
- * class or a service wrapper to generate a CMIS compliant HTTP response. If a
- * Web Service Binding request is stopped, an additional MessageHandler must be
- * installed that handles the situation. Otherwise the service sends an invalid
- * response. If a Local Binding request is stopped, the behavior is undefined.
- * Custom binding implementations might not support this interface at all.
- * 
- * Depending on the binding and the service method, the {@link CmisService}
- * object is called multiple times. Only the method requested by the client is
- * accompanied by {@link #beforeServiceCall()} and {@link #afterServiceCall()}
- * calls. The framework might call other service methods before, after, and in
- * between these two methods.
- */
-public interface ProgressControlCmisService extends CmisService {
-
-    public enum Progress {
-        CONTINUE, STOP
-    };
-
-    /**
-     * Called by the server framework before the requested service method is
-     * called.
-     * 
-     * @return {@link Progress#CONTINUE} if the server framework should continue
-     *         processing the request, {@link Progress#STOP} id the server
-     *         framework should stop
-     */
-    Progress beforeServiceCall();
-
-    /**
-     * Called by the server framework after the requested service method has
-     * been called.
-     * 
-     * @return {@link Progress#CONTINUE} if the server framework should continue
-     *         processing the request, {@link Progress#STOP} id the server
-     *         framework should stop
-     */
-    Progress afterServiceCall();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/RenditionInfo.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/RenditionInfo.java
deleted file mode 100644
index 664e561..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/RenditionInfo.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.math.BigInteger;
-
-/**
- * Contains information about a rendition of an object. This data is used to
- * generate the appropriate links in AtomPub entries and feeds.
- */
-public interface RenditionInfo {
-
-    /**
-     * Return the ID of the rendition.
-     * 
-     * @return the rendition ID, not {@code null}
-     */
-    String getId();
-
-    /**
-     * Return the content type of the rendition.
-     * 
-     * @return the MIME type, should not be {@code null}
-     */
-    String getContenType();
-
-    /**
-     * Return the kind of the rendition.
-     * 
-     * @return the rendition kind, may be {@code null}
-     */
-    String getKind();
-
-    /**
-     * Return the title of the rendition.
-     * 
-     * @return the rendition title, may be {@code null}
-     */
-    String getTitle();
-
-    /**
-     * Return the size of the rendition in bytes.
-     * 
-     * @return the rendition size in bytes, may be {@code null} if unknown
-     */
-    BigInteger getLength();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/TempStoreOutputStream.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/TempStoreOutputStream.java
deleted file mode 100644
index d21834e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/TempStoreOutputStream.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.server;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Subclasses of this class are used to store document content for a short
- * period of time.
- * 
- * The OpenCMIS server framework creates such a new stream when it needs to
- * offload document content for a moment. That can happen when a document is
- * created, new content is set for an existing document, or a new document
- * version is created. How and where subclasses of this output stream store the
- * content is not specified.
- * 
- * The {@link #getInputStream()} and {@link #getLength()} methods are not called
- * before all bytes have been written to this output stream and the
- * {@link #close()} method has been called. The {@link #destroy(Throwable)}
- * method can be called at any time and indicates that this stream is not needed
- * anymore and attached resources can be cleaned up.
- */
-public abstract class TempStoreOutputStream extends OutputStream {
-
-    /**
-     * Sets the MIME type of the stream.
-     * 
-     * This method is usually be called once before {@link #getInputStream()} is
-     * called. It might never be called if the MIME type is unknown or multiple
-     * times if previous MIME type detections were inaccurate.
-     * 
-     * @param mimeType
-     *            the MIME type or {@code null} if the MIME type is unknown or
-     *            should be reset to unknown
-     */
-    public abstract void setMimeType(String mimeType);
-
-    /**
-     * Sets the file name.
-     * 
-     * This method is usually be called once before {@link #getInputStream()} is
-     * called. It might never be called if the file name is unknown.
-     * 
-     * @param filename
-     *            the file name or {@code null} if the file name is unknown or
-     *            should be reset to unknown
-     */
-    public abstract void setFileName(String filename);
-
-    /**
-     * Returns an {@link InputStream} that serves the content that has been
-     * provided to this {@link TempStoreOutputStream} instance.
-     * 
-     * If this method is called multiple times, the same {@link InputStream}
-     * object must be returned.
-     * 
-     * Implementations should clean up all attached resources when this stream
-     * is closed.
-     */
-    public abstract InputStream getInputStream() throws IOException;
-
-    /**
-     * Returns the length of the stream in bytes.
-     * 
-     * @return the length of the stream
-     */
-    public abstract long getLength();
-
-    /**
-     * This method is called if the stream has to be released before it is fully
-     * written or read.
-     * 
-     * Implementations should clean up all attached resources.
-     * 
-     * @param cause
-     *            the throwable that caused the call of this method or
-     *            {@code null} if no throwable object is available
-     */
-    public abstract void destroy(Throwable cause);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/package.html b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/package.html
deleted file mode 100644
index 6dcc9c0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/server/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-</head>
-<body>
-OpenCMIS server interfaces.
-<p>This package contains the server interfaces.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AclService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AclService.java
deleted file mode 100644
index 12ef7ad..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AclService.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-
-/**
- * ACL Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface AclService {
-
-    /**
-     * Get the ACL currently applied to the specified object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param onlyBasicPermissions
-     *            <em>(optional)</em> an indicator if only basic permissions
-     *            should be returned (default is <code>true</code>)
-     * @return the ACL of the object
-     */
-    Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension);
-
-    /**
-     * Adds or removes the given ACEs to or from the ACL of the object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param addAces
-     *            <em>(optional)</em> the ACEs to be added
-     * @param removeAces
-     *            <em>(optional)</em> the ACEs to be removed
-     * @param aclPropagation
-     *            <em>(optional)</em> specifies how ACEs should be handled
-     *            (default is {@link AclPropagation#REPOSITORYDETERMINED})
-     * @return the ACL of the object
-     */
-    Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces, AclPropagation aclPropagation,
-            ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AuthenticationProvider.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AuthenticationProvider.java
deleted file mode 100644
index 1eb04e3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/AuthenticationProvider.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSocketFactory;
-import javax.xml.ws.handler.HandlerResolver;
-
-import org.w3c.dom.Element;
-
-/**
- * Authentication provider interface.
- */
-public interface AuthenticationProvider extends Serializable {
-    /**
-     * Returns a set of HTTP headers (key-value pairs) that should be added to a
-     * HTTP call. This will be called by the AtomPub and the Web Services
-     * binding. You might want to check the binding in use before you set the
-     * headers.
-     * 
-     * @param url
-     *            the URL of the HTTP call
-     * 
-     * @return the HTTP headers or <code>null</code> if no additional headers
-     *         should be set
-     */
-    Map<String, List<String>> getHTTPHeaders(String url);
-
-    /**
-     * Returns a SOAP header that should be added to a Web Services call.
-     * 
-     * @param portObject
-     *            the port object
-     * 
-     * @return the SOAP headers or <code>null</code> if no additional headers
-     *         should be set
-     */
-    Element getSOAPHeaders(Object portObject);
-
-    /**
-     * Returns a {@link HandlerResolver} object that provides a list of SOAP
-     * handlers.
-     * 
-     * @return the HandlerResolver or <code>null</code> if no handlers should be
-     *         set
-     */
-    HandlerResolver getHandlerResolver();
-
-    /**
-     * Returns the SSL Socket Factory to be used when creating sockets for HTTPS
-     * connections.
-     * 
-     * @return a {@link SSLSocketFactory} or <code>null</code>
-     */
-    SSLSocketFactory getSSLSocketFactory();
-
-    /**
-     * Returns the Hostname Verifier for HTTPS connections.
-     * 
-     * @return a {@link HostnameVerifier} or <code>null</code>
-     */
-    HostnameVerifier getHostnameVerifier();
-
-    /**
-     * Receives the HTTP headers after a call.
-     * 
-     * @param url
-     *            the URL
-     * @param statusCode
-     *            the status code
-     * @param headers
-     *            the HTTP headers
-     */
-    void putResponseHeaders(String url, int statusCode, Map<String, List<String>> headers);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/BindingsObjectFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/BindingsObjectFactory.java
deleted file mode 100644
index 7977616..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/BindingsObjectFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.PropertyUri;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Factory for CMIS binding objects.
- */
-public interface BindingsObjectFactory {
-
-    Ace createAccessControlEntry(String principal, List<String> permissions);
-
-    Acl createAccessControlList(List<Ace> aces);
-
-    <T> PropertyData<T> createPropertyData(PropertyDefinition<T> pd, Object value);
-
-    PropertyBoolean createPropertyBooleanData(String id, List<Boolean> values);
-
-    PropertyBoolean createPropertyBooleanData(String id, Boolean value);
-
-    PropertyId createPropertyIdData(String id, List<String> values);
-
-    PropertyId createPropertyIdData(String id, String value);
-
-    PropertyInteger createPropertyIntegerData(String id, List<BigInteger> values);
-
-    PropertyInteger createPropertyIntegerData(String id, BigInteger value);
-
-    PropertyDateTime createPropertyDateTimeData(String id, List<GregorianCalendar> values);
-
-    PropertyDateTime createPropertyDateTimeData(String id, GregorianCalendar value);
-
-    PropertyDecimal createPropertyDecimalData(String id, List<BigDecimal> values);
-
-    PropertyDecimal createPropertyDecimalData(String id, BigDecimal value);
-
-    PropertyHtml createPropertyHtmlData(String id, List<String> values);
-
-    PropertyHtml createPropertyHtmlData(String id, String value);
-
-    PropertyString createPropertyStringData(String id, List<String> values);
-
-    PropertyString createPropertyStringData(String id, String value);
-
-    PropertyUri createPropertyUriData(String id, List<String> values);
-
-    PropertyUri createPropertyUriData(String id, String value);
-
-    Properties createPropertiesData(List<PropertyData<?>> properties);
-
-    ContentStream createContentStream(String filename, BigInteger length, String mimetype, InputStream stream);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/CmisBinding.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/CmisBinding.java
deleted file mode 100644
index d4dc059..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/CmisBinding.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-
-/**
- * Entry point for all CMIS binding related operations. It provides access to
- * the service interface objects which are very similar to the CMIS 1.0 domain
- * model.
- * 
- * <p>
- * Each instance of this class represents a session. A session comprises of a
- * connection to one CMIS endpoint over one binding for one particular user and
- * a set of caches. All repositories that are exposed by this CMIS endpoint are
- * accessible in this session. All CMIS operations and extension points are
- * provided if they are supported by the underlying binding.
- * </p>
- */
-public interface CmisBinding extends Serializable {
-
-    /**
-     * Returns the client session id.
-     */
-    String getSessionId();
-
-    /**
-     * Returns the binding type.
-     */
-    BindingType getBindingType();
-
-    /**
-     * Gets a Repository Service interface object.
-     */
-    RepositoryService getRepositoryService();
-
-    /**
-     * Gets a Navigation Service interface object.
-     */
-    NavigationService getNavigationService();
-
-    /**
-     * Gets an Object Service interface object.
-     */
-    ObjectService getObjectService();
-
-    /**
-     * Gets a Versioning Service interface object.
-     */
-    VersioningService getVersioningService();
-
-    /**
-     * Gets a Relationship Service interface object.
-     */
-    RelationshipService getRelationshipService();
-
-    /**
-     * Gets a Discovery Service interface object.
-     */
-    DiscoveryService getDiscoveryService();
-
-    /**
-     * Gets a Multifiling Service interface object.
-     */
-    MultiFilingService getMultiFilingService();
-
-    /**
-     * Gets an ACL Service interface object.
-     */
-    AclService getAclService();
-
-    /**
-     * Gets a Policy Service interface object.
-     */
-    PolicyService getPolicyService();
-
-    /**
-     * Gets a factory for CMIS binding specific objects.
-     */
-    BindingsObjectFactory getObjectFactory();
-
-    /**
-     * Gets the authentication provider.
-     */
-    AuthenticationProvider getAuthenticationProvider();
-
-    /**
-     * Clears all caches of the current CMIS binding session.
-     */
-    void clearAllCaches();
-
-    /**
-     * Clears all caches of the current CMIS binding session that are related to
-     * the given repository.
-     * 
-     * @param repositoryId
-     *            the repository id
-     */
-    void clearRepositoryCache(String repositoryId);
-
-    /**
-     * Releases all resources assigned to this binding instance.
-     */
-    void close();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/DiscoveryService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/DiscoveryService.java
deleted file mode 100644
index bf2d2ae..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/DiscoveryService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * Discovery Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface DiscoveryService {
-
-    /**
-     * Executes a CMIS query statement against the contents of the repository.
-     */
-    ObjectList query(String repositoryId, String statement, Boolean searchAllVersions, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems,
-            BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * Gets a list of content changes.
-     */
-    ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedAclService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedAclService.java
deleted file mode 100644
index cf9a808..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedAclService.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-
-/**
- * Extended ACL Service interface.
- * 
- * This interface has NO equivalent in the CMIS specification. It contains ACL
- * convenience operations for clients and is built on top of the CMIS specified
- * operations.
- * 
- * This interface need not to be implemented by CMIS servers.
- */
-public interface ExtendedAclService {
-
-    /**
-     * Removes the direct ACEs of an object and sets the provided ACEs.
-     * 
-     * The changes are local to the given object and are not propagated to
-     * dependent objects.
-     * 
-     * The effect of this operation depends on the repository and the binding.
-     * It is recommended to process the returned ACL after the method has been
-     * called and check if result matches the expectation.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param aces
-     *            the ACEs
-     * @return the ACL of the object
-     */
-    Acl setAcl(String repositoryId, String objectId, Acl aces);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedHolder.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedHolder.java
deleted file mode 100644
index 881f96a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedHolder.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Holder for IN/OUT parameters that can hold extra values.
- */
-public class ExtendedHolder<T> extends Holder<T> {
-
-    private Map<String, Object> extraValues = new HashMap<String, Object>();
-
-    /**
-     * Constructs a holder with a {@code null} value.
-     */
-    public ExtendedHolder() {
-        super();
-    }
-
-    /**
-     * Constructs a holder with the given value.
-     */
-    public ExtendedHolder(T value) {
-        super(value);
-    }
-
-    /**
-     * Sets an extra value.
-     * 
-     * @param name
-     *            the name of the value
-     * @param value
-     *            the value
-     */
-    public void setExtraValue(String name, Object value) {
-        extraValues.put(name, value);
-    }
-
-    /**
-     * Gets an extra value,
-     * 
-     * @param name
-     *            the name of the value
-     * @return the value or {@code null} if a value with the given name doesn't
-     *         exist
-     */
-    public Object getExtraValue(String name) {
-        return extraValues.get(name);
-    }
-
-    @Override
-    public String toString() {
-        return "ExtendedHolder(" + getValue() + ", " + extraValues.toString() + ")";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedRepositoryService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedRepositoryService.java
deleted file mode 100644
index 1d26e65..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ExtendedRepositoryService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * Extended Repository Service interface.
- * 
- * This interface has NO equivalent in the CMIS specification. It contains
- * repository convenience operations for clients and is built on top of the CMIS
- * specified operations.
- * 
- * This interface need not to be implemented by CMIS servers.
- */
-public interface ExtendedRepositoryService {
-
-    /**
-     * Gets the definition of the specified object type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param typeId
-     *            typeId of an object type specified in the repository
-     * @param useCache
-     *            specifies whether the type definition should be looked up in
-     *            the type definition cache first or not
-     */
-    TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension, boolean useCache);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/Holder.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/Holder.java
deleted file mode 100644
index 21eeca9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/Holder.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-/**
- * Holder for IN/OUT parameters.
- */
-public class Holder<T> {
-
-    private T value;
-
-    /**
-     * Constructs a holder with a {@code null} value.
-     */
-    public Holder() {
-    }
-
-    /**
-     * Constructs a holder with the given value.
-     */
-    public Holder(T value) {
-        this.value = value;
-    }
-
-    /**
-     * Returns the value.
-     * 
-     * @return the value of the holder
-     */
-    public T getValue() {
-        return value;
-    }
-
-    /**
-     * Sets a new value of the holder.
-     * 
-     * @param value
-     *            the new value
-     */
-    public void setValue(T value) {
-        this.value = value;
-    }
-
-    @Override
-    public String toString() {
-        return "Holder(" + value + ")";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/MultiFilingService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/MultiFilingService.java
deleted file mode 100644
index 0579123..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/MultiFilingService.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * MultiFiling Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface MultiFilingService {
-
-    /**
-     * Adds an existing fileable non-folder object to a folder.
-     */
-    void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension);
-
-    /**
-     * Removes an existing fileable non-folder object from a folder.
-     */
-    void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/NavigationService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/NavigationService.java
deleted file mode 100644
index c7badba..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/NavigationService.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * Navigation Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface NavigationService {
-
-    /**
-     * Gets the list of child objects contained in the specified folder.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param orderBy
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            define the order of the result set. Each query name must be
-     *            followed by the ascending modifier "ASC" or the descending
-     *            modifier "DESC" (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the available actions for each object in the
-     *            result set (default is <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            objects participate must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includePathSegment
-     *            <em>(optional)</em> if <code>true</code>, returns a path
-     *            segment for each child object for use in constructing that
-     *            object's path (default is <code>false</code>)
-     * @param maxItems
-     *            <em>(optional)</em> the maximum number of items to return in a
-     *            response (default is repository specific)
-     * @param skipCount
-     *            <em>(optional)</em> number of potential results that the
-     *            repository MUST skip/page over before returning any results
-     *            (default is 0)
-     */
-    ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * Gets the set of descendant objects contained in the specified folder or
-     * any of its child folders.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param depth
-     *            the number of levels of depth in the folder hierarchy from
-     *            which to return results
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the available actions for each object in the
-     *            result set (default is <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            objects participate must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includePathSegment
-     *            <em>(optional)</em> if <code>true</code>, returns a path
-     *            segment for each child object for use in constructing that
-     *            object's path (default is <code>false</code>)
-     **/
-    List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, ExtensionsData extension);
-
-    /**
-     * Gets the set of descendant folder objects contained in the specified
-     * folder.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param depth
-     *            the number of levels of depth in the folder hierarchy from
-     *            which to return results
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the available actions for each object in the
-     *            result set (default is <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            objects participate must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includePathSegment
-     *            <em>(optional)</em> if <code>true</code>, returns a path
-     *            segment for each child object for use in constructing that
-     *            object's path (default is <code>false</code>)
-     **/
-    List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, ExtensionsData extension);
-
-    /**
-     * Gets the parent folder(s) for the specified non-folder, fileable object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the available actions for each object in the
-     *            result set (default is <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            objects participate must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includeRelativePathSegment
-     *            <em>(optional)</em> if <code>true</code>, returns a relative
-     *            path segment for each parent object for use in constructing
-     *            that object's path (default is <code>false</code>)
-     */
-    List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension);
-
-    /**
-     * Gets the parent folder object for the specified folder object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     */
-    ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension);
-
-    /**
-     * Gets the list of documents that are checked out that the user has access
-     * to.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param orderBy
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            define the order of the result set. Each query name must be
-     *            followed by the ascending modifier "ASC" or the descending
-     *            modifier "DESC" (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the available actions for each object in the
-     *            result set (default is <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            objects participate must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param maxItems
-     *            <em>(optional)</em> the maximum number of items to return in a
-     *            response (default is repository specific)
-     * @param skipCount
-     *            <em>(optional)</em> number of potential results that the
-     *            repository MUST skip/page over before returning any results
-     *            (default is 0)
-     */
-    ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ObjectService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ObjectService.java
deleted file mode 100644
index 4593b9a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/ObjectService.java
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-
-/**
- * Object Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface ObjectService {
-
-    /**
-     * Creates a document object of the specified type (given by the
-     * cmis:objectTypeId property) in the (optionally) specified location.
-     * 
-     * The stream in <code>contentStream</code> is consumed but not closed by
-     * this method.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            document object
-     * @param folderId
-     *            <em>(optional)</em> if specified, the identifier for the
-     *            folder that must be the parent folder for the newly created
-     *            document object
-     * @param contentStream
-     *            <em>(optional)</em> the content stream that must be stored for
-     *            the newly created document object
-     * @param versioningState
-     *            <em>(optional)</em> specifies what the versioning state of the
-     *            newly created object must be (default is
-     *            {@link VersioningState#MAJOR})
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created document object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created document object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created document object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String createDocument(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension);
-
-    /**
-     * Creates a document object as a copy of the given source document in the
-     * (optionally) specified location.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param sourceId
-     *            the identifier for the source document
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            document object
-     * @param folderId
-     *            <em>(optional)</em> if specified, the identifier for the
-     *            folder that must be the parent folder for the newly created
-     *            document object
-     * @param versioningState
-     *            <em>(optional)</em> specifies what the versioning state of the
-     *            newly created object must be (default is
-     *            {@link VersioningState#MAJOR})
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created document object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created document object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created document object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String createDocumentFromSource(String repositoryId, String sourceId, Properties properties, String folderId,
-            VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension);
-
-    /**
-     * Creates a folder object of the specified type (given by the
-     * cmis:objectTypeId property) in the specified location.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            folder object
-     * @param folderId
-     *            the identifier for the parent folder
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created folder object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created folder object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created folder object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension);
-
-    /**
-     * Creates a relationship object of the specified type (given by the
-     * cmis:objectTypeId property).
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            relationship object
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created relationship object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created relationship object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created relationship object, either using the ACL
-     *            from <code>folderId</code> if specified, or being ignored if
-     *            no <code>folderId</code> is specified
-     */
-    String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension);
-
-    /**
-     * Creates a policy object of the specified type (given by the
-     * cmis:objectTypeId property).
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            policy object
-     * @param folderId
-     *            <em>(optional)</em> if specified, the identifier for the
-     *            folder that must be the parent folder for the newly created
-     *            policy object
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created policy object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created policy object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created policy object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension);
-
-    /**
-     * Creates an item object of the specified type (given by the
-     * cmis:objectTypeId property).
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param properties
-     *            the property values that must be applied to the newly created
-     *            policy object
-     * @param folderId
-     *            <em>(optional)</em> if specified, the identifier for the
-     *            folder that must be the parent folder for the newly created
-     *            policy object
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created policy object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created policy object, either using the ACL from
-     *            <code>folderId</code> if specified, or being applied if no
-     *            <code>folderId</code> is specified
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created policy object, either using the ACL from
-     *            <code>folderId</code> if specified, or being ignored if no
-     *            <code>folderId</code> is specified
-     */
-    String createItem(String repositoryId, Properties properties, String folderId, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension);
-
-    /**
-     * Gets the list of allowable actions for an object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     */
-    AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension);
-
-    /**
-     * Gets the specified information for the object specified by id.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the allowable actions for the object (default is
-     *            <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            object participates must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includePolicyIds
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the policy ids for the object (default is
-     *            <code>false</code>)
-     * @param includeAcl
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the ACL for the object (default is
-     *            <code>false</code>)
-     */
-    ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension);
-
-    /**
-     * Gets the list of properties for an object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     */
-    Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension);
-
-    /**
-     * Gets the list of associated renditions for the specified object. Only
-     * rendition attributes are returned, not rendition stream.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param maxItems
-     *            <em>(optional)</em> the maximum number of items to return in a
-     *            response (default is repository specific)
-     * @param skipCount
-     *            <em>(optional)</em> number of potential results that the
-     *            repository must skip/page over before returning any results
-     *            (default is 0)
-     */
-    List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * Gets the specified information for the object specified by path.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param path
-     *            the path to the object
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the allowable actions for the object (default is
-     *            <code>false</code>)
-     * @param includeRelationships
-     *            <em>(optional)</em> indicates what relationships in which the
-     *            object participates must be returned (default is
-     *            {@link IncludeRelationships#NONE})
-     * @param renditionFilter
-     *            <em>(optional)</em> indicates what set of renditions the
-     *            repository must return whose kind matches this filter (default
-     *            is <code>"cmis:none"</code>)
-     * @param includePolicyIds
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the policy ids for the object (default is
-     *            <code>false</code>)
-     * @param includeAcl
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the ACL for the object (default is
-     *            <code>false</code>)
-     */
-    ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension);
-
-    /**
-     * Gets the content stream for the specified document object, or gets a
-     * rendition stream for a specified rendition of a document or folder
-     * object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     */
-    ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension);
-
-    /**
-     * Updates properties of the specified object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object. The repository might return a
-     *            different/new object id
-     * @param changeToken
-     *            <em>(optional)</em> the last change token of this object that
-     *            the client received. The repository might return a new change
-     *            token (default is <code>null</code>)
-     * @param properties
-     *            the updated property values that must be applied to the object
-     */
-    void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension);
-
-    /**
-     * Updates properties and secondary types of one or more objects.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectIdsAndChangeTokens
-     *            the ids and change tokens of the objects to update
-     * @param properties
-     *            the properties to set
-     * @param addSecondaryTypeIds
-     *            the secondary types to apply
-     * @param removeSecondaryTypeIds
-     *            the secondary types to remove
-     */
-    List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension);
-
-    /**
-     * Moves the specified file-able object from one folder to another.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object. The repository might return a
-     *            different/new object id
-     * @param targetFolderId
-     *            the identifier for the target folder
-     * @param sourceFolderId
-     *            the identifier for the source folder
-     */
-    void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension);
-
-    /**
-     * Deletes the specified object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param allVersions
-     *            <em>(optional)</em> If <code>true</code> then delete all
-     *            versions of the document, otherwise delete only the document
-     *            object specified (default is <code>true</code>)
-     */
-    void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension);
-
-    /**
-     * Deletes the specified folder object and all of its child- and
-     * descendant-objects.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param folderId
-     *            the identifier for the folder
-     * @param allVersions
-     *            <em>(optional)</em> If <code>true</code> then delete all
-     *            versions of the document, otherwise delete only the document
-     *            object specified (default is <code>true</code>)
-     * @param unfileObjects
-     *            <em>(optional)</em> defines how the repository must process
-     *            file-able child- or descendant-objects (default is
-     *            {@link UnfileObject#DELETE})
-     * @param continueOnFailure
-     *            <em>(optional)</em> If <code>true</code>, then the repository
-     *            should continue attempting to perform this operation even if
-     *            deletion of a child- or descendant-object in the specified
-     *            folder cannot be deleted (default is <code>false</code>)
-     */
-    FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension);
-
-    /**
-     * Sets the content stream for the specified document object.
-     * 
-     * The stream in <code>contentStream</code> is consumed but not closed by
-     * this method.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object. The repository might return a
-     *            different/new object id
-     * @param overwriteFlag
-     *            <em>(optional)</em> If <code>true</code>, then the repository
-     *            must replace the existing content stream for the object (if
-     *            any) with the input content stream. If If <code>false</code>,
-     *            then the repository must only set the input content stream for
-     *            the object if the object currently does not have a content
-     *            stream (default is <code>true</code>)
-     * @param changeToken
-     *            <em>(optional)</em> the last change token of this object that
-     *            the client received. The repository might return a new change
-     *            token (default is <code>null</code>)
-     * @param contentStream
-     *            the content stream
-     */
-    void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension);
-
-    /**
-     * Deletes the content stream for the specified document object.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object. The repository might return a
-     *            different/new object id
-     * @param changeToken
-     *            <em>(optional)</em> the last change token of this object that
-     *            the client received. The repository might return a new change
-     *            token (default is <code>null</code>)
-     */
-    void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension);
-
-    /**
-     * Appends the content stream to the content of the document.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object. The repository might return a
-     *            different/new object id
-     * @param changeToken
-     *            <em>(optional)</em> the last change token of this object that
-     *            the client received. The repository might return a new change
-     *            token (default is <code>null</code>)
-     * @param contentStream
-     *            the content stream to append
-     * @param isLastChunk
-     *            indicates if this content stream is the last chunk
-     */
-    void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/PolicyService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/PolicyService.java
deleted file mode 100644
index d915918..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/PolicyService.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-
-/**
- * Policy Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface PolicyService {
-
-    /**
-     * Applies a specified policy to an object.
-     */
-    void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension);
-
-    /**
-     * Removes a specified policy from an object.
-     */
-    void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension);
-
-    /**
-     * Gets the list of policies currently applied to the specified object.
-     */
-    List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RelationshipService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RelationshipService.java
deleted file mode 100644
index 1028bc5..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RelationshipService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-
-/**
- * Relationship Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface RelationshipService {
-
-    /**
-     * Gets all or a subset of relationships associated with an independent
-     * object.
-     */
-    ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RepositoryService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RepositoryService.java
deleted file mode 100644
index 5f6b532..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/RepositoryService.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-
-/**
- * Repository Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface RepositoryService {
-
-    /**
-     * Returns a list of CMIS repository information available from this CMIS
-     * service endpoint.
-     * 
-     * In contrast to the CMIS specification this method returns repository
-     * infos not only repository ids.
-     */
-    List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension);
-
-    /**
-     * Returns information about the CMIS repository, the optional capabilities
-     * it supports and its access control information if applicable.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     */
-    RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension);
-
-    /**
-     * Returns the list of object types defined for the repository that are
-     * children of the specified type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param typeId
-     *            <em>(optional)</em> the typeId of an object type specified in
-     *            the repository (if not specified the repository MUST return
-     *            all base object types)
-     * @param includePropertyDefinitions
-     *            <em>(optional)</em> if <code>true</code> the repository MUST
-     *            return the property definitions for each object type returned
-     *            (default is <code>false</code>)
-     * @param maxItems
-     *            <em>(optional)</em> the maximum number of items to return in a
-     *            response (default is repository specific)
-     * @param skipCount
-     *            <em>(optional)</em> number of potential results that the
-     *            repository MUST skip/page over before returning any results
-     *            (default is 0)
-     */
-    TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * Returns the set of descendant object type defined for the repository
-     * under the specified type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param typeId
-     *            <em>(optional)</em> the typeId of an object type specified in
-     *            the repository (if not specified the repository MUST return
-     *            all types and MUST ignore the value of the depth parameter)
-     * @param depth
-     *            <em>(optional)</em> the number of levels of depth in the type
-     *            hierarchy from which to return results (default is repository
-     *            specific)
-     * @param includePropertyDefinitions
-     *            <em>(optional)</em> if <code>true</code> the repository MUST
-     *            return the property definitions for each object type returned
-     *            (default is <code>false</code>)
-     */
-    List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension);
-
-    /**
-     * Gets the definition of the specified object type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param typeId
-     *            typeId of an object type specified in the repository
-     */
-    TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension);
-
-    /**
-     * Creates a new type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param type
-     *            the type definition
-     * @return the newly created type
-     */
-    TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension);
-
-    /**
-     * Updates a type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param type
-     *            the type definition
-     * @return the updated type
-     */
-    TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension);
-
-    /**
-     * Deletes a type.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param typeId
-     *            typeId of an object type specified in the repository
-     */
-    void deleteType(String repositoryId, String typeId, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/VersioningService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/VersioningService.java
deleted file mode 100644
index 600ea4c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/VersioningService.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.spi;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-/**
- * Versioning Service interface.
- * 
- * <p>
- * <em>
- * See the CMIS 1.0 and CMIS 1.1 specifications for details on the operations, parameters,
- * exceptions and the domain model.
- * </em>
- * </p>
- */
-public interface VersioningService {
-    /**
-     * Create a private working copy of the document.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            input: the identifier for the document that should be checked
-     *            out, output: the identifier for the newly created PWC
-     * @param contentCopied
-     *            output: indicator if the content of the original document has
-     *            been copied to the PWC
-     */
-    void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension, Holder<Boolean> contentCopied);
-
-    /**
-     * Reverses the effect of a check-out.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the PWC
-     */
-    void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension);
-
-    /**
-     * Checks-in the private working copy (PWC) document.
-     * 
-     * The stream in <code>contentStream</code> is consumed but not closed by
-     * this method.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            input: the identifier for the PWC, output: the identifier for
-     *            the newly created version document
-     * @param major
-     *            indicator if the new version should become a major (
-     *            <code>true</code>) or minor (<code>false</code>) version
-     * @param properties
-     *            <em>(optional)</em> the property values that must be applied
-     *            to the newly created document object
-     * @param contentStream
-     *            <em>(optional)</em> the content stream that must be stored for
-     *            the newly created document object
-     * @param checkinComment
-     *            <em>(optional)</em> a version comment
-     * @param policies
-     *            <em>(optional)</em> a list of policy IDs that must be applied
-     *            to the newly created document object
-     * @param addAces
-     *            <em>(optional)</em> a list of ACEs that must be added to the
-     *            newly created document object
-     * @param removeAces
-     *            <em>(optional)</em> a list of ACEs that must be removed from
-     *            the newly created document object
-     */
-    void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension);
-
-    /**
-     * Get the latest document object in the version series.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     */
-    ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId, Boolean major,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension);
-
-    /**
-     * Get a subset of the properties for the latest document object in the
-     * version series.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     */
-    Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension);
-
-    /**
-     * Returns the list of all document objects in the specified version series,
-     * sorted by the property "cmis:creationDate" descending.
-     * 
-     * Either the <code>objectId</code> or the <code>versionSeriesId</code>
-     * parameter must be set.
-     * 
-     * @param repositoryId
-     *            the identifier for the repository
-     * @param objectId
-     *            the identifier for the object
-     * @param versionSeriesId
-     *            the identifier for the object
-     * @param filter
-     *            <em>(optional)</em> a comma-separated list of query names that
-     *            defines which properties must be returned by the repository
-     *            (default is repository specific)
-     * @param includeAllowableActions
-     *            <em>(optional)</em> if <code>true</code>, then the repository
-     *            must return the allowable actions for the objects (default is
-     *            <code>false</code>)
-     * 
-     * @return the complete version history of the version series
-     */
-    List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/package.html b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/package.html
deleted file mode 100644
index 6cf98f0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/spi/package.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-</head>
-<body>
-OpenCMIS client and server binding services.
-<p>This package provides the CMIS service interfaces for low-level
-client and server implementations.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml
deleted file mode 100644
index 0e1818e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    
-    <artifactId>chemistry-opencmis-commons-impl</artifactId>
-    <name>OpenCMIS Commons Implementation</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>${woodstox.version}</version>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.jvnet.mimepull</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>${mimepull.version}</version>
-            <scope>provided</scope>
-        </dependency> 
-        <dependency>
-            <groupId>com.sun.xml.ws</groupId>
-            <artifactId>jaxws-rt</artifactId>
-            <version>${jaxws-rt.version}</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>stax</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion>	 
-                    <groupId>org.codehaus.woodstox</groupId>	 
-                    <artifactId>wstx-asl</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>junit</groupId>	 
-                    <artifactId>junit</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>org.jvnet</groupId>	 
-                    <artifactId>mimepull</artifactId>	 
-                </exclusion>	 
-            </exclusions>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.8</version>
-                <executions>
-                    <execution>
-                        <id>add-source</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>add-source</goal>
-                        </goals>
-                        <configuration>
-                            <sources>
-                                <source>./target/generated</source>
-                            </sources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.jvnet.jax-ws-commons</groupId>
-                <artifactId>jaxws-maven-plugin</artifactId>
-                <version>2.2</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>wsimport</goal>
-                        </goals>
-                        <configuration>
-                            <wsdlDirectory>${project.basedir}/src/main/resources/wsdl/cmis11</wsdlDirectory>
-                            <wsdlFiles>
-                                <wsdlFile>CMISWS-Service.wsdl</wsdlFile>
-                            </wsdlFiles>
-                            <packageName>org.apache.chemistry.opencmis.commons.impl.jaxb</packageName>
-                            <destdir />
-                            <sourceDestDir>${project.basedir}/target/generated</sourceDestDir>
-                            <extension>true</extension>
-                            <target>2.1</target>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>    
-                            <goal>manifest</goal>
-                        </goals>   
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                          org.apache.chemistry.opencmis.commons.impl.*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                          org.apache.chemistry.opencmis.commons.*,
-                          com.sun.xml.ws.*;version="[2.1.7,3.0)";resolution:=optional,
-                          *
-                        </Import-Package>
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Base64.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Base64.java
deleted file mode 100644
index 4d0427e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Base64.java
+++ /dev/null
@@ -1,2013 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * <p>
- * Encodes and decodes to and from Base64 notation.
- * </p>
- * <p>
- * Homepage: <a href="http://iharder.net/base64">http://iharder.net/base64</a>.
- * </p>
- * 
- * @author Robert Harder
- * @author rob@iharder.net
- * @version 2.3.7
- */
-public final class Base64 {
-
-    protected static final Logger LOG = LoggerFactory.getLogger(Base64.class);
-
-    /* ******** P U B L I C F I E L D S ******** */
-
-    /** No options specified. Value is zero. */
-    public static final int NO_OPTIONS = 0;
-
-    /** Specify encoding in first bit. Value is one. */
-    public static final int ENCODE = 1;
-
-    /** Specify decoding in first bit. Value is zero. */
-    public static final int DECODE = 0;
-
-    /** Specify that data should be gzip-compressed in second bit. Value is two. */
-    public static final int GZIP = 2;
-
-    /**
-     * Specify that gzipped data should <em>not</em> be automatically gunzipped.
-     */
-    public static final int DONT_GUNZIP = 4;
-
-    /** Do break lines when encoding. Value is 8. */
-    public static final int DO_BREAK_LINES = 8;
-
-    /**
-     * Encode using Base64-like encoding that is URL- and Filename-safe as
-     * described in Section 4 of RFC3548: <a
-     * href="http://www.faqs.org/rfcs/rfc3548.html"
-     * >http://www.faqs.org/rfcs/rfc3548.html</a>. It is important to note that
-     * data encoded this way is <em>not</em> officially valid Base64, or at the
-     * very least should not be called Base64 without also specifying that is
-     * was encoded using the URL- and Filename-safe dialect.
-     */
-    public static final int URL_SAFE = 16;
-
-    /**
-     * Encode using the special "ordered" dialect of Base64 described here: <a
-     * href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-
-     * 1940.html</a>.
-     */
-    public static final int ORDERED = 32;
-
-    /* ******** P R I V A T E F I E L D S ******** */
-
-    /** Maximum line length (76) of Base64 output. */
-    private static final int MAX_LINE_LENGTH = 76;
-
-    /** The equals sign (=) as a byte. */
-    private static final byte EQUALS_SIGN = (byte) '=';
-
-    /** The new line character (\n) as a byte. */
-    private static final byte NEW_LINE = (byte) '\n';
-
-    /** Preferred encoding. */
-    private static final String PREFERRED_ENCODING = "US-ASCII";
-
-    private static final byte WHITE_SPACE_ENC = -5; // Indicates white space in
-                                                    // encoding
-    private static final byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in
-    // encoding
-
-    /* ******** S T A N D A R D B A S E 6 4 A L P H A B E T ******** */
-
-    /** The 64 valid Base64 values. */
-    /*
-     * Host platform me be something funny like EBCDIC, so we hardcode these
-     * values.
-     */
-    private static final byte[] _STANDARD_ALPHABET = { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
-            (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N',
-            (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W',
-            (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f',
-            (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o',
-            (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x',
-            (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
-            (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/' };
-
-    /**
-     * Translates a Base64 value to either its 6-bit reconstruction value or a
-     * negative number indicating some other meaning.
-     **/
-    private static final byte[] _STANDARD_DECODABET = { -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal
-                                                                                            // 0
-                                                                                            // -
-                                                                                            // 8
-            -5, -5, // Whitespace: Tab and Linefeed
-            -9, -9, // Decimal 11 - 12
-            -5, // Whitespace: Carriage Return
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 -
-                                                                // 26
-            -9, -9, -9, -9, -9, // Decimal 27 - 31
-            -5, // Whitespace: Space
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42
-            62, // Plus sign at decimal 43
-            -9, -9, -9, // Decimal 44 - 46
-            63, // Slash at decimal 47
-            52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine
-            -9, -9, -9, // Decimal 58 - 60
-            -1, // Equals sign at decimal 61
-            -9, -9, -9, // Decimal 62 - 64
-            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through
-                                                          // 'N'
-            14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O'
-                                                            // through 'Z'
-            -9, -9, -9, -9, -9, -9, // Decimal 91 - 96
-            26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a'
-                                                                // through 'm'
-            39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n'
-                                                                // through 'z'
-            -9, -9, -9, -9, -9 // Decimal 123 - 127
-            , -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 128 -
-                                                              // 139
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 140 -
-                                                                // 152
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 153 -
-                                                                // 165
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 166 -
-                                                                // 178
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 179 -
-                                                                // 191
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 192 -
-                                                                // 204
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 205 -
-                                                                // 217
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 218 -
-                                                                // 230
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 231 -
-                                                                // 243
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 // Decimal 244 - 255
-    };
-
-    /* ******** U R L S A F E B A S E 6 4 A L P H A B E T ******** */
-
-    /**
-     * Used in the URL- and Filename-safe dialect described in Section 4 of
-     * RFC3548: <a
-     * href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org
-     * /rfcs/rfc3548.html</a>. Notice that the last two bytes become "hyphen"
-     * and "underscore" instead of "plus" and "slash."
-     */
-    private static final byte[] _URL_SAFE_ALPHABET = { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
-            (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N',
-            (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W',
-            (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f',
-            (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o',
-            (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x',
-            (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
-            (byte) '7', (byte) '8', (byte) '9', (byte) '-', (byte) '_' };
-
-    /**
-     * Used in decoding URL- and Filename-safe dialects of Base64.
-     */
-    private static final byte[] _URL_SAFE_DECODABET = { -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal
-                                                                                            // 0
-                                                                                            // -
-                                                                                            // 8
-            -5, -5, // Whitespace: Tab and Linefeed
-            -9, -9, // Decimal 11 - 12
-            -5, // Whitespace: Carriage Return
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 -
-                                                                // 26
-            -9, -9, -9, -9, -9, // Decimal 27 - 31
-            -5, // Whitespace: Space
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42
-            -9, // Plus sign at decimal 43
-            -9, // Decimal 44
-            62, // Minus sign at decimal 45
-            -9, // Decimal 46
-            -9, // Slash at decimal 47
-            52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine
-            -9, -9, -9, // Decimal 58 - 60
-            -1, // Equals sign at decimal 61
-            -9, -9, -9, // Decimal 62 - 64
-            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through
-                                                          // 'N'
-            14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O'
-                                                            // through 'Z'
-            -9, -9, -9, -9, // Decimal 91 - 94
-            63, // Underscore at decimal 95
-            -9, // Decimal 96
-            26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a'
-                                                                // through 'm'
-            39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n'
-                                                                // through 'z'
-            -9, -9, -9, -9, -9 // Decimal 123 - 127
-            , -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 128 -
-                                                              // 139
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 140 -
-                                                                // 152
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 153 -
-                                                                // 165
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 166 -
-                                                                // 178
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 179 -
-                                                                // 191
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 192 -
-                                                                // 204
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 205 -
-                                                                // 217
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 218 -
-                                                                // 230
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 231 -
-                                                                // 243
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 // Decimal 244 - 255
-    };
-
-    /* ******** O R D E R E D B A S E 6 4 A L P H A B E T ******** */
-
-    /**
-     * I don't get the point of this technique, but someone requested it, and it
-     * is described here: <a
-     * href="http://www.faqs.org/qa/rfcc-1940.html">http://
-     * www.faqs.org/qa/rfcc-1940.html</a>.
-     */
-    private static final byte[] _ORDERED_ALPHABET = { (byte) '-', (byte) '0', (byte) '1', (byte) '2', (byte) '3',
-            (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'A', (byte) 'B', (byte) 'C',
-            (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L',
-            (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U',
-            (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) '_', (byte) 'a', (byte) 'b', (byte) 'c',
-            (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l',
-            (byte) 'm', (byte) 'n', (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u',
-            (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z' };
-
-    /**
-     * Used in decoding the "ordered" dialect of Base64.
-     */
-    private static final byte[] _ORDERED_DECODABET = { -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal
-                                                                                           // 0
-                                                                                           // -
-                                                                                           // 8
-            -5, -5, // Whitespace: Tab and Linefeed
-            -9, -9, // Decimal 11 - 12
-            -5, // Whitespace: Carriage Return
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 -
-                                                                // 26
-            -9, -9, -9, -9, -9, // Decimal 27 - 31
-            -5, // Whitespace: Space
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42
-            -9, // Plus sign at decimal 43
-            -9, // Decimal 44
-            0, // Minus sign at decimal 45
-            -9, // Decimal 46
-            -9, // Slash at decimal 47
-            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // Numbers zero through nine
-            -9, -9, -9, // Decimal 58 - 60
-            -1, // Equals sign at decimal 61
-            -9, -9, -9, // Decimal 62 - 64
-            11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, // Letters 'A'
-                                                                // through 'M'
-            24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, // Letters 'N'
-                                                                // through 'Z'
-            -9, -9, -9, -9, // Decimal 91 - 94
-            37, // Underscore at decimal 95
-            -9, // Decimal 96
-            38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, // Letters 'a'
-                                                                // through 'm'
-            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // Letters 'n'
-                                                                // through 'z'
-            -9, -9, -9, -9, -9 // Decimal 123 - 127
-            , -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 128
-                                                                  // - 139
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 140 -
-                                                                // 152
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 153 -
-                                                                // 165
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 166 -
-                                                                // 178
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 179 -
-                                                                // 191
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 192 -
-                                                                // 204
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 205 -
-                                                                // 217
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 218 -
-                                                                // 230
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 231 -
-                                                                // 243
-            -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 // Decimal 244 - 255
-    };
-
-    /* ******** D E T E R M I N E W H I C H A L H A B E T ******** */
-
-    /**
-     * Returns one of the _SOMETHING_ALPHABET byte arrays depending on the
-     * options specified. It's possible, though silly, to specify ORDERED
-     * <b>and</b> URLSAFE in which case one of them will be picked, though there
-     * is no guarantee as to which one will be picked.
-     */
-    private static byte[] getAlphabet(int options) {
-        if ((options & URL_SAFE) == URL_SAFE) {
-            return _URL_SAFE_ALPHABET;
-        } else if ((options & ORDERED) == ORDERED) {
-            return _ORDERED_ALPHABET;
-        } else {
-            return _STANDARD_ALPHABET;
-        }
-    } // end getAlphabet
-
-    /**
-     * Returns one of the _SOMETHING_DECODABET byte arrays depending on the
-     * options specified. It's possible, though silly, to specify ORDERED and
-     * URL_SAFE in which case one of them will be picked, though there is no
-     * guarantee as to which one will be picked.
-     */
-    private static byte[] getDecodabet(int options) {
-        if ((options & URL_SAFE) == URL_SAFE) {
-            return _URL_SAFE_DECODABET;
-        } else if ((options & ORDERED) == ORDERED) {
-            return _ORDERED_DECODABET;
-        } else {
-            return _STANDARD_DECODABET;
-        }
-    } // end getAlphabet
-
-    /** Defeats instantiation. */
-    private Base64() {
-    }
-
-    /* ******** E N C O D I N G M E T H O D S ******** */
-
-    /**
-     * Encodes up to the first three bytes of array <var>threeBytes</var> and
-     * returns a four-byte array in Base64 notation. The actual number of
-     * significant bytes in your array is given by <var>numSigBytes</var>. The
-     * array <var>threeBytes</var> needs only be as big as
-     * <var>numSigBytes</var>. Code can reuse a byte array by passing a
-     * four-byte array as <var>b4</var>.
-     * 
-     * @param b4
-     *            A reusable byte array to reduce array instantiation
-     * @param threeBytes
-     *            the array to convert
-     * @param numSigBytes
-     *            the number of significant bytes in your array
-     * @return four byte array in Base64 notation.
-     * @since 1.5.1
-     */
-    private static byte[] encode3to4(byte[] b4, byte[] threeBytes, int numSigBytes, int options) {
-        encode3to4(threeBytes, 0, numSigBytes, b4, 0, options);
-        return b4;
-    } // end encode3to4
-
-    /**
-     * <p>
-     * Encodes up to three bytes of the array <var>source</var> and writes the
-     * resulting four Base64 bytes to <var>destination</var>. The source and
-     * destination arrays can be manipulated anywhere along their length by
-     * specifying <var>srcOffset</var> and <var>destOffset</var>. This method
-     * does not check to make sure your arrays are large enough to accomodate
-     * <var>srcOffset</var> + 3 for the <var>source</var> array or
-     * <var>destOffset</var> + 4 for the <var>destination</var> array. The
-     * actual number of significant bytes in your array is given by
-     * <var>numSigBytes</var>.
-     * </p>
-     * <p>
-     * This is the lowest level of the encoding methods with all possible
-     * parameters.
-     * </p>
-     * 
-     * @param source
-     *            the array to convert
-     * @param srcOffset
-     *            the index where conversion begins
-     * @param numSigBytes
-     *            the number of significant bytes in your array
-     * @param destination
-     *            the array to hold the conversion
-     * @param destOffset
-     *            the index where output will be put
-     * @return the <var>destination</var> array
-     * @since 1.3
-     */
-    private static byte[] encode3to4(byte[] source, int srcOffset, int numSigBytes, byte[] destination, int destOffset,
-            int options) {
-
-        byte[] ALPHABET = getAlphabet(options);
-
-        // 1 2 3
-        // 01234567890123456789012345678901 Bit position
-        // --------000000001111111122222222 Array position from threeBytes
-        // --------| || || || | Six bit groups to index ALPHABET
-        // >>18 >>12 >> 6 >> 0 Right shift necessary
-        // 0x3f 0x3f 0x3f Additional AND
-
-        // Create buffer with zero-padding if there are only one or two
-        // significant bytes passed in the array.
-        // We have to shift left 24 in order to flush out the 1's that appear
-        // when Java treats a value as negative that is cast from a byte to an
-        // int.
-        int inBuff = (numSigBytes > 0 ? ((source[srcOffset] << 24) >>> 8) : 0)
-                | (numSigBytes > 1 ? ((source[srcOffset + 1] << 24) >>> 16) : 0)
-                | (numSigBytes > 2 ? ((source[srcOffset + 2] << 24) >>> 24) : 0);
-
-        switch (numSigBytes) {
-        case 3:
-            destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-            destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
-            destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
-            destination[destOffset + 3] = ALPHABET[(inBuff) & 0x3f];
-            return destination;
-
-        case 2:
-            destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-            destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
-            destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
-            destination[destOffset + 3] = EQUALS_SIGN;
-            return destination;
-
-        case 1:
-            destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-            destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
-            destination[destOffset + 2] = EQUALS_SIGN;
-            destination[destOffset + 3] = EQUALS_SIGN;
-            return destination;
-
-        default:
-            return destination;
-        } // end switch
-    } // end encode3to4
-
-    /**
-     * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it
-     * to the <code>encoded</code> ByteBuffer. This is an experimental feature.
-     * Currently it does not pass along any options (such as
-     * {@link #DO_BREAK_LINES} or {@link #GZIP}.
-     * 
-     * @param raw
-     *            input buffer
-     * @param encoded
-     *            output buffer
-     * @since 2.3
-     */
-    public static void encode(java.nio.ByteBuffer raw, java.nio.ByteBuffer encoded) {
-        byte[] raw3 = new byte[3];
-        byte[] enc4 = new byte[4];
-
-        while (raw.hasRemaining()) {
-            int rem = Math.min(3, raw.remaining());
-            raw.get(raw3, 0, rem);
-            Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
-            encoded.put(enc4);
-        } // end input remaining
-    }
-
-    /**
-     * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it
-     * to the <code>encoded</code> CharBuffer. This is an experimental feature.
-     * Currently it does not pass along any options (such as
-     * {@link #DO_BREAK_LINES} or {@link #GZIP}.
-     * 
-     * @param raw
-     *            input buffer
-     * @param encoded
-     *            output buffer
-     * @since 2.3
-     */
-    public static void encode(java.nio.ByteBuffer raw, java.nio.CharBuffer encoded) {
-        byte[] raw3 = new byte[3];
-        byte[] enc4 = new byte[4];
-
-        while (raw.hasRemaining()) {
-            int rem = Math.min(3, raw.remaining());
-            raw.get(raw3, 0, rem);
-            Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
-            for (int i = 0; i < 4; i++) {
-                encoded.put((char) (enc4[i] & 0xFF));
-            }
-        } // end input remaining
-    }
-
-    /**
-     * Serializes an object and returns the Base64-encoded version of that
-     * serialized object.
-     * 
-     * <p>
-     * As of v 2.3, if the object cannot be serialized or there is another
-     * error, the method will throw an java.io.IOException. <b>This is new to
-     * v2.3!</b> In earlier versions, it just returned a null value, but in
-     * retrospect that's a pretty poor way to handle it.
-     * </p>
-     * 
-     * The object is not GZip-compressed before being encoded.
-     * 
-     * @param serializableObject
-     *            The object to encode
-     * @return The Base64-encoded object
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if serializedObject is null
-     * @since 1.4
-     */
-    public static String encodeObject(java.io.Serializable serializableObject) throws java.io.IOException {
-        return encodeObject(serializableObject, NO_OPTIONS);
-    } // end encodeObject
-
-    /**
-     * Serializes an object and returns the Base64-encoded version of that
-     * serialized object.
-     * 
-     * <p>
-     * As of v 2.3, if the object cannot be serialized or there is another
-     * error, the method will throw an java.io.IOException. <b>This is new to
-     * v2.3!</b> In earlier versions, it just returned a null value, but in
-     * retrospect that's a pretty poor way to handle it.
-     * </p>
-     * 
-     * The object is not GZip-compressed before being encoded.
-     * <p>
-     * Example options:
-     * 
-     * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     * </pre>
-     * <p>
-     * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or
-     * <p>
-     * Example:
-     * <code>encodeObject( myObj, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-     * 
-     * @param serializableObject
-     *            The object to encode
-     * @param options
-     *            Specified options
-     * @return The Base64-encoded object
-     * @see Base64#GZIP
-     * @see Base64#DO_BREAK_LINES
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.0
-     */
-    public static String encodeObject(java.io.Serializable serializableObject, int options) throws java.io.IOException {
-
-        if (serializableObject == null) {
-            throw new NullPointerException("Cannot serialize a null object.");
-        } // end if: null
-
-        // Streams
-        java.io.ByteArrayOutputStream baos = null;
-        java.io.OutputStream b64os = null;
-        java.util.zip.GZIPOutputStream gzos = null;
-        java.io.ObjectOutputStream oos = null;
-
-        try {
-            // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
-            baos = new java.io.ByteArrayOutputStream();
-            b64os = new Base64.OutputStream(baos, ENCODE | options);
-            if ((options & GZIP) != 0) {
-                // Gzip
-                gzos = new java.util.zip.GZIPOutputStream(b64os);
-                oos = new java.io.ObjectOutputStream(gzos);
-            } else {
-                // Not gzipped
-                oos = new java.io.ObjectOutputStream(b64os);
-            }
-            oos.writeObject(serializableObject);
-        } // end try
-        catch (java.io.IOException e) {
-            // Catch it and then throw it immediately so that
-            // the finally{} block is called for cleanup.
-            throw e;
-        } // end catch
-        finally {
-            IOUtils.closeQuietly(oos);
-            IOUtils.closeQuietly(gzos);
-            IOUtils.closeQuietly(b64os);
-            IOUtils.closeQuietly(baos);
-        } // end finally
-
-        // Return value according to relevant encoding.
-        try {
-            return new String(baos.toByteArray(), PREFERRED_ENCODING);
-        } // end try
-        catch (java.io.UnsupportedEncodingException uue) {
-            // Fall back to UTF-8
-            return IOUtils.toUTF8String(baos.toByteArray());
-        } // end catch
-
-    } // end encode
-
-    /**
-     * Encodes a byte array into Base64 notation. Does not GZip-compress data.
-     * 
-     * @param source
-     *            The data to convert
-     * @return The data in Base64-encoded form
-     * @throws NullPointerException
-     *             if source array is null
-     * @since 1.4
-     */
-    public static String encodeBytes(byte[] source) {
-        // Since we're not going to have the GZIP encoding turned on,
-        // we're not going to have an java.io.IOException thrown, so
-        // we should not force the user to have to catch it.
-        String encoded = null;
-        try {
-            encoded = encodeBytes(source, 0, source.length, NO_OPTIONS);
-        } catch (java.io.IOException ex) {
-            assert false : ex.getMessage();
-        } // end catch
-        assert encoded != null;
-        return encoded;
-    } // end encodeBytes
-
-    /**
-     * Encodes a byte array into Base64 notation.
-     * <p>
-     * Example options:
-     * 
-     * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
-     * </pre>
-     * <p>
-     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
-     * <p>
-     * Example:
-     * <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-     * 
-     * 
-     * <p>
-     * As of v 2.3, if there is an error with the GZIP stream, the method will
-     * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier
-     * versions, it just returned a null value, but in retrospect that's a
-     * pretty poor way to handle it.
-     * </p>
-     * 
-     * 
-     * @param source
-     *            The data to convert
-     * @param options
-     *            Specified options
-     * @return The Base64-encoded data as a String
-     * @see Base64#GZIP
-     * @see Base64#DO_BREAK_LINES
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if source array is null
-     * @since 2.0
-     */
-    public static String encodeBytes(byte[] source, int options) throws java.io.IOException {
-        return encodeBytes(source, 0, source.length, options);
-    } // end encodeBytes
-
-    /**
-     * Encodes a byte array into Base64 notation. Does not GZip-compress data.
-     * 
-     * <p>
-     * As of v 2.3, if there is an error, the method will throw an
-     * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it
-     * just returned a null value, but in retrospect that's a pretty poor way to
-     * handle it.
-     * </p>
-     * 
-     * 
-     * @param source
-     *            The data to convert
-     * @param off
-     *            Offset in array where conversion should begin
-     * @param len
-     *            Length of data to convert
-     * @return The Base64-encoded data as a String
-     * @throws NullPointerException
-     *             if source array is null
-     * @throws IllegalArgumentException
-     *             if source array, offset, or length are invalid
-     * @since 1.4
-     */
-    public static String encodeBytes(byte[] source, int off, int len) {
-        // Since we're not going to have the GZIP encoding turned on,
-        // we're not going to have an java.io.IOException thrown, so
-        // we should not force the user to have to catch it.
-        String encoded = null;
-        try {
-            encoded = encodeBytes(source, off, len, NO_OPTIONS);
-        } catch (java.io.IOException ex) {
-            assert false : ex.getMessage();
-        } // end catch
-        assert encoded != null;
-        return encoded;
-    } // end encodeBytes
-
-    /**
-     * Encodes a byte array into Base64 notation.
-     * <p>
-     * Example options:
-     * 
-     * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
-     * </pre>
-     * <p>
-     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
-     * <p>
-     * Example:
-     * <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-     * 
-     * 
-     * <p>
-     * As of v 2.3, if there is an error with the GZIP stream, the method will
-     * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier
-     * versions, it just returned a null value, but in retrospect that's a
-     * pretty poor way to handle it.
-     * </p>
-     * 
-     * 
-     * @param source
-     *            The data to convert
-     * @param off
-     *            Offset in array where conversion should begin
-     * @param len
-     *            Length of data to convert
-     * @param options
-     *            Specified options
-     * @return The Base64-encoded data as a String
-     * @see Base64#GZIP
-     * @see Base64#DO_BREAK_LINES
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if source array is null
-     * @throws IllegalArgumentException
-     *             if source array, offset, or length are invalid
-     * @since 2.0
-     */
-    public static String encodeBytes(byte[] source, int off, int len, int options) throws java.io.IOException {
-        byte[] encoded = encodeBytesToBytes(source, off, len, options);
-
-        // Return value according to relevant encoding.
-        try {
-            return new String(encoded, PREFERRED_ENCODING);
-        } // end try
-        catch (java.io.UnsupportedEncodingException uue) {
-            return IOUtils.toUTF8String(encoded);
-        } // end catch
-
-    } // end encodeBytes
-
-    /**
-     * Similar to {@link #encodeBytes(byte[])} but returns a byte array instead
-     * of instantiating a String. This is more efficient if you're working with
-     * I/O streams and have large data sets to encode.
-     * 
-     * 
-     * @param source
-     *            The data to convert
-     * @return The Base64-encoded data as a byte[] (of ASCII characters)
-     * @throws NullPointerException
-     *             if source array is null
-     * @since 2.3.1
-     */
-    public static byte[] encodeBytesToBytes(byte[] source) {
-        byte[] encoded = null;
-        try {
-            encoded = encodeBytesToBytes(source, 0, source.length, Base64.NO_OPTIONS);
-        } catch (java.io.IOException ex) {
-            assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage();
-        }
-        return encoded;
-    }
-
-    /**
-     * Similar to {@link #encodeBytes(byte[], int, int, int)} but returns a byte
-     * array instead of instantiating a String. This is more efficient if you're
-     * working with I/O streams and have large data sets to encode.
-     * 
-     * 
-     * @param source
-     *            The data to convert
-     * @param off
-     *            Offset in array where conversion should begin
-     * @param len
-     *            Length of data to convert
-     * @param options
-     *            Specified options
-     * @return The Base64-encoded data as a String
-     * @see Base64#GZIP
-     * @see Base64#DO_BREAK_LINES
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if source array is null
-     * @throws IllegalArgumentException
-     *             if source array, offset, or length are invalid
-     * @since 2.3.1
-     */
-    public static byte[] encodeBytesToBytes(byte[] source, int off, int len, int options) throws java.io.IOException {
-
-        if (source == null) {
-            throw new NullPointerException("Cannot serialize a null array.");
-        } // end if: null
-
-        if (off < 0) {
-            throw new IllegalArgumentException("Cannot have negative offset: " + off);
-        } // end if: off < 0
-
-        if (len < 0) {
-            throw new IllegalArgumentException("Cannot have length offset: " + len);
-        } // end if: len < 0
-
-        if (off + len > source.length) {
-            throw new IllegalArgumentException(String.format(
-                    "Cannot have offset of %d and length of %d with array of length %d", off, len, source.length));
-        } // end if: off < 0
-
-        // Compress?
-        if ((options & GZIP) != 0) {
-            java.io.ByteArrayOutputStream baos = null;
-            java.util.zip.GZIPOutputStream gzos = null;
-            Base64.OutputStream b64os = null;
-
-            try {
-                // GZip -> Base64 -> ByteArray
-                baos = new java.io.ByteArrayOutputStream();
-                b64os = new Base64.OutputStream(baos, ENCODE | options);
-                gzos = new java.util.zip.GZIPOutputStream(b64os);
-
-                gzos.write(source, off, len);
-                gzos.close();
-            } // end try
-            catch (java.io.IOException e) {
-                // Catch it and then throw it immediately so that
-                // the finally{} block is called for cleanup.
-                throw e;
-            } // end catch
-            finally {
-                IOUtils.closeQuietly(gzos);
-                IOUtils.closeQuietly(b64os);
-                IOUtils.closeQuietly(baos);
-            } // end finally
-
-            return baos.toByteArray();
-        } // end if: compress
-
-        // Else, don't compress. Better not to use streams at all then.
-        else {
-            boolean breakLines = (options & DO_BREAK_LINES) != 0;
-
-            // int len43 = len * 4 / 3;
-            // byte[] outBuff = new byte[ ( len43 ) // Main 4:3
-            // + ( (len % 3) > 0 ? 4 : 0 ) // Account for padding
-            // + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines
-            // Try to determine more precisely how big the array needs to be.
-            // If we get it right, we don't have to do an array copy, and
-            // we save a bunch of memory.
-            int encLen = (len / 3) * 4 + (len % 3 > 0 ? 4 : 0); // Bytes needed
-                                                                // for actual
-                                                                // encoding
-            if (breakLines) {
-                encLen += encLen / MAX_LINE_LENGTH; // Plus extra newline
-                                                    // characters
-            }
-            byte[] outBuff = new byte[encLen];
-
-            int d = 0;
-            int e = 0;
-            int len2 = len - 2;
-            int lineLength = 0;
-            for (; d < len2; d += 3, e += 4) {
-                encode3to4(source, d + off, 3, outBuff, e, options);
-
-                lineLength += 4;
-                if (breakLines && lineLength >= MAX_LINE_LENGTH) {
-                    outBuff[e + 4] = NEW_LINE;
-                    e++;
-                    lineLength = 0;
-                } // end if: end of line
-            } // en dfor: each piece of array
-
-            if (d < len) {
-                encode3to4(source, d + off, len - d, outBuff, e, options);
-                e += 4;
-            } // end if: some padding needed
-
-            // Only resize array if we didn't guess it right.
-            if (e <= outBuff.length - 1) {
-                // If breaking lines and the last byte falls right at
-                // the line length (76 bytes per line), there will be
-                // one extra byte, and the array will need to be resized.
-                // Not too bad of an estimate on array size, I'd say.
-                byte[] finalOut = new byte[e];
-                System.arraycopy(outBuff, 0, finalOut, 0, e);
-                // System.err.println("Having to resize array from " +
-                // outBuff.length + " to " + e );
-                return finalOut;
-            } else {
-                // System.err.println("No need to resize array.");
-                return outBuff;
-            }
-
-        } // end else: don't compress
-
-    } // end encodeBytesToBytes
-
-    /* ******** D E C O D I N G M E T H O D S ******** */
-
-    /**
-     * Decodes four bytes from array <var>source</var> and writes the resulting
-     * bytes (up to three of them) to <var>destination</var>. The source and
-     * destination arrays can be manipulated anywhere along their length by
-     * specifying <var>srcOffset</var> and <var>destOffset</var>. This method
-     * does not check to make sure your arrays are large enough to accomodate
-     * <var>srcOffset</var> + 4 for the <var>source</var> array or
-     * <var>destOffset</var> + 3 for the <var>destination</var> array. This
-     * method returns the actual number of bytes that were converted from the
-     * Base64 encoding.
-     * <p>
-     * This is the lowest level of the decoding methods with all possible
-     * parameters.
-     * </p>
-     * 
-     * 
-     * @param source
-     *            the array to convert
-     * @param srcOffset
-     *            the index where conversion begins
-     * @param destination
-     *            the array to hold the conversion
-     * @param destOffset
-     *            the index where output will be put
-     * @param options
-     *            alphabet type is pulled from this (standard, url-safe,
-     *            ordered)
-     * @return the number of decoded bytes converted
-     * @throws NullPointerException
-     *             if source or destination arrays are null
-     * @throws IllegalArgumentException
-     *             if srcOffset or destOffset are invalid or there is not enough
-     *             room in the array.
-     * @since 1.3
-     */
-    private static int decode4to3(byte[] source, int srcOffset, byte[] destination, int destOffset, int options) {
-
-        // Lots of error checking and exception throwing
-        if (source == null) {
-            throw new NullPointerException("Source array was null.");
-        } // end if
-        if (destination == null) {
-            throw new NullPointerException("Destination array was null.");
-        } // end if
-        if (srcOffset < 0 || srcOffset + 3 >= source.length) {
-            throw new IllegalArgumentException(String.format(
-                    "Source array with length %d cannot have offset of %d and still process four bytes.",
-                    source.length, srcOffset));
-        } // end if
-        if (destOffset < 0 || destOffset + 2 >= destination.length) {
-            throw new IllegalArgumentException(String.format(
-                    "Destination array with length %d cannot have offset of %d and still store three bytes.",
-                    destination.length, destOffset));
-        } // end if
-
-        byte[] DECODABET = getDecodabet(options);
-
-        // Example: Dk==
-        if (source[srcOffset + 2] == EQUALS_SIGN) {
-            // Two ways to do the same thing. Don't know which way I like best.
-            // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6
-            // )
-            // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );
-            int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
-                    | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12);
-
-            destination[destOffset] = (byte) (outBuff >>> 16);
-            return 1;
-        }
-
-        // Example: DkL=
-        else if (source[srcOffset + 3] == EQUALS_SIGN) {
-            // Two ways to do the same thing. Don't know which way I like best.
-            // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6
-            // )
-            // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
-            // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );
-            int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
-                    | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12)
-                    | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6);
-
-            destination[destOffset] = (byte) (outBuff >>> 16);
-            destination[destOffset + 1] = (byte) (outBuff >>> 8);
-            return 2;
-        }
-
-        // Example: DkLE
-        else {
-            // Two ways to do the same thing. Don't know which way I like best.
-            // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6
-            // )
-            // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
-            // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )
-            // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );
-            int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
-                    | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12)
-                    | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6) | ((DECODABET[source[srcOffset + 3]] & 0xFF));
-
-            destination[destOffset] = (byte) (outBuff >> 16);
-            destination[destOffset + 1] = (byte) (outBuff >> 8);
-            destination[destOffset + 2] = (byte) (outBuff);
-
-            return 3;
-        }
-    } // end decodeToBytes
-
-    /**
-     * Low-level access to decoding ASCII characters in the form of a byte
-     * array. <strong>Ignores GUNZIP option, if it's set.</strong> This is not
-     * generally a recommended method, although it is used internally as part of
-     * the decoding process. Special case: if len = 0, an empty array is
-     * returned. Still, if you need more speed and reduced memory footprint (and
-     * aren't gzipping), consider this method.
-     * 
-     * @param source
-     *            The Base64 encoded data
-     * @return decoded data
-     * @since 2.3.1
-     */
-    public static byte[] decode(byte[] source) throws java.io.IOException {
-        byte[] decoded = null;
-        // try {
-        decoded = decode(source, 0, source.length, Base64.NO_OPTIONS);
-        // } catch( java.io.IOException ex ) {
-        // assert false :
-        // "IOExceptions only come from GZipping, which is turned off: " +
-        // ex.getMessage();
-        // }
-        return decoded;
-    }
-
-    /**
-     * Low-level access to decoding ASCII characters in the form of a byte
-     * array. <strong>Ignores GUNZIP option, if it's set.</strong> This is not
-     * generally a recommended method, although it is used internally as part of
-     * the decoding process. Special case: if len = 0, an empty array is
-     * returned. Still, if you need more speed and reduced memory footprint (and
-     * aren't gzipping), consider this method.
-     * 
-     * @param source
-     *            The Base64 encoded data
-     * @param off
-     *            The offset of where to begin decoding
-     * @param len
-     *            The length of characters to decode
-     * @param options
-     *            Can specify options such as alphabet type to use
-     * @return decoded data
-     * @throws java.io.IOException
-     *             If bogus characters exist in source data
-     * @since 1.3
-     */
-    public static byte[] decode(byte[] source, int off, int len, int options) throws java.io.IOException {
-
-        // Lots of error checking and exception throwing
-        if (source == null) {
-            throw new NullPointerException("Cannot decode null source array.");
-        } // end if
-        if (off < 0 || off + len > source.length) {
-            throw new IllegalArgumentException(String.format(
-                    "Source array with length %d cannot have offset of %d and process %d bytes.", source.length, off,
-                    len));
-        } // end if
-
-        if (len == 0) {
-            return new byte[0];
-        } else if (len < 4) {
-            throw new IllegalArgumentException(
-                    "Base64-encoded string must have at least four characters, but length specified was " + len);
-        } // end if
-
-        byte[] DECODABET = getDecodabet(options);
-
-        int len34 = len * 3 / 4; // Estimate on array size
-        byte[] outBuff = new byte[len34]; // Upper limit on size of output
-        int outBuffPosn = 0; // Keep track of where we're writing
-
-        byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating
-                                 // white space
-        int b4Posn = 0; // Keep track of four byte input buffer
-        int i = 0; // Source array counter
-        byte sbiDecode = 0; // Special value from DECODABET
-
-        for (i = off; i < off + len; i++) { // Loop through source
-
-            sbiDecode = DECODABET[source[i] & 0xFF];
-
-            // White space, Equals sign, or legit Base64 character
-            // Note the values such as -5 and -9 in the
-            // DECODABETs at the top of the file.
-            if (sbiDecode >= WHITE_SPACE_ENC) {
-                if (sbiDecode >= EQUALS_SIGN_ENC) {
-                    b4[b4Posn++] = source[i]; // Save non-whitespace
-                    if (b4Posn > 3) { // Time to decode?
-                        outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, options);
-                        b4Posn = 0;
-
-                        // If that was the equals sign, break out of 'for' loop
-                        if (source[i] == EQUALS_SIGN) {
-                            break;
-                        } // end if: equals sign
-                    } // end if: quartet built
-                } // end if: equals sign or better
-            } // end if: white space, equals sign or better
-            else {
-                // There's a bad input character in the Base64 stream.
-                throw new java.io.IOException(String.format(
-                        "Bad Base64 input character decimal %d in array position %d", ((int) source[i]) & 0xFF, i));
-            } // end else:
-        } // each input character
-
-        byte[] out = new byte[outBuffPosn];
-        System.arraycopy(outBuff, 0, out, 0, outBuffPosn);
-        return out;
-    } // end decode
-
-    /**
-     * Decodes data from Base64 notation, automatically detecting
-     * gzip-compressed data and decompressing it.
-     * 
-     * @param s
-     *            the string to decode
-     * @return the decoded data
-     * @throws java.io.IOException
-     *             If there is a problem
-     * @since 1.4
-     */
-    public static byte[] decode(String s) throws java.io.IOException {
-        return decode(s, NO_OPTIONS);
-    }
-
-    /**
-     * Decodes data from Base64 notation, automatically detecting
-     * gzip-compressed data and decompressing it.
-     * 
-     * @param s
-     *            the string to decode
-     * @param options
-     *            encode options such as URL_SAFE
-     * @return the decoded data
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if <tt>s</tt> is null
-     * @since 1.4
-     */
-    public static byte[] decode(String s, int options) throws java.io.IOException {
-
-        if (s == null) {
-            throw new NullPointerException("Input string was null.");
-        } // end if
-
-        byte[] bytes;
-        try {
-            bytes = s.getBytes(PREFERRED_ENCODING);
-        } // end try
-        catch (java.io.UnsupportedEncodingException uee) {
-            bytes = IOUtils.toUTF8Bytes(s);
-        } // end catch
-          // </change>
-
-        // Decode
-        bytes = decode(bytes, 0, bytes.length, options);
-
-        // Check to see if it's gzip-compressed
-        // GZIP Magic Two-Byte Number: 0x8b1f (35615)
-        boolean dontGunzip = (options & DONT_GUNZIP) != 0;
-        if ((bytes != null) && (bytes.length >= 4) && (!dontGunzip)) {
-
-            int head = ((int) bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00);
-            if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) {
-                java.io.ByteArrayInputStream bais = null;
-                java.util.zip.GZIPInputStream gzis = null;
-                java.io.ByteArrayOutputStream baos = null;
-                byte[] buffer = new byte[2048];
-                int length = 0;
-
-                try {
-                    baos = new java.io.ByteArrayOutputStream();
-                    bais = new java.io.ByteArrayInputStream(bytes);
-                    gzis = new java.util.zip.GZIPInputStream(bais, 64 * 1024);
-
-                    while ((length = gzis.read(buffer)) >= 0) {
-                        baos.write(buffer, 0, length);
-                    } // end while: reading input
-
-                    // No error? Get new bytes.
-                    bytes = baos.toByteArray();
-
-                } // end try
-                catch (java.io.IOException e) {
-                    LOG.error(e.getMessage(), e);
-                    // Just return originally-decoded bytes
-                } // end catch
-                finally {
-                    IOUtils.closeQuietly(baos);
-                    IOUtils.closeQuietly(gzis);
-                    IOUtils.closeQuietly(bais);
-                } // end finally
-
-            } // end if: gzipped
-        } // end if: bytes.length >= 2
-
-        return bytes;
-    } // end decode
-
-    /**
-     * Attempts to decode Base64 data and deserialize a Java Object within.
-     * Returns <tt>null</tt> if there was an error.
-     * 
-     * @param encodedObject
-     *            The Base64 data to decode
-     * @return The decoded and deserialized object
-     * @throws NullPointerException
-     *             if encodedObject is null
-     * @throws java.io.IOException
-     *             if there is a general error
-     * @throws ClassNotFoundException
-     *             if the decoded object is of a class that cannot be found by
-     *             the JVM
-     * @since 1.5
-     */
-    public static Object decodeToObject(String encodedObject) throws java.io.IOException,
-            java.lang.ClassNotFoundException {
-        return decodeToObject(encodedObject, NO_OPTIONS, null);
-    }
-
-    /**
-     * Attempts to decode Base64 data and deserialize a Java Object within.
-     * Returns <tt>null</tt> if there was an error. If <tt>loader</tt> is not
-     * null, it will be the class loader used when deserializing.
-     * 
-     * @param encodedObject
-     *            The Base64 data to decode
-     * @param options
-     *            Various parameters related to decoding
-     * @param loader
-     *            Optional class loader to use in deserializing classes.
-     * @return The decoded and deserialized object
-     * @throws NullPointerException
-     *             if encodedObject is null
-     * @throws java.io.IOException
-     *             if there is a general error
-     * @throws ClassNotFoundException
-     *             if the decoded object is of a class that cannot be found by
-     *             the JVM
-     * @since 2.3.4
-     */
-    public static Object decodeToObject(String encodedObject, int options, final ClassLoader loader)
-            throws java.io.IOException, java.lang.ClassNotFoundException {
-
-        // Decode and gunzip if necessary
-        byte[] objBytes = decode(encodedObject, options);
-
-        java.io.ByteArrayInputStream bais = null;
-        java.io.ObjectInputStream ois = null;
-        Object obj = null;
-
-        try {
-            bais = new java.io.ByteArrayInputStream(objBytes);
-
-            // If no custom class loader is provided, use Java's builtin OIS.
-            if (loader == null) {
-                ois = new java.io.ObjectInputStream(bais);
-            } // end if: no loader provided
-
-            // Else make a customized object input stream that uses
-            // the provided class loader.
-            else {
-                ois = new java.io.ObjectInputStream(bais) {
-                    @Override
-                    public Class<?> resolveClass(java.io.ObjectStreamClass streamClass) throws java.io.IOException,
-                            ClassNotFoundException {
-                        Class<?> c = Class.forName(streamClass.getName(), false, loader);
-                        if (c == null) {
-                            return super.resolveClass(streamClass);
-                        } else {
-                            return c; // Class loader knows of this class.
-                        } // end else: not null
-                    } // end resolveClass
-                }; // end ois
-            } // end else: no custom class loader
-
-            obj = ois.readObject();
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and throw in order to execute finally{}
-        } // end catch
-        catch (java.lang.ClassNotFoundException e) {
-            throw e; // Catch and throw in order to execute finally{}
-        } // end catch
-        finally {
-            IOUtils.closeQuietly(bais);
-            IOUtils.closeQuietly(ois);
-        } // end finally
-
-        return obj;
-    } // end decodeObject
-
-    /**
-     * Convenience method for encoding data to a file.
-     * 
-     * <p>
-     * As of v 2.3, if there is a error, the method will throw an
-     * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it
-     * just returned false, but in retrospect that's a pretty poor way to handle
-     * it.
-     * </p>
-     * 
-     * @param dataToEncode
-     *            byte array of data to encode in base64 form
-     * @param filename
-     *            Filename for saving encoded data
-     * @throws java.io.IOException
-     *             if there is an error
-     * @throws NullPointerException
-     *             if dataToEncode is null
-     * @since 2.1
-     */
-    public static void encodeToFile(byte[] dataToEncode, String filename) throws java.io.IOException {
-
-        if (dataToEncode == null) {
-            throw new NullPointerException("Data to encode was null.");
-        } // end iff
-
-        Base64.OutputStream bos = null;
-        try {
-            bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.ENCODE);
-            bos.write(dataToEncode);
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and throw to execute finally{} block
-        } // end catch: java.io.IOException
-        finally {
-            IOUtils.closeQuietly(bos);
-        } // end finally
-
-    } // end encodeToFile
-
-    /**
-     * Convenience method for decoding data to a file.
-     * 
-     * <p>
-     * As of v 2.3, if there is a error, the method will throw an
-     * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it
-     * just returned false, but in retrospect that's a pretty poor way to handle
-     * it.
-     * </p>
-     * 
-     * @param dataToDecode
-     *            Base64-encoded data as a string
-     * @param filename
-     *            Filename for saving decoded data
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.1
-     */
-    public static void decodeToFile(String dataToDecode, String filename) throws java.io.IOException {
-
-        Base64.OutputStream bos = null;
-        try {
-            bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.DECODE);
-            bos.write(dataToDecode.getBytes(PREFERRED_ENCODING));
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and throw to execute finally{} block
-        } // end catch: java.io.IOException
-        finally {
-            IOUtils.closeQuietly(bos);
-        } // end finally
-
-    } // end decodeToFile
-
-    /**
-     * Convenience method for reading a base64-encoded file and decoding it.
-     * 
-     * <p>
-     * As of v 2.3, if there is a error, the method will throw an
-     * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it
-     * just returned false, but in retrospect that's a pretty poor way to handle
-     * it.
-     * </p>
-     * 
-     * @param filename
-     *            Filename for reading encoded data
-     * @return decoded byte array
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.1
-     */
-    public static byte[] decodeFromFile(String filename) throws java.io.IOException {
-
-        byte[] decodedData = null;
-        Base64.InputStream bis = null;
-        try {
-            // Set up some useful variables
-            java.io.File file = new java.io.File(filename);
-            byte[] buffer = null;
-            int length = 0;
-            int numBytes = 0;
-
-            // Check for size of file
-            if (file.length() > Integer.MAX_VALUE) {
-                throw new java.io.IOException("File is too big for this convenience method (" + file.length()
-                        + " bytes).");
-            } // end if: file too big for int index
-            buffer = new byte[(int) file.length()];
-
-            // Open a stream
-            bis = new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
-                    Base64.DECODE);
-
-            // Read until done
-            while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
-                length += numBytes;
-            } // end while
-
-            // Save in a variable to return
-            decodedData = new byte[length];
-            System.arraycopy(buffer, 0, decodedData, 0, length);
-
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and release to execute finally{}
-        } // end catch: java.io.IOException
-        finally {
-            IOUtils.closeQuietly(bis);
-        } // end finally
-
-        return decodedData;
-    } // end decodeFromFile
-
-    /**
-     * Convenience method for reading a binary file and base64-encoding it.
-     * 
-     * <p>
-     * As of v 2.3, if there is a error, the method will throw an
-     * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it
-     * just returned false, but in retrospect that's a pretty poor way to handle
-     * it.
-     * </p>
-     * 
-     * @param filename
-     *            Filename for reading binary data
-     * @return base64-encoded string
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.1
-     */
-    public static String encodeFromFile(String filename) throws java.io.IOException {
-
-        String encodedData = null;
-        Base64.InputStream bis = null;
-        try {
-            // Set up some useful variables
-            java.io.File file = new java.io.File(filename);
-            byte[] buffer = new byte[Math.max((int) (file.length() * 1.4 + 1), 40)]; // Need
-                                                                                     // max()
-                                                                                     // for
-                                                                                     // math
-                                                                                     // on
-                                                                                     // small
-                                                                                     // files
-                                                                                     // (v2.2.1);
-                                                                                     // Need
-                                                                                     // +1
-                                                                                     // for
-                                                                                     // a
-                                                                                     // few
-                                                                                     // corner
-                                                                                     // cases
-                                                                                     // (v2.3.5)
-            int length = 0;
-            int numBytes = 0;
-
-            // Open a stream
-            bis = new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
-                    Base64.ENCODE);
-
-            // Read until done
-            while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
-                length += numBytes;
-            } // end while
-
-            // Save in a variable to return
-            encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING);
-
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and release to execute finally{}
-        } // end catch: java.io.IOException
-        finally {
-            IOUtils.closeQuietly(bis);
-        } // end finally
-
-        return encodedData;
-    } // end encodeFromFile
-
-    /**
-     * Reads <tt>infile</tt> and encodes it to <tt>outfile</tt>.
-     * 
-     * @param infile
-     *            Input file
-     * @param outfile
-     *            Output file
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.2
-     */
-    public static void encodeFileToFile(String infile, String outfile) throws java.io.IOException {
-
-        String encoded = Base64.encodeFromFile(infile);
-        java.io.OutputStream out = null;
-        try {
-            out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
-            out.write(encoded.getBytes("US-ASCII")); // Strict, 7-bit output.
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and release to execute finally{}
-        } // end catch
-        finally {
-            IOUtils.closeQuietly(out);
-        } // end finally
-    } // end encodeFileToFile
-
-    /**
-     * Reads <tt>infile</tt> and decodes it to <tt>outfile</tt>.
-     * 
-     * @param infile
-     *            Input file
-     * @param outfile
-     *            Output file
-     * @throws java.io.IOException
-     *             if there is an error
-     * @since 2.2
-     */
-    public static void decodeFileToFile(String infile, String outfile) throws java.io.IOException {
-
-        byte[] decoded = Base64.decodeFromFile(infile);
-        java.io.OutputStream out = null;
-        try {
-            out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
-            out.write(decoded);
-        } // end try
-        catch (java.io.IOException e) {
-            throw e; // Catch and release to execute finally{}
-        } // end catch
-        finally {
-            IOUtils.closeQuietly(out);
-        } // end finally
-    } // end decodeFileToFile
-
-    /* ******** I N N E R C L A S S I N P U T S T R E A M ******** */
-
-    /**
-     * A {@link Base64.InputStream} will read data from another
-     * <tt>java.io.InputStream</tt>, given in the constructor, and encode/decode
-     * to/from Base64 notation on the fly.
-     * 
-     * @see Base64
-     * @since 1.3
-     */
-    public static class InputStream extends java.io.FilterInputStream {
-
-        private boolean encode; // Encoding or decoding
-        private int position; // Current position in the buffer
-        private byte[] buffer; // Small buffer holding converted data
-        private int bufferLength; // Length of buffer (3 or 4)
-        private int numSigBytes; // Number of meaningful bytes in the buffer
-        private int lineLength;
-        private boolean breakLines; // Break lines at less than 80 characters
-        private int options; // Record options used to create the stream.
-        private byte[] decodabet; // Local copies to avoid extra method calls
-
-        /**
-         * Constructs a {@link Base64.InputStream} in DECODE mode.
-         * 
-         * @param in
-         *            the <tt>java.io.InputStream</tt> from which to read data.
-         * @since 1.3
-         */
-        public InputStream(java.io.InputStream in) {
-            this(in, DECODE);
-        } // end constructor
-
-        /**
-         * Constructs a {@link Base64.InputStream} in either ENCODE or DECODE
-         * mode.
-         * <p>
-         * Valid options:
-         * 
-         * <pre>
-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DO_BREAK_LINES: break lines at 76 characters
-         *     (only meaningful when encoding)</i>
-         * </pre>
-         * <p>
-         * Example: <code>new Base64.InputStream( in, Base64.DECODE )</code>
-         * 
-         * 
-         * @param in
-         *            the <tt>java.io.InputStream</tt> from which to read data.
-         * @param options
-         *            Specified options
-         * @see Base64#ENCODE
-         * @see Base64#DECODE
-         * @see Base64#DO_BREAK_LINES
-         * @since 2.0
-         */
-        public InputStream(java.io.InputStream in, int options) {
-
-            super(in);
-            this.options = options; // Record for later
-            this.breakLines = (options & DO_BREAK_LINES) > 0;
-            this.encode = (options & ENCODE) > 0;
-            this.bufferLength = encode ? 4 : 3;
-            this.buffer = new byte[bufferLength];
-            this.position = -1;
-            this.lineLength = 0;
-            this.decodabet = getDecodabet(options);
-        } // end constructor
-
-        /**
-         * Reads enough of the input stream to convert to/from Base64 and
-         * returns the next byte.
-         * 
-         * @return next byte
-         * @since 1.3
-         */
-        @Override
-        public int read() throws java.io.IOException {
-
-            // Do we need to get data?
-            if (position < 0) {
-                if (encode) {
-                    byte[] b3 = new byte[3];
-                    int numBinaryBytes = 0;
-                    for (int i = 0; i < 3; i++) {
-                        int b = in.read();
-
-                        // If end of stream, b is -1.
-                        if (b >= 0) {
-                            b3[i] = (byte) b;
-                            numBinaryBytes++;
-                        } else {
-                            break; // out of for loop
-                        } // end else: end of stream
-
-                    } // end for: each needed input byte
-
-                    if (numBinaryBytes > 0) {
-                        encode3to4(b3, 0, numBinaryBytes, buffer, 0, options);
-                        position = 0;
-                        numSigBytes = 4;
-                    } // end if: got data
-                    else {
-                        return -1; // Must be end of stream
-                    } // end else
-                } // end if: encoding
-
-                // Else decoding
-                else {
-                    byte[] b4 = new byte[4];
-                    int i = 0;
-                    for (i = 0; i < 4; i++) {
-                        // Read four "meaningful" bytes:
-                        int b = 0;
-                        do {
-                            b = in.read();
-                        } while (b >= 0 && decodabet[b & 0x7f] <= WHITE_SPACE_ENC);
-
-                        if (b < 0) {
-                            break; // Reads a -1 if end of stream
-                        } // end if: end of stream
-
-                        b4[i] = (byte) b;
-                    } // end for: each needed input byte
-
-                    if (i == 4) {
-                        numSigBytes = decode4to3(b4, 0, buffer, 0, options);
-                        position = 0;
-                    } // end if: got four characters
-                    else if (i == 0) {
-                        return -1;
-                    } // end else if: also padded correctly
-                    else {
-                        // Must have broken out from above.
-                        throw new java.io.IOException("Improperly padded Base64 input.");
-                    } // end
-
-                } // end else: decode
-            } // end else: get data
-
-            // Got data?
-            if (position >= 0) {
-                // End of relevant data?
-                if ( /* !encode && */position >= numSigBytes) {
-                    return -1;
-                } // end if: got data
-
-                if (encode && breakLines && lineLength >= MAX_LINE_LENGTH) {
-                    lineLength = 0;
-                    return '\n';
-                } // end if
-                else {
-                    lineLength++; // This isn't important when decoding
-                                  // but throwing an extra "if" seems
-                                  // just as wasteful.
-
-                    int b = buffer[position++];
-
-                    if (position >= bufferLength) {
-                        position = -1;
-                    } // end if: end
-
-                    return b & 0xFF; // This is how you "cast" a byte that's
-                                     // intended to be unsigned.
-                } // end else
-            } // end if: position >= 0
-
-            // Else error
-            else {
-                throw new java.io.IOException("Error in Base64 code reading stream.");
-            } // end else
-        } // end read
-
-        /**
-         * Calls {@link #read()} repeatedly until the end of stream is reached
-         * or <var>len</var> bytes are read. Returns number of bytes read into
-         * array or -1 if end of stream is encountered.
-         * 
-         * @param dest
-         *            array to hold values
-         * @param off
-         *            offset for array
-         * @param len
-         *            max number of bytes to read into array
-         * @return bytes read into array or -1 if end of stream is encountered.
-         * @since 1.3
-         */
-        @Override
-        public int read(byte[] dest, int off, int len) throws java.io.IOException {
-            int i;
-            int b;
-            for (i = 0; i < len; i++) {
-                b = read();
-
-                if (b >= 0) {
-                    dest[off + i] = (byte) b;
-                } else if (i == 0) {
-                    return -1;
-                } else {
-                    break; // Out of 'for' loop
-                } // Out of 'for' loop
-            } // end for: each byte read
-            return i;
-        } // end read
-
-    } // end inner class InputStream
-
-    /* ******** I N N E R C L A S S O U T P U T S T R E A M ******** */
-
-    /**
-     * A {@link Base64.OutputStream} will write data to another
-     * <tt>java.io.OutputStream</tt>, given in the constructor, and
-     * encode/decode to/from Base64 notation on the fly.
-     * 
-     * @see Base64
-     * @since 1.3
-     */
-    public static class OutputStream extends java.io.FilterOutputStream {
-
-        private boolean encode;
-        private int position;
-        private byte[] buffer;
-        private int bufferLength;
-        private int lineLength;
-        private boolean breakLines;
-        private byte[] b4; // Scratch used in a few places
-        private boolean suspendEncoding;
-        private int options; // Record for later
-        private byte[] decodabet; // Local copies to avoid extra method calls
-
-        /**
-         * Constructs a {@link Base64.OutputStream} in ENCODE mode.
-         * 
-         * @param out
-         *            the <tt>java.io.OutputStream</tt> to which data will be
-         *            written.
-         * @since 1.3
-         */
-        public OutputStream(java.io.OutputStream out) {
-            this(out, ENCODE);
-        } // end constructor
-
-        /**
-         * Constructs a {@link Base64.OutputStream} in either ENCODE or DECODE
-         * mode.
-         * <p>
-         * Valid options:
-         * 
-         * <pre>
-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DO_BREAK_LINES: don't break lines at 76 characters
-         *     (only meaningful when encoding)</i>
-         * </pre>
-         * <p>
-         * Example: <code>new Base64.OutputStream( out, Base64.ENCODE )</code>
-         * 
-         * @param out
-         *            the <tt>java.io.OutputStream</tt> to which data will be
-         *            written.
-         * @param options
-         *            Specified options.
-         * @see Base64#ENCODE
-         * @see Base64#DECODE
-         * @see Base64#DO_BREAK_LINES
-         * @since 1.3
-         */
-        public OutputStream(java.io.OutputStream out, int options) {
-            super(out);
-            this.breakLines = (options & DO_BREAK_LINES) != 0;
-            this.encode = (options & ENCODE) != 0;
-            this.bufferLength = encode ? 3 : 4;
-            this.buffer = new byte[bufferLength];
-            this.position = 0;
-            this.lineLength = 0;
-            this.suspendEncoding = false;
-            this.b4 = new byte[4];
-            this.options = options;
-            this.decodabet = getDecodabet(options);
-        } // end constructor
-
-        /**
-         * Writes the byte to the output stream after converting to/from Base64
-         * notation. When encoding, bytes are buffered three at a time before
-         * the output stream actually gets a write() call. When decoding, bytes
-         * are buffered four at a time.
-         * 
-         * @param theByte
-         *            the byte to write
-         * @since 1.3
-         */
-        @Override
-        public void write(int theByte) throws java.io.IOException {
-            // Encoding suspended?
-            if (suspendEncoding) {
-                this.out.write(theByte);
-                return;
-            } // end if: supsended
-
-            // Encode?
-            if (encode) {
-                buffer[position++] = (byte) theByte;
-                if (position >= bufferLength) { // Enough to encode.
-
-                    this.out.write(encode3to4(b4, buffer, bufferLength, options));
-
-                    lineLength += 4;
-                    if (breakLines && lineLength >= MAX_LINE_LENGTH) {
-                        this.out.write(NEW_LINE);
-                        lineLength = 0;
-                    } // end if: end of line
-
-                    position = 0;
-                } // end if: enough to output
-            } // end if: encoding
-
-            // Else, Decoding
-            else {
-                // Meaningful Base64 character?
-                if (decodabet[theByte & 0x7f] > WHITE_SPACE_ENC) {
-                    buffer[position++] = (byte) theByte;
-                    if (position >= bufferLength) { // Enough to output.
-
-                        int len = Base64.decode4to3(buffer, 0, b4, 0, options);
-                        out.write(b4, 0, len);
-                        position = 0;
-                    } // end if: enough to output
-                } // end if: meaningful base64 character
-                else if (decodabet[theByte & 0x7f] != WHITE_SPACE_ENC) {
-                    throw new java.io.IOException("Invalid character in Base64 data.");
-                } // end else: not white space either
-            } // end else: decoding
-        } // end write
-
-        /**
-         * Calls {@link #write(int)} repeatedly until <var>len</var> bytes are
-         * written.
-         * 
-         * @param theBytes
-         *            array from which to read bytes
-         * @param off
-         *            offset for array
-         * @param len
-         *            max number of bytes to read into array
-         * @since 1.3
-         */
-        @Override
-        public void write(byte[] theBytes, int off, int len) throws java.io.IOException {
-            // Encoding suspended?
-            if (suspendEncoding) {
-                this.out.write(theBytes, off, len);
-                return;
-            } // end if: supsended
-
-            for (int i = 0; i < len; i++) {
-                write(theBytes[off + i]);
-            } // end for: each byte written
-
-        } // end write
-
-        /**
-         * Method added by PHIL. [Thanks, PHIL. -Rob] This pads the buffer
-         * without closing the stream.
-         * 
-         * @throws java.io.IOException
-         *             if there's an error.
-         */
-        public void flushBase64() throws java.io.IOException {
-            if (position > 0) {
-                if (encode) {
-                    out.write(encode3to4(b4, buffer, position, options));
-                    position = 0;
-                } // end if: encoding
-                else {
-                    throw new java.io.IOException("Base64 input not properly padded.");
-                } // end else: decoding
-            } // end if: buffer partially full
-
-        } // end flush
-
-        /**
-         * Flushes and closes (I think, in the superclass) the stream.
-         * 
-         * @since 1.3
-         */
-        @Override
-        public void close() throws java.io.IOException {
-            // 1. Ensure that pending characters are written
-            flushBase64();
-
-            // 2. Actually close the stream
-            // Base class both flushes and closes.
-            super.close();
-
-            buffer = null;
-            out = null;
-        } // end close
-
-        /**
-         * Suspends encoding of the stream. May be helpful if you need to embed
-         * a piece of base64-encoded data in a stream.
-         * 
-         * @throws java.io.IOException
-         *             if there's an error flushing
-         * @since 1.5.1
-         */
-        public void suspendEncoding() throws java.io.IOException {
-            flushBase64();
-            this.suspendEncoding = true;
-        } // end suspendEncoding
-
-        /**
-         * Resumes encoding of the stream. May be helpful if you need to embed a
-         * piece of base64-encoded data in a stream.
-         * 
-         * @since 1.5.1
-         */
-        public void resumeEncoding() {
-            this.suspendEncoding = false;
-        } // end resumeEncoding
-
-    } // end inner class OutputStream
-
-} // end class Base64
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ClassLoaderUtil.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ClassLoaderUtil.java
deleted file mode 100644
index bbbc203..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ClassLoaderUtil.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-public final class ClassLoaderUtil {
-
-    private ClassLoaderUtil() {
-    }
-
-    /**
-     * Loads a class. If the context class loader is set, it is used.
-     */
-    public static Class<?> loadClass(String className) throws ClassNotFoundException {
-        ClassLoader ccl = Thread.currentThread().getContextClassLoader();
-        if (ccl == null) {
-            return loadClass(className, null);
-        }
-
-        try {
-            return loadClass(className, ccl);
-        } catch (ClassNotFoundException cnf) {
-            return loadClass(className, null);
-        }
-    }
-
-    /**
-     * Loads a class from the given class loader.
-     */
-    public static Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
-        if (classLoader == null) {
-            return Class.forName(className);
-        } else {
-            return Class.forName(className, true, classLoader);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java
deleted file mode 100644
index 072d745..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-/**
- * Helper methods to turn a value into a CMIS enum.
- */
-public final class CmisEnumHelper {
-
-    private CmisEnumHelper() {
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <E extends Enum<?>> E fromValue(final String value, final Class<E> clazz) {
-        if (value == null || value.length() == 0) {
-            return null;
-        }
-
-        try {
-            if (Action.class == clazz) {
-                return (E) Action.fromValue(value);
-            } else if (BaseTypeId.class == clazz) {
-                return (E) BaseTypeId.fromValue(value);
-            } else if (CmisVersion.class == clazz) {
-                return (E) CmisVersion.fromValue(value);
-            } else if (IncludeRelationships.class == clazz) {
-                return (E) IncludeRelationships.fromValue(value);
-            } else if (ReturnVersion.class == clazz) {
-                return (E) ReturnVersion.fromValue(value);
-            } else if (VersioningState.class == clazz) {
-                return (E) VersioningState.fromValue(value);
-            } else if (RelationshipDirection.class == clazz) {
-                return (E) RelationshipDirection.fromValue(value);
-            } else if (AclPropagation.class == clazz) {
-                return (E) AclPropagation.fromValue(value);
-            } else if (UnfileObject.class == clazz) {
-                return (E) UnfileObject.fromValue(value);
-            } else if (PropertyType.class == clazz) {
-                return (E) PropertyType.fromValue(value);
-            } else if (Cardinality.class == clazz) {
-                return (E) Cardinality.fromValue(value);
-            } else if (Updatability.class == clazz) {
-                return (E) Updatability.fromValue(value);
-            } else if (ContentStreamAllowed.class == clazz) {
-                return (E) ContentStreamAllowed.fromValue(value);
-            } else if (DateTimeResolution.class == clazz) {
-                return (E) DateTimeResolution.fromValue(value);
-            } else if (ChangeType.class == clazz) {
-                return (E) ChangeType.fromValue(value);
-            } else if (SupportedPermissions.class == clazz) {
-                return (E) SupportedPermissions.fromValue(value);
-            } else if (CapabilityAcl.class == clazz) {
-                return (E) CapabilityAcl.fromValue(value);
-            } else if (CapabilityChanges.class == clazz) {
-                return (E) CapabilityChanges.fromValue(value);
-            } else if (CapabilityContentStreamUpdates.class == clazz) {
-                return (E) CapabilityContentStreamUpdates.fromValue(value);
-            } else if (CapabilityJoin.class == clazz) {
-                return (E) CapabilityJoin.fromValue(value);
-            } else if (CapabilityOrderBy.class == clazz) {
-                return (E) CapabilityOrderBy.fromValue(value);
-            } else if (CapabilityQuery.class == clazz) {
-                return (E) CapabilityQuery.fromValue(value);
-            } else if (CapabilityRenditions.class == clazz) {
-                return (E) CapabilityRenditions.fromValue(value);
-            }
-        } catch (IllegalArgumentException e) {
-            throw new CmisInvalidArgumentException("Invalid enum value '" + value + "'!", e);
-        }
-
-        throw new CmisRuntimeException(clazz.getSimpleName() + " is not a CMIS enum!");
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <E extends Enum<?>> E fromValue(final BigInteger value, final Class<E> clazz) {
-        if (value == null) {
-            return null;
-        }
-
-        try {
-            if (DecimalPrecision.class == clazz) {
-                return (E) DecimalPrecision.fromValue(value);
-            }
-        } catch (IllegalArgumentException e) {
-            throw new CmisInvalidArgumentException("Invalid enum value '" + value + "'!", e);
-        }
-
-        throw new CmisRuntimeException(clazz.getSimpleName() + " is not a CMIS enum!");
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CollectionsHelper.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CollectionsHelper.java
deleted file mode 100644
index 41fb0f1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CollectionsHelper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.util.Collection;
-import java.util.Map;
-
-public final class CollectionsHelper {
-
-    private CollectionsHelper() {
-    }
-
-    public static boolean isNotEmpty(Collection<?> col) {
-        return col != null && !col.isEmpty();
-    }
-
-    public static boolean isNotEmpty(Map<?, ?> map) {
-        return map != null && !map.isEmpty();
-    }
-
-    public static boolean isNullOrEmpty(Collection<?> col) {
-        return col == null || col.isEmpty();
-    }
-
-    public static boolean isNullOrEmpty(Map<?, ?> map) {
-        return map == null || map.isEmpty();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java
deleted file mode 100644
index 170f251..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-/**
- * Constants for CMIS server and client.
- */
-@SuppressWarnings("PMD.AvoidDuplicateLiterals")
-public final class Constants {
-
-    /**
-     * Private constructor.
-     */
-    private Constants() {
-    }
-
-    // media types
-    public static final String MEDIATYPE_SERVICE = "application/atomsvc+xml";
-    public static final String MEDIATYPE_FEED = "application/atom+xml;type=feed";
-    public static final String MEDIATYPE_ENTRY = "application/atom+xml;type=entry";
-    public static final String MEDIATYPE_CHILDREN = MEDIATYPE_FEED;
-    public static final String MEDIATYPE_DESCENDANTS = "application/cmistree+xml";
-    public static final String MEDIATYPE_QUERY = "application/cmisquery+xml";
-    public static final String MEDIATYPE_ALLOWABLEACTION = "application/cmisallowableactions+xml";
-    public static final String MEDIATYPE_ACL = "application/cmisacl+xml";
-    public static final String MEDIATYPE_CMISATOM = "application/cmisatom+xml";
-    public static final String MEDIATYPE_OCTETSTREAM = "application/octet-stream";
-
-    // collections
-    public static final String COLLECTION_ROOT = "root";
-    public static final String COLLECTION_TYPES = "types";
-    public static final String COLLECTION_QUERY = "query";
-    public static final String COLLECTION_CHECKEDOUT = "checkedout";
-    public static final String COLLECTION_UNFILED = "unfiled";
-    public static final String COLLECTION_BULK_UPDATE = "update";
-
-    // URI templates
-    public static final String TEMPLATE_OBJECT_BY_ID = "objectbyid";
-    public static final String TEMPLATE_OBJECT_BY_PATH = "objectbypath";
-    public static final String TEMPLATE_TYPE_BY_ID = "typebyid";
-    public static final String TEMPLATE_QUERY = "query";
-
-    // Link rel
-    public static final String REL_SELF = "self";
-    public static final String REL_ENCLOSURE = "enclosure";
-    public static final String REL_SERVICE = "service";
-    public static final String REL_DESCRIBEDBY = "describedby";
-    public static final String REL_ALTERNATE = "alternate";
-    public static final String REL_DOWN = "down";
-    public static final String REL_UP = "up";
-    public static final String REL_FIRST = "first";
-    public static final String REL_LAST = "last";
-    public static final String REL_PREV = "previous";
-    public static final String REL_NEXT = "next";
-    public static final String REL_VIA = "via";
-    public static final String REL_EDIT = "edit";
-    public static final String REL_EDITMEDIA = "edit-media";
-    public static final String REL_VERSIONHISTORY = "version-history";
-    public static final String REL_CURRENTVERSION = "current-version";
-    public static final String REL_WORKINGCOPY = "working-copy";
-    public static final String REL_FOLDERTREE = "http://docs.oasis-open.org/ns/cmis/link/200908/foldertree";
-    public static final String REL_ALLOWABLEACTIONS = "http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions";
-    public static final String REL_ACL = "http://docs.oasis-open.org/ns/cmis/link/200908/acl";
-    public static final String REL_SOURCE = "http://docs.oasis-open.org/ns/cmis/link/200908/source";
-    public static final String REL_TARGET = "http://docs.oasis-open.org/ns/cmis/link/200908/target";
-
-    public static final String REL_RELATIONSHIPS = "http://docs.oasis-open.org/ns/cmis/link/200908/relationships";
-    public static final String REL_POLICIES = "http://docs.oasis-open.org/ns/cmis/link/200908/policies";
-
-    public static final String REP_REL_TYPEDESC = "http://docs.oasis-open.org/ns/cmis/link/200908/typedescendants";
-    public static final String REP_REL_FOLDERTREE = "http://docs.oasis-open.org/ns/cmis/link/200908/foldertree";
-    public static final String REP_REL_ROOTDESC = "http://docs.oasis-open.org/ns/cmis/link/200908/rootdescendants";
-    public static final String REP_REL_CHANGES = "http://docs.oasis-open.org/ns/cmis/link/200908/changes";
-
-    // browser binding selectors
-    public static final String SELECTOR_LAST_RESULT = "lastResult";
-    public static final String SELECTOR_REPOSITORY_INFO = "repositoryInfo";
-    public static final String SELECTOR_TYPE_CHILDREN = "typeChildren";
-    public static final String SELECTOR_TYPE_DESCENDANTS = "typeDescendants";
-    public static final String SELECTOR_TYPE_DEFINITION = "typeDefinition";
-    public static final String SELECTOR_CONTENT = "content";
-    public static final String SELECTOR_OBJECT = "object";
-    public static final String SELECTOR_PROPERTIES = "properties";
-    public static final String SELECTOR_ALLOWABLEACTIONS = "allowableActions";
-    public static final String SELECTOR_RENDITIONS = "renditions";
-    public static final String SELECTOR_CHILDREN = "children";
-    public static final String SELECTOR_DESCENDANTS = "descendants";
-    public static final String SELECTOR_PARENTS = "parents";
-    public static final String SELECTOR_PARENT = "parent";
-    public static final String SELECTOR_FOLDER_TREE = "folderTree";
-    public static final String SELECTOR_QUERY = "query";
-    public static final String SELECTOR_VERSIONS = "versions";
-    public static final String SELECTOR_RELATIONSHIPS = "relationships";
-    public static final String SELECTOR_CHECKEDOUT = "checkedout";
-    public static final String SELECTOR_POLICIES = "policies";
-    public static final String SELECTOR_ACL = "acl";
-    public static final String SELECTOR_CONTENT_CHANGES = "contentChanges";
-
-    // browser binding actions
-    public static final String CMISACTION_CREATE_TYPE = "createType";
-    public static final String CMISACTION_UPDATE_TYPE = "updateType";
-    public static final String CMISACTION_DELETE_TYPE = "deleteType";
-    public static final String CMISACTION_CREATE_DOCUMENT = "createDocument";
-    public static final String CMISACTION_CREATE_DOCUMENT_FROM_SOURCE = "createDocumentFromSource";
-    public static final String CMISACTION_CREATE_FOLDER = "createFolder";
-    public static final String CMISACTION_CREATE_RELATIONSHIP = "createRelationship";
-    public static final String CMISACTION_CREATE_POLICY = "createPolicy";
-    public static final String CMISACTION_CREATE_ITEM = "createItem";
-    public static final String CMISACTION_UPDATE_PROPERTIES = "update";
-    public static final String CMISACTION_BULK_UPDATE = "bulkUpdate";
-    public static final String CMISACTION_DELETE_CONTENT = "deleteContent";
-    public static final String CMISACTION_SET_CONTENT = "setContent";
-    public static final String CMISACTION_APPEND_CONTENT = "appendContent";
-    public static final String CMISACTION_DELETE = "delete";
-    public static final String CMISACTION_DELETE_TREE = "deleteTree";
-    public static final String CMISACTION_MOVE = "move";
-    public static final String CMISACTION_ADD_OBJECT_TO_FOLDER = "addObjectToFolder";
-    public static final String CMISACTION_REMOVE_OBJECT_FROM_FOLDER = "removeObjectFromFolder";
-    public static final String CMISACTION_QUERY = "query";
-    public static final String CMISACTION_CHECK_OUT = "checkOut";
-    public static final String CMISACTION_CANCEL_CHECK_OUT = "cancelCheckOut";
-    public static final String CMISACTION_CHECK_IN = "checkIn";
-    public static final String CMISACTION_APPLY_POLICY = "applyPolicy";
-    public static final String CMISACTION_REMOVE_POLICY = "removePolicy";
-    public static final String CMISACTION_APPLY_ACL = "applyACL";
-
-    // browser binding control
-    public static final String CONTROL_CMISACTION = "cmisaction";
-    public static final String CONTROL_SUCCINCT = "succinct";
-    public static final String CONTROL_TOKEN = "token";
-    public static final String CONTROL_OBJECT_ID = "objectId";
-    public static final String CONTROL_PROP_ID = "propertyId";
-    public static final String CONTROL_PROP_VALUE = "propertyValue";
-    public static final String CONTROL_POLICY = "policy";
-    public static final String CONTROL_ADD_ACE_PRINCIPAL = "addACEPrincipal";
-    public static final String CONTROL_ADD_ACE_PERMISSION = "addACEPermission";
-    public static final String CONTROL_REMOVE_ACE_PRINCIPAL = "removeACEPrincipal";
-    public static final String CONTROL_REMOVE_ACE_PERMISSION = "removeACEPermission";
-    public static final String CONTROL_CONTENT_TYPE = "contenttype";
-    public static final String CONTROL_FILENAME = "filename";
-    public static final String CONTROL_IS_LAST_CHUNK = "isLastChunk";
-    public static final String CONTROL_TYPE = "type";
-    public static final String CONTROL_TYPE_ID = "typeId";
-    public static final String CONTROL_CHANGE_TOKEN = "changeToken";
-    public static final String CONTROL_ADD_SECONDARY_TYPE = "addSecondaryTypeId";
-    public static final String CONTROL_REMOVE_SECONDARY_TYPE = "removeSecondaryTypeId";
-
-    // parameter
-    public static final String PARAM_ACL = "includeACL";
-    public static final String PARAM_ALLOWABLE_ACTIONS = "includeAllowableActions";
-    public static final String PARAM_ALL_VERSIONS = "allVersions";
-    public static final String PARAM_APPEND = "append";
-    public static final String PARAM_CHANGE_LOG_TOKEN = "changeLogToken";
-    public static final String PARAM_CHANGE_TOKEN = "changeToken";
-    public static final String PARAM_CHECKIN_COMMENT = "checkinComment";
-    public static final String PARAM_CHECK_IN = "checkin";
-    public static final String PARAM_CHILD_TYPES = "childTypes";
-    public static final String PARAM_CONTINUE_ON_FAILURE = "continueOnFailure";
-    public static final String PARAM_DEPTH = "depth";
-    public static final String PARAM_DOWNLOAD = "download";
-    public static final String PARAM_FILTER = "filter";
-    public static final String PARAM_SUCCINCT = "succinct";
-    public static final String PARAM_DATETIME_FORMAT = "dateTimeFormat";
-    public static final String PARAM_FOLDER_ID = "folderId";
-    public static final String PARAM_ID = "id";
-    public static final String PARAM_IS_LAST_CHUNK = "isLastChunk";
-    public static final String PARAM_MAJOR = "major";
-    public static final String PARAM_MAX_ITEMS = "maxItems";
-    public static final String PARAM_OBJECT_ID = "objectId";
-    public static final String PARAM_ONLY_BASIC_PERMISSIONS = "onlyBasicPermissions";
-    public static final String PARAM_ORDER_BY = "orderBy";
-    public static final String PARAM_OVERWRITE_FLAG = "overwriteFlag";
-    public static final String PARAM_PATH = "path";
-    public static final String PARAM_PATH_SEGMENT = "includePathSegment";
-    public static final String PARAM_POLICY_ID = "policyId";
-    public static final String PARAM_POLICY_IDS = "includePolicyIds";
-    public static final String PARAM_PROPERTIES = "includeProperties";
-    public static final String PARAM_PROPERTY_DEFINITIONS = "includePropertyDefinitions";
-    public static final String PARAM_RELATIONSHIPS = "includeRelationships";
-    public static final String PARAM_RELATIONSHIP_DIRECTION = "relationshipDirection";
-    public static final String PARAM_RELATIVE_PATH_SEGMENT = "includeRelativePathSegment";
-    public static final String PARAM_REMOVE_FROM = "removeFrom";
-    public static final String PARAM_RENDITION_FILTER = "renditionFilter";
-    public static final String PARAM_REPOSITORY_ID = "repositoryId";
-    public static final String PARAM_RETURN_VERSION = "returnVersion";
-    public static final String PARAM_SKIP_COUNT = "skipCount";
-    public static final String PARAM_SOURCE_FOLDER_ID = "sourceFolderId";
-    public static final String PARAM_TARGET_FOLDER_ID = "targetFolderId";
-    public static final String PARAM_STREAM_ID = "streamId";
-    public static final String PARAM_SUB_RELATIONSHIP_TYPES = "includeSubRelationshipTypes";
-    public static final String PARAM_TYPE_ID = "typeId";
-    public static final String PARAM_UNFILE_OBJECTS = "unfileObjects";
-    public static final String PARAM_VERSION_SERIES_ID = "versionSeries";
-    public static final String PARAM_VERSIONIG_STATE = "versioningState";
-    public static final String PARAM_Q = "q";
-    public static final String PARAM_STATEMENT = "statement";
-    public static final String PARAM_SEARCH_ALL_VERSIONS = "searchAllVersions";
-    public static final String PARAM_ACL_PROPAGATION = "ACLPropagation";
-    public static final String PARAM_SOURCE_ID = "sourceId";
-
-    public static final String PARAM_SELECTOR = "cmisselector";
-    public static final String PARAM_CALLBACK = "callback";
-    public static final String PARAM_SUPPRESS_RESPONSE_CODES = "suppressResponseCodes";
-    public static final String PARAM_TOKEN = "token";
-
-    // rendition filter
-    public static final String RENDITION_NONE = "cmis:none";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/DateTimeHelper.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/DateTimeHelper.java
deleted file mode 100644
index 72ee6fc..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/DateTimeHelper.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.math.BigDecimal;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public final class DateTimeHelper {
-
-    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-    private static final Pattern XML_DATETIME = Pattern
-            .compile("(\\d{4,9})-([01]\\d)-([0-3]\\d)T([0-2]\\d):([0-5]\\d):([0-5]\\d)(\\.(\\d+))?(([+-][0-2]\\d:[0-5]\\d)|Z)?");
-    private static final BigDecimal BD1000 = new BigDecimal(1000);
-
-    private static final String[] WDAYS = new String[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
-
-    private static final String[] MONTHS = new String[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
-            "Sep", "Oct", "Nov", "Dec" };
-
-    private static final Map<String, Integer> MONTHS_MAP = new HashMap<String, Integer>();
-    static {
-        for (int i = 0; i < MONTHS.length; i++) {
-            MONTHS_MAP.put(MONTHS[i], i);
-        }
-    }
-
-    private static final Pattern HTTP_DATETIME1 = Pattern
-            .compile("\\w{3}, ([0-3]\\d) (\\w{3}) (\\d{4}) ([0-2]\\d):([0-5]\\d):([0-5]\\d) GMT");
-
-    private static final Pattern HTTP_DATETIME2 = Pattern
-            .compile("\\w{6,9}, ([0-3]\\d)-(\\w{3})-(\\d{2}) ([0-2]\\d):([0-5]\\d):([0-5]\\d) GMT");
-
-    private static final Pattern HTTP_DATETIME3 = Pattern
-            .compile("\\w{3} (\\w{3}) ([0-3 ]\\d) ([0-2]\\d):([0-5]\\d):([0-5]\\d) (\\d{4})");
-
-    private DateTimeHelper() {
-    }
-
-    /**
-     * Parses a xsd:dateTime string.
-     */
-    public static GregorianCalendar parseXmlDateTime(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        final Matcher m = XML_DATETIME.matcher(s);
-
-        if (!m.matches()) {
-            return null;
-        }
-
-        try {
-            int year = Integer.parseInt(m.group(1));
-            int month = Integer.parseInt(m.group(2));
-            int day = Integer.parseInt(m.group(3));
-            int hour = Integer.parseInt(m.group(4));
-            int minute = Integer.parseInt(m.group(5));
-            int second = Integer.parseInt(m.group(6));
-            int millisecond = 0;
-
-            if (m.group(8) != null) {
-                millisecond = (new BigDecimal("0." + m.group(8))).multiply(BD1000).intValue();
-            }
-
-            TimeZone tz = GMT;
-
-            if (m.group(10) != null) {
-                tz = TimeZone.getTimeZone("GMT" + m.group(10));
-            }
-
-            final GregorianCalendar result = new GregorianCalendar();
-            result.clear();
-
-            result.setTimeZone(tz);
-            result.set(year, month - 1, day, hour, minute, second);
-            result.set(Calendar.MILLISECOND, millisecond);
-
-            return result;
-        } catch (NumberFormatException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Returns a xsd:dateTime string.
-     */
-    public static String formatXmlDateTime(long millis) {
-        final GregorianCalendar cal = new GregorianCalendar(GMT);
-        cal.setTimeInMillis(millis);
-
-        return formatXmlDateTime(cal);
-    }
-
-    /**
-     * Returns a xsd:dateTime string.
-     */
-    public static String formatXmlDateTime(GregorianCalendar cal) {
-        if (cal == null) {
-            throw new IllegalArgumentException();
-        }
-
-        final StringBuilder sb = new StringBuilder();
-        add4d(sb, cal.get(Calendar.YEAR));
-        sb.append('-');
-        add2d(sb, cal.get(Calendar.MONTH) + 1);
-        sb.append('-');
-        add2d(sb, cal.get(Calendar.DAY_OF_MONTH));
-        sb.append('T');
-        add2d(sb, cal.get(Calendar.HOUR_OF_DAY));
-        sb.append(':');
-        add2d(sb, cal.get(Calendar.MINUTE));
-        sb.append(':');
-        add2d(sb, cal.get(Calendar.SECOND));
-
-        int ms = cal.get(Calendar.MILLISECOND);
-        if (ms > 0) {
-            sb.append('.');
-            add3d(sb, ms);
-            while (sb.charAt(sb.length() - 1) == '0') {
-                sb.deleteCharAt(sb.length() - 1);
-            }
-        }
-
-        int tz = cal.getTimeZone().getOffset(cal.getTimeInMillis());
-        if (tz == 0) {
-            sb.append('Z');
-        } else {
-            if (tz > 0) {
-                sb.append('+');
-            } else {
-                sb.append('-');
-                tz *= -1;
-            }
-            add2d(sb, tz / 3600000);
-            sb.append(':');
-            int tzm = tz % 3600000;
-            add2d(sb, tzm == 0 ? 0 : tzm / 60000);
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Parses a HTTP date.
-     */
-    public static Date parseHttpDateTime(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        s = s.trim();
-        if (s.length() > 1 && s.charAt(0) == '\'' && s.endsWith("'")) {
-            s = s.substring(1, s.length() - 1);
-        }
-
-        final GregorianCalendar cal = new GregorianCalendar(GMT);
-        cal.set(Calendar.MILLISECOND, 0);
-
-        Matcher m = null;
-
-        m = HTTP_DATETIME1.matcher(s);
-        if (m.matches()) {
-            final Integer month = MONTHS_MAP.get(m.group(2));
-            if (month == null) {
-                return null;
-            }
-
-            cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(m.group(1)));
-            cal.set(Calendar.MONTH, month);
-            cal.set(Calendar.YEAR, Integer.parseInt(m.group(3)));
-            cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(m.group(4)));
-            cal.set(Calendar.MINUTE, Integer.parseInt(m.group(5)));
-            cal.set(Calendar.SECOND, Integer.parseInt(m.group(6)));
-
-            return cal.getTime();
-        }
-
-        m = HTTP_DATETIME2.matcher(s);
-        if (m.matches()) {
-            final Integer month = MONTHS_MAP.get(m.group(2));
-            if (month == null) {
-                return null;
-            }
-
-            cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(m.group(1)));
-            cal.set(Calendar.MONTH, month);
-            int year = Integer.parseInt(m.group(3));
-            if (year < 100) {
-                final int thisYear = (new GregorianCalendar(GMT)).get(Calendar.YEAR);
-                final int testYear = year + thisYear - thisYear % 100;
-                year = (testYear < thisYear + 20 ? testYear : testYear - 100);
-            }
-            cal.set(Calendar.YEAR, year);
-            cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(m.group(4)));
-            cal.set(Calendar.MINUTE, Integer.parseInt(m.group(5)));
-            cal.set(Calendar.SECOND, Integer.parseInt(m.group(6)));
-
-            return cal.getTime();
-        }
-
-        m = HTTP_DATETIME3.matcher(s);
-        if (m.matches()) {
-            final Integer month = MONTHS_MAP.get(m.group(1));
-            if (month == null) {
-                return null;
-            }
-
-            cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(m.group(2).trim()));
-            cal.set(Calendar.MONTH, month);
-            cal.set(Calendar.YEAR, Integer.parseInt(m.group(6)));
-            cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(m.group(3)));
-            cal.set(Calendar.MINUTE, Integer.parseInt(m.group(4)));
-            cal.set(Calendar.SECOND, Integer.parseInt(m.group(5)));
-
-            return cal.getTime();
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns a HTTP date.
-     */
-    public static String formatHttpDateTime(long millis) {
-        final GregorianCalendar cal = new GregorianCalendar(GMT);
-        cal.setTimeInMillis(millis);
-
-        final StringBuilder sb = new StringBuilder();
-        sb.append(WDAYS[cal.get(Calendar.DAY_OF_WEEK) - 1]);
-        sb.append(", ");
-        add2d(sb, cal.get(Calendar.DAY_OF_MONTH));
-        sb.append(' ');
-        sb.append(MONTHS[cal.get(Calendar.MONTH)]);
-        sb.append(' ');
-        add4d(sb, cal.get(Calendar.YEAR));
-        sb.append(' ');
-        add2d(sb, cal.get(Calendar.HOUR_OF_DAY));
-        sb.append(':');
-        add2d(sb, cal.get(Calendar.MINUTE));
-        sb.append(':');
-        add2d(sb, cal.get(Calendar.SECOND));
-        sb.append(" GMT");
-
-        return sb.toString();
-    }
-
-    /**
-     * Returns a HTTP date.
-     */
-    public static String formatHttpDateTime(final Date date) {
-        return formatHttpDateTime(date.getTime());
-    }
-
-    /**
-     * Returns a HTTP date.
-     */
-    public static String formatHttpDateTime(final GregorianCalendar cal) {
-        return formatHttpDateTime(cal.getTimeInMillis());
-    }
-
-    private static void add2d(final StringBuilder sb, int value) {
-        assert sb != null;
-        assert value >= 0;
-
-        if (value < 10) {
-            sb.append('0');
-        }
-        sb.append(value);
-    }
-
-    private static void add3d(final StringBuilder sb, int value) {
-        assert sb != null;
-        assert value >= 0;
-
-        if (value < 10) {
-            sb.append('0');
-        }
-        if (value < 100) {
-            sb.append('0');
-        }
-        sb.append(value);
-    }
-
-    private static void add4d(final StringBuilder sb, int value) {
-        assert sb != null;
-        assert value >= 0;
-
-        if (value < 10) {
-            sb.append('0');
-        }
-        if (value < 100) {
-            sb.append('0');
-        }
-        if (value < 1000) {
-            sb.append('0');
-        }
-        sb.append(value);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/IOUtils.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/IOUtils.java
deleted file mode 100644
index 0e55f34..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/IOUtils.java
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-public final class IOUtils {
-
-    /** UTF-8 character set name. */
-    public static final String UTF8 = "UTF-8";
-    /** ISO-8859-1 character set name. */
-    public static final String ISO_8859_1 = "ISO-8859-1";
-
-    private IOUtils() {
-    }
-
-    /**
-     * Returns UTF-8 bytes of the given string or throws a
-     * {@link CmisRuntimeException} if the charset 'UTF-8' is not available.
-     * 
-     * @param s
-     *            the input string
-     * 
-     * @return the UTF-8 bytes
-     */
-    public static byte[] toUTF8Bytes(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        try {
-            return s.getBytes(UTF8);
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-        }
-    }
-
-    /**
-     * Converts a UTF-8 encoded byte array into a string or throws a
-     * {@link CmisRuntimeException} if the charset 'UTF-8' is not available.
-     * 
-     * @param bytes
-     *            the byte array
-     * @return the string
-     */
-    public static String toUTF8String(byte[] bytes) {
-        if (bytes == null) {
-            return null;
-        }
-
-        try {
-            return new String(bytes, UTF8);
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-        }
-    }
-
-    /**
-     * URL encodes the given string or throws a {@link CmisRuntimeException} if
-     * the charset 'UTF-8' is not available.
-     * 
-     * @param s
-     *            the string to encode
-     * 
-     * @return the encoded
-     */
-    public static String encodeURL(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        try {
-            return URLEncoder.encode(s, UTF8);
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-        }
-    }
-
-    /**
-     * URL decodes the given string or throws a {@link CmisRuntimeException} if
-     * the charset 'UTF-8' is not available.
-     * 
-     * @param s
-     *            the string to decode
-     * 
-     * @return the decoded string
-     */
-    public static String decodeURL(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        try {
-            return URLDecoder.decode(s, UTF8);
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-        }
-    }
-
-    /**
-     * Checks if a stream has more bytes. If the provided stream is not
-     * markable, it wrappes a {@link BufferedInputStream} around the stream and
-     * returns it.
-     * 
-     * @param stream
-     *            the stream
-     * @param bufferSize
-     *            the size of the buffer in bytes if a
-     *            {@link BufferedInputStream} has to be created
-     * @return {@code null} if the stream doesn't have more bytes, the provided
-     *         stream if the provided stream is markable and has more bytes, or
-     *         a {@link BufferedInputStream} if the provided stream is not
-     *         markable and has more bytes
-     * 
-     * @throws IOException
-     */
-    public static InputStream checkForBytes(InputStream stream, int bufferSize) throws IOException {
-        if (stream == null) {
-            return null;
-        }
-
-        InputStream checkStream = stream;
-
-        if (!stream.markSupported()) {
-            checkStream = new BufferedInputStream(stream, bufferSize);
-        }
-
-        if (checkForBytes(checkStream)) {
-            return checkStream;
-        }
-
-        return null;
-    }
-
-    /**
-     * Checks if a stream has more bytes.
-     * 
-     * @param stream
-     *            a markable stream
-     * @return {@code true} if the stream has more bytes, {@code false}
-     *         otherwise
-     */
-    public static boolean checkForBytes(InputStream stream) throws IOException {
-        if (stream == null) {
-            return false;
-        }
-
-        if (!stream.markSupported()) {
-            throw new IllegalArgumentException("Stream must support marks!");
-        }
-
-        stream.mark(2);
-
-        if (stream.read() != -1) {
-            stream.reset();
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Closes a stream and ignores any exceptions.
-     * 
-     * @param closeable
-     *            the {@link Closeable} object
-     */
-    @SuppressWarnings("PMD.EmptyCatchBlock")
-    public static void closeQuietly(final Closeable closeable) {
-        try {
-            if (closeable != null) {
-                closeable.close();
-            }
-        } catch (final IOException ioe) {
-            // ignore
-        }
-    }
-
-    /**
-     * Closes the stream of a {@link ContentStream} object and ignores any
-     * exceptions.
-     * 
-     * @param contentStream
-     *            the content stream
-     */
-    public static void closeQuietly(final ContentStream contentStream) {
-        if (contentStream != null) {
-            closeQuietly(contentStream.getStream());
-        }
-    }
-
-    /**
-     * Consumes and closes the provided stream.
-     * 
-     * @param stream
-     *            the stream
-     */
-    @SuppressWarnings({ "PMD.EmptyCatchBlock", "PMD.EmptyWhileStmt" })
-    public static void consumeAndClose(final InputStream stream) {
-        if (stream == null) {
-            return;
-        }
-
-        try {
-            final byte[] buffer = new byte[64 * 1024];
-            while (stream.read(buffer) > -1) {
-                // just consume
-            }
-        } catch (IOException e) {
-            // ignore
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    /**
-     * Consumes and closes the provided reader.
-     * 
-     * @param reader
-     *            the reader
-     */
-    @SuppressWarnings({ "PMD.EmptyCatchBlock", "PMD.EmptyWhileStmt" })
-    public static void consumeAndClose(final Reader reader) {
-        if (reader == null) {
-            return;
-        }
-
-        try {
-            final char[] buffer = new char[64 * 1024];
-            while (reader.read(buffer) > -1) {
-                // just consume
-            }
-        } catch (IOException e) {
-            // ignore
-        } finally {
-            IOUtils.closeQuietly(reader);
-        }
-    }
-
-    /**
-     * Copies all bytes of an input stream to an output stream.
-     * 
-     * Neither the input stream nor the output stream will the closed after the
-     * copy.
-     * 
-     * @param in
-     *            the input stream, must not be {@code null}
-     * @param out
-     *            the output stream, must not be {@code null}
-     */
-    public static void copy(InputStream in, OutputStream out) throws IOException {
-        copy(in, out, 64 * 1024);
-    }
-
-    /**
-     * Copies all bytes of an input stream to an output stream.
-     * 
-     * Neither the input stream nor the output stream will the closed after the
-     * copy.
-     * 
-     * @param in
-     *            the input stream, must not be {@code null}
-     * @param out
-     *            the output stream, must not be {@code null}
-     * @param bufferSize
-     *            the size of the internal buffer, must be positive
-     */
-    public static void copy(InputStream in, OutputStream out, int bufferSize) throws IOException {
-        assert in != null;
-        assert out != null;
-        assert bufferSize > 0;
-
-        int b;
-        byte[] buffer = new byte[bufferSize];
-
-        while ((b = in.read(buffer)) > -1) {
-            out.write(buffer, 0, b);
-        }
-    }
-
-    /**
-     * Reads lines from an UTF-8 encoded stream and closes the stream.
-     * 
-     * @param stream
-     *            the stream
-     * @param handler
-     *            a handler the processes each line.
-     */
-    public static void readLinesFromStream(InputStream stream, LineHandler handler) throws IOException {
-        if (stream == null) {
-            return;
-        }
-
-        BufferedReader reader = null;
-        try {
-            reader = new BufferedReader(new InputStreamReader(stream, UTF8));
-
-            String line;
-            while ((line = reader.readLine()) != null) {
-                if (!handler.handle(line)) {
-                    break;
-                }
-            }
-        } finally {
-            closeQuietly(reader);
-        }
-    }
-
-    /**
-     * Reads the first line from a stream and closes the stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static String readFirstLine(InputStream stream) throws IOException {
-        final StringBuilder result = new StringBuilder();
-
-        readLinesFromStream(stream, new LineHandler() {
-            public boolean handle(String line) {
-                result.append(line);
-                return false;
-            }
-        });
-
-        return result.toString();
-    }
-
-    /**
-     * Reads all lines from a stream and closes the stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static String readAllLines(InputStream stream) throws IOException {
-        final StringBuilder result = new StringBuilder();
-
-        readLinesFromStream(stream, new LineHandler() {
-            public boolean handle(String line) {
-                result.append(line);
-                result.append('\n');
-                return true;
-            }
-        });
-
-        return result.toString();
-    }
-
-    /**
-     * Reads all lines from a stream, removes the header, and closes the stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static String readAllLinesAndRemoveHeader(InputStream stream) throws IOException {
-        final StringBuilder result = new StringBuilder();
-
-        readLinesFromStream(stream, new SkipHeaderLineHandler() {
-            public boolean handle(String line) {
-                if (!isHeaderLine(line)) {
-                    result.append(line);
-                    result.append('\n');
-                }
-                return true;
-            }
-        });
-
-        return result.toString();
-    }
-
-    /**
-     * Reads all lines from a stream, ignores all comments, and closes the
-     * stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static String readAllLinesAndIgnoreComments(InputStream stream) throws IOException {
-        final StringBuilder result = new StringBuilder();
-
-        readLinesFromStream(stream, new IgnoreCommentsLineHandler() {
-            public boolean handle(String line) {
-                if (!isComment(line)) {
-                    result.append(line);
-                    result.append('\n');
-                }
-                return true;
-            }
-        });
-
-        return result.toString();
-    }
-
-    /**
-     * Reads all lines from a stream, ignores all comments, and closes the
-     * stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static List<String> readAllLinesAsList(InputStream stream) throws IOException {
-        final List<String> result = new ArrayList<String>();
-
-        readLinesFromStream(stream, new IgnoreCommentsLineHandler() {
-            public boolean handle(String line) {
-                if (!isComment(line)) {
-                    result.add(line);
-                }
-                return true;
-            }
-        });
-
-        return result;
-    }
-
-    /**
-     * Reads all lines from a stream, ignores all comments, and closes the
-     * stream.
-     * 
-     * @param stream
-     *            the input stream
-     */
-    public static Map<String, String> readAllLinesAsMap(InputStream stream) throws IOException {
-        final Map<String, String> result = new HashMap<String, String>();
-
-        readLinesFromStream(stream, new IgnoreCommentsLineHandler() {
-            public boolean handle(String line) {
-                if (!isComment(line)) {
-                    int x = line.indexOf('=');
-                    if (x < 0) {
-                        result.put(line.trim(), "");
-                    } else {
-                        result.put(line.substring(0, x).trim(), line.substring(x + 1).trim());
-                    }
-                }
-                return true;
-            }
-        });
-
-        return result;
-    }
-
-    public interface LineHandler {
-        /**
-         * Handles a line.
-         * 
-         * @param line
-         *            the line to handle
-         * 
-         * @return <code>true</code> if the next line should be processed,
-         *         <code>false</code> if the processing should stop.
-         */
-        boolean handle(String line);
-    }
-
-    public abstract static class SkipHeaderLineHandler implements LineHandler {
-
-        private boolean header = true;
-
-        public boolean isHeaderLine(String line) {
-            if (!header) {
-                return false;
-            }
-
-            String trim = line.trim();
-            if (trim.length() == 0) {
-                header = false;
-                return true;
-            }
-
-            char c = trim.charAt(0);
-            return (c == '/') || (c == '*') || (c == '#');
-        }
-    }
-
-    public abstract static class IgnoreCommentsLineHandler implements LineHandler {
-
-        public boolean isComment(String line) {
-            String trim = line.trim();
-            if (trim.length() == 0) {
-                return true;
-            }
-
-            return trim.charAt(0) == '#';
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java
deleted file mode 100644
index d87fa9c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-
-/**
- * JSON object constants.
- */
-@SuppressWarnings("PMD.AvoidDuplicateLiterals")
-public final class JSONConstants {
-
-    public static final String ERROR_EXCEPTION = "exception";
-    public static final String ERROR_MESSAGE = "message";
-    public static final String ERROR_STACKTRACE = "stacktrace";
-
-    public static final String JSON_REPINFO_ID = "repositoryId";
-    public static final String JSON_REPINFO_NAME = "repositoryName";
-    public static final String JSON_REPINFO_DESCRIPTION = "repositoryDescription";
-    public static final String JSON_REPINFO_VENDOR = "vendorName";
-    public static final String JSON_REPINFO_PRODUCT = "productName";
-    public static final String JSON_REPINFO_PRODUCT_VERSION = "productVersion";
-    public static final String JSON_REPINFO_ROOT_FOLDER_ID = "rootFolderId";
-    public static final String JSON_REPINFO_REPOSITORY_URL = "repositoryUrl";
-    public static final String JSON_REPINFO_ROOT_FOLDER_URL = "rootFolderUrl";
-    public static final String JSON_REPINFO_CAPABILITIES = "capabilities";
-    public static final String JSON_REPINFO_ACL_CAPABILITIES = "aclCapabilities";
-    public static final String JSON_REPINFO_CHANGE_LOG_TOKEN = "latestChangeLogToken";
-    public static final String JSON_REPINFO_CMIS_VERSION_SUPPORTED = "cmisVersionSupported";
-    public static final String JSON_REPINFO_THIN_CLIENT_URI = "thinClientURI";
-    public static final String JSON_REPINFO_CHANGES_INCOMPLETE = "changesIncomplete";
-    public static final String JSON_REPINFO_CHANGES_ON_TYPE = "changesOnType";
-    public static final String JSON_REPINFO_PRINCIPAL_ID_ANONYMOUS = "principalIdAnonymous";
-    public static final String JSON_REPINFO_PRINCIPAL_ID_ANYONE = "principalIdAnyone";
-    public static final String JSON_REPINFO_EXTENDED_FEATURES = "extendedFeatures";
-
-    public static final Set<String> REPINFO_KEYS = new HashSet<String>();
-    static {
-        REPINFO_KEYS.add(JSON_REPINFO_ID);
-        REPINFO_KEYS.add(JSON_REPINFO_NAME);
-        REPINFO_KEYS.add(JSON_REPINFO_DESCRIPTION);
-        REPINFO_KEYS.add(JSON_REPINFO_VENDOR);
-        REPINFO_KEYS.add(JSON_REPINFO_PRODUCT);
-        REPINFO_KEYS.add(JSON_REPINFO_PRODUCT_VERSION);
-        REPINFO_KEYS.add(JSON_REPINFO_ROOT_FOLDER_ID);
-        REPINFO_KEYS.add(JSON_REPINFO_REPOSITORY_URL);
-        REPINFO_KEYS.add(JSON_REPINFO_ROOT_FOLDER_URL);
-        REPINFO_KEYS.add(JSON_REPINFO_CAPABILITIES);
-        REPINFO_KEYS.add(JSON_REPINFO_ACL_CAPABILITIES);
-        REPINFO_KEYS.add(JSON_REPINFO_CHANGE_LOG_TOKEN);
-        REPINFO_KEYS.add(JSON_REPINFO_CMIS_VERSION_SUPPORTED);
-        REPINFO_KEYS.add(JSON_REPINFO_THIN_CLIENT_URI);
-        REPINFO_KEYS.add(JSON_REPINFO_CHANGES_INCOMPLETE);
-        REPINFO_KEYS.add(JSON_REPINFO_CHANGES_ON_TYPE);
-        REPINFO_KEYS.add(JSON_REPINFO_PRINCIPAL_ID_ANONYMOUS);
-        REPINFO_KEYS.add(JSON_REPINFO_PRINCIPAL_ID_ANYONE);
-        REPINFO_KEYS.add(JSON_REPINFO_EXTENDED_FEATURES);
-    }
-
-    public static final String JSON_CAP_CONTENT_STREAM_UPDATABILITY = "capabilityContentStreamUpdatability";
-    public static final String JSON_CAP_CHANGES = "capabilityChanges";
-    public static final String JSON_CAP_RENDITIONS = "capabilityRenditions";
-    public static final String JSON_CAP_GET_DESCENDANTS = "capabilityGetDescendants";
-    public static final String JSON_CAP_GET_FOLDER_TREE = "capabilityGetFolderTree";
-    public static final String JSON_CAP_MULTIFILING = "capabilityMultifiling";
-    public static final String JSON_CAP_UNFILING = "capabilityUnfiling";
-    public static final String JSON_CAP_VERSION_SPECIFIC_FILING = "capabilityVersionSpecificFiling";
-    public static final String JSON_CAP_PWC_SEARCHABLE = "capabilityPWCSearchable";
-    public static final String JSON_CAP_PWC_UPDATABLE = "capabilityPWCUpdatable";
-    public static final String JSON_CAP_ALL_VERSIONS_SEARCHABLE = "capabilityAllVersionsSearchable";
-    public static final String JSON_CAP_ORDER_BY = "capabilityOrderBy";
-    public static final String JSON_CAP_QUERY = "capabilityQuery";
-    public static final String JSON_CAP_JOIN = "capabilityJoin";
-    public static final String JSON_CAP_ACL = "capabilityACL";
-    public static final String JSON_CAP_CREATABLE_PROPERTY_TYPES = "capabilityCreatablePropertyTypes";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES = "capabilityNewTypeSettableAttributes";
-
-    public static final Set<String> CAP_KEYS = new HashSet<String>();
-    static {
-        CAP_KEYS.add(JSON_CAP_CONTENT_STREAM_UPDATABILITY);
-        CAP_KEYS.add(JSON_CAP_CHANGES);
-        CAP_KEYS.add(JSON_CAP_RENDITIONS);
-        CAP_KEYS.add(JSON_CAP_GET_DESCENDANTS);
-        CAP_KEYS.add(JSON_CAP_GET_FOLDER_TREE);
-        CAP_KEYS.add(JSON_CAP_MULTIFILING);
-        CAP_KEYS.add(JSON_CAP_UNFILING);
-        CAP_KEYS.add(JSON_CAP_VERSION_SPECIFIC_FILING);
-        CAP_KEYS.add(JSON_CAP_PWC_SEARCHABLE);
-        CAP_KEYS.add(JSON_CAP_PWC_UPDATABLE);
-        CAP_KEYS.add(JSON_CAP_ALL_VERSIONS_SEARCHABLE);
-        CAP_KEYS.add(JSON_CAP_ORDER_BY);
-        CAP_KEYS.add(JSON_CAP_QUERY);
-        CAP_KEYS.add(JSON_CAP_JOIN);
-        CAP_KEYS.add(JSON_CAP_ACL);
-        CAP_KEYS.add(JSON_CAP_CREATABLE_PROPERTY_TYPES);
-        CAP_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES);
-    }
-
-    public static final String JSON_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE = "canCreate";
-
-    public static final Set<String> CAP_CREATABLE_PROPERTY_TYPES_KEYS = new HashSet<String>();
-    static {
-        CAP_CREATABLE_PROPERTY_TYPES_KEYS.add(JSON_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE);
-    }
-
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID = "id";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME = "localName";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE = "localNamespace";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME = "displayName";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME = "queryName";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION = "description";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE = "creatable";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE = "fileable";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE = "queryable";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED = "fulltextIndexed";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY = "includedInSupertypeQuery";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY = "controllablePolicy";
-    public static final String JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL = "controllableACL";
-
-    public static final Set<String> CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS = new HashSet<String>();
-    static {
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY);
-        CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS.add(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL);
-    }
-
-    public static final String JSON_ACLCAP_SUPPORTED_PERMISSIONS = "supportedPermissions";
-    public static final String JSON_ACLCAP_ACL_PROPAGATION = "propagation";
-    public static final String JSON_ACLCAP_PERMISSIONS = "permissions";
-    public static final String JSON_ACLCAP_PERMISSION_MAPPING = "permissionMapping";
-
-    public static final Set<String> ACLCAP_KEYS = new HashSet<String>();
-    static {
-        ACLCAP_KEYS.add(JSON_ACLCAP_SUPPORTED_PERMISSIONS);
-        ACLCAP_KEYS.add(JSON_ACLCAP_ACL_PROPAGATION);
-        ACLCAP_KEYS.add(JSON_ACLCAP_PERMISSIONS);
-        ACLCAP_KEYS.add(JSON_ACLCAP_PERMISSION_MAPPING);
-    }
-
-    public static final String JSON_ACLCAP_PERMISSION_PERMISSION = "permission";
-    public static final String JSON_ACLCAP_PERMISSION_DESCRIPTION = "description";
-
-    public static final Set<String> ACLCAP_PERMISSION_KEYS = new HashSet<String>();
-    static {
-        ACLCAP_PERMISSION_KEYS.add(JSON_ACLCAP_PERMISSION_PERMISSION);
-        ACLCAP_PERMISSION_KEYS.add(JSON_ACLCAP_PERMISSION_DESCRIPTION);
-    }
-
-    public static final String JSON_ACLCAP_MAPPING_KEY = "key";
-    public static final String JSON_ACLCAP_MAPPING_PERMISSION = "permission";
-
-    public static final Set<String> ACLCAP_MAPPING_KEYS = new HashSet<String>();
-    static {
-        ACLCAP_MAPPING_KEYS.add(JSON_ACLCAP_MAPPING_KEY);
-        ACLCAP_MAPPING_KEYS.add(JSON_ACLCAP_MAPPING_PERMISSION);
-    }
-
-    public static final String JSON_FEATURE_ID = "id";
-    public static final String JSON_FEATURE_URL = "url";
-    public static final String JSON_FEATURE_COMMON_NAME = "commonName";
-    public static final String JSON_FEATURE_VERSION_LABEL = "versionLabel";
-    public static final String JSON_FEATURE_DESCRIPTION = "description";
-    public static final String JSON_FEATURE_DATA = "featureData";
-
-    public static final Set<String> FEATURE_KEYS = new HashSet<String>();
-    static {
-        FEATURE_KEYS.add(JSON_FEATURE_ID);
-        FEATURE_KEYS.add(JSON_FEATURE_URL);
-        FEATURE_KEYS.add(JSON_FEATURE_COMMON_NAME);
-        FEATURE_KEYS.add(JSON_FEATURE_VERSION_LABEL);
-        FEATURE_KEYS.add(JSON_FEATURE_DESCRIPTION);
-        FEATURE_KEYS.add(JSON_FEATURE_DATA);
-    }
-
-    public static final String JSON_OBJECT_PROPERTIES = "properties";
-    public static final String JSON_OBJECT_SUCCINCT_PROPERTIES = "succinctProperties";
-    public static final String JSON_OBJECT_PROPERTIES_EXTENSION = "propertiesExtension";
-    public static final String JSON_OBJECT_ALLOWABLE_ACTIONS = "allowableActions";
-    public static final String JSON_OBJECT_RELATIONSHIPS = "relationships";
-    public static final String JSON_OBJECT_CHANGE_EVENT_INFO = "changeEventInfo";
-    public static final String JSON_OBJECT_ACL = "acl";
-    public static final String JSON_OBJECT_EXACT_ACL = "exactACL";
-    public static final String JSON_OBJECT_POLICY_IDS = "policyIds";
-    public static final String JSON_OBJECT_POLICY_IDS_IDS = "ids";
-    public static final String JSON_OBJECT_RENDITIONS = "renditions";
-
-    public static final Set<String> OBJECT_KEYS = new HashSet<String>();
-    static {
-        OBJECT_KEYS.add(JSON_OBJECT_PROPERTIES);
-        OBJECT_KEYS.add(JSON_OBJECT_SUCCINCT_PROPERTIES);
-        OBJECT_KEYS.add(JSON_OBJECT_PROPERTIES_EXTENSION);
-        OBJECT_KEYS.add(JSON_OBJECT_ALLOWABLE_ACTIONS);
-        OBJECT_KEYS.add(JSON_OBJECT_RELATIONSHIPS);
-        OBJECT_KEYS.add(JSON_OBJECT_CHANGE_EVENT_INFO);
-        OBJECT_KEYS.add(JSON_OBJECT_ACL);
-        OBJECT_KEYS.add(JSON_OBJECT_EXACT_ACL);
-        OBJECT_KEYS.add(JSON_OBJECT_POLICY_IDS);
-        OBJECT_KEYS.add(JSON_OBJECT_RENDITIONS);
-    }
-
-    public static final Set<String> ALLOWABLE_ACTIONS_KEYS = new HashSet<String>();
-    static {
-        for (Action action : Action.values()) {
-            ALLOWABLE_ACTIONS_KEYS.add(action.value());
-        }
-    }
-
-    public static final Set<String> POLICY_IDS_KEYS = new HashSet<String>();
-    static {
-        POLICY_IDS_KEYS.add(JSON_OBJECT_POLICY_IDS_IDS);
-    }
-
-    public static final String JSON_OBJECTINFOLDER_OBJECT = "object";
-    public static final String JSON_OBJECTINFOLDER_PATH_SEGMENT = "pathSegment";
-
-    public static final Set<String> OBJECTINFOLDER_KEYS = new HashSet<String>();
-    static {
-        OBJECTINFOLDER_KEYS.add(JSON_OBJECTINFOLDER_OBJECT);
-        OBJECTINFOLDER_KEYS.add(JSON_OBJECTINFOLDER_PATH_SEGMENT);
-    }
-
-    public static final String JSON_OBJECTPARENTS_OBJECT = "object";
-    public static final String JSON_OBJECTPARENTS_RELATIVE_PATH_SEGMENT = "relativePathSegment";
-
-    public static final Set<String> OBJECTPARENTS_KEYS = new HashSet<String>();
-    static {
-        OBJECTPARENTS_KEYS.add(JSON_OBJECTPARENTS_OBJECT);
-        OBJECTPARENTS_KEYS.add(JSON_OBJECTPARENTS_RELATIVE_PATH_SEGMENT);
-    }
-
-    public static final String JSON_PROPERTY_ID = "id";
-    public static final String JSON_PROPERTY_LOCALNAME = "localName";
-    public static final String JSON_PROPERTY_DISPLAYNAME = "displayName";
-    public static final String JSON_PROPERTY_QUERYNAME = "queryName";
-    public static final String JSON_PROPERTY_VALUE = "value";
-    public static final String JSON_PROPERTY_DATATYPE = "type";
-    public static final String JSON_PROPERTY_CARDINALITY = "cardinality";
-
-    public static final Set<String> PROPERTY_KEYS = new HashSet<String>();
-    static {
-        PROPERTY_KEYS.add(JSON_PROPERTY_ID);
-        PROPERTY_KEYS.add(JSON_PROPERTY_LOCALNAME);
-        PROPERTY_KEYS.add(JSON_PROPERTY_DISPLAYNAME);
-        PROPERTY_KEYS.add(JSON_PROPERTY_QUERYNAME);
-        PROPERTY_KEYS.add(JSON_PROPERTY_VALUE);
-        PROPERTY_KEYS.add(JSON_PROPERTY_DATATYPE);
-        PROPERTY_KEYS.add(JSON_PROPERTY_CARDINALITY);
-    }
-
-    public static final String JSON_CHANGE_EVENT_TYPE = "changeType";
-    public static final String JSON_CHANGE_EVENT_TIME = "changeTime";
-
-    public static final Set<String> CHANGE_EVENT_KEYS = new HashSet<String>();
-    static {
-        CHANGE_EVENT_KEYS.add(JSON_CHANGE_EVENT_TYPE);
-        CHANGE_EVENT_KEYS.add(JSON_CHANGE_EVENT_TIME);
-    }
-
-    public static final String JSON_ACL_ACES = "aces";
-    public static final String JSON_ACL_IS_EXACT = "isExact";
-
-    public static final Set<String> ACL_KEYS = new HashSet<String>();
-    static {
-        ACL_KEYS.add(JSON_ACL_ACES);
-        ACL_KEYS.add(JSON_ACL_IS_EXACT);
-    }
-
-    public static final String JSON_ACE_PRINCIPAL = "principal";
-    public static final String JSON_ACE_PRINCIPAL_ID = "principalId";
-    public static final String JSON_ACE_PERMISSIONS = "permissions";
-    public static final String JSON_ACE_IS_DIRECT = "isDirect";
-
-    public static final Set<String> ACE_KEYS = new HashSet<String>();
-    static {
-        ACE_KEYS.add(JSON_ACE_PRINCIPAL);
-        ACE_KEYS.add(JSON_ACE_PRINCIPAL_ID);
-        ACE_KEYS.add(JSON_ACE_PERMISSIONS);
-        ACE_KEYS.add(JSON_ACE_IS_DIRECT);
-    }
-
-    public static final Set<String> PRINCIPAL_KEYS = new HashSet<String>();
-    static {
-        PRINCIPAL_KEYS.add(JSON_ACE_PRINCIPAL_ID);
-    }
-
-    public static final String JSON_RENDITION_STREAM_ID = "streamId";
-    public static final String JSON_RENDITION_MIMETYPE = "mimeType";
-    public static final String JSON_RENDITION_LENGTH = "length";
-    public static final String JSON_RENDITION_KIND = "kind";
-    public static final String JSON_RENDITION_TITLE = "title";
-    public static final String JSON_RENDITION_HEIGHT = "height";
-    public static final String JSON_RENDITION_WIDTH = "width";
-    public static final String JSON_RENDITION_DOCUMENT_ID = "renditionDocumentId";
-
-    public static final Set<String> RENDITION_KEYS = new HashSet<String>();
-    static {
-        RENDITION_KEYS.add(JSON_RENDITION_STREAM_ID);
-        RENDITION_KEYS.add(JSON_RENDITION_MIMETYPE);
-        RENDITION_KEYS.add(JSON_RENDITION_LENGTH);
-        RENDITION_KEYS.add(JSON_RENDITION_KIND);
-        RENDITION_KEYS.add(JSON_RENDITION_TITLE);
-        RENDITION_KEYS.add(JSON_RENDITION_HEIGHT);
-        RENDITION_KEYS.add(JSON_RENDITION_WIDTH);
-        RENDITION_KEYS.add(JSON_RENDITION_DOCUMENT_ID);
-    }
-
-    public static final String JSON_OBJECTLIST_OBJECTS = "objects";
-    public static final String JSON_OBJECTLIST_HAS_MORE_ITEMS = "hasMoreItems";
-    public static final String JSON_OBJECTLIST_NUM_ITEMS = "numItems";
-    public static final String JSON_OBJECTLIST_CHANGE_LOG_TOKEN = "changeLogToken";
-
-    public static final Set<String> OBJECTLIST_KEYS = new HashSet<String>();
-    static {
-        OBJECTLIST_KEYS.add(JSON_OBJECTLIST_OBJECTS);
-        OBJECTLIST_KEYS.add(JSON_OBJECTLIST_HAS_MORE_ITEMS);
-        OBJECTLIST_KEYS.add(JSON_OBJECTLIST_NUM_ITEMS);
-        OBJECTLIST_KEYS.add(JSON_OBJECTLIST_CHANGE_LOG_TOKEN);
-    }
-
-    public static final String JSON_OBJECTINFOLDERLIST_OBJECTS = "objects";
-    public static final String JSON_OBJECTINFOLDERLIST_HAS_MORE_ITEMS = "hasMoreItems";
-    public static final String JSON_OBJECTINFOLDERLIST_NUM_ITEMS = "numItems";
-
-    public static final Set<String> OBJECTINFOLDERLIST_KEYS = new HashSet<String>();
-    static {
-        OBJECTINFOLDERLIST_KEYS.add(JSON_OBJECTINFOLDERLIST_OBJECTS);
-        OBJECTINFOLDERLIST_KEYS.add(JSON_OBJECTINFOLDERLIST_HAS_MORE_ITEMS);
-        OBJECTINFOLDERLIST_KEYS.add(JSON_OBJECTINFOLDERLIST_NUM_ITEMS);
-    }
-
-    public static final String JSON_OBJECTINFOLDERCONTAINER_OBJECT = "object";
-    public static final String JSON_OBJECTINFOLDERCONTAINER_CHILDREN = "children";
-
-    public static final Set<String> OBJECTINFOLDERCONTAINER_KEYS = new HashSet<String>();
-    static {
-        OBJECTINFOLDERCONTAINER_KEYS.add(JSON_OBJECTINFOLDERCONTAINER_OBJECT);
-        OBJECTINFOLDERCONTAINER_KEYS.add(JSON_OBJECTINFOLDERCONTAINER_CHILDREN);
-    }
-
-    public static final String JSON_QUERYRESULTLIST_RESULTS = "results";
-    public static final String JSON_QUERYRESULTLIST_HAS_MORE_ITEMS = "hasMoreItems";
-    public static final String JSON_QUERYRESULTLIST_NUM_ITEMS = "numItems";
-
-    public static final Set<String> QUERYRESULTLIST_KEYS = new HashSet<String>();
-    static {
-        QUERYRESULTLIST_KEYS.add(JSON_QUERYRESULTLIST_RESULTS);
-        QUERYRESULTLIST_KEYS.add(JSON_QUERYRESULTLIST_HAS_MORE_ITEMS);
-        QUERYRESULTLIST_KEYS.add(JSON_QUERYRESULTLIST_NUM_ITEMS);
-    }
-
-    public static final String JSON_TYPE_ID = "id";
-    public static final String JSON_TYPE_LOCALNAME = "localName";
-    public static final String JSON_TYPE_LOCALNAMESPACE = "localNamespace";
-    public static final String JSON_TYPE_DISPLAYNAME = "displayName";
-    public static final String JSON_TYPE_QUERYNAME = "queryName";
-    public static final String JSON_TYPE_DESCRIPTION = "description";
-    public static final String JSON_TYPE_BASE_ID = "baseId";
-    public static final String JSON_TYPE_PARENT_ID = "parentId";
-    public static final String JSON_TYPE_CREATABLE = "creatable";
-    public static final String JSON_TYPE_FILEABLE = "fileable";
-    public static final String JSON_TYPE_QUERYABLE = "queryable";
-    public static final String JSON_TYPE_FULLTEXT_INDEXED = "fulltextIndexed";
-    public static final String JSON_TYPE_INCLUDE_IN_SUPERTYPE_QUERY = "includedInSupertypeQuery";
-    public static final String JSON_TYPE_CONTROLABLE_POLICY = "controllablePolicy";
-    public static final String JSON_TYPE_CONTROLABLE_ACL = "controllableACL";
-    public static final String JSON_TYPE_PROPERTY_DEFINITIONS = "propertyDefinitions";
-    public static final String JSON_TYPE_TYPE_MUTABILITY = "typeMutability";
-
-    public static final String JSON_TYPE_VERSIONABLE = "versionable"; // document
-    public static final String JSON_TYPE_CONTENTSTREAM_ALLOWED = "contentStreamAllowed"; // document
-
-    public static final String JSON_TYPE_ALLOWED_SOURCE_TYPES = "allowedSourceTypes"; // relationship
-    public static final String JSON_TYPE_ALLOWED_TARGET_TYPES = "allowedTargetTypes"; // relationship
-
-    public static final Set<String> TYPE_KEYS = new HashSet<String>();
-    static {
-        TYPE_KEYS.add(JSON_TYPE_ID);
-        TYPE_KEYS.add(JSON_TYPE_LOCALNAME);
-        TYPE_KEYS.add(JSON_TYPE_LOCALNAMESPACE);
-        TYPE_KEYS.add(JSON_TYPE_DISPLAYNAME);
-        TYPE_KEYS.add(JSON_TYPE_QUERYNAME);
-        TYPE_KEYS.add(JSON_TYPE_DESCRIPTION);
-        TYPE_KEYS.add(JSON_TYPE_BASE_ID);
-        TYPE_KEYS.add(JSON_TYPE_PARENT_ID);
-        TYPE_KEYS.add(JSON_TYPE_CREATABLE);
-        TYPE_KEYS.add(JSON_TYPE_FILEABLE);
-        TYPE_KEYS.add(JSON_TYPE_QUERYABLE);
-        TYPE_KEYS.add(JSON_TYPE_FULLTEXT_INDEXED);
-        TYPE_KEYS.add(JSON_TYPE_INCLUDE_IN_SUPERTYPE_QUERY);
-        TYPE_KEYS.add(JSON_TYPE_CONTROLABLE_POLICY);
-        TYPE_KEYS.add(JSON_TYPE_CONTROLABLE_ACL);
-        TYPE_KEYS.add(JSON_TYPE_PROPERTY_DEFINITIONS);
-        TYPE_KEYS.add(JSON_TYPE_VERSIONABLE);
-        TYPE_KEYS.add(JSON_TYPE_CONTENTSTREAM_ALLOWED);
-        TYPE_KEYS.add(JSON_TYPE_ALLOWED_SOURCE_TYPES);
-        TYPE_KEYS.add(JSON_TYPE_ALLOWED_TARGET_TYPES);
-        TYPE_KEYS.add(JSON_TYPE_TYPE_MUTABILITY);
-    }
-
-    public static final String JSON_PROPERTY_TYPE_ID = "id";
-    public static final String JSON_PROPERTY_TYPE_LOCALNAME = "localName";
-    public static final String JSON_PROPERTY_TYPE_LOCALNAMESPACE = "localNamespace";
-    public static final String JSON_PROPERTY_TYPE_DISPLAYNAME = "displayName";
-    public static final String JSON_PROPERTY_TYPE_QUERYNAME = "queryName";
-    public static final String JSON_PROPERTY_TYPE_DESCRIPTION = "description";
-    public static final String JSON_PROPERTY_TYPE_PROPERTY_TYPE = "propertyType";
-    public static final String JSON_PROPERTY_TYPE_CARDINALITY = "cardinality";
-    public static final String JSON_PROPERTY_TYPE_UPDATABILITY = "updatability";
-    public static final String JSON_PROPERTY_TYPE_INHERITED = "inherited";
-    public static final String JSON_PROPERTY_TYPE_REQUIRED = "required";
-    public static final String JSON_PROPERTY_TYPE_QUERYABLE = "queryable";
-    public static final String JSON_PROPERTY_TYPE_ORDERABLE = "orderable";
-    public static final String JSON_PROPERTY_TYPE_OPENCHOICE = "openChoice";
-
-    public static final String JSON_PROPERTY_TYPE_DEAULT_VALUE = "defaultValue";
-
-    public static final String JSON_PROPERTY_TYPE_MAX_LENGTH = "maxLength";
-    public static final String JSON_PROPERTY_TYPE_MIN_VALUE = "minValue";
-    public static final String JSON_PROPERTY_TYPE_MAX_VALUE = "maxValue";
-    public static final String JSON_PROPERTY_TYPE_PRECISION = "precision";
-    public static final String JSON_PROPERTY_TYPE_RESOLUTION = "resolution";
-
-    public static final String JSON_PROPERTY_TYPE_CHOICE = "choice";
-    public static final String JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME = "displayName";
-    public static final String JSON_PROPERTY_TYPE_CHOICE_VALUE = "value";
-    public static final String JSON_PROPERTY_TYPE_CHOICE_CHOICE = "choice";
-
-    public static final Set<String> PROPERTY_TYPE_KEYS = new HashSet<String>();
-    static {
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_ID);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_LOCALNAME);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_LOCALNAMESPACE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_DISPLAYNAME);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_QUERYNAME);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_DESCRIPTION);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_PROPERTY_TYPE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_CARDINALITY);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_UPDATABILITY);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_INHERITED);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_REQUIRED);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_QUERYABLE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_ORDERABLE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_OPENCHOICE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_DEAULT_VALUE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_MAX_LENGTH);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_MIN_VALUE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_MAX_VALUE);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_PRECISION);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_RESOLUTION);
-        PROPERTY_TYPE_KEYS.add(JSON_PROPERTY_TYPE_CHOICE);
-    }
-
-    public static final String JSON_TYPE_TYPE_MUTABILITY_CREATE = "create";
-    public static final String JSON_TYPE_TYPE_MUTABILITY_UPDATE = "update";
-    public static final String JSON_TYPE_TYPE_MUTABILITY_DELETE = "delete";
-
-    public static final Set<String> JSON_TYPE_TYPE_MUTABILITY_KEYS = new HashSet<String>();
-    static {
-        JSON_TYPE_TYPE_MUTABILITY_KEYS.add(JSON_TYPE_TYPE_MUTABILITY_CREATE);
-        JSON_TYPE_TYPE_MUTABILITY_KEYS.add(JSON_TYPE_TYPE_MUTABILITY_UPDATE);
-        JSON_TYPE_TYPE_MUTABILITY_KEYS.add(JSON_TYPE_TYPE_MUTABILITY_DELETE);
-    }
-
-    public static final String JSON_TYPESLIST_TYPES = "types";
-    public static final String JSON_TYPESLIST_HAS_MORE_ITEMS = "hasMoreItems";
-    public static final String JSON_TYPESLIST_NUM_ITEMS = "numItems";
-
-    public static final Set<String> TYPESLIST_KEYS = new HashSet<String>();
-    static {
-        TYPESLIST_KEYS.add(JSON_TYPESLIST_TYPES);
-        TYPESLIST_KEYS.add(JSON_TYPESLIST_HAS_MORE_ITEMS);
-        TYPESLIST_KEYS.add(JSON_TYPESLIST_NUM_ITEMS);
-    }
-
-    public static final String JSON_TYPESCONTAINER_TYPE = "type";
-    public static final String JSON_TYPESCONTAINER_CHILDREN = "children";
-
-    public static final Set<String> TYPESCONTAINER_KEYS = new HashSet<String>();
-    static {
-        TYPESCONTAINER_KEYS.add(JSON_TYPESCONTAINER_TYPE);
-        TYPESCONTAINER_KEYS.add(JSON_TYPESCONTAINER_CHILDREN);
-    }
-
-    public static final String JSON_FAILEDTODELETE_ID = "ids";
-
-    public static final Set<String> FAILEDTODELETE_KEYS = new HashSet<String>();
-    static {
-        FAILEDTODELETE_KEYS.add(JSON_FAILEDTODELETE_ID);
-    }
-
-    public static final String JSON_BULK_UPDATE_ID = "id";
-    public static final String JSON_BULK_UPDATE_NEW_ID = "newId";
-    public static final String JSON_BULK_UPDATE_CHANGE_TOKEN = "changeToken";
-
-    public static final Set<String> BULK_UPDATE_KEYS = new HashSet<String>();
-    static {
-        BULK_UPDATE_KEYS.add(JSON_BULK_UPDATE_ID);
-        BULK_UPDATE_KEYS.add(JSON_BULK_UPDATE_NEW_ID);
-        BULK_UPDATE_KEYS.add(JSON_BULK_UPDATE_CHANGE_TOKEN);
-    }
-
-    // Constant utility class.
-    private JSONConstants() {
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java
deleted file mode 100644
index 65a1a2b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java
+++ /dev/null
@@ -1,3067 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.JSONConstants.*;
-
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.ExtensionFeatures;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDataWithDefinition;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.PropertyUri;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoBrowserBindingImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-
-/**
- * OpenCMIS objects to JSON converter.
- */
-public final class JSONConverter {
-
-    /**
-     * Private constructor.
-     */
-    private JSONConverter() {
-    }
-
-    public enum PropertyMode {
-        /** object */
-        OBJECT,
-        /** query result */
-        QUERY,
-        /** change event */
-        CHANGE
-    }
-
-    /**
-     * Converts a repository info object.
-     */
-    public static JSONObject convert(final RepositoryInfo repositoryInfo, final String repositoryUrl,
-            final String rootUrl, final boolean addExtendedDatetimeExtensionFeature) {
-        if (repositoryInfo == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        result.put(JSON_REPINFO_ID, repositoryInfo.getId());
-        result.put(JSON_REPINFO_NAME, repositoryInfo.getName());
-        result.put(JSON_REPINFO_DESCRIPTION, repositoryInfo.getDescription());
-        result.put(JSON_REPINFO_VENDOR, repositoryInfo.getVendorName());
-        result.put(JSON_REPINFO_PRODUCT, repositoryInfo.getProductName());
-        result.put(JSON_REPINFO_PRODUCT_VERSION, repositoryInfo.getProductVersion());
-        result.put(JSON_REPINFO_ROOT_FOLDER_ID, repositoryInfo.getRootFolderId());
-        result.put(JSON_REPINFO_CAPABILITIES, convert(repositoryInfo.getCapabilities()));
-        setIfNotNull(JSON_REPINFO_ACL_CAPABILITIES, convert(repositoryInfo.getAclCapabilities()), result);
-        result.put(JSON_REPINFO_CHANGE_LOG_TOKEN, repositoryInfo.getLatestChangeLogToken());
-        result.put(JSON_REPINFO_CMIS_VERSION_SUPPORTED, repositoryInfo.getCmisVersionSupported());
-        setIfNotNull(JSON_REPINFO_THIN_CLIENT_URI, repositoryInfo.getThinClientUri(), result);
-        setIfNotNull(JSON_REPINFO_CHANGES_INCOMPLETE, repositoryInfo.getChangesIncomplete(), result);
-
-        JSONArray changesOnType = new JSONArray();
-        if (repositoryInfo.getChangesOnType() != null) {
-            for (BaseTypeId type : repositoryInfo.getChangesOnType()) {
-                if (type != null) {
-                    changesOnType.add(getJSONStringValue(type.value()));
-                }
-            }
-        }
-        result.put(JSON_REPINFO_CHANGES_ON_TYPE, changesOnType);
-
-        setIfNotNull(JSON_REPINFO_PRINCIPAL_ID_ANONYMOUS, repositoryInfo.getPrincipalIdAnonymous(), result);
-        setIfNotNull(JSON_REPINFO_PRINCIPAL_ID_ANYONE, repositoryInfo.getPrincipalIdAnyone(), result);
-
-        if (isNotEmpty(repositoryInfo.getExtensionFeatures())) {
-            JSONArray extendedFeatures = new JSONArray();
-
-            for (ExtensionFeature feature : repositoryInfo.getExtensionFeatures()) {
-                extendedFeatures.add(convert(feature));
-            }
-
-            result.put(JSON_REPINFO_EXTENDED_FEATURES, extendedFeatures);
-        }
-
-        if (addExtendedDatetimeExtensionFeature) {
-            JSONArray extendedFeatures = (JSONArray) result.get(JSON_REPINFO_EXTENDED_FEATURES);
-            boolean addFeature = true;
-            if (extendedFeatures == null) {
-                extendedFeatures = new JSONArray();
-                result.put(JSON_REPINFO_EXTENDED_FEATURES, extendedFeatures);
-            } else {
-                for (Object ef : extendedFeatures) {
-                    if (ef instanceof ExtensionFeature) {
-                        if (ExtensionFeatures.EXTENDED_DATETIME_FORMAT.getId().equals(((ExtensionFeature) ef).getId())) {
-                            addFeature = false;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            if (addFeature) {
-                extendedFeatures.add(convert(ExtensionFeatures.EXTENDED_DATETIME_FORMAT));
-            }
-        }
-
-        result.put(JSON_REPINFO_REPOSITORY_URL, repositoryUrl);
-        result.put(JSON_REPINFO_ROOT_FOLDER_URL, rootUrl);
-
-        convertExtension(repositoryInfo, result);
-
-        return result;
-    }
-
-    private static JSONObject convert(final ExtensionFeature feature) {
-        if (feature == null) {
-            return null;
-        }
-
-        JSONObject jsonFeature = new JSONObject();
-
-        setIfNotNull(JSON_FEATURE_ID, feature.getId(), jsonFeature);
-        setIfNotNull(JSON_FEATURE_URL, feature.getUrl(), jsonFeature);
-        setIfNotNull(JSON_FEATURE_COMMON_NAME, feature.getCommonName(), jsonFeature);
-        setIfNotNull(JSON_FEATURE_VERSION_LABEL, feature.getVersionLabel(), jsonFeature);
-        setIfNotNull(JSON_FEATURE_DESCRIPTION, feature.getDescription(), jsonFeature);
-
-        if (isNotEmpty(feature.getFeatureData())) {
-            JSONObject data = new JSONObject();
-            data.putAll(feature.getFeatureData());
-            jsonFeature.put(JSON_FEATURE_DATA, data);
-        }
-
-        convertExtension(feature, jsonFeature);
-
-        return jsonFeature;
-    }
-
-    /**
-     * Converts a capabilities object.
-     */
-    public static JSONObject convert(final RepositoryCapabilities capabilities) {
-        if (capabilities == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        result.put(JSON_CAP_CONTENT_STREAM_UPDATABILITY,
-                getJSONEnumValue(capabilities.getContentStreamUpdatesCapability()));
-        result.put(JSON_CAP_CHANGES, getJSONEnumValue(capabilities.getChangesCapability()));
-        result.put(JSON_CAP_RENDITIONS, getJSONEnumValue(capabilities.getRenditionsCapability()));
-        result.put(JSON_CAP_GET_DESCENDANTS, capabilities.isGetDescendantsSupported());
-        result.put(JSON_CAP_GET_FOLDER_TREE, capabilities.isGetFolderTreeSupported());
-        result.put(JSON_CAP_MULTIFILING, capabilities.isMultifilingSupported());
-        result.put(JSON_CAP_UNFILING, capabilities.isUnfilingSupported());
-        result.put(JSON_CAP_VERSION_SPECIFIC_FILING, capabilities.isVersionSpecificFilingSupported());
-        result.put(JSON_CAP_PWC_SEARCHABLE, capabilities.isPwcSearchableSupported());
-        result.put(JSON_CAP_PWC_UPDATABLE, capabilities.isPwcUpdatableSupported());
-        result.put(JSON_CAP_ALL_VERSIONS_SEARCHABLE, capabilities.isAllVersionsSearchableSupported());
-        result.put(JSON_CAP_ORDER_BY, getJSONEnumValue(capabilities.getOrderByCapability()));
-        result.put(JSON_CAP_QUERY, getJSONEnumValue(capabilities.getQueryCapability()));
-        result.put(JSON_CAP_JOIN, getJSONEnumValue(capabilities.getJoinCapability()));
-        result.put(JSON_CAP_ACL, getJSONEnumValue(capabilities.getAclCapability()));
-
-        if (capabilities.getCreatablePropertyTypes() != null) {
-            CreatablePropertyTypes creatablePropertyTypes = capabilities.getCreatablePropertyTypes();
-
-            JSONObject creatablePropertyTypesJson = new JSONObject();
-
-            if (creatablePropertyTypes.canCreate() != null) {
-                JSONArray canCreate = new JSONArray();
-                for (PropertyType propType : creatablePropertyTypes.canCreate()) {
-                    if (propType != null) {
-                        canCreate.add(propType.value());
-                    }
-                }
-                creatablePropertyTypesJson.put(JSON_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE, canCreate);
-            }
-
-            convertExtension(creatablePropertyTypes, creatablePropertyTypesJson);
-
-            result.put(JSON_CAP_CREATABLE_PROPERTY_TYPES, creatablePropertyTypesJson);
-        }
-
-        if (capabilities.getNewTypeSettableAttributes() != null) {
-            NewTypeSettableAttributes newTypeSettableAttributes = capabilities.getNewTypeSettableAttributes();
-
-            JSONObject newTypeSettableAttributesJson = new JSONObject();
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID,
-                    newTypeSettableAttributes.canSetId());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME,
-                    newTypeSettableAttributes.canSetLocalName());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE,
-                    newTypeSettableAttributes.canSetLocalNamespace());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME,
-                    newTypeSettableAttributes.canSetDisplayName());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME,
-                    newTypeSettableAttributes.canSetQueryName());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION,
-                    newTypeSettableAttributes.canSetDescription());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE,
-                    newTypeSettableAttributes.canSetCreatable());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE,
-                    newTypeSettableAttributes.canSetFileable());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE,
-                    newTypeSettableAttributes.canSetQueryable());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED,
-                    newTypeSettableAttributes.canSetFulltextIndexed());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY,
-                    newTypeSettableAttributes.canSetIncludedInSupertypeQuery());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY,
-                    newTypeSettableAttributes.canSetControllablePolicy());
-            newTypeSettableAttributesJson.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL,
-                    newTypeSettableAttributes.canSetControllableAcl());
-
-            convertExtension(newTypeSettableAttributes, newTypeSettableAttributesJson);
-
-            result.put(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES, newTypeSettableAttributesJson);
-        }
-
-        convertExtension(capabilities, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ACL capabilities object.
-     */
-    public static JSONObject convert(final AclCapabilities capabilities) {
-        if (capabilities == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        result.put(JSON_ACLCAP_SUPPORTED_PERMISSIONS, getJSONEnumValue(capabilities.getSupportedPermissions()));
-        result.put(JSON_ACLCAP_ACL_PROPAGATION, getJSONEnumValue(capabilities.getAclPropagation()));
-
-        // permissions
-        if (capabilities.getPermissions() != null) {
-            JSONArray permissions = new JSONArray();
-
-            for (PermissionDefinition permDef : capabilities.getPermissions()) {
-                JSONObject permission = new JSONObject();
-                permission.put(JSON_ACLCAP_PERMISSION_PERMISSION, permDef.getId());
-                permission.put(JSON_ACLCAP_PERMISSION_DESCRIPTION, permDef.getDescription());
-
-                permissions.add(permission);
-            }
-
-            result.put(JSON_ACLCAP_PERMISSIONS, permissions);
-        }
-
-        // permission mapping
-        if (capabilities.getPermissionMapping() != null) {
-            JSONArray permissionMapping = new JSONArray();
-
-            for (PermissionMapping permMap : capabilities.getPermissionMapping().values()) {
-                JSONArray mappingPermissions = new JSONArray();
-                if (permMap.getPermissions() != null) {
-                    for (String p : permMap.getPermissions()) {
-                        mappingPermissions.add(p);
-                    }
-                }
-
-                JSONObject mapping = new JSONObject();
-                mapping.put(JSON_ACLCAP_MAPPING_KEY, permMap.getKey());
-                mapping.put(JSON_ACLCAP_MAPPING_PERMISSION, mappingPermissions);
-
-                permissionMapping.add(mapping);
-            }
-
-            result.put(JSON_ACLCAP_PERMISSION_MAPPING, permissionMapping);
-        }
-
-        convertExtension(capabilities, result);
-
-        return result;
-    }
-
-    public static RepositoryInfo convertRepositoryInfo(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        RepositoryInfoBrowserBindingImpl result = new RepositoryInfoBrowserBindingImpl();
-
-        result.setId(getString(json, JSON_REPINFO_ID));
-        result.setName(getString(json, JSON_REPINFO_NAME));
-        result.setDescription(getString(json, JSON_REPINFO_DESCRIPTION));
-        result.setVendorName(getString(json, JSON_REPINFO_VENDOR));
-        result.setProductName(getString(json, JSON_REPINFO_PRODUCT));
-        result.setProductVersion(getString(json, JSON_REPINFO_PRODUCT_VERSION));
-        result.setRootFolder(getString(json, JSON_REPINFO_ROOT_FOLDER_ID));
-        result.setRepositoryUrl(getString(json, JSON_REPINFO_REPOSITORY_URL));
-        result.setRootUrl(getString(json, JSON_REPINFO_ROOT_FOLDER_URL));
-        result.setCapabilities(convertRepositoryCapabilities(getMap(json.get(JSON_REPINFO_CAPABILITIES))));
-        result.setAclCapabilities(convertAclCapabilities(getMap(json.get(JSON_REPINFO_ACL_CAPABILITIES))));
-        result.setLatestChangeLogToken(getString(json, JSON_REPINFO_CHANGE_LOG_TOKEN));
-        result.setCmisVersionSupported(getString(json, JSON_REPINFO_CMIS_VERSION_SUPPORTED));
-        result.setThinClientUri(getString(json, JSON_REPINFO_THIN_CLIENT_URI));
-        result.setChangesIncomplete(getBoolean(json, JSON_REPINFO_CHANGES_INCOMPLETE));
-
-        List<Object> changesOnType = getList(json.get(JSON_REPINFO_CHANGES_ON_TYPE));
-        if (changesOnType != null) {
-            List<BaseTypeId> types = new ArrayList<BaseTypeId>();
-            for (Object type : changesOnType) {
-                if (type != null) {
-                    types.add(BaseTypeId.fromValue(type.toString()));
-                }
-            }
-            result.setChangesOnType(types);
-        }
-
-        result.setPrincipalAnonymous(getString(json, JSON_REPINFO_PRINCIPAL_ID_ANONYMOUS));
-        result.setPrincipalAnyone(getString(json, JSON_REPINFO_PRINCIPAL_ID_ANYONE));
-
-        List<Object> extendedFeatures = getList(json.get(JSON_REPINFO_EXTENDED_FEATURES));
-        if (extendedFeatures != null) {
-            List<ExtensionFeature> features = new ArrayList<ExtensionFeature>();
-
-            for (Object extendedFeature : extendedFeatures) {
-                Map<String, Object> jsonFeature = getMap(extendedFeature);
-
-                ExtensionFeatureImpl feature = new ExtensionFeatureImpl();
-                feature.setId(getString(jsonFeature, JSON_FEATURE_ID));
-                feature.setUrl(getString(jsonFeature, JSON_FEATURE_URL));
-                feature.setCommonName(getString(jsonFeature, JSON_FEATURE_COMMON_NAME));
-                feature.setVersionLabel(getString(jsonFeature, JSON_FEATURE_VERSION_LABEL));
-                feature.setDescription(getString(jsonFeature, JSON_FEATURE_DESCRIPTION));
-
-                Map<String, Object> data = getMap(jsonFeature.get(JSON_FEATURE_DATA));
-                if (data != null) {
-                    LinkedHashMap<String, String> dataMap = new LinkedHashMap<String, String>();
-                    for (Map.Entry<String, Object> e : data.entrySet()) {
-                        dataMap.put(e.getKey(), (e.getValue() == null ? null : e.getValue().toString()));
-                    }
-
-                    if (!dataMap.isEmpty()) {
-                        feature.setFeatureData(dataMap);
-                    }
-                }
-
-                convertExtension(jsonFeature, feature, FEATURE_KEYS);
-
-                features.add(feature);
-            }
-
-            if (!features.isEmpty()) {
-                result.setExtensionFeature(features);
-            }
-        }
-
-        // handle extensions
-        convertExtension(json, result, REPINFO_KEYS);
-
-        return result;
-    }
-
-    public static RepositoryCapabilities convertRepositoryCapabilities(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        RepositoryCapabilitiesImpl result = new RepositoryCapabilitiesImpl();
-
-        result.setCapabilityContentStreamUpdates(getEnum(json, JSON_CAP_CONTENT_STREAM_UPDATABILITY,
-                CapabilityContentStreamUpdates.class));
-        result.setCapabilityChanges(getEnum(json, JSON_CAP_CHANGES, CapabilityChanges.class));
-        result.setCapabilityRendition(getEnum(json, JSON_CAP_RENDITIONS, CapabilityRenditions.class));
-        result.setSupportsGetDescendants(getBoolean(json, JSON_CAP_GET_DESCENDANTS));
-        result.setSupportsGetFolderTree(getBoolean(json, JSON_CAP_GET_FOLDER_TREE));
-        result.setSupportsMultifiling(getBoolean(json, JSON_CAP_MULTIFILING));
-        result.setSupportsUnfiling(getBoolean(json, JSON_CAP_UNFILING));
-        result.setSupportsVersionSpecificFiling(getBoolean(json, JSON_CAP_VERSION_SPECIFIC_FILING));
-        result.setIsPwcSearchable(getBoolean(json, JSON_CAP_PWC_SEARCHABLE));
-        result.setIsPwcUpdatable(getBoolean(json, JSON_CAP_PWC_UPDATABLE));
-        result.setAllVersionsSearchable(getBoolean(json, JSON_CAP_ALL_VERSIONS_SEARCHABLE));
-        result.setCapabilityOrderBy(getEnum(json, JSON_CAP_ORDER_BY, CapabilityOrderBy.class));
-        result.setCapabilityQuery(getEnum(json, JSON_CAP_QUERY, CapabilityQuery.class));
-        result.setCapabilityJoin(getEnum(json, JSON_CAP_JOIN, CapabilityJoin.class));
-        result.setCapabilityAcl(getEnum(json, JSON_CAP_ACL, CapabilityAcl.class));
-
-        Map<String, Object> creatablePropertyTypesJson = getMap(json.get(JSON_CAP_CREATABLE_PROPERTY_TYPES));
-        if (creatablePropertyTypesJson != null) {
-            CreatablePropertyTypesImpl creatablePropertyTypes = new CreatablePropertyTypesImpl();
-
-            List<Object> canCreateJson = getList(creatablePropertyTypesJson
-                    .get(JSON_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE));
-            if (canCreateJson != null) {
-                Set<PropertyType> canCreate = EnumSet.noneOf(PropertyType.class);
-
-                for (Object o : canCreateJson) {
-                    try {
-                        if (o != null) {
-                            canCreate.add(PropertyType.fromValue(o.toString()));
-                        }
-                    } catch (Exception e) {
-                        // ignore
-                    }
-                }
-
-                creatablePropertyTypes.setCanCreate(canCreate);
-            }
-
-            convertExtension(creatablePropertyTypesJson, creatablePropertyTypes, CAP_CREATABLE_PROPERTY_TYPES_KEYS);
-
-            result.setCreatablePropertyTypes(creatablePropertyTypes);
-        }
-
-        Map<String, Object> newTypeSettableAttributesJson = getMap(json.get(JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES));
-        if (newTypeSettableAttributesJson != null) {
-            NewTypeSettableAttributesImpl newTypeSettableAttributes = new NewTypeSettableAttributesImpl();
-
-            newTypeSettableAttributes.setCanSetId(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID));
-            newTypeSettableAttributes.setCanSetLocalName(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME));
-            newTypeSettableAttributes.setCanSetLocalNamespace(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE));
-            newTypeSettableAttributes.setCanSetDisplayName(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME));
-            newTypeSettableAttributes.setCanSetQueryName(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME));
-            newTypeSettableAttributes.setCanSetDescription(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION));
-            newTypeSettableAttributes.setCanSetCreatable(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE));
-            newTypeSettableAttributes.setCanSetFileable(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE));
-            newTypeSettableAttributes.setCanSetQueryable(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE));
-            newTypeSettableAttributes.setCanSetFulltextIndexed(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED));
-            newTypeSettableAttributes.setCanSetIncludedInSupertypeQuery(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY));
-            newTypeSettableAttributes.setCanSetControllablePolicy(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY));
-            newTypeSettableAttributes.setCanSetControllableAcl(getBoolean(newTypeSettableAttributesJson,
-                    JSON_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL));
-
-            convertExtension(newTypeSettableAttributesJson, newTypeSettableAttributes,
-                    CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_KEYS);
-
-            result.setNewTypeSettableAttributes(newTypeSettableAttributes);
-        }
-
-        // handle extensions
-        convertExtension(json, result, CAP_KEYS);
-
-        return result;
-    }
-
-    @SuppressWarnings("unchecked")
-    public static AclCapabilities convertAclCapabilities(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        AclCapabilitiesDataImpl result = new AclCapabilitiesDataImpl();
-
-        result.setSupportedPermissions(getEnum(json, JSON_ACLCAP_SUPPORTED_PERMISSIONS, SupportedPermissions.class));
-        result.setAclPropagation(getEnum(json, JSON_ACLCAP_ACL_PROPAGATION, AclPropagation.class));
-
-        List<Object> permissions = getList(json.get(JSON_ACLCAP_PERMISSIONS));
-        if (permissions != null) {
-            List<PermissionDefinition> permissionDefinitionList = new ArrayList<PermissionDefinition>();
-
-            for (Object permission : permissions) {
-                Map<String, Object> permissionMap = getMap(permission);
-                if (permissionMap != null) {
-                    PermissionDefinitionDataImpl permDef = new PermissionDefinitionDataImpl();
-
-                    permDef.setId(getString(permissionMap, JSON_ACLCAP_PERMISSION_PERMISSION));
-                    permDef.setDescription(getString(permissionMap, JSON_ACLCAP_PERMISSION_DESCRIPTION));
-
-                    convertExtension(permissionMap, permDef, ACLCAP_PERMISSION_KEYS);
-
-                    permissionDefinitionList.add(permDef);
-                }
-            }
-
-            result.setPermissionDefinitionData(permissionDefinitionList);
-        }
-
-        List<Object> permissionMapping = getList(json.get(JSON_ACLCAP_PERMISSION_MAPPING));
-        if (permissionMapping != null) {
-            Map<String, PermissionMapping> permMap = new HashMap<String, PermissionMapping>();
-
-            for (Object permission : permissionMapping) {
-                Map<String, Object> permissionMap = getMap(permission);
-                if (permissionMap != null) {
-                    PermissionMappingDataImpl mapping = new PermissionMappingDataImpl();
-
-                    String key = getString(permissionMap, JSON_ACLCAP_MAPPING_KEY);
-                    mapping.setKey(key);
-
-                    Object perms = permissionMap.get(JSON_ACLCAP_MAPPING_PERMISSION);
-                    if (perms instanceof List) {
-                        List<String> permList = new ArrayList<String>();
-
-                        for (Object perm : (List<Object>) perms) {
-                            if (perm != null) {
-                                permList.add(perm.toString());
-                            }
-                        }
-
-                        mapping.setPermissions(permList);
-                    }
-
-                    convertExtension(permissionMap, mapping, ACLCAP_MAPPING_KEYS);
-
-                    permMap.put(key, mapping);
-                }
-            }
-
-            result.setPermissionMappingData(permMap);
-        }
-
-        // handle extensions
-        convertExtension(json, result, ACLCAP_KEYS);
-
-        return result;
-    }
-
-    @SuppressWarnings("unchecked")
-    public static TypeDefinition convertTypeDefinition(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        AbstractTypeDefinition result = null;
-
-        String id = getString(json, JSON_TYPE_ID);
-
-        // find base type
-        BaseTypeId baseType = getEnum(json, JSON_TYPE_BASE_ID, BaseTypeId.class);
-        if (baseType == null) {
-            throw new CmisInvalidArgumentException("Invalid base type: " + id);
-        }
-
-        switch (baseType) {
-        case CMIS_FOLDER:
-            result = new FolderTypeDefinitionImpl();
-            break;
-        case CMIS_DOCUMENT:
-            result = new DocumentTypeDefinitionImpl();
-
-            ((DocumentTypeDefinitionImpl) result).setContentStreamAllowed(getEnum(json,
-                    JSON_TYPE_CONTENTSTREAM_ALLOWED, ContentStreamAllowed.class));
-            ((DocumentTypeDefinitionImpl) result).setIsVersionable(getBoolean(json, JSON_TYPE_VERSIONABLE));
-
-            break;
-        case CMIS_RELATIONSHIP:
-            result = new RelationshipTypeDefinitionImpl();
-
-            Object allowedSourceTypes = json.get(JSON_TYPE_ALLOWED_SOURCE_TYPES);
-            if (allowedSourceTypes instanceof List) {
-                List<String> types = new ArrayList<String>();
-                for (Object type : (List<Object>) allowedSourceTypes) {
-                    if (type != null) {
-                        types.add(type.toString());
-                    }
-                }
-
-                ((RelationshipTypeDefinitionImpl) result).setAllowedSourceTypes(types);
-            }
-
-            Object allowedTargetTypes = json.get(JSON_TYPE_ALLOWED_TARGET_TYPES);
-            if (allowedTargetTypes instanceof List) {
-                List<String> types = new ArrayList<String>();
-                for (Object type : (List<Object>) allowedTargetTypes) {
-                    if (type != null) {
-                        types.add(type.toString());
-                    }
-                }
-
-                ((RelationshipTypeDefinitionImpl) result).setAllowedTargetTypes(types);
-            }
-
-            break;
-        case CMIS_POLICY:
-            result = new PolicyTypeDefinitionImpl();
-            break;
-        case CMIS_ITEM:
-            result = new ItemTypeDefinitionImpl();
-            break;
-        case CMIS_SECONDARY:
-            result = new SecondaryTypeDefinitionImpl();
-            break;
-        default:
-            throw new CmisRuntimeException("Type '" + id + "' does not match a base type!");
-        }
-
-        result.setBaseTypeId(baseType);
-        result.setDescription(getString(json, JSON_TYPE_DESCRIPTION));
-        result.setDisplayName(getString(json, JSON_TYPE_DISPLAYNAME));
-        result.setId(id);
-        result.setIsControllableAcl(getBoolean(json, JSON_TYPE_CONTROLABLE_ACL));
-        result.setIsControllablePolicy(getBoolean(json, JSON_TYPE_CONTROLABLE_POLICY));
-        result.setIsCreatable(getBoolean(json, JSON_TYPE_CREATABLE));
-        result.setIsFileable(getBoolean(json, JSON_TYPE_FILEABLE));
-        result.setIsFulltextIndexed(getBoolean(json, JSON_TYPE_FULLTEXT_INDEXED));
-        result.setIsIncludedInSupertypeQuery(getBoolean(json, JSON_TYPE_INCLUDE_IN_SUPERTYPE_QUERY));
-        result.setIsQueryable(getBoolean(json, JSON_TYPE_QUERYABLE));
-        result.setLocalName(getString(json, JSON_TYPE_LOCALNAME));
-        result.setLocalNamespace(getString(json, JSON_TYPE_LOCALNAMESPACE));
-        result.setParentTypeId(getString(json, JSON_TYPE_PARENT_ID));
-        result.setQueryName(getString(json, JSON_TYPE_QUERYNAME));
-
-        Map<String, Object> typeMutabilityJson = getMap(json.get(JSON_TYPE_TYPE_MUTABILITY));
-        if (typeMutabilityJson != null) {
-            TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
-
-            typeMutability.setCanCreate(getBoolean(typeMutabilityJson, JSON_TYPE_TYPE_MUTABILITY_CREATE));
-            typeMutability.setCanUpdate(getBoolean(typeMutabilityJson, JSON_TYPE_TYPE_MUTABILITY_UPDATE));
-            typeMutability.setCanDelete(getBoolean(typeMutabilityJson, JSON_TYPE_TYPE_MUTABILITY_DELETE));
-
-            convertExtension(typeMutabilityJson, typeMutability, JSON_TYPE_TYPE_MUTABILITY_KEYS);
-
-            result.setTypeMutability(typeMutability);
-        }
-
-        Map<String, Object> propertyDefinitions = getMap(json.get(JSON_TYPE_PROPERTY_DEFINITIONS));
-        if (propertyDefinitions != null) {
-            for (Object propDef : propertyDefinitions.values()) {
-                result.addPropertyDefinition(convertPropertyDefinition(getMap(propDef)));
-            }
-        }
-
-        // handle extensions
-        convertExtension(json, result, TYPE_KEYS);
-
-        return result;
-    }
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public static PropertyDefinition<?> convertPropertyDefinition(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        AbstractPropertyDefinition<?> result = null;
-
-        String id = getString(json, JSON_PROPERTY_ID);
-
-        // find property type
-        PropertyType propertyType = getEnum(json, JSON_PROPERTY_TYPE_PROPERTY_TYPE, PropertyType.class);
-        if (propertyType == null) {
-            throw new CmisRuntimeException("Invalid property type '" + id + "'! Data type not set!");
-        }
-
-        // find
-        Cardinality cardinality = getEnum(json, JSON_PROPERTY_TYPE_CARDINALITY, Cardinality.class);
-        if (cardinality == null) {
-            throw new CmisRuntimeException("Invalid property type '" + id + "'! Cardinality not set!");
-        }
-
-        switch (propertyType) {
-        case STRING:
-            result = new PropertyStringDefinitionImpl();
-            ((PropertyStringDefinitionImpl) result).setMaxLength(getInteger(json, JSON_PROPERTY_TYPE_MAX_LENGTH));
-            ((PropertyStringDefinitionImpl) result)
-                    .setChoices(convertChoicesString(json.get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            ((PropertyIdDefinitionImpl) result).setChoices(convertChoicesString(json.get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            ((PropertyBooleanDefinitionImpl) result).setChoices(convertChoicesBoolean(json
-                    .get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            ((PropertyIntegerDefinitionImpl) result).setMinValue(getInteger(json, JSON_PROPERTY_TYPE_MIN_VALUE));
-            ((PropertyIntegerDefinitionImpl) result).setMaxValue(getInteger(json, JSON_PROPERTY_TYPE_MAX_VALUE));
-            ((PropertyIntegerDefinitionImpl) result).setChoices(convertChoicesInteger(json
-                    .get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            ((PropertyDateTimeDefinitionImpl) result).setDateTimeResolution(getEnum(json,
-                    JSON_PROPERTY_TYPE_RESOLUTION, DateTimeResolution.class));
-            ((PropertyDateTimeDefinitionImpl) result).setChoices(convertChoicesDateTime(json
-                    .get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            ((PropertyDecimalDefinitionImpl) result).setMinValue(getDecimal(json, JSON_PROPERTY_TYPE_MIN_VALUE));
-            ((PropertyDecimalDefinitionImpl) result).setMaxValue(getDecimal(json, JSON_PROPERTY_TYPE_MAX_VALUE));
-            ((PropertyDecimalDefinitionImpl) result).setPrecision(getIntEnum(json, JSON_PROPERTY_TYPE_PRECISION,
-                    DecimalPrecision.class));
-            ((PropertyDecimalDefinitionImpl) result).setChoices(convertChoicesDecimal(json
-                    .get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            ((PropertyHtmlDefinitionImpl) result).setChoices(convertChoicesString(json.get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            ((PropertyUriDefinitionImpl) result).setChoices(convertChoicesString(json.get(JSON_PROPERTY_TYPE_CHOICE)));
-            break;
-        default:
-            throw new CmisRuntimeException("Property type '" + id + "' does not match a data type!");
-        }
-
-        // default value
-        Object defaultValue = json.get(JSON_PROPERTY_TYPE_DEAULT_VALUE);
-        if (defaultValue != null) {
-            if (defaultValue instanceof List) {
-                List values = new ArrayList();
-                for (Object value : (List) defaultValue) {
-                    values.add(getCMISValue(value, propertyType));
-                }
-                result.setDefaultValue(values);
-            } else {
-                result.setDefaultValue((List) Collections.singletonList(getCMISValue(defaultValue, propertyType)));
-            }
-        }
-
-        // generic
-        result.setId(id);
-        result.setPropertyType(propertyType);
-        result.setCardinality(cardinality);
-        result.setLocalName(getString(json, JSON_PROPERTY_TYPE_LOCALNAME));
-        result.setLocalNamespace(getString(json, JSON_PROPERTY_TYPE_LOCALNAMESPACE));
-        result.setQueryName(getString(json, JSON_PROPERTY_TYPE_QUERYNAME));
-        result.setDescription(getString(json, JSON_PROPERTY_TYPE_DESCRIPTION));
-        result.setDisplayName(getString(json, JSON_PROPERTY_TYPE_DISPLAYNAME));
-        result.setIsInherited(getBoolean(json, JSON_PROPERTY_TYPE_INHERITED));
-        result.setIsOpenChoice(getBoolean(json, JSON_PROPERTY_TYPE_OPENCHOICE));
-        result.setIsOrderable(getBoolean(json, JSON_PROPERTY_TYPE_ORDERABLE));
-        result.setIsQueryable(getBoolean(json, JSON_PROPERTY_TYPE_QUERYABLE));
-        result.setIsRequired(getBoolean(json, JSON_PROPERTY_TYPE_REQUIRED));
-        result.setUpdatability(getEnum(json, JSON_PROPERTY_TYPE_UPDATABILITY, Updatability.class));
-
-        // handle extensions
-        convertExtension(json, result, PROPERTY_TYPE_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    @SuppressWarnings({ "rawtypes" })
-    private static List<Choice<String>> convertChoicesString(final Object choices) {
-        if (!(choices instanceof List)) {
-            return null;
-        }
-
-        List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-        for (Object obj : (List) choices) {
-            Map<String, Object> choiceMap = getMap(obj);
-            if (choiceMap != null) {
-                ChoiceImpl<String> choice = new ChoiceImpl<String>();
-                choice.setDisplayName(getString(choiceMap, JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME));
-
-                Object choiceValue = choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_VALUE);
-                List<String> values = new ArrayList<String>();
-                if (choiceValue instanceof List) {
-                    for (Object value : (List) choiceValue) {
-                        values.add((String) getCMISValue(value, PropertyType.STRING));
-                    }
-                } else {
-                    values.add((String) getCMISValue(choiceValue, PropertyType.STRING));
-                }
-                choice.setValue(values);
-
-                choice.setChoice(convertChoicesString(choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_CHOICE)));
-
-                result.add(choice);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    @SuppressWarnings({ "rawtypes" })
-    private static List<Choice<Boolean>> convertChoicesBoolean(final Object choices) {
-        if (!(choices instanceof List)) {
-            return null;
-        }
-
-        List<Choice<Boolean>> result = new ArrayList<Choice<Boolean>>();
-
-        for (Object obj : (List) choices) {
-            Map<String, Object> choiceMap = getMap(obj);
-            if (choiceMap != null) {
-                ChoiceImpl<Boolean> choice = new ChoiceImpl<Boolean>();
-                choice.setDisplayName(getString(choiceMap, JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME));
-
-                Object choiceValue = choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_VALUE);
-                List<Boolean> values = new ArrayList<Boolean>();
-                if (choiceValue instanceof List) {
-                    for (Object value : (List) choiceValue) {
-                        values.add((Boolean) getCMISValue(value, PropertyType.BOOLEAN));
-                    }
-                } else {
-                    values.add((Boolean) getCMISValue(choiceValue, PropertyType.BOOLEAN));
-                }
-                choice.setValue(values);
-
-                choice.setChoice(convertChoicesBoolean(choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_CHOICE)));
-
-                result.add(choice);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    @SuppressWarnings({ "rawtypes" })
-    private static List<Choice<BigInteger>> convertChoicesInteger(final Object choices) {
-        if (!(choices instanceof List)) {
-            return null;
-        }
-
-        List<Choice<BigInteger>> result = new ArrayList<Choice<BigInteger>>();
-
-        for (Object obj : (List) choices) {
-            Map<String, Object> choiceMap = getMap(obj);
-            if (choiceMap != null) {
-                ChoiceImpl<BigInteger> choice = new ChoiceImpl<BigInteger>();
-                choice.setDisplayName(getString(choiceMap, JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME));
-
-                Object choiceValue = choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_VALUE);
-                List<BigInteger> values = new ArrayList<BigInteger>();
-                if (choiceValue instanceof List) {
-                    for (Object value : (List) choiceValue) {
-                        values.add((BigInteger) getCMISValue(value, PropertyType.INTEGER));
-                    }
-                } else {
-                    values.add((BigInteger) getCMISValue(choiceValue, PropertyType.INTEGER));
-                }
-                choice.setValue(values);
-
-                choice.setChoice(convertChoicesInteger(choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_CHOICE)));
-
-                result.add(choice);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    @SuppressWarnings({ "rawtypes" })
-    private static List<Choice<BigDecimal>> convertChoicesDecimal(final Object choices) {
-        if (!(choices instanceof List)) {
-            return null;
-        }
-
-        List<Choice<BigDecimal>> result = new ArrayList<Choice<BigDecimal>>();
-
-        for (Object obj : (List) choices) {
-            Map<String, Object> choiceMap = getMap(obj);
-            if (choiceMap != null) {
-                ChoiceImpl<BigDecimal> choice = new ChoiceImpl<BigDecimal>();
-                choice.setDisplayName(getString(choiceMap, JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME));
-
-                Object choiceValue = choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_VALUE);
-                List<BigDecimal> values = new ArrayList<BigDecimal>();
-                if (choiceValue instanceof List) {
-                    for (Object value : (List) choiceValue) {
-                        values.add((BigDecimal) getCMISValue(value, PropertyType.DECIMAL));
-                    }
-                } else {
-                    values.add((BigDecimal) getCMISValue(choiceValue, PropertyType.DECIMAL));
-                }
-                choice.setValue(values);
-
-                choice.setChoice(convertChoicesDecimal(choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_CHOICE)));
-
-                result.add(choice);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    @SuppressWarnings({ "rawtypes" })
-    private static List<Choice<GregorianCalendar>> convertChoicesDateTime(final Object choices) {
-        if (!(choices instanceof List)) {
-            return null;
-        }
-
-        List<Choice<GregorianCalendar>> result = new ArrayList<Choice<GregorianCalendar>>();
-
-        for (Object obj : (List) choices) {
-            Map<String, Object> choiceMap = getMap(obj);
-            if (choiceMap != null) {
-                ChoiceImpl<GregorianCalendar> choice = new ChoiceImpl<GregorianCalendar>();
-                choice.setDisplayName(getString(choiceMap, JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME));
-
-                Object choiceValue = choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_VALUE);
-                List<GregorianCalendar> values = new ArrayList<GregorianCalendar>();
-                if (choiceValue instanceof List) {
-                    for (Object value : (List) choiceValue) {
-                        values.add((GregorianCalendar) getCMISValue(value, PropertyType.DATETIME));
-                    }
-                } else {
-                    values.add((GregorianCalendar) getCMISValue(choiceValue, PropertyType.DATETIME));
-                }
-                choice.setValue(values);
-
-                choice.setChoice(convertChoicesDateTime(choiceMap.get(JSON_PROPERTY_TYPE_CHOICE_CHOICE)));
-
-                result.add(choice);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts an object.
-     */
-    public static JSONObject convert(final ObjectData object, final TypeCache typeCache,
-            final PropertyMode propertyMode, final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if (object == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        // properties
-        if (object.getProperties() != null) {
-            if (succinct) {
-                JSONObject properties = convert(object.getProperties(), object.getId(), typeCache, propertyMode, true,
-                        dateTimeFormat);
-                if (properties != null) {
-                    result.put(JSON_OBJECT_SUCCINCT_PROPERTIES, properties);
-                }
-            } else {
-                JSONObject properties = convert(object.getProperties(), object.getId(), typeCache, propertyMode, false,
-                        dateTimeFormat);
-                if (properties != null) {
-                    result.put(JSON_OBJECT_PROPERTIES, properties);
-                }
-            }
-
-            JSONObject propertiesExtension = new JSONObject();
-            convertExtension(object.getProperties(), propertiesExtension);
-            if (!propertiesExtension.isEmpty()) {
-                result.put(JSON_OBJECT_PROPERTIES_EXTENSION, propertiesExtension);
-            }
-        }
-
-        // allowable actions
-        if (object.getAllowableActions() != null) {
-            result.put(JSON_OBJECT_ALLOWABLE_ACTIONS, convert(object.getAllowableActions()));
-        }
-
-        // relationships
-        if (isNotEmpty(object.getRelationships())) {
-            JSONArray relationships = new JSONArray();
-
-            for (ObjectData relationship : object.getRelationships()) {
-                relationships.add(convert(relationship, typeCache, propertyMode, succinct, dateTimeFormat));
-            }
-
-            result.put(JSON_OBJECT_RELATIONSHIPS, relationships);
-        }
-
-        // change event info
-        if (object.getChangeEventInfo() != null && propertyMode == PropertyMode.CHANGE) {
-            JSONObject changeEventInfo = new JSONObject();
-
-            ChangeEventInfo cei = object.getChangeEventInfo();
-            changeEventInfo.put(JSON_CHANGE_EVENT_TYPE, getJSONEnumValue(cei.getChangeType()));
-            changeEventInfo.put(JSON_CHANGE_EVENT_TIME, getJSONValue(cei.getChangeTime(), dateTimeFormat));
-
-            convertExtension(object.getChangeEventInfo(), changeEventInfo);
-
-            result.put(JSON_OBJECT_CHANGE_EVENT_INFO, changeEventInfo);
-        }
-
-        // ACL
-        if ((object.getAcl() != null) && (object.getAcl().getAces() != null) && propertyMode != PropertyMode.QUERY) {
-            result.put(JSON_OBJECT_ACL, convert(object.getAcl()));
-        }
-        setIfNotNull(JSON_OBJECT_EXACT_ACL, object.isExactAcl(), result);
-
-        // policy ids
-        if ((object.getPolicyIds() != null) && (object.getPolicyIds().getPolicyIds() != null)
-                && propertyMode != PropertyMode.QUERY) {
-            JSONObject policyIds = new JSONObject();
-            JSONArray ids = new JSONArray();
-            policyIds.put(JSON_OBJECT_POLICY_IDS_IDS, ids);
-
-            for (String pi : object.getPolicyIds().getPolicyIds()) {
-                ids.add(pi);
-            }
-
-            convertExtension(object.getPolicyIds(), policyIds);
-
-            result.put(JSON_OBJECT_POLICY_IDS, policyIds);
-        }
-
-        // renditions
-        if (isNotEmpty(object.getRenditions())) {
-            JSONArray renditions = new JSONArray();
-
-            for (RenditionData rendition : object.getRenditions()) {
-                renditions.add(convert(rendition));
-            }
-
-            result.put(JSON_OBJECT_RENDITIONS, renditions);
-        }
-
-        convertExtension(object, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a bag of properties.
-     */
-    public static JSONObject convert(final Properties properties, final String objectId, final TypeCache typeCache,
-            final PropertyMode propertyMode, final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if (properties == null) {
-            return null;
-        }
-
-        // get the type
-        TypeDefinition type = null;
-        if (typeCache != null) {
-            PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-            if (typeProp instanceof PropertyId) {
-                String typeId = ((PropertyId) typeProp).getFirstValue();
-                if (typeId != null) {
-                    type = typeCache.getTypeDefinition(typeId);
-                }
-            }
-        }
-
-        JSONObject result = new JSONObject();
-
-        for (PropertyData<?> property : properties.getPropertyList()) {
-            assert property != null;
-            assert property.getId() != null;
-
-            PropertyDefinition<?> propDef = null;
-            if (property instanceof PropertyDataWithDefinition) {
-                propDef = ((PropertyDataWithDefinition<?>) property).getPropertyDefinition();
-            }
-            if (propDef == null && typeCache != null) {
-                propDef = typeCache.getPropertyDefinition(property.getId());
-            }
-            if (propDef == null && type != null) {
-                propDef = type.getPropertyDefinitions().get(property.getId());
-            }
-            if (propDef == null && typeCache != null && objectId != null && propertyMode != PropertyMode.CHANGE) {
-                typeCache.getTypeDefinitionForObject(objectId);
-                propDef = typeCache.getPropertyDefinition(property.getId());
-            }
-
-            String propId = (propertyMode == PropertyMode.QUERY ? property.getQueryName() : property.getId());
-            if (propId == null) {
-                throw new CmisRuntimeException("No query name or alias for property '" + property.getId() + "'!");
-            }
-            result.put(propId, convert(property, propDef, succinct, dateTimeFormat));
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a property.
-     */
-    public static Object convert(final PropertyData<?> property, final PropertyDefinition<?> propDef, boolean succinct,
-            final DateTimeFormat dateTimeFormat) {
-        if (property == null) {
-            return null;
-        }
-
-        if (succinct) {
-            Object result = null;
-
-            if (propDef != null) {
-                if (isNullOrEmpty(property.getValues())) {
-                    result = null;
-                } else if (propDef.getCardinality() == Cardinality.SINGLE) {
-                    result = getJSONValue(property.getValues().get(0), dateTimeFormat);
-                } else {
-                    JSONArray values = new JSONArray();
-
-                    for (Object value : property.getValues()) {
-                        values.add(getJSONValue(value, dateTimeFormat));
-                    }
-
-                    result = values;
-                }
-            } else {
-                if (isNullOrEmpty(property.getValues())) {
-                    result = null;
-                } else {
-                    JSONArray values = new JSONArray();
-
-                    for (Object value : property.getValues()) {
-                        values.add(getJSONValue(value, dateTimeFormat));
-                    }
-
-                    result = values;
-                }
-            }
-
-            return result;
-        } else {
-            JSONObject result = new JSONObject();
-
-            result.put(JSON_PROPERTY_ID, property.getId());
-            setIfNotNull(JSON_PROPERTY_LOCALNAME, property.getLocalName(), result);
-            setIfNotNull(JSON_PROPERTY_DISPLAYNAME, property.getDisplayName(), result);
-            setIfNotNull(JSON_PROPERTY_QUERYNAME, property.getQueryName(), result);
-
-            if (propDef != null) {
-                result.put(JSON_PROPERTY_DATATYPE, getJSONEnumValue(propDef.getPropertyType()));
-                result.put(JSON_PROPERTY_CARDINALITY, getJSONEnumValue(propDef.getCardinality()));
-
-                if (isNullOrEmpty(property.getValues())) {
-                    result.put(JSON_PROPERTY_VALUE, null);
-                } else if (propDef.getCardinality() == Cardinality.SINGLE) {
-                    result.put(JSON_PROPERTY_VALUE, getJSONValue(property.getValues().get(0), dateTimeFormat));
-                } else {
-                    JSONArray values = new JSONArray();
-
-                    for (Object value : property.getValues()) {
-                        values.add(getJSONValue(value, dateTimeFormat));
-                    }
-
-                    result.put(JSON_PROPERTY_VALUE, values);
-                }
-            } else {
-                result.put(JSON_PROPERTY_DATATYPE, getJSONPropertyDataType(property));
-
-                if (isNullOrEmpty(property.getValues())) {
-                    result.put(JSON_PROPERTY_VALUE, null);
-                } else {
-                    JSONArray values = new JSONArray();
-
-                    for (Object value : property.getValues()) {
-                        values.add(getJSONValue(value, dateTimeFormat));
-                    }
-
-                    result.put(JSON_PROPERTY_VALUE, values);
-                }
-            }
-
-            convertExtension(property, result);
-
-            return result;
-        }
-    }
-
-    /**
-     * Converts allowable actions.
-     */
-    public static JSONObject convert(final AllowableActions allowableActions) {
-        if (allowableActions == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        Set<Action> actionSet = allowableActions.getAllowableActions();
-        for (Action action : Action.values()) {
-            result.put(action.value(), actionSet.contains(action));
-        }
-
-        convertExtension(allowableActions, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ACL.
-     */
-    public static JSONObject convert(final Acl acl) {
-        if ((acl == null) || (acl.getAces() == null)) {
-            return null;
-        }
-
-        JSONArray aceObjects = new JSONArray();
-
-        for (Ace ace : acl.getAces()) {
-            JSONArray permissions = new JSONArray();
-            if (ace.getPermissions() != null) {
-                for (String p : ace.getPermissions()) {
-                    permissions.add(p);
-                }
-            }
-
-            JSONObject aceObject = new JSONObject();
-
-            JSONObject principalObject = new JSONObject();
-            principalObject.put(JSON_ACE_PRINCIPAL_ID, ace.getPrincipalId());
-            convertExtension(ace.getPrincipal(), principalObject);
-            aceObject.put(JSON_ACE_PRINCIPAL, principalObject);
-
-            aceObject.put(JSON_ACE_PERMISSIONS, permissions);
-            aceObject.put(JSON_ACE_IS_DIRECT, ace.isDirect());
-
-            convertExtension(ace, aceObject);
-
-            aceObjects.add(aceObject);
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_ACL_ACES, aceObjects);
-        setIfNotNull(JSON_ACL_IS_EXACT, acl.isExact(), result);
-
-        convertExtension(acl, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a rendition.
-     */
-    public static JSONObject convert(final RenditionData rendition) {
-        if (rendition == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        result.put(JSON_RENDITION_STREAM_ID, rendition.getStreamId());
-        result.put(JSON_RENDITION_MIMETYPE, rendition.getMimeType());
-        result.put(JSON_RENDITION_LENGTH, rendition.getBigLength());
-        result.put(JSON_RENDITION_KIND, rendition.getKind());
-        setIfNotNull(JSON_RENDITION_TITLE, rendition.getTitle(), result);
-        setIfNotNull(JSON_RENDITION_HEIGHT, rendition.getBigHeight(), result);
-        setIfNotNull(JSON_RENDITION_WIDTH, rendition.getBigWidth(), result);
-        setIfNotNull(JSON_RENDITION_DOCUMENT_ID, rendition.getRenditionDocumentId(), result);
-
-        convertExtension(rendition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a query object list.
-     */
-    public static JSONObject convert(final ObjectList list, final TypeCache typeCache, final PropertyMode propertyMode,
-            final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if (list == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        JSONArray objects = new JSONArray();
-        if (list.getObjects() != null) {
-            for (ObjectData object : list.getObjects()) {
-                objects.add(convert(object, typeCache, propertyMode, succinct, dateTimeFormat));
-            }
-        }
-
-        if (propertyMode == PropertyMode.QUERY) {
-            result.put(JSON_QUERYRESULTLIST_RESULTS, objects);
-
-            setIfNotNull(JSON_QUERYRESULTLIST_HAS_MORE_ITEMS, list.hasMoreItems(), result);
-            setIfNotNull(JSON_QUERYRESULTLIST_NUM_ITEMS, list.getNumItems(), result);
-        } else {
-            result.put(JSON_OBJECTLIST_OBJECTS, objects);
-
-            setIfNotNull(JSON_OBJECTLIST_HAS_MORE_ITEMS, list.hasMoreItems(), result);
-            setIfNotNull(JSON_OBJECTLIST_NUM_ITEMS, list.getNumItems(), result);
-        }
-
-        convertExtension(list, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an object in a folder list.
-     */
-    public static JSONObject convert(final ObjectInFolderData objectInFolder, final TypeCache typeCache,
-            final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if ((objectInFolder == null) || (objectInFolder.getObject() == null)) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_OBJECTINFOLDER_OBJECT,
-                convert(objectInFolder.getObject(), typeCache, PropertyMode.OBJECT, succinct, dateTimeFormat));
-        setIfNotNull(JSON_OBJECTINFOLDER_PATH_SEGMENT, objectInFolder.getPathSegment(), result);
-
-        convertExtension(objectInFolder, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a folder list.
-     */
-    public static JSONObject convert(final ObjectInFolderList objectInFolderList, final TypeCache typeCache,
-            final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if (objectInFolderList == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        if (objectInFolderList.getObjects() != null) {
-            JSONArray objects = new JSONArray();
-
-            for (ObjectInFolderData object : objectInFolderList.getObjects()) {
-                objects.add(convert(object, typeCache, succinct, dateTimeFormat));
-            }
-
-            result.put(JSON_OBJECTINFOLDERLIST_OBJECTS, objects);
-        }
-
-        setIfNotNull(JSON_OBJECTINFOLDERLIST_HAS_MORE_ITEMS, objectInFolderList.hasMoreItems(), result);
-        setIfNotNull(JSON_OBJECTINFOLDERLIST_NUM_ITEMS, objectInFolderList.getNumItems(), result);
-
-        convertExtension(objectInFolderList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a folder container.
-     */
-    public static JSONObject convert(final ObjectInFolderContainer container, final TypeCache typeCache,
-            final boolean succinct, final DateTimeFormat dateTimeFormat) {
-        if (container == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_OBJECTINFOLDERCONTAINER_OBJECT,
-                convert(container.getObject(), typeCache, succinct, dateTimeFormat));
-
-        if (isNotEmpty(container.getChildren())) {
-            JSONArray children = new JSONArray();
-            for (ObjectInFolderContainer descendant : container.getChildren()) {
-                children.add(JSONConverter.convert(descendant, typeCache, succinct, dateTimeFormat));
-            }
-
-            result.put(JSON_OBJECTINFOLDERCONTAINER_CHILDREN, children);
-        }
-
-        convertExtension(container, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an object parent.
-     */
-    public static JSONObject convert(final ObjectParentData parent, final TypeCache typeCache, final boolean succinct,
-            final DateTimeFormat dateTimeFormat) {
-        if ((parent == null) || (parent.getObject() == null)) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_OBJECTPARENTS_OBJECT,
-                convert(parent.getObject(), typeCache, PropertyMode.OBJECT, succinct, dateTimeFormat));
-        if (parent.getRelativePathSegment() != null) {
-            result.put(JSON_OBJECTPARENTS_RELATIVE_PATH_SEGMENT, parent.getRelativePathSegment());
-        }
-
-        convertExtension(parent, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition.
-     */
-    public static JSONObject convert(final TypeDefinition type, final DateTimeFormat dateTimeFormat) {
-        if (type == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_TYPE_ID, type.getId());
-        result.put(JSON_TYPE_LOCALNAME, type.getLocalName());
-        result.put(JSON_TYPE_LOCALNAMESPACE, type.getLocalNamespace());
-        setIfNotNull(JSON_TYPE_DISPLAYNAME, type.getDisplayName(), result);
-        setIfNotNull(JSON_TYPE_QUERYNAME, type.getQueryName(), result);
-        setIfNotNull(JSON_TYPE_DESCRIPTION, type.getDescription(), result);
-        result.put(JSON_TYPE_BASE_ID, getJSONEnumValue(type.getBaseTypeId()));
-        setIfNotNull(JSON_TYPE_PARENT_ID, type.getParentTypeId(), result);
-        result.put(JSON_TYPE_CREATABLE, type.isCreatable());
-        result.put(JSON_TYPE_FILEABLE, type.isFileable());
-        result.put(JSON_TYPE_QUERYABLE, type.isQueryable());
-        result.put(JSON_TYPE_FULLTEXT_INDEXED, type.isFulltextIndexed());
-        result.put(JSON_TYPE_INCLUDE_IN_SUPERTYPE_QUERY, type.isIncludedInSupertypeQuery());
-        result.put(JSON_TYPE_CONTROLABLE_POLICY, type.isControllablePolicy());
-        result.put(JSON_TYPE_CONTROLABLE_ACL, type.isControllableAcl());
-
-        if (type.getTypeMutability() != null) {
-            TypeMutability typeMutability = type.getTypeMutability();
-            JSONObject typeMutabilityJson = new JSONObject();
-
-            typeMutabilityJson.put(JSON_TYPE_TYPE_MUTABILITY_CREATE, typeMutability.canCreate());
-            typeMutabilityJson.put(JSON_TYPE_TYPE_MUTABILITY_UPDATE, typeMutability.canUpdate());
-            typeMutabilityJson.put(JSON_TYPE_TYPE_MUTABILITY_DELETE, typeMutability.canDelete());
-
-            convertExtension(typeMutability, typeMutabilityJson);
-
-            result.put(JSON_TYPE_TYPE_MUTABILITY, typeMutabilityJson);
-        }
-
-        if (type instanceof DocumentTypeDefinition) {
-            result.put(JSON_TYPE_VERSIONABLE, ((DocumentTypeDefinition) type).isVersionable());
-            result.put(JSON_TYPE_CONTENTSTREAM_ALLOWED,
-                    getJSONEnumValue(((DocumentTypeDefinition) type).getContentStreamAllowed()));
-        }
-
-        if (type instanceof RelationshipTypeDefinition) {
-            result.put(JSON_TYPE_ALLOWED_SOURCE_TYPES,
-                    getJSONArrayFromList(((RelationshipTypeDefinition) type).getAllowedSourceTypeIds()));
-            result.put(JSON_TYPE_ALLOWED_TARGET_TYPES,
-                    getJSONArrayFromList(((RelationshipTypeDefinition) type).getAllowedTargetTypeIds()));
-        }
-
-        if (isNotEmpty(type.getPropertyDefinitions())) {
-            JSONObject propertyDefs = new JSONObject();
-
-            for (PropertyDefinition<?> pd : type.getPropertyDefinitions().values()) {
-                propertyDefs.put(pd.getId(), convert(pd, dateTimeFormat));
-            }
-
-            result.put(JSON_TYPE_PROPERTY_DEFINITIONS, propertyDefs);
-        }
-
-        convertExtension(type, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a property type definition.
-     */
-    public static JSONObject convert(final PropertyDefinition<?> propertyDefinition, final DateTimeFormat dateTimeFormat) {
-        if (propertyDefinition == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        // type specific
-        if (propertyDefinition instanceof PropertyStringDefinition) {
-            setIfNotNull(JSON_PROPERTY_TYPE_MAX_LENGTH, ((PropertyStringDefinition) propertyDefinition).getMaxLength(),
-                    result);
-        } else if (propertyDefinition instanceof PropertyIdDefinition) {
-            // nothing to do
-        } else if (propertyDefinition instanceof PropertyIntegerDefinition) {
-            setIfNotNull(JSON_PROPERTY_TYPE_MIN_VALUE, ((PropertyIntegerDefinition) propertyDefinition).getMinValue(),
-                    result);
-            setIfNotNull(JSON_PROPERTY_TYPE_MAX_VALUE, ((PropertyIntegerDefinition) propertyDefinition).getMaxValue(),
-                    result);
-        } else if (propertyDefinition instanceof PropertyDecimalDefinition) {
-            setIfNotNull(JSON_PROPERTY_TYPE_MIN_VALUE, ((PropertyDecimalDefinition) propertyDefinition).getMinValue(),
-                    result);
-            setIfNotNull(JSON_PROPERTY_TYPE_MAX_VALUE, ((PropertyDecimalDefinition) propertyDefinition).getMaxValue(),
-                    result);
-            DecimalPrecision precision = ((PropertyDecimalDefinition) propertyDefinition).getPrecision();
-            if (precision != null) {
-                result.put(JSON_PROPERTY_TYPE_PRECISION, precision.value());
-            }
-        } else if (propertyDefinition instanceof PropertyBooleanDefinition) {
-            // nothing to do
-        } else if (propertyDefinition instanceof PropertyDateTimeDefinition) {
-            DateTimeResolution resolution = ((PropertyDateTimeDefinition) propertyDefinition).getDateTimeResolution();
-            if (resolution != null) {
-                result.put(JSON_PROPERTY_TYPE_RESOLUTION, resolution.value());
-            }
-        } else if (propertyDefinition instanceof PropertyHtmlDefinition) {
-            // nothing to do
-        } else if (propertyDefinition instanceof PropertyUriDefinition) {
-            // nothing to do
-        } else {
-            assert false;
-        }
-
-        // default value
-        if (propertyDefinition.getDefaultValue() != null) {
-            if (propertyDefinition.getCardinality() == Cardinality.SINGLE) {
-                if (!propertyDefinition.getDefaultValue().isEmpty()) {
-                    result.put(JSON_PROPERTY_TYPE_DEAULT_VALUE,
-                            getJSONValue(propertyDefinition.getDefaultValue().get(0), dateTimeFormat));
-                }
-            } else {
-                JSONArray values = new JSONArray();
-                for (Object value : propertyDefinition.getDefaultValue()) {
-                    values.add(getJSONValue(value, dateTimeFormat));
-                }
-                result.put(JSON_PROPERTY_TYPE_DEAULT_VALUE, values);
-            }
-        }
-
-        // choices
-        if (isNotEmpty(propertyDefinition.getChoices())) {
-            result.put(
-                    JSON_PROPERTY_TYPE_CHOICE,
-                    convertChoices(propertyDefinition.getChoices(), propertyDefinition.getCardinality(), dateTimeFormat));
-        }
-
-        // generic
-        result.put(JSON_PROPERTY_TYPE_ID, propertyDefinition.getId());
-        result.put(JSON_PROPERTY_TYPE_LOCALNAME, propertyDefinition.getLocalName());
-        setIfNotNull(JSON_PROPERTY_TYPE_LOCALNAMESPACE, propertyDefinition.getLocalNamespace(), result);
-        setIfNotNull(JSON_PROPERTY_TYPE_DISPLAYNAME, propertyDefinition.getDisplayName(), result);
-        setIfNotNull(JSON_PROPERTY_TYPE_QUERYNAME, propertyDefinition.getQueryName(), result);
-        setIfNotNull(JSON_PROPERTY_TYPE_DESCRIPTION, propertyDefinition.getDescription(), result);
-        result.put(JSON_PROPERTY_TYPE_PROPERTY_TYPE, getJSONEnumValue(propertyDefinition.getPropertyType()));
-        result.put(JSON_PROPERTY_TYPE_CARDINALITY, getJSONEnumValue(propertyDefinition.getCardinality()));
-        result.put(JSON_PROPERTY_TYPE_UPDATABILITY, getJSONEnumValue(propertyDefinition.getUpdatability()));
-        setIfNotNull(JSON_PROPERTY_TYPE_INHERITED, propertyDefinition.isInherited(), result);
-        result.put(JSON_PROPERTY_TYPE_REQUIRED, propertyDefinition.isRequired());
-        result.put(JSON_PROPERTY_TYPE_QUERYABLE, propertyDefinition.isQueryable());
-        result.put(JSON_PROPERTY_TYPE_ORDERABLE, propertyDefinition.isOrderable());
-        setIfNotNull(JSON_PROPERTY_TYPE_OPENCHOICE, propertyDefinition.isOpenChoice(), result);
-
-        convertExtension(propertyDefinition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts choices.
-     */
-    private static <T> JSONArray convertChoices(final List<Choice<T>> choices, final Cardinality cardinality,
-            final DateTimeFormat dateTimeFormat) {
-        assert cardinality != null;
-
-        if (choices == null) {
-            return null;
-        }
-
-        JSONArray result = new JSONArray();
-
-        for (Choice<?> choice : choices) {
-            JSONObject jsonChoice = new JSONObject();
-
-            jsonChoice.put(JSON_PROPERTY_TYPE_CHOICE_DISPLAYNAME, choice.getDisplayName());
-
-            if (cardinality == Cardinality.SINGLE) {
-                if (!choice.getValue().isEmpty()) {
-                    jsonChoice.put(JSON_PROPERTY_TYPE_CHOICE_VALUE,
-                            getJSONValue(choice.getValue().get(0), dateTimeFormat));
-                }
-            } else {
-                JSONArray values = new JSONArray();
-                for (Object value : choice.getValue()) {
-                    values.add(getJSONValue(value, dateTimeFormat));
-                }
-                jsonChoice.put(JSON_PROPERTY_TYPE_CHOICE_VALUE, values);
-            }
-
-            if (isNotEmpty(choice.getChoice())) {
-                jsonChoice.put(JSON_PROPERTY_TYPE_CHOICE_CHOICE,
-                        convertChoices(choice.getChoice(), cardinality, dateTimeFormat));
-            }
-
-            result.add(jsonChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition list.
-     */
-    public static JSONObject convert(final TypeDefinitionList list, final DateTimeFormat dateTimeFormat) {
-        if (list == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        if (list.getList() != null) {
-            JSONArray objects = new JSONArray();
-
-            for (TypeDefinition type : list.getList()) {
-                objects.add(convert(type, dateTimeFormat));
-            }
-
-            result.put(JSON_TYPESLIST_TYPES, objects);
-        }
-
-        setIfNotNull(JSON_TYPESLIST_HAS_MORE_ITEMS, list.hasMoreItems(), result);
-        setIfNotNull(JSON_TYPESLIST_NUM_ITEMS, list.getNumItems(), result);
-
-        convertExtension(list, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition list.
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    public static TypeDefinitionList convertTypeChildren(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl();
-
-        Object typesList = json.get(JSON_TYPESLIST_TYPES);
-        List<TypeDefinition> types = new ArrayList<TypeDefinition>();
-
-        if (typesList instanceof List) {
-            for (Object type : (List) typesList) {
-                if (type instanceof Map) {
-                    types.add(convertTypeDefinition((Map<String, Object>) type));
-                }
-            }
-        }
-
-        result.setList(types);
-        result.setHasMoreItems(getBoolean(json, JSON_TYPESLIST_HAS_MORE_ITEMS));
-        result.setNumItems(getInteger(json, JSON_TYPESLIST_NUM_ITEMS));
-
-        convertExtension(json, result, TYPESLIST_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition container.
-     */
-    public static JSONObject convert(final TypeDefinitionContainer container, final DateTimeFormat dateTimeFormat) {
-        if (container == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-        result.put(JSON_TYPESCONTAINER_TYPE, convert(container.getTypeDefinition(), dateTimeFormat));
-
-        if (isNotEmpty(container.getChildren())) {
-            JSONArray children = new JSONArray();
-            for (TypeDefinitionContainer child : container.getChildren()) {
-                children.add(convert(child, dateTimeFormat));
-            }
-
-            result.put(JSON_TYPESCONTAINER_CHILDREN, children);
-        }
-
-        convertExtension(container, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition list.
-     */
-    @SuppressWarnings({ "unchecked" })
-    public static List<TypeDefinitionContainer> convertTypeDescendants(final List<Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        if (json.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-
-        for (Object obj : json) {
-            if (obj instanceof Map) {
-                Map<String, Object> jsonContainer = (Map<String, Object>) obj;
-                TypeDefinitionContainerImpl container = new TypeDefinitionContainerImpl();
-
-                container.setTypeDefinition(convertTypeDefinition(getMap(jsonContainer.get(JSON_TYPESCONTAINER_TYPE))));
-
-                Object children = jsonContainer.get(JSON_TYPESCONTAINER_CHILDREN);
-                if (children instanceof List) {
-                    container.setChildren(convertTypeDescendants((List<Object>) children));
-                } else {
-                    container.setChildren(Collections.<TypeDefinitionContainer> emptyList());
-                }
-
-                convertExtension(jsonContainer, container, TYPESCONTAINER_KEYS);
-
-                result.add(container);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts an object.
-     */
-    public static ObjectData convertObject(final Map<String, Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        ObjectDataImpl result = new ObjectDataImpl();
-
-        result.setAcl(convertAcl(getMap(json.get(JSON_OBJECT_ACL))));
-        result.setAllowableActions(convertAllowableActions(getMap(json.get(JSON_OBJECT_ALLOWABLE_ACTIONS))));
-        Map<String, Object> jsonChangeEventInfo = getMap(json.get(JSON_OBJECT_CHANGE_EVENT_INFO));
-        if (jsonChangeEventInfo != null) {
-            ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-
-            changeEventInfo.setChangeTime(getDateTime(jsonChangeEventInfo, JSON_CHANGE_EVENT_TIME));
-            changeEventInfo.setChangeType(getEnum(jsonChangeEventInfo, JSON_CHANGE_EVENT_TYPE, ChangeType.class));
-
-            convertExtension(json, result, CHANGE_EVENT_KEYS);
-
-            result.setChangeEventInfo(changeEventInfo);
-        }
-        result.setIsExactAcl(getBoolean(json, JSON_OBJECT_EXACT_ACL));
-        result.setPolicyIds(convertPolicyIds(getMap(json.get(JSON_OBJECT_POLICY_IDS))));
-
-        Map<String, Object> propMap = getMap(json.get(JSON_OBJECT_SUCCINCT_PROPERTIES));
-        if (propMap != null) {
-            result.setProperties(convertSuccinctProperties(propMap, getMap(json.get(JSON_OBJECT_PROPERTIES_EXTENSION)),
-                    typeCache));
-        }
-        propMap = getMap(json.get(JSON_OBJECT_PROPERTIES));
-        if (propMap != null) {
-            result.setProperties(convertProperties(propMap, getMap(json.get(JSON_OBJECT_PROPERTIES_EXTENSION))));
-        }
-
-        List<Object> jsonRelationships = getList(json.get(JSON_OBJECT_RELATIONSHIPS));
-        if (jsonRelationships != null) {
-            result.setRelationships(convertObjects(jsonRelationships, typeCache));
-        }
-        List<Object> jsonRenditions = getList(json.get(JSON_OBJECT_RENDITIONS));
-        if (jsonRenditions != null) {
-            result.setRenditions(convertRenditions(jsonRenditions));
-        }
-
-        convertExtension(json, result, OBJECT_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts an object.
-     */
-    public static List<ObjectData> convertObjects(final List<Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        List<ObjectData> result = new ArrayList<ObjectData>();
-        for (Object obj : json) {
-            ObjectData relationship = convertObject(getMap(obj), typeCache);
-            if (relationship != null) {
-                result.add(relationship);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts an ACL.
-     */
-    public static Acl convertAcl(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        AccessControlListImpl result = new AccessControlListImpl();
-
-        List<Ace> aces = new ArrayList<Ace>();
-
-        List<Object> jsonAces = getList(json.get(JSON_ACL_ACES));
-        if (jsonAces != null) {
-            for (Object obj : jsonAces) {
-                Map<String, Object> entry = getMap(obj);
-                if (entry != null) {
-                    AccessControlEntryImpl ace = new AccessControlEntryImpl();
-
-                    Boolean isDirect = getBoolean(entry, JSON_ACE_IS_DIRECT);
-                    ace.setDirect(isDirect != null ? isDirect.booleanValue() : true);
-
-                    List<Object> jsonPermissions = getList(entry.get(JSON_ACE_PERMISSIONS));
-                    if (jsonPermissions != null) {
-                        List<String> permissions = new ArrayList<String>();
-                        for (Object perm : jsonPermissions) {
-                            if (perm != null) {
-                                permissions.add(perm.toString());
-                            }
-                        }
-                        ace.setPermissions(permissions);
-                    }
-
-                    Map<String, Object> jsonPrincipal = getMap(entry.get(JSON_ACE_PRINCIPAL));
-                    if (jsonPrincipal != null) {
-                        AccessControlPrincipalDataImpl principal = new AccessControlPrincipalDataImpl();
-
-                        principal.setId(getString(jsonPrincipal, JSON_ACE_PRINCIPAL_ID));
-
-                        convertExtension(jsonPrincipal, principal, PRINCIPAL_KEYS);
-
-                        ace.setPrincipal(principal);
-                    }
-
-                    convertExtension(entry, ace, ACE_KEYS);
-
-                    aces.add(ace);
-                }
-            }
-        }
-
-        result.setAces(aces);
-
-        result.setExact(getBoolean(json, JSON_ACL_IS_EXACT));
-
-        convertExtension(json, result, ACL_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts allowable actions.
-     */
-    public static AllowableActions convertAllowableActions(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        AllowableActionsImpl result = new AllowableActionsImpl();
-        Set<Action> allowableActions = EnumSet.noneOf(Action.class);
-
-        for (Action action : Action.values()) {
-            Boolean value = getBoolean(json, action.value());
-            if (value != null && value.booleanValue()) {
-                allowableActions.add(action);
-            }
-        }
-
-        result.setAllowableActions(allowableActions);
-
-        convertExtension(json, result, ALLOWABLE_ACTIONS_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts a list of policy ids.
-     */
-    public static PolicyIdList convertPolicyIds(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        PolicyIdListImpl result = new PolicyIdListImpl();
-        List<String> policyIds = new ArrayList<String>();
-
-        List<Object> ids = getList(json.get(JSON_OBJECT_POLICY_IDS_IDS));
-
-        if (ids != null) {
-            for (Object obj : ids) {
-                if (obj instanceof String) {
-                    policyIds.add((String) obj);
-                }
-            }
-        }
-
-        convertExtension(json, result, POLICY_IDS_KEYS);
-
-        result.setPolicyIds(policyIds);
-
-        return result;
-    }
-
-    /**
-     * Converts properties.
-     */
-    @SuppressWarnings("unchecked")
-    public static Properties convertProperties(final Map<String, Object> json, final Map<String, Object> extJson) {
-        if (json == null) {
-            return null;
-        }
-
-        PropertiesImpl result = new PropertiesImpl();
-
-        for (Object jsonProperty : json.values()) {
-            Map<String, Object> jsonPropertyMap = getMap(jsonProperty);
-            if (jsonPropertyMap != null) {
-                AbstractPropertyData<?> property = null;
-
-                String id = getString(jsonPropertyMap, JSON_PROPERTY_ID);
-                String queryName = getString(jsonPropertyMap, JSON_PROPERTY_QUERYNAME);
-                if (id == null && queryName == null) {
-                    throw new CmisRuntimeException(
-                            "Invalid property! Neither a property ID nor a query name is provided!");
-                }
-
-                PropertyType propertyType = null;
-                try {
-                    propertyType = PropertyType.fromValue(getString(jsonPropertyMap, JSON_PROPERTY_DATATYPE));
-                } catch (Exception e) {
-                    throw new CmisRuntimeException("Invalid property datatype: " + id, e);
-                }
-
-                Object value = jsonPropertyMap.get(JSON_PROPERTY_VALUE);
-                List<Object> values = null;
-                if (value instanceof List) {
-                    values = (List<Object>) value;
-                } else if (value != null) {
-                    values = Collections.singletonList(value);
-                }
-
-                switch (propertyType) {
-                case STRING:
-                    property = new PropertyStringImpl();
-                    ((PropertyStringImpl) property).setValues(copyStringValues(values));
-                    break;
-                case ID:
-                    property = new PropertyIdImpl();
-                    ((PropertyIdImpl) property).setValues(copyStringValues(values));
-                    break;
-                case BOOLEAN:
-                    property = new PropertyBooleanImpl();
-                    ((PropertyBooleanImpl) property).setValues(copyBooleanValues(values));
-                    break;
-                case INTEGER:
-                    property = new PropertyIntegerImpl();
-                    ((PropertyIntegerImpl) property).setValues(copyIntegerValues(values));
-                    break;
-                case DECIMAL:
-                    property = new PropertyDecimalImpl();
-                    ((PropertyDecimalImpl) property).setValues(copyDecimalValues(values));
-                    break;
-                case DATETIME:
-                    property = new PropertyDateTimeImpl();
-                    ((PropertyDateTimeImpl) property).setValues(copyDateTimeValues(values));
-                    break;
-                case HTML:
-                    property = new PropertyHtmlImpl();
-                    ((PropertyHtmlImpl) property).setValues(copyStringValues(values));
-                    break;
-                case URI:
-                    property = new PropertyUriImpl();
-                    ((PropertyUriImpl) property).setValues(copyStringValues(values));
-                    break;
-                default:
-                    throw new CmisRuntimeException("Unknown property data type!");
-                }
-
-                property.setId(id);
-                property.setDisplayName(getString(jsonPropertyMap, JSON_PROPERTY_DISPLAYNAME));
-                property.setQueryName(queryName);
-                property.setLocalName(getString(jsonPropertyMap, JSON_PROPERTY_LOCALNAME));
-
-                convertExtension(jsonPropertyMap, property, PROPERTY_KEYS);
-
-                result.addProperty(property);
-            }
-        }
-
-        if (extJson != null) {
-            convertExtension(extJson, result, Collections.<String> emptySet());
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts properties.
-     */
-    @SuppressWarnings("unchecked")
-    public static Properties convertSuccinctProperties(final Map<String, Object> json,
-            final Map<String, Object> extJson, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        TypeDefinition typeDef = null;
-        if (json.get(PropertyIds.OBJECT_TYPE_ID) instanceof String) {
-            typeDef = typeCache.getTypeDefinition((String) json.get(PropertyIds.OBJECT_TYPE_ID));
-        }
-
-        List<Object> secTypeIds = getList(json.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS));
-        List<TypeDefinition> secTypeDefs = null;
-        if (isNotEmpty(secTypeIds)) {
-            secTypeDefs = new ArrayList<TypeDefinition>(secTypeIds.size());
-            for (Object secTypeId : secTypeIds) {
-                if (secTypeId instanceof String) {
-                    secTypeDefs.add(typeCache.getTypeDefinition((String) secTypeId));
-                }
-            }
-        }
-
-        PropertiesImpl result = new PropertiesImpl();
-
-        for (Map.Entry<String, Object> entry : json.entrySet()) {
-            String id = entry.getKey();
-
-            PropertyDefinition<?> propDef = null;
-            if (typeDef != null) {
-                propDef = typeDef.getPropertyDefinitions().get(id);
-            }
-
-            if (propDef == null && secTypeDefs != null) {
-                for (TypeDefinition secTypeDef : secTypeDefs) {
-                    if (secTypeDef != null && secTypeDef.getPropertyDefinitions() != null) {
-                        propDef = secTypeDef.getPropertyDefinitions().get(id);
-                        if (propDef != null) {
-                            break;
-                        }
-                    }
-                }
-            }
-
-            if (propDef == null) {
-                propDef = typeCache.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value()).getPropertyDefinitions()
-                        .get(id);
-            }
-
-            if (propDef == null) {
-                propDef = typeCache.getTypeDefinition(BaseTypeId.CMIS_FOLDER.value()).getPropertyDefinitions().get(id);
-            }
-
-            if (propDef == null && typeDef != null) {
-                TypeDefinition reloadedTypeDef = typeCache.reloadTypeDefinition(typeDef.getId());
-                if (reloadedTypeDef != null) {
-                    propDef = reloadedTypeDef.getPropertyDefinitions().get(id);
-                }
-            }
-
-            if (propDef == null && secTypeDefs != null) {
-                for (TypeDefinition secTypeDef : secTypeDefs) {
-                    TypeDefinition reloadedTypeDef = typeCache.reloadTypeDefinition(secTypeDef.getId());
-                    if (reloadedTypeDef != null && reloadedTypeDef.getPropertyDefinitions() != null) {
-                        propDef = reloadedTypeDef.getPropertyDefinitions().get(id);
-                        if (propDef != null) {
-                            break;
-                        }
-                    }
-                }
-            }
-
-            List<Object> values = null;
-            if (entry.getValue() instanceof List) {
-                values = (List<Object>) entry.getValue();
-            } else if (entry.getValue() != null) {
-                values = Collections.singletonList(entry.getValue());
-            }
-
-            AbstractPropertyData<?> property = null;
-
-            if (propDef != null) {
-                switch (propDef.getPropertyType()) {
-                case STRING:
-                    property = new PropertyStringImpl();
-                    ((PropertyStringImpl) property).setValues(copyStringValues(values));
-                    break;
-                case ID:
-                    property = new PropertyIdImpl();
-                    ((PropertyIdImpl) property).setValues(copyStringValues(values));
-                    break;
-                case BOOLEAN:
-                    property = new PropertyBooleanImpl();
-                    ((PropertyBooleanImpl) property).setValues(copyBooleanValues(values));
-                    break;
-                case INTEGER:
-                    property = new PropertyIntegerImpl();
-                    ((PropertyIntegerImpl) property).setValues(copyIntegerValues(values));
-                    break;
-                case DECIMAL:
-                    property = new PropertyDecimalImpl();
-                    ((PropertyDecimalImpl) property).setValues(copyDecimalValues(values));
-                    break;
-                case DATETIME:
-                    property = new PropertyDateTimeImpl();
-                    ((PropertyDateTimeImpl) property).setValues(copyDateTimeValues(values));
-                    break;
-                case HTML:
-                    property = new PropertyHtmlImpl();
-                    ((PropertyHtmlImpl) property).setValues(copyStringValues(values));
-                    break;
-                case URI:
-                    property = new PropertyUriImpl();
-                    ((PropertyUriImpl) property).setValues(copyStringValues(values));
-                    break;
-                default:
-                    throw new CmisRuntimeException("Unknown property type!");
-                }
-
-                property.setId(id);
-                property.setDisplayName(propDef.getDisplayName());
-                property.setQueryName(propDef.getQueryName());
-                property.setLocalName(propDef.getLocalName());
-            } else {
-                // this else block should only be reached in rare circumstances
-                // it may return incorrect types
-
-                if (values == null) {
-                    property = new PropertyStringImpl();
-                    ((PropertyStringImpl) property).setValues(null);
-                } else {
-                    Object firstValue = values.get(0);
-                    if (firstValue instanceof Boolean) {
-                        property = new PropertyBooleanImpl();
-                        ((PropertyBooleanImpl) property).setValues(copyBooleanValues(values));
-                    } else if (firstValue instanceof BigInteger) {
-                        property = new PropertyIntegerImpl();
-                        ((PropertyIntegerImpl) property).setValues(copyIntegerValues(values));
-                    } else if (firstValue instanceof BigDecimal) {
-                        property = new PropertyDecimalImpl();
-                        ((PropertyDecimalImpl) property).setValues(copyDecimalValues(values));
-                    } else {
-                        property = new PropertyStringImpl();
-                        ((PropertyStringImpl) property).setValues(copyStringValues(values));
-                    }
-                }
-
-                property.setId(id);
-                property.setDisplayName(id);
-                property.setQueryName(null);
-                property.setLocalName(null);
-            }
-
-            result.addProperty(property);
-        }
-
-        if (extJson != null) {
-            convertExtension(extJson, result, Collections.<String> emptySet());
-        }
-
-        return result;
-    }
-
-    private static List<String> copyStringValues(List<Object> source) {
-        List<String> result = null;
-        if (source != null) {
-            result = new ArrayList<String>(source.size());
-            for (Object obj : source) {
-                if (obj instanceof String) {
-                    result.add(obj.toString());
-                } else {
-                    throw new CmisRuntimeException("Invalid property value: " + obj);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private static List<Boolean> copyBooleanValues(List<Object> source) {
-        List<Boolean> result = null;
-        if (source != null) {
-            result = new ArrayList<Boolean>(source.size());
-            for (Object obj : source) {
-                if (obj instanceof Boolean) {
-                    result.add((Boolean) obj);
-                } else {
-                    throw new CmisRuntimeException("Invalid property value: " + obj);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private static List<BigInteger> copyIntegerValues(List<Object> source) {
-        List<BigInteger> result = null;
-        if (source != null) {
-            result = new ArrayList<BigInteger>(source.size());
-            for (Object obj : source) {
-                if (obj instanceof BigInteger) {
-                    result.add((BigInteger) obj);
-                } else {
-                    throw new CmisRuntimeException("Invalid property value: " + obj);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private static List<BigDecimal> copyDecimalValues(List<Object> source) {
-        List<BigDecimal> result = null;
-        if (source != null) {
-            result = new ArrayList<BigDecimal>(source.size());
-            for (Object obj : source) {
-                if (obj instanceof BigDecimal) {
-                    result.add((BigDecimal) obj);
-                } else if (obj instanceof BigInteger) {
-                    result.add(new BigDecimal((BigInteger) obj));
-                } else {
-                    throw new CmisRuntimeException("Invalid property value: " + obj);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private static List<GregorianCalendar> copyDateTimeValues(List<Object> source) {
-        List<GregorianCalendar> result = null;
-        if (source != null) {
-            result = new ArrayList<GregorianCalendar>(source.size());
-            for (Object obj : source) {
-                if (obj instanceof Number) {
-                    GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-                    cal.setTimeInMillis(((Number) obj).longValue());
-                    result.add(cal);
-                } else if (obj instanceof String) {
-                    GregorianCalendar cal = DateTimeHelper.parseXmlDateTime((String) obj);
-                    if (cal == null) {
-                        throw new CmisRuntimeException("Invalid property value: " + obj);
-                    }
-                    result.add(cal);
-                } else {
-                    throw new CmisRuntimeException("Invalid property value: " + obj);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a rendition.
-     */
-    public static RenditionData convertRendition(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        RenditionDataImpl result = new RenditionDataImpl();
-
-        result.setBigHeight(getInteger(json, JSON_RENDITION_HEIGHT));
-        result.setKind(getString(json, JSON_RENDITION_KIND));
-        result.setBigLength(getInteger(json, JSON_RENDITION_LENGTH));
-        result.setMimeType(getString(json, JSON_RENDITION_MIMETYPE));
-        result.setRenditionDocumentId(getString(json, JSON_RENDITION_DOCUMENT_ID));
-        result.setStreamId(getString(json, JSON_RENDITION_STREAM_ID));
-        result.setTitle(getString(json, JSON_RENDITION_TITLE));
-        result.setBigWidth(getInteger(json, JSON_RENDITION_WIDTH));
-
-        convertExtension(json, result, RENDITION_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts a list of renditions.
-     */
-    public static List<RenditionData> convertRenditions(final List<Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        List<RenditionData> result = new ArrayList<RenditionData>();
-
-        for (Object obj : json) {
-            RenditionData rendition = convertRendition(getMap(obj));
-            if (rendition != null) {
-                result.add(rendition);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a object list.
-     */
-    public static ObjectInFolderList convertObjectInFolderList(final Map<String, Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-
-        List<Object> jsonChildren = getList(json.get(JSON_OBJECTINFOLDERLIST_OBJECTS));
-        List<ObjectInFolderData> objects = new ArrayList<ObjectInFolderData>();
-
-        if (jsonChildren != null) {
-            for (Object obj : jsonChildren) {
-                Map<String, Object> jsonObject = getMap(obj);
-                if (jsonObject != null) {
-                    objects.add(convertObjectInFolder(jsonObject, typeCache));
-                }
-            }
-        }
-
-        result.setObjects(objects);
-        result.setHasMoreItems(getBoolean(json, JSON_OBJECTINFOLDERLIST_HAS_MORE_ITEMS));
-        result.setNumItems(getInteger(json, JSON_OBJECTINFOLDERLIST_NUM_ITEMS));
-
-        convertExtension(json, result, OBJECTINFOLDERLIST_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts an object in a folder.
-     */
-    public static ObjectInFolderData convertObjectInFolder(final Map<String, Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        ObjectInFolderDataImpl result = new ObjectInFolderDataImpl();
-
-        result.setObject(convertObject(getMap(json.get(JSON_OBJECTINFOLDER_OBJECT)), typeCache));
-        result.setPathSegment(getString(json, JSON_OBJECTINFOLDER_PATH_SEGMENT));
-
-        convertExtension(json, result, OBJECTINFOLDER_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts a descendants tree.
-     */
-    public static List<ObjectInFolderContainer> convertDescendants(final List<Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-
-        for (Object obj : json) {
-            Map<String, Object> desc = getMap(obj);
-            if (desc != null) {
-                result.add(convertDescendant(desc, typeCache));
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a descendant.
-     */
-    public static ObjectInFolderContainer convertDescendant(final Map<String, Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        ObjectInFolderContainerImpl result = new ObjectInFolderContainerImpl();
-
-        result.setObject(convertObjectInFolder(getMap(json.get(JSON_OBJECTINFOLDERCONTAINER_OBJECT)), typeCache));
-
-        List<ObjectInFolderContainer> containerList = new ArrayList<ObjectInFolderContainer>();
-        List<Object> jsonContainerList = getList(json.get(JSON_OBJECTINFOLDERCONTAINER_CHILDREN));
-        if (jsonContainerList != null) {
-            for (Object obj : jsonContainerList) {
-                Map<String, Object> containerChild = getMap(obj);
-                if (containerChild != null) {
-                    containerList.add(convertDescendant(containerChild, typeCache));
-                }
-            }
-        }
-
-        result.setChildren(containerList);
-
-        convertExtension(json, result, OBJECTINFOLDERCONTAINER_KEYS);
-
-        return result;
-    }
-
-    /**
-     * Converts an object parents list.
-     */
-    public static List<ObjectParentData> convertObjectParents(final List<Object> json, final TypeCache typeCache) {
-        if (json == null) {
-            return null;
-        }
-
-        List<ObjectParentData> result = new ArrayList<ObjectParentData>();
-
-        for (Object obj : json) {
-            Map<String, Object> jsonParent = getMap(obj);
-            if (jsonParent != null) {
-                ObjectParentDataImpl parent = new ObjectParentDataImpl();
-
-                parent.setObject(convertObject(getMap(jsonParent.get(JSON_OBJECTPARENTS_OBJECT)), typeCache));
-                parent.setRelativePathSegment(getString(jsonParent, JSON_OBJECTPARENTS_RELATIVE_PATH_SEGMENT));
-
-                convertExtension(jsonParent, parent, OBJECTPARENTS_KEYS);
-
-                result.add(parent);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a object list.
-     */
-    public static ObjectList convertObjectList(final Map<String, Object> json, final TypeCache typeCache,
-            final boolean isQueryResult) {
-        if (json == null) {
-            return null;
-        }
-
-        ObjectListImpl result = new ObjectListImpl();
-
-        List<Object> jsonChildren = getList(json.get(isQueryResult ? JSON_QUERYRESULTLIST_RESULTS
-                : JSON_OBJECTLIST_OBJECTS));
-        List<ObjectData> objects = new ArrayList<ObjectData>();
-
-        if (jsonChildren != null) {
-            for (Object obj : jsonChildren) {
-                Map<String, Object> jsonObject = getMap(obj);
-                if (jsonObject != null) {
-                    objects.add(convertObject(jsonObject, typeCache));
-                }
-            }
-        }
-
-        result.setObjects(objects);
-
-        if (isQueryResult) {
-            result.setHasMoreItems(getBoolean(json, JSON_QUERYRESULTLIST_HAS_MORE_ITEMS));
-            result.setNumItems(getInteger(json, JSON_QUERYRESULTLIST_NUM_ITEMS));
-            convertExtension(json, result, QUERYRESULTLIST_KEYS);
-        } else {
-            result.setHasMoreItems(getBoolean(json, JSON_OBJECTLIST_HAS_MORE_ITEMS));
-            result.setNumItems(getInteger(json, JSON_OBJECTLIST_NUM_ITEMS));
-            convertExtension(json, result, OBJECTLIST_KEYS);
-        }
-
-        return result;
-    }
-
-    // -----------------------------------------------------------------
-
-    /**
-     * Converts FailedToDelete ids.
-     */
-    public static JSONObject convert(final FailedToDeleteData ftd) {
-        if (ftd == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        JSONArray ids = new JSONArray();
-        if (ftd.getIds() != null) {
-            for (String id : ftd.getIds()) {
-                ids.add(id);
-            }
-        }
-
-        result.put(JSON_FAILEDTODELETE_ID, ids);
-
-        convertExtension(ftd, result);
-
-        return result;
-    }
-
-    /**
-     * Converts FailedToDelete ids.
-     */
-    public static FailedToDeleteData convertFailedToDelete(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-
-        List<String> ids = new ArrayList<String>();
-        List<Object> jsonIds = getList(json.get(JSON_FAILEDTODELETE_ID));
-
-        if (jsonIds != null) {
-            for (Object obj : jsonIds) {
-                if (obj != null) {
-                    ids.add(obj.toString());
-                }
-            }
-        }
-
-        result.setIds(ids);
-
-        convertExtension(json, result, FAILEDTODELETE_KEYS);
-
-        return result;
-    }
-
-    // -----------------------------------------------------------------
-
-    /**
-     * Converts bulk update data.
-     */
-    public static JSONObject convert(BulkUpdateObjectIdAndChangeToken oc) {
-        if (oc == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        setIfNotNull(JSON_BULK_UPDATE_ID, oc.getId(), result);
-        setIfNotNull(JSON_BULK_UPDATE_NEW_ID, oc.getNewId(), result);
-        setIfNotNull(JSON_BULK_UPDATE_CHANGE_TOKEN, oc.getChangeToken(), result);
-
-        convertExtension(oc, result);
-
-        return result;
-    }
-
-    /**
-     * Converts bulk update data lists.
-     */
-    public static List<BulkUpdateObjectIdAndChangeToken> convertBulkUpdate(final List<Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-
-        for (Object ocJson : json) {
-            BulkUpdateObjectIdAndChangeToken oc = convertBulkUpdate(getMap(ocJson));
-            if (oc != null) {
-                result.add(oc);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts bulk update data.
-     */
-    public static BulkUpdateObjectIdAndChangeToken convertBulkUpdate(final Map<String, Object> json) {
-        if (json == null) {
-            return null;
-        }
-
-        String id = getString(json, JSON_BULK_UPDATE_ID);
-        String newId = getString(json, JSON_BULK_UPDATE_NEW_ID);
-        String changeToken = getString(json, JSON_BULK_UPDATE_CHANGE_TOKEN);
-
-        BulkUpdateObjectIdAndChangeTokenImpl result = new BulkUpdateObjectIdAndChangeTokenImpl(id, newId, changeToken);
-
-        convertExtension(json, result, BULK_UPDATE_KEYS);
-
-        return result;
-    }
-
-    // -----------------------------------------------------------------
-
-    public static void convertExtension(final ExtensionsData source, final JSONObject target) {
-        if (source == null || source.getExtensions() == null) {
-            return;
-        }
-
-        for (CmisExtensionElement ext : source.getExtensions()) {
-            addExtensionToTarget(ext, target);
-        }
-    }
-
-    private static JSONObject convertExtensionList(final List<CmisExtensionElement> extensionList) {
-        if (extensionList == null) {
-            return null;
-        }
-
-        JSONObject result = new JSONObject();
-
-        for (CmisExtensionElement ext : extensionList) {
-            addExtensionToTarget(ext, result);
-        }
-
-        return result;
-    }
-
-    private static void addExtensionToTarget(final CmisExtensionElement ext, final JSONObject target) {
-        if (ext == null) {
-            return;
-        }
-
-        Object value = null;
-
-        if (isNotEmpty(ext.getChildren())) {
-            value = convertExtensionList(ext.getChildren());
-        } else {
-            value = ext.getValue();
-        }
-
-        if (!target.containsKey(ext.getName())) {
-            target.put(ext.getName(), value);
-        } else {
-            Object extValue = target.get(ext.getName());
-
-            JSONArray array;
-            if (extValue instanceof JSONArray) {
-                array = (JSONArray) extValue;
-            } else {
-                array = new JSONArray();
-                array.add(extValue);
-            }
-
-            array.add(value);
-
-            target.put(ext.getName(), array);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public static void convertExtension(final Map<String, Object> source, final ExtensionsData target,
-            final Set<String> cmisKeys) {
-        if (source == null) {
-            return;
-        }
-
-        List<CmisExtensionElement> extensions = null;
-
-        for (Map.Entry<String, Object> element : source.entrySet()) {
-            if (cmisKeys.contains(element.getKey())) {
-                continue;
-            }
-
-            if (extensions == null) {
-                extensions = new ArrayList<CmisExtensionElement>();
-            }
-
-            if (element.getValue() instanceof Map) {
-                extensions.add(new CmisExtensionElementImpl(null, element.getKey(), null,
-                        convertExtension((Map<String, Object>) element.getValue())));
-            } else if (element.getValue() instanceof List) {
-                extensions.addAll(convertExtension(element.getKey(), (List<Object>) element.getValue()));
-            } else {
-                String value = (element.getValue() == null ? null : element.getValue().toString());
-                extensions.add(new CmisExtensionElementImpl(null, element.getKey(), null, value));
-            }
-        }
-
-        target.setExtensions(extensions);
-    }
-
-    @SuppressWarnings("unchecked")
-    public static List<CmisExtensionElement> convertExtension(final Map<String, Object> map) {
-        if (map == null) {
-            return null;
-        }
-
-        List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
-        for (Map.Entry<String, Object> element : map.entrySet()) {
-            if (element.getValue() instanceof Map) {
-                extensions.add(new CmisExtensionElementImpl(null, element.getKey(), null,
-                        convertExtension((Map<String, Object>) element.getValue())));
-            } else if (element.getValue() instanceof List) {
-                extensions.addAll(convertExtension(element.getKey(), (List<Object>) element.getValue()));
-            } else {
-                String value = (element.getValue() == null ? null : element.getValue().toString());
-                extensions.add(new CmisExtensionElementImpl(null, element.getKey(), null, value));
-            }
-        }
-
-        return extensions;
-    }
-
-    @SuppressWarnings("unchecked")
-    public static List<CmisExtensionElement> convertExtension(final String name, final List<Object> list) {
-        if (list == null) {
-            return null;
-        }
-
-        List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
-        for (Object element : list) {
-            if (element instanceof Map) {
-                extensions.add(new CmisExtensionElementImpl(null, name, null,
-                        convertExtension((Map<String, Object>) element)));
-            } else if (element instanceof List) {
-                extensions.addAll(convertExtension(name, (List<Object>) element));
-            } else {
-                String value = (element == null ? null : element.toString());
-                extensions.add(new CmisExtensionElementImpl(null, name, null, value));
-            }
-        }
-
-        return extensions;
-    }
-
-    // -----------------------------------------------------------------
-
-    public static String getJSONStringValue(final Object obj) {
-        if (obj == null) {
-            return null;
-        }
-
-        return obj.toString();
-    }
-
-    public static Object getJSONValue(final Object value, final DateTimeFormat dateTimeFormat) {
-        if (value instanceof GregorianCalendar) {
-            if (dateTimeFormat == DateTimeFormat.EXTENDED) {
-                return DateTimeHelper.formatXmlDateTime((GregorianCalendar) value);
-            } else {
-                return ((GregorianCalendar) value).getTimeInMillis();
-            }
-        }
-
-        return value;
-    }
-
-    public static String getJSONEnumValue(final Object obj) {
-        if (obj == null) {
-            return null;
-        }
-
-        try {
-            Method m = obj.getClass().getMethod("value", new Class[0]);
-            return (String) m.invoke(obj, new Object[0]);
-        } catch (Exception e) {
-            if (e instanceof IllegalArgumentException) {
-                return null;
-            } else {
-                throw new CmisRuntimeException("Could not get enum value!", e);
-            }
-        }
-    }
-
-    public static Object getCMISValue(final Object value, final PropertyType propertyType) {
-        if (value == null) {
-            return null;
-        }
-
-        switch (propertyType) {
-        case STRING:
-        case ID:
-        case HTML:
-        case URI:
-            if (value instanceof String) {
-                return value;
-            }
-            throw new CmisRuntimeException("Invalid String value!");
-        case BOOLEAN:
-            if (value instanceof Boolean) {
-                return value;
-            }
-            throw new CmisRuntimeException("Invalid Boolean value!");
-        case INTEGER:
-            if (value instanceof BigInteger) {
-                return value;
-            }
-            throw new CmisRuntimeException("Invalid Integer value!");
-        case DECIMAL:
-            if (value instanceof BigDecimal) {
-                return value;
-            }
-            throw new CmisRuntimeException("Invalid Decimal value!");
-        case DATETIME:
-            if (value instanceof Number) {
-                GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-                cal.setTimeInMillis(((Number) value).longValue());
-                return cal;
-            } else if (value instanceof String) {
-                GregorianCalendar cal = DateTimeHelper.parseXmlDateTime((String) value);
-                if (cal == null) {
-                    throw new CmisRuntimeException("Invalid DateTime value!");
-                }
-                return cal;
-            }
-            throw new CmisRuntimeException("Invalid DateTime value!");
-        default:
-        }
-
-        throw new CmisRuntimeException("Unkown property type!");
-    }
-
-    public static JSONArray getJSONArrayFromList(final List<?> list) {
-        if (list == null) {
-            return null;
-        }
-
-        JSONArray result = new JSONArray();
-        result.addAll(list);
-
-        return result;
-    }
-
-    public static String getJSONPropertyDataType(final PropertyData<?> property) {
-        if (property instanceof PropertyBoolean) {
-            return PropertyType.BOOLEAN.value();
-        } else if (property instanceof PropertyId) {
-            return PropertyType.ID.value();
-        } else if (property instanceof PropertyInteger) {
-            return PropertyType.INTEGER.value();
-        } else if (property instanceof PropertyDateTime) {
-            return PropertyType.DATETIME.value();
-        } else if (property instanceof PropertyDecimal) {
-            return PropertyType.DECIMAL.value();
-        } else if (property instanceof PropertyHtml) {
-            return PropertyType.HTML.value();
-        } else if (property instanceof PropertyString) {
-            return PropertyType.STRING.value();
-        } else if (property instanceof PropertyUri) {
-            return PropertyType.URI.value();
-        }
-
-        return null;
-    }
-
-    public static void setIfNotNull(String name, Object obj, JSONObject json) {
-        if (obj != null) {
-            json.put(name, obj);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public static Map<String, Object> getMap(final Object o) {
-        if (o == null) {
-            return null;
-        }
-
-        if (o instanceof Map) {
-            return (Map<String, Object>) o;
-        }
-
-        throw new CmisRuntimeException("Expected a JSON object but found a "
-                + (o instanceof List ? "JSON array" : o.getClass().getSimpleName()) + ": " + o.toString());
-    }
-
-    @SuppressWarnings("unchecked")
-    public static List<Object> getList(final Object o) {
-        if (o == null) {
-            return null;
-        }
-
-        if (o instanceof List) {
-            return (List<Object>) o;
-        }
-
-        throw new CmisRuntimeException("Expected a JSON array but found a "
-                + (o instanceof List ? "JSON object" : o.getClass().getSimpleName()) + ": " + o.toString());
-    }
-
-    public static String getString(final Map<String, Object> json, final String key) {
-        Object obj = json.get(key);
-        return obj == null ? null : obj.toString();
-    }
-
-    public static Boolean getBoolean(final Map<String, Object> json, final String key) {
-        Object obj = json.get(key);
-
-        if (obj instanceof Boolean) {
-            return (Boolean) obj;
-        }
-
-        return null;
-    }
-
-    public static BigInteger getInteger(final Map<String, Object> json, final String key) {
-        Object obj = json.get(key);
-
-        if (obj instanceof BigInteger) {
-            return (BigInteger) obj;
-        }
-
-        return null;
-    }
-
-    public static BigDecimal getDecimal(final Map<String, Object> json, final String key) {
-        Object obj = json.get(key);
-
-        if (obj instanceof BigDecimal) {
-            return (BigDecimal) obj;
-        }
-
-        if (obj instanceof BigInteger) {
-            return new BigDecimal((BigInteger) obj);
-        }
-
-        return null;
-    }
-
-    public static GregorianCalendar getDateTime(final Map<String, Object> json, final String key) {
-        Object obj = json.get(key);
-
-        if (obj instanceof Number) {
-            GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-            cal.setTimeInMillis(((Number) obj).longValue());
-            return cal;
-        } else if (obj instanceof String) {
-            return DateTimeHelper.parseXmlDateTime((String) obj);
-        }
-
-        return null;
-    }
-
-    public static <T extends Enum<T>> T getEnum(final Map<String, Object> json, final String key, final Class<T> clazz) {
-        return CmisEnumHelper.fromValue(getString(json, key), clazz);
-    }
-
-    public static <T extends Enum<T>> T getIntEnum(final Map<String, Object> json, final String key,
-            final Class<T> clazz) {
-        return CmisEnumHelper.fromValue(getInteger(json, key), clazz);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeHelper.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeHelper.java
deleted file mode 100644
index 576a609..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeHelper.java
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Original contributors from geronimo-javamail_1.4_spec-1.7.1
- *     Florent Guillaume
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-/**
- * MIME helper class.
- */
-public final class MimeHelper {
-
-    public static final String CONTENT_DISPOSITION = "Content-Disposition";
-
-    public static final String DISPOSITION_ATTACHMENT = "attachment";
-
-    public static final String DISPOSITION_INLINE = "inline";
-
-    public static final String DISPOSITION_FILENAME = "filename";
-
-    public static final String DISPOSITION_NAME = "name";
-
-    public static final String DISPOSITION_FORM_DATA_CONTENT = "form-data; " + DISPOSITION_NAME + "=\"content\"";
-
-    // RFC 2045
-    private static final String MIME_SPECIALS = "()<>@,;:\\\"/[]?=" + "\t ";
-
-    private static final String RFC2231_SPECIALS = "*'%" + MIME_SPECIALS;
-
-    private static final String WHITE = " \t\n\r";
-
-    private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
-
-    private static final byte[] HEX_DECODE = new byte[0x80];
-    static {
-        for (int i = 0; i < HEX_DIGITS.length; i++) {
-            HEX_DECODE[HEX_DIGITS[i]] = (byte) i;
-            HEX_DECODE[Character.toLowerCase(HEX_DIGITS[i])] = (byte) i;
-        }
-    }
-
-    private MimeHelper() {
-    }
-
-    /**
-     * Encodes a value per RFC 2231.
-     * <p>
-     * This is used to pass non-ASCII parameters to MIME parameter lists.
-     * <p>
-     * This implementation always uses UTF-8 and no language.
-     * <p>
-     * See <a href="http://tools.ietf.org/html/rfc2231">RFC 2231</a> for
-     * details.
-     * 
-     * @param value
-     *            the value to encode
-     * @param buf
-     *            the buffer to fill
-     * @return {@code true} if an encoding was needed, or {@code false} if no
-     *         encoding was actually needed
-     */
-    protected static boolean encodeRFC2231value(String value, StringBuilder buf) {
-        assert value != null;
-        assert buf != null;
-
-        String charset = IOUtils.UTF8;
-        buf.append(charset);
-        buf.append("''"); // no language
-        byte[] bytes = IOUtils.toUTF8Bytes(value);
-
-        boolean encoded = false;
-        for (int i = 0; i < bytes.length; i++) {
-            int ch = bytes[i] & 0xff;
-            if (ch <= 32 || ch >= 127 || RFC2231_SPECIALS.indexOf(ch) != -1) {
-                buf.append('%');
-                buf.append(HEX_DIGITS[ch >> 4]);
-                buf.append(HEX_DIGITS[ch & 0xf]);
-                encoded = true;
-            } else {
-                buf.append((char) ch);
-            }
-        }
-        return encoded;
-    }
-
-    /**
-     * Encodes a MIME parameter per RFC 2231.
-     * <p>
-     * This implementation always uses UTF-8 and no language.
-     * <p>
-     * See <a href="http://tools.ietf.org/html/rfc2231">RFC 2231</a> for
-     * details.
-     * 
-     * @param value
-     *            the string to encode
-     * @return the encoded string
-     */
-    protected static String encodeRFC2231(String key, String value) {
-        StringBuilder buf = new StringBuilder();
-        boolean encoded = encodeRFC2231value(value, buf);
-        if (encoded) {
-            return "; " + key + "*=" + buf.toString();
-        } else {
-            return "; " + key + "=" + value;
-        }
-    }
-
-    /**
-     * Encodes the Content-Disposition header value according to RFC 2183 and
-     * RFC 2231.
-     * <p>
-     * See <a href="http://tools.ietf.org/html/rfc2231">RFC 2231</a> for
-     * details.
-     * 
-     * @param disposition
-     *            the disposition
-     * @param filename
-     *            the file name
-     * @return the encoded header value
-     */
-    public static String encodeContentDisposition(String disposition, String filename) {
-        if (disposition == null) {
-            disposition = DISPOSITION_ATTACHMENT;
-        }
-        return disposition + encodeRFC2231(DISPOSITION_FILENAME, filename);
-    }
-
-    /**
-     * Decodes a filename from the Content-Disposition header value according to
-     * RFC 2183 and RFC 2231.
-     * <p>
-     * See <a href="http://tools.ietf.org/html/rfc2231">RFC 2231</a> for
-     * details.
-     * 
-     * @param value
-     *            the header value to decode
-     * @return the filename
-     */
-    public static String decodeContentDispositionFilename(String value) {
-        Map<String, String> params = new HashMap<String, String>();
-        decodeContentDisposition(value, params);
-        return params.get(DISPOSITION_FILENAME);
-    }
-
-    /**
-     * Decodes the Content-Disposition header value according to RFC 2183 and
-     * RFC 2231.
-     * <p>
-     * Does not deal with continuation lines.
-     * <p>
-     * See <a href="http://tools.ietf.org/html/rfc2231">RFC 2231</a> for
-     * details.
-     * 
-     * @param value
-     *            the header value to decode
-     * @param params
-     *            the map of parameters to fill
-     * @return the disposition
-     * 
-     */
-    public static String decodeContentDisposition(String value, Map<String, String> params) {
-        try {
-            HeaderTokenizer tokenizer = new HeaderTokenizer(value);
-            // get the first token, which must be an ATOM
-            Token token = tokenizer.next();
-            if (token.getType() != Token.ATOM) {
-                return null;
-            }
-            String disposition = token.getValue();
-            // value ignored in this method
-
-            // the remainder is the parameters
-            String remainder = tokenizer.getRemainder();
-            if (remainder != null) {
-                getParameters(remainder, params);
-            }
-            return disposition;
-        } catch (ParseException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets charset from a content type header.
-     * 
-     * @param value
-     *            the header value to decode
-     * @return the charset or <code>null</code> if no valid boundary available
-     */
-    public static String getCharsetFromContentType(String value) {
-        try {
-            HeaderTokenizer tokenizer = new HeaderTokenizer(value, ";", true);
-
-            // get the first token, which must be an ATOM
-            Token token = tokenizer.next();
-            if (token.getType() != Token.ATOM) {
-                return null;
-            }
-
-            // the remainder is the parameters
-            String remainder = tokenizer.getRemainder();
-            Map<String, String> params;
-            if (remainder != null) {
-                params = new HashMap<String, String>();
-                getParameters(remainder, params);
-
-                return params.get("charset");
-            }
-        } catch (ParseException e) {
-            return null;
-        }
-
-        return null;
-    }
-
-    /**
-     * Parses a WWW-Authenticate header value.
-     * 
-     * @param value
-     *            the header value to parse
-     * 
-     * @return a map with the (lower case) challenge name as key and as the
-     *         value a sub-map with parameters of the challenge
-     */
-    public static Map<String, Map<String, String>> getChallengesFromAuthenticateHeader(String value) {
-        if (value == null || value.length() == 0) {
-            return null;
-        }
-
-        final String trimValue = value.trim();
-
-        Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
-
-        boolean inQuotes = false;
-        boolean inName = true;
-        String challenge = null;
-        String paramName = "";
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < trimValue.length(); i++) {
-            char c = trimValue.charAt(i);
-
-            if (c == '\\') {
-                if (!inQuotes) {
-                    return null;
-                }
-                if (trimValue.length() > i && trimValue.charAt(i + 1) == '\\') {
-                    sb.append('\\');
-                    i++;
-                } else if (trimValue.length() > i && trimValue.charAt(i + 1) == '"') {
-                    sb.append('"');
-                    i++;
-                } else {
-                    return null;
-                }
-            } else if (c == '"') {
-                if (inName) {
-                    return null;
-                }
-                if (inQuotes) {
-                    Map<String, String> authMap = result.get(challenge);
-                    if (authMap == null) {
-                        return null;
-                    }
-                    authMap.put(paramName, sb.toString());
-                }
-                sb = new StringBuilder();
-                inQuotes = !inQuotes;
-            } else if (c == '=') {
-                if (inName) {
-                    paramName = sb.toString().trim();
-
-                    int spcIdx = paramName.indexOf(' ');
-                    if (spcIdx > -1) {
-                        challenge = paramName.substring(0, spcIdx).toLowerCase(Locale.ENGLISH);
-                        result.put(challenge, new HashMap<String, String>());
-                        paramName = paramName.substring(spcIdx).trim();
-                    }
-
-                    sb = new StringBuilder();
-                    inName = false;
-                } else if (!inQuotes) {
-                    return null;
-                }
-            } else if (c == ',') {
-                if (inName) {
-                    challenge = sb.toString().trim().toLowerCase(Locale.ENGLISH);
-                    result.put(challenge, new HashMap<String, String>());
-                    sb = new StringBuilder();
-                } else {
-                    if (inQuotes) {
-                        sb.append(c);
-                    } else {
-                        Map<String, String> authMap = result.get(challenge);
-                        if (authMap == null) {
-                            return null;
-                        }
-                        if (!authMap.containsKey(paramName)) {
-                            authMap.put(paramName, sb.toString().trim());
-                        }
-                        sb = new StringBuilder();
-                        inName = true;
-                    }
-                }
-            } else {
-                sb.append(c);
-            }
-        }
-        if (inQuotes) {
-            return null;
-        }
-        if (inName) {
-            challenge = sb.toString().trim().toLowerCase(Locale.ENGLISH);
-            result.put(challenge, new HashMap<String, String>());
-        } else {
-            Map<String, String> authMap = result.get(challenge);
-            if (authMap == null) {
-                return null;
-            }
-            if (!authMap.containsKey(paramName)) {
-                authMap.put(paramName, sb.toString().trim());
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets the boundary from a <code>multipart/formdata</code> content type
-     * header.
-     * 
-     * @param value
-     *            the header value to decode
-     * @return the boundary as a byte array or <code>null</code> if no valid
-     *         boundary available
-     */
-    public static byte[] getBoundaryFromMultiPart(String value) {
-        try {
-            HeaderTokenizer tokenizer = new HeaderTokenizer(value, ";", true);
-
-            // get the first token, which must be an ATOM
-            Token token = tokenizer.next();
-            if (token.getType() != Token.ATOM) {
-                return null;
-            }
-
-            // check content type
-            String multipartContentType = token.getValue();
-            if (multipartContentType == null
-                    || !(multipartContentType.equalsIgnoreCase("multipart/form-data") || multipartContentType
-                            .equalsIgnoreCase("multipart/related"))) {
-                return null;
-            }
-
-            // the remainder is the parameters
-            String remainder = tokenizer.getRemainder();
-            if (remainder != null) {
-                Map<String, String> params = new HashMap<String, String>();
-                getParameters(remainder, params);
-
-                String boundaryStr = params.get("boundary");
-                if (boundaryStr != null && boundaryStr.length() > 0) {
-                    try {
-                        return boundaryStr.getBytes(IOUtils.ISO_8859_1);
-                    } catch (UnsupportedEncodingException e) {
-                        // shouldn't happen...
-                        throw new CmisRuntimeException("Unsupported encoding 'ISO-8859-1'", e);
-                    }
-                }
-            }
-        } catch (ParseException e) {
-            return null;
-        }
-
-        return null;
-    }
-
-    protected static class ParseException extends Exception {
-        private static final long serialVersionUID = 1L;
-
-        public ParseException() {
-            super();
-        }
-
-        public ParseException(String message) {
-            super(message);
-        }
-    }
-
-    /*
-     * From geronimo-javamail_1.4_spec-1.7.1. Token
-     */
-    protected static class Token {
-        // Constant values from J2SE 1.4 API Docs (Constant values)
-        public static final int ATOM = -1;
-
-        public static final int COMMENT = -3;
-
-        public static final int EOF = -4;
-
-        public static final int QUOTEDSTRING = -2;
-
-        private final int type;
-
-        private final String value;
-
-        public Token(int type, String value) {
-            this.type = type;
-            this.value = value;
-        }
-
-        public int getType() {
-            return type;
-        }
-
-        public String getValue() {
-            return value;
-        }
-    }
-
-    /*
-     * Tweaked from geronimo-javamail_1.4_spec-1.7.1. HeaderTokenizer
-     */
-    protected static class HeaderTokenizer {
-
-        private static final Token EOF = new Token(Token.EOF, null);
-
-        private final String header;
-
-        private final String delimiters;
-
-        private final boolean skipComments;
-
-        private int pos;
-
-        public HeaderTokenizer(String header) {
-            this(header, MIME_SPECIALS, true);
-        }
-
-        protected HeaderTokenizer(String header, String delimiters, boolean skipComments) {
-            this.header = header;
-            this.delimiters = delimiters;
-            this.skipComments = skipComments;
-        }
-
-        public String getRemainder() {
-            return header.substring(pos);
-        }
-
-        public Token next() throws ParseException {
-            return readToken();
-        }
-
-        /**
-         * Read an ATOM token from the parsed header.
-         * 
-         * @return A token containing the value of the atom token.
-         */
-        private Token readAtomicToken() {
-            // skip to next delimiter
-            int start = pos;
-            while (++pos < header.length()) {
-                // break on the first non-atom character.
-                char ch = header.charAt(pos);
-                if (delimiters.indexOf(header.charAt(pos)) != -1 || ch < 32 || ch >= 127) {
-                    break;
-                }
-            }
-            return new Token(Token.ATOM, header.substring(start, pos));
-        }
-
-        /**
-         * Read the next token from the header.
-         * 
-         * @return The next token from the header. White space is skipped, and
-         *         comment tokens are also skipped if indicated.
-         */
-        private Token readToken() throws ParseException {
-            if (pos >= header.length()) {
-                return EOF;
-            } else {
-                char c = header.charAt(pos);
-                // comment token...read and skip over this
-                if (c == '(') {
-                    Token comment = readComment();
-                    if (skipComments) {
-                        return readToken();
-                    } else {
-                        return comment;
-                    }
-                    // quoted literal
-                } else if (c == '\"') {
-                    return readQuotedString();
-                    // white space, eat this and find a real token.
-                } else if (WHITE.indexOf(c) != -1) {
-                    eatWhiteSpace();
-                    return readToken();
-                    // either a CTL or special. These characters have a
-                    // self-defining token type.
-                } else if (c < 32 || c >= 127 || delimiters.indexOf(c) != -1) {
-                    pos++;
-                    return new Token((int) c, String.valueOf(c));
-                } else {
-                    // start of an atom, parse it off.
-                    return readAtomicToken();
-                }
-            }
-        }
-
-        /**
-         * Extract a substring from the header string and apply any
-         * escaping/folding rules to the string.
-         * 
-         * @param start
-         *            The starting offset in the header.
-         * @param end
-         *            The header end offset + 1.
-         * @return The processed string value.
-         */
-        private String getEscapedValue(int start, int end) throws ParseException {
-            StringBuilder value = new StringBuilder();
-            for (int i = start; i < end; i++) {
-                char ch = header.charAt(i);
-                // is this an escape character?
-                if (ch == '\\') {
-                    i++;
-                    if (i == end) {
-                        throw new ParseException("Invalid escape character");
-                    }
-                    value.append(header.charAt(i));
-                } else if (ch == '\r') {
-                    // line breaks are ignored, except for naked '\n'
-                    // characters, which are consider parts of linear
-                    // whitespace.
-                    // see if this is a CRLF sequence, and skip the second if it
-                    // is.
-                    if (i < end - 1 && header.charAt(i + 1) == '\n') {
-                        i++;
-                    }
-                } else {
-                    // just append the ch value.
-                    value.append(ch);
-                }
-            }
-            return value.toString();
-        }
-
-        /**
-         * Read a comment from the header, applying nesting and escape rules to
-         * the content.
-         * 
-         * @return A comment token with the token value.
-         */
-        private Token readComment() throws ParseException {
-            int start = pos + 1;
-            int nesting = 1;
-            boolean requiresEscaping = false;
-            // skip to end of comment/string
-            while (++pos < header.length()) {
-                char ch = header.charAt(pos);
-                if (ch == ')') {
-                    nesting--;
-                    if (nesting == 0) {
-                        break;
-                    }
-                } else if (ch == '(') {
-                    nesting++;
-                } else if (ch == '\\') {
-                    pos++;
-                    requiresEscaping = true;
-                } else if (ch == '\r') {
-                    // we need to process line breaks also
-                    requiresEscaping = true;
-                }
-            }
-            if (nesting != 0) {
-                throw new ParseException("Unbalanced comments");
-            }
-            String value;
-            if (requiresEscaping) {
-                value = getEscapedValue(start, pos);
-            } else {
-                value = header.substring(start, pos++);
-            }
-            return new Token(Token.COMMENT, value);
-        }
-
-        /**
-         * Parse out a quoted string from the header, applying escaping rules to
-         * the value.
-         * 
-         * @return The QUOTEDSTRING token with the value.
-         * @exception ParseException
-         */
-        private Token readQuotedString() throws ParseException {
-            int start = pos + 1;
-            boolean requiresEscaping = false;
-            // skip to end of comment/string
-            while (++pos < header.length()) {
-                char ch = header.charAt(pos);
-                if (ch == '"') {
-                    String value;
-                    if (requiresEscaping) {
-                        value = getEscapedValue(start, pos++);
-                    } else {
-                        value = header.substring(start, pos++);
-                    }
-                    return new Token(Token.QUOTEDSTRING, value);
-                } else if (ch == '\\') {
-                    pos++;
-                    requiresEscaping = true;
-                } else if (ch == '\r') {
-                    // we need to process line breaks also
-                    requiresEscaping = true;
-                }
-            }
-            throw new ParseException("Missing '\"'");
-        }
-
-        /**
-         * Skip white space in the token string.
-         */
-        private void eatWhiteSpace() {
-            // skip to end of whitespace
-            while (++pos < header.length() && WHITE.indexOf(header.charAt(pos)) != -1) {
-                // just read
-            }
-        }
-    }
-
-    /*
-     * Tweaked from geronimo-javamail_1.4_spec-1.7.1. ParameterList
-     */
-    protected static Map<String, String> getParameters(String list, Map<String, String> params) throws ParseException {
-        HeaderTokenizer tokenizer = new HeaderTokenizer(list);
-        while (true) {
-            Token token = tokenizer.next();
-            switch (token.getType()) {
-            case Token.EOF:
-                // the EOF token terminates parsing.
-                return params;
-
-            case ';':
-                // each new parameter is separated by a semicolon, including
-                // the first, which separates
-                // the parameters from the main part of the header.
-                // the next token needs to be a parameter name
-                token = tokenizer.next();
-                // allow a trailing semicolon on the parameters.
-                if (token.getType() == Token.EOF) {
-                    return params;
-                }
-
-                if (token.getType() != Token.ATOM) {
-                    throw new ParseException("Invalid parameter name: " + token.getValue());
-                }
-
-                // get the parameter name as a lower case version for better
-                // mapping.
-                String name = token.getValue().toLowerCase(Locale.ENGLISH);
-
-                token = tokenizer.next();
-
-                // parameters are name=value, so we must have the "=" here.
-                if (token.getType() != '=') {
-                    throw new ParseException("Missing '='");
-                }
-
-                // now the value, which may be an atom or a literal
-                token = tokenizer.next();
-
-                if (token.getType() != Token.ATOM && token.getType() != Token.QUOTEDSTRING) {
-                    throw new ParseException("Invalid parameter value: " + token.getValue());
-                }
-
-                String value = token.getValue();
-
-                // we might have to do some additional decoding. A name that
-                // ends with "*" is marked as being encoded, so if requested, we
-                // decode the value.
-                if (name.endsWith("*")) {
-                    name = name.substring(0, name.length() - 1);
-                    value = decodeRFC2231value(value);
-                }
-                params.put(name, value);
-                break;
-            default:
-                throw new ParseException("Missing ';'");
-            }
-        }
-    }
-
-    protected static String decodeRFC2231value(String value) {
-        int q1 = value.indexOf('\'');
-        if (q1 == -1) {
-            // missing charset
-            return value;
-        }
-        String mimeCharset = value.substring(0, q1);
-        int q2 = value.indexOf('\'', q1 + 1);
-        if (q2 == -1) {
-            // missing language
-            return value;
-        }
-        byte[] bytes = fromHex(value.substring(q2 + 1));
-        try {
-            return new String(bytes, getJavaCharset(mimeCharset));
-        } catch (UnsupportedEncodingException e) {
-            // incorrect encoding
-            return value;
-        }
-    }
-
-    protected static byte[] fromHex(String data) {
-        ByteArrayOutputStream out = new ByteArrayOutputStream(data.length());
-        for (int i = 0; i < data.length();) {
-            char c = data.charAt(i++);
-            if (c == '%') {
-                if (i > data.length() - 2) {
-                    break; // unterminated sequence
-                }
-                byte b1 = HEX_DECODE[data.charAt(i++) & 0x7f];
-                byte b2 = HEX_DECODE[data.charAt(i++) & 0x7f];
-                out.write((b1 << 4) | b2);
-            } else {
-                out.write((byte) c);
-            }
-        }
-        return out.toByteArray();
-    }
-
-    protected static String getJavaCharset(String mimeCharset) {
-        // good enough for standard values
-        return mimeCharset;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
deleted file mode 100644
index e0e1a1c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.activation.MimetypesFileTypeMap;
-
-@SuppressWarnings("PMD.AvoidDuplicateLiterals")
-public final class MimeTypes {
-
-    private static final String OCTET_STREAM = "application/octet-stream";
-    private static final MimetypesFileTypeMap TYPE_MAP = new MimetypesFileTypeMap();
-    private static final Map<String, String> MIME2EXT = new HashMap<String, String>();
-
-    private MimeTypes() {
-    }
-
-    static {
-        // MIME type to extension
-        MIME2EXT.put("application/octet-stream", "");
-        MIME2EXT.put("application/envoy", "evy");
-        MIME2EXT.put("application/epub+zip", "epub");
-        MIME2EXT.put("application/fractals", "fif");
-        MIME2EXT.put("application/futuresplash", "spl");
-        MIME2EXT.put("application/hta", "hta");
-        MIME2EXT.put("application/java-archive", "jar");
-        MIME2EXT.put("application/java-serialized-object", "ser");
-        MIME2EXT.put("application/java-vm", "class");
-        MIME2EXT.put("application/javascript", "js");
-        MIME2EXT.put("application/json", "json");
-        MIME2EXT.put("application/mac-binhex40", "hqx");
-        MIME2EXT.put("application/msword", "doc");
-        MIME2EXT.put("application/oda", "oda");
-        MIME2EXT.put("application/olescript", "axs");
-        MIME2EXT.put("application/onenote", "onetoc");
-        MIME2EXT.put("application/pdf", "pdf");
-        MIME2EXT.put("application/pics-rules", "prf");
-        MIME2EXT.put("application/pkcs10", "p10");
-        MIME2EXT.put("application/pkix-cert", "cer");
-        MIME2EXT.put("application/pkix-crl", "crl");
-        MIME2EXT.put("application/postscript", "ps");
-        MIME2EXT.put("application/rtf", "rtf");
-        MIME2EXT.put("application/vnd.android.package-archive", "apk");
-        MIME2EXT.put("application/vnd.apple.keynote", "key");
-        MIME2EXT.put("application/vnd.apple.numbers", "numbers");
-        MIME2EXT.put("application/vnd.apple.pages", "pages");
-        MIME2EXT.put("application/vnd.framemaker", "fm");
-        MIME2EXT.put("application/vnd.ms-excel", "xls");
-        MIME2EXT.put("application/vnd.ms-pkicertstore", "sst");
-        MIME2EXT.put("application/vnd.ms-pkiseccat", "cat");
-        MIME2EXT.put("application/vnd.ms-pkistl", "stl");
-        MIME2EXT.put("application/vnd.ms-powerpoint", "ppt");
-        MIME2EXT.put("application/vnd.ms-project", "mpp");
-        MIME2EXT.put("application/vnd.ms-works", "wps");
-        MIME2EXT.put("application/vnd.oasis.opendocument.chart", "odc");
-        MIME2EXT.put("application/vnd.oasis.opendocument.chart-template", "otc");
-        MIME2EXT.put("application/vnd.oasis.opendocument.database", "odb");
-        MIME2EXT.put("application/vnd.oasis.opendocument.formula", "odf");
-        MIME2EXT.put("application/vnd.oasis.opendocument.formula-template", "odft");
-        MIME2EXT.put("application/vnd.oasis.opendocument.graphics", "odg");
-        MIME2EXT.put("application/vnd.oasis.opendocument.graphics-template", "otg");
-        MIME2EXT.put("application/vnd.oasis.opendocument.image", "odi");
-        MIME2EXT.put("application/vnd.oasis.opendocument.image-template", "oti");
-        MIME2EXT.put("application/vnd.oasis.opendocument.presentation", "odp");
-        MIME2EXT.put("application/vnd.oasis.opendocument.presentation-template", "otp");
-        MIME2EXT.put("application/vnd.oasis.opendocument.spreadsheet", "ods");
-        MIME2EXT.put("application/vnd.oasis.opendocument.spreadsheet-template", "ots");
-        MIME2EXT.put("application/vnd.oasis.opendocument.text", "odt");
-        MIME2EXT.put("application/vnd.oasis.opendocument.text-master", "odm");
-        MIME2EXT.put("application/vnd.oasis.opendocument.text-template", "ott");
-        MIME2EXT.put("application/vnd.oasis.opendocument.text-web", "oth");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.template", "potx");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx");
-        MIME2EXT.put("application/winhlp", "hlp");
-        MIME2EXT.put("application/x-cdf", "cdf");
-        MIME2EXT.put("application/x-compress", "z");
-        MIME2EXT.put("application/x-compressed", "tgz");
-        MIME2EXT.put("application/x-cpio", "cpio");
-        MIME2EXT.put("application/x-csh", "csh");
-        MIME2EXT.put("application/x-director", "dxr");
-        MIME2EXT.put("application/x-dvi", "dvi");
-        MIME2EXT.put("application/x-gtar", "gtar");
-        MIME2EXT.put("application/x-gzip", "gz");
-        MIME2EXT.put("application/x-hdf", "hdf");
-        MIME2EXT.put("application/x-internet-signup", "isp");
-        MIME2EXT.put("application/x-iphone", "iii");
-        MIME2EXT.put("application/x-iwork-keynote-sffkey", "key");
-        MIME2EXT.put("application/x-iwork-numbers-sffnumber", "numbers");
-        MIME2EXT.put("application/x-iwork-pages-sffpages", "pages");
-        MIME2EXT.put("application/x-javascript", "js");
-        MIME2EXT.put("application/x-latex", "latex");
-        MIME2EXT.put("application/x-msaccess", "mdb");
-        MIME2EXT.put("application/x-mscardfile", "crd");
-        MIME2EXT.put("application/x-msclip", "clp");
-        MIME2EXT.put("application/x-msdownload", "dll");
-        MIME2EXT.put("application/x-msmediaview", "mvb");
-        MIME2EXT.put("application/x-msmetafile", "wmf");
-        MIME2EXT.put("application/x-mspublisher", "pub");
-        MIME2EXT.put("application/x-msschedule", "scd");
-        MIME2EXT.put("application/x-msterminal", "trm");
-        MIME2EXT.put("application/x-mswrite", "wri");
-        MIME2EXT.put("application/x-perfmon", "pmw");
-        MIME2EXT.put("application/x-pkcs12", "pfx");
-        MIME2EXT.put("application/x-pkcs12v", "p12");
-        MIME2EXT.put("application/x-pkcs7-certificates", "p7b");
-        MIME2EXT.put("application/x-pkcs7-certreqresp", "p7r");
-        MIME2EXT.put("application/x-pkcs7-mime", "p7m");
-        MIME2EXT.put("application/x-pkcs7-signature", "p7s");
-        MIME2EXT.put("application/x-sh", "sh");
-        MIME2EXT.put("application/x-shar", "shar");
-        MIME2EXT.put("application/x-shockwave-flash", "swf");
-        MIME2EXT.put("application/x-stuffit", "sit");
-        MIME2EXT.put("application/x-tar", "tar");
-        MIME2EXT.put("application/x-tcl", "tcl");
-        MIME2EXT.put("application/x-tex", "tex");
-        MIME2EXT.put("application/x-texinfo", "texinfo");
-        MIME2EXT.put("application/x-troff-man", "man");
-        MIME2EXT.put("application/x-troff-me", "me");
-        MIME2EXT.put("application/x-troff-ms", "ms");
-        MIME2EXT.put("application/x-troff", "tr");
-        MIME2EXT.put("application/x-ustar", "ustar");
-        MIME2EXT.put("application/x-wais-source", "src");
-        MIME2EXT.put("application/x-x509-ca-cert", "cer");
-        MIME2EXT.put("application/ynd.ms-pkipko", "vpko");
-        MIME2EXT.put("application/zip", "zip");
-        MIME2EXT.put("audio/basic", "snd");
-        MIME2EXT.put("audio/flac", "flac");
-        MIME2EXT.put("audio/mp4", "m4a");
-        MIME2EXT.put("audio/mid", "mid");
-        MIME2EXT.put("audio/midi", "mid");
-        MIME2EXT.put("audio/mpeg", "mp3");
-        MIME2EXT.put("audio/ogg", "ogg");
-        MIME2EXT.put("audio/webm", "webm");
-        MIME2EXT.put("audio/x-aiff", "aif");
-        MIME2EXT.put("audio/x-m4a", "m4a");
-        MIME2EXT.put("audio/x-mpegurl", "m3u");
-        MIME2EXT.put("audio/x-ms-wax", "wax");
-        MIME2EXT.put("audio/x-ms-wma", "wma");
-        MIME2EXT.put("audio/x-pn-realaudio", "ram");
-        MIME2EXT.put("audio/x-wav", "wav");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", "doct");
-        MIME2EXT.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx");
-        MIME2EXT.put("image/bmp", "bmp");
-        MIME2EXT.put("image/cis-cod", "cod");
-        MIME2EXT.put("image/gif", "gif");
-        MIME2EXT.put("image/ief", "ief");
-        MIME2EXT.put("image/jpeg", "jpeg");
-        MIME2EXT.put("image/pipeg", "jfif");
-        MIME2EXT.put("image/png", "png");
-        MIME2EXT.put("image/svg+xml", "svg");
-        MIME2EXT.put("image/tiff", "tiff");
-        MIME2EXT.put("image/webp", "webp");
-        MIME2EXT.put("image/x-cmu-raster", "ras");
-        MIME2EXT.put("image/x-cmx", "cmx");
-        MIME2EXT.put("image/x-icon", "ico");
-        MIME2EXT.put("image/x-portable-anymap", "pnm");
-        MIME2EXT.put("image/x-portable-bitmap", "pbm");
-        MIME2EXT.put("image/x-portable-graymap", "pgm");
-        MIME2EXT.put("image/x-portable-pixmap", "ppm");
-        MIME2EXT.put("image/x-rgb", "rgb");
-        MIME2EXT.put("image/x-xbitmap", "xbm");
-        MIME2EXT.put("image/x-xpixmap", "xpm");
-        MIME2EXT.put("image/x-xwindowdump", "xwd");
-        MIME2EXT.put("message/rfc822", "mhtml");
-        MIME2EXT.put("text/css", "css");
-        MIME2EXT.put("text/html", "html");
-        MIME2EXT.put("text/iuls", "uls");
-        MIME2EXT.put("text/plain", "txt");
-        MIME2EXT.put("text/richtext", "rtx");
-        MIME2EXT.put("text/scriptlet", "sct");
-        MIME2EXT.put("text/tab-separated-values", "tsv");
-        MIME2EXT.put("text/webviewhtml", "htt");
-        MIME2EXT.put("text/x-component", "htc");
-        MIME2EXT.put("text/x-setext", "etx");
-        MIME2EXT.put("text/x-vcard", "vcf");
-        MIME2EXT.put("text/xml", "xml");
-        MIME2EXT.put("video/mp4", "mp4");
-        MIME2EXT.put("video/mpeg", "mpeg");
-        MIME2EXT.put("video/mpegv", "mpe");
-        MIME2EXT.put("video/ogg", "ogv");
-        MIME2EXT.put("video/quicktime", "mov");
-        MIME2EXT.put("video/quicktime", "qt");
-        MIME2EXT.put("video/webm", "webm");
-        MIME2EXT.put("video/x-f4v", "f4v");
-        MIME2EXT.put("video/x-fli", "fli");
-        MIME2EXT.put("video/x-flv", "flv");
-        MIME2EXT.put("video/x-la-asf", "lsf");
-        MIME2EXT.put("video/x-m4v", "m4v");
-        MIME2EXT.put("video/x-ms-asf", "asf");
-        MIME2EXT.put("video/x-msvideo", "avi");
-        MIME2EXT.put("video/x-sgi-movie", "movie");
-        MIME2EXT.put("x-world/x-vrml", "vrml");
-    }
-
-    /**
-     * Returns the MIME type for file extension.
-     */
-    public static String getMIMEType(String ext) {
-        if (ext == null) {
-            return OCTET_STREAM;
-        }
-
-        int x = ext.lastIndexOf('.');
-        if (x > -1) {
-            ext = ext.substring(x + 1);
-        }
-
-        return TYPE_MAP.getContentType("x." + ext.toLowerCase(Locale.ENGLISH));
-    }
-
-    /**
-     * Returns the MIME type for a file.
-     */
-    public static String getMIMEType(File file) {
-        if (file == null) {
-            return OCTET_STREAM;
-        }
-
-        return TYPE_MAP.getContentType(file);
-    }
-
-    /**
-     * Guesses a extension from a MIME type.
-     */
-    public static String getExtension(String mimeType) {
-        if (mimeType == null) {
-            return "";
-        }
-
-        int x = mimeType.indexOf(';');
-        if (x > -1) {
-            mimeType = mimeType.substring(0, x);
-        }
-        mimeType = mimeType.trim().toLowerCase(Locale.ENGLISH);
-
-        String extension = MIME2EXT.get(mimeType);
-        return ((extension == null || extension.length() == 0) ? "" : "." + extension);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ReturnVersion.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ReturnVersion.java
deleted file mode 100644
index 83bcedf..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/ReturnVersion.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-/**
- * Return Version Enum.
- */
-public enum ReturnVersion {
-
-    THIS("this"), LATEST("latest"), LASTESTMAJOR("latestmajor");
-    private final String value;
-
-    ReturnVersion(String v) {
-        value = v;
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public static ReturnVersion fromValue(String v) {
-        for (ReturnVersion c : ReturnVersion.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/StringListBuilder.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/StringListBuilder.java
deleted file mode 100644
index b99a3a9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/StringListBuilder.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-public class StringListBuilder {
-
-    private final String seperator;
-    private final StringBuilder stringBuilder;
-    private boolean first;
-
-    public StringListBuilder() {
-        this(",", new StringBuilder());
-    }
-
-    public StringListBuilder(StringBuilder stringBuilder) {
-        this(",", stringBuilder);
-    }
-
-    public StringListBuilder(String seperator) {
-        this(seperator, new StringBuilder());
-    }
-
-    public StringListBuilder(String seperator, StringBuilder stringBuilder) {
-        this.seperator = seperator;
-        this.stringBuilder = stringBuilder;
-        first = true;
-    }
-
-    public void add(String s) {
-        if (!first) {
-            stringBuilder.append(seperator);
-        } else {
-            first = false;
-        }
-
-        stringBuilder.append(s);
-    }
-
-    public StringBuilder getStringBuilder() {
-        return stringBuilder;
-    }
-
-    @Override
-    public String toString() {
-        return stringBuilder.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/TypeCache.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/TypeCache.java
deleted file mode 100644
index cd03df7..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/TypeCache.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * Temporary type cache used for one call.
- */
-public interface TypeCache {
-
-    /**
-     * Gets the type definition by type ID.
-     */
-    TypeDefinition getTypeDefinition(String typeId);
-
-    /**
-     * Reloads the type definition by type ID.
-     */
-    TypeDefinition reloadTypeDefinition(String typeId);
-    
-    /**
-     * Gets the type definition of an object.
-     */
-    TypeDefinition getTypeDefinitionForObject(String objectId);
-
-    /**
-     * Finds the property definition in all cached types.
-     */
-    PropertyDefinition<?> getPropertyDefinition(String propId);
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/UrlBuilder.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/UrlBuilder.java
deleted file mode 100644
index 4d2179d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/UrlBuilder.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.net.URI;
-
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-
-/**
- * Utility class that helps building URLs.
- */
-public class UrlBuilder {
-
-    private final StringBuilder urlPart;
-    private final StringBuilder queryPart;
-
-    /**
-     * Constructor.
-     * 
-     * @param url
-     *            initial URL
-     */
-    public UrlBuilder(String url) {
-        if (url == null) {
-            throw new IllegalArgumentException("URL must be set");
-        }
-
-        urlPart = new StringBuilder();
-        queryPart = new StringBuilder();
-
-        int qm = url.indexOf('?');
-        if (qm == -1) {
-            urlPart.append(url);
-        } else {
-            urlPart.append(url.substring(0, qm));
-            if (qm < url.length()) {
-                queryPart.append(url.substring(qm + 1));
-            }
-        }
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param scheme
-     *            scheme
-     * @param host
-     *            host
-     * @param port
-     *            port
-     * @param path
-     *            path
-     */
-    public UrlBuilder(String scheme, String host, int port, String path) {
-
-        if ("http".equalsIgnoreCase(scheme) && (port == 80)) {
-            port = -1;
-        }
-        if ("https".equalsIgnoreCase(scheme) && (port == 443)) {
-            port = -1;
-        }
-
-        urlPart = new StringBuilder();
-        queryPart = new StringBuilder();
-
-        urlPart.append(scheme);
-        urlPart.append("://");
-        urlPart.append(host);
-        if (port > 0) {
-            urlPart.append(':').append(port);
-        }
-        if (path != null && path.length() > 0) {
-            if (urlPart.charAt(urlPart.length() - 1) != '/') {
-                urlPart.append('/');
-            }
-            if (path.charAt(0) == '/') {
-                path = path.substring(1);
-            }
-
-            urlPart.append(quoteURIPathComponent(path, true));
-        }
-    }
-
-    /**
-     * Copy constructor.
-     */
-    public UrlBuilder(UrlBuilder urlBuilder) {
-        if (urlBuilder == null) {
-            throw new IllegalArgumentException("UrlBuilder must be set");
-        }
-
-        urlPart = new StringBuilder(urlBuilder.urlPart);
-        queryPart = new StringBuilder(urlBuilder.queryPart);
-    }
-
-    /**
-     * Adds a parameter to the URL.
-     * 
-     * @param name
-     *            parameter name
-     * @param value
-     *            parameter value
-     */
-    public UrlBuilder addParameter(String name, Object value) {
-        if ((name == null) || (value == null)) {
-            return this;
-        }
-
-        String valueStr = normalizeParameter(value);
-
-        if (queryPart.length() > 0) {
-            queryPart.append('&');
-        }
-        queryPart.append(name);
-        queryPart.append('=');
-        queryPart.append(IOUtils.encodeURL(valueStr));
-
-        return this;
-    }
-
-    /**
-     * Adds a parameter without value to the URL.
-     * 
-     * @param name
-     *            parameter name
-     */
-    public UrlBuilder addParameter(String name) {
-        if (name == null) {
-            return this;
-        }
-
-        if (queryPart.length() > 0) {
-            queryPart.append('&');
-        }
-        queryPart.append(name);
-
-        return this;
-    }
-
-    /**
-     * Adds a path segment to the URL.
-     * 
-     * @param pathSegment
-     *            the path segment.
-     */
-    public UrlBuilder addPathSegment(String pathSegment) {
-        return addPathPart(pathSegment, true);
-    }
-
-    /**
-     * Adds a path to the URL.
-     * 
-     * @param path
-     *            the path
-     */
-    public UrlBuilder addPath(String path) {
-        return addPathPart(path, false);
-    }
-
-    protected UrlBuilder addPathPart(String part, boolean quoteSlash) {
-        if (part == null || part.length() == 0) {
-            return this;
-        }
-        if (urlPart.charAt(urlPart.length() - 1) != '/') {
-            urlPart.append('/');
-        }
-        if (part.charAt(0) == '/') {
-            part = part.substring(1);
-        }
-        urlPart.append(quoteURIPathComponent(part, quoteSlash));
-
-        return this;
-    }
-
-    private static final char[] RFC7232_RESERVED = ";?:@&=+$,[]".toCharArray();
-
-    public static String quoteURIPathComponent(String s, boolean quoteSlash) {
-        if (s.length() == 0) {
-            return s;
-        }
-        // reuse the URI class which knows a lot about escaping
-        URI uri;
-        try {
-            // fake scheme so that a colon is not mistaken as a scheme
-            uri = new URI("x", s, null);
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Illegal characters in: " + s, e);
-        }
-        String r = uri.toASCIIString().substring(2); // remove x:
-        // quote some additional reserved characters to be safe
-        for (char c : RFC7232_RESERVED) {
-            if (r.indexOf(c) >= 0) {
-                r = r.replace(String.valueOf(c), "%" + Integer.toHexString(c));
-            }
-        }
-        if (quoteSlash && r.indexOf('/') >= 0) {
-            r = r.replace("/", "%2F");
-        }
-        return r;
-    }
-
-    /**
-     * Converts an object to a String that can be used as a parameter value.
-     */
-    public static String normalizeParameter(Object value) {
-        if (value == null) {
-            return null;
-        } else if (value instanceof IncludeRelationships) {
-            return ((IncludeRelationships) value).value();
-        } else if (value instanceof VersioningState) {
-            return ((VersioningState) value).value();
-        } else if (value instanceof UnfileObject) {
-            return ((UnfileObject) value).value();
-        } else if (value instanceof RelationshipDirection) {
-            return ((RelationshipDirection) value).value();
-        } else if (value instanceof ReturnVersion) {
-            return ((ReturnVersion) value).value();
-        } else if (value instanceof AclPropagation) {
-            return ((AclPropagation) value).value();
-        }
-
-        return value.toString();
-    }
-
-    @Override
-    public String toString() {
-        return urlPart.toString() + (queryPart.length() == 0 ? "" : "?" + queryPart.toString());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/WSConverter.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/WSConverter.java
deleted file mode 100644
index f58f383..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/WSConverter.java
+++ /dev/null
@@ -1,3162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.Closeable;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.PropertyUri;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisACLCapabilityType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisACLType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlEntryType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlPrincipalType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAllowableActionsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisBulkUpdateType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChangeEventType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceBoolean;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceDateTime;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceDecimal;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceHtml;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceId;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceInteger;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceString;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisChoiceUri;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisContentStreamType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisCreatablePropertyTypesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionFeatureKeyValuePair;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionFeatureType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisListOfIdsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisNewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectIdAndChangeTokenType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderContainerType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectParentsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPermissionDefinition;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPermissionMapping;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisProperty;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyBoolean;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyBooleanDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyDateTime;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyDateTimeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyDecimal;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyDecimalDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyHtml;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyHtmlDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyId;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyIdDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyInteger;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyIntegerDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyString;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyStringDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyUri;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertyUriDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRenditionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryCapabilitiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeContainer;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDocumentDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeFolderDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeItemDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeMutabilityCapabilitiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypePolicyDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeRelationshipDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeSecondaryDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DeleteTreeResponse;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumACLPropagation;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumAllowableActionsKey;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBaseObjectTypeIds;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityACL;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityChanges;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityJoin;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityQuery;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCapabilityRendition;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumCardinality;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumDateTimeResolution;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumPropertyType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumSupportedPermissions;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumTypeOfChanges;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumUpdatability;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * Contains converter methods.
- */
-public final class WSConverter {
-
-    private static final String DEFAULT_EXTENSION_NS = "http://chemistry.apache.org/opencmis/extension";
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    private static final Logger LOG = LoggerFactory.getLogger(WSConverter.class);
-
-    private static final BigInteger BIG_INT_32 = BigInteger.valueOf(32);
-    private static final BigInteger BIG_INT_64 = BigInteger.valueOf(64);
-
-    private static Class<?> streamDataHandlerClass1;
-    private static Method streamDataHandlerReadMethod1;
-    private static Method streamDataHandlerCloseMethod1;
-    private static Class<?> streamDataHandlerClass2;
-    private static Method streamDataHandlerReadMethod2;
-    private static Method streamDataHandlerCloseMethod2;
-
-    static {
-        try {
-            streamDataHandlerClass1 = Class.forName("org.jvnet.staxex.StreamingDataHandler");
-            streamDataHandlerReadMethod1 = streamDataHandlerClass1.getMethod("readOnce", new Class<?>[0]);
-            streamDataHandlerCloseMethod1 = streamDataHandlerClass1.getMethod("close", new Class<?>[0]);
-        } catch (Exception e) {
-            streamDataHandlerClass1 = null;
-            streamDataHandlerReadMethod1 = null;
-            streamDataHandlerCloseMethod1 = null;
-        }
-
-        try {
-            streamDataHandlerClass2 = Class.forName("com.sun.xml.internal.org.jvnet.staxex.StreamingDataHandler");
-            streamDataHandlerReadMethod2 = streamDataHandlerClass2.getMethod("readOnce", new Class<?>[0]);
-            streamDataHandlerCloseMethod2 = streamDataHandlerClass1.getMethod("close", new Class<?>[0]);
-        } catch (Exception e) {
-            streamDataHandlerClass2 = null;
-            streamDataHandlerReadMethod2 = null;
-            streamDataHandlerCloseMethod2 = null;
-        }
-    }
-
-    /**
-     * Private constructor.
-     */
-    private WSConverter() {
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Repository Info ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a repository info object.
-     */
-    public static RepositoryInfo convert(CmisRepositoryInfoType repositoryInfo) {
-        if (repositoryInfo == null) {
-            return null;
-        }
-
-        RepositoryInfoImpl result = new RepositoryInfoImpl();
-
-        result.setAclCapabilities(convert(repositoryInfo.getAclCapability()));
-        result.setChangesIncomplete(repositoryInfo.isChangesIncomplete());
-        List<BaseTypeId> baseObjectTypeIds = new ArrayList<BaseTypeId>();
-        for (EnumBaseObjectTypeIds bot : repositoryInfo.getChangesOnType()) {
-            baseObjectTypeIds.add(convert(BaseTypeId.class, bot));
-        }
-        result.setChangesOnType(baseObjectTypeIds);
-        result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
-        result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
-        result.setPrincipalAnonymous(repositoryInfo.getPrincipalAnonymous());
-        result.setPrincipalAnyone(repositoryInfo.getPrincipalAnyone());
-        result.setProductName(repositoryInfo.getProductName());
-        result.setProductVersion(repositoryInfo.getProductVersion());
-        result.setCapabilities(convert(repositoryInfo.getCapabilities()));
-        result.setDescription(repositoryInfo.getRepositoryDescription());
-        result.setId(repositoryInfo.getRepositoryId());
-        result.setName(repositoryInfo.getRepositoryName());
-        result.setRootFolder(repositoryInfo.getRootFolderId());
-        result.setThinClientUri(repositoryInfo.getThinClientURI());
-        result.setVendorName(repositoryInfo.getVendorName());
-        if (isNotEmpty(repositoryInfo.getExtendedFeatures())) {
-            List<ExtensionFeature> extensionFeatures = new ArrayList<ExtensionFeature>();
-            result.setExtensionFeature(extensionFeatures);
-
-            for (CmisExtensionFeatureType feature : repositoryInfo.getExtendedFeatures()) {
-                ExtensionFeatureImpl target = new ExtensionFeatureImpl();
-
-                target.setId(feature.getId());
-                target.setUrl(feature.getUrl());
-                target.setCommonName(feature.getCommonName());
-                target.setVersionLabel(feature.getVersionLabel());
-                target.setDescription(feature.getDescription());
-
-                if (isNotEmpty(feature.getFeatureData())) {
-                    Map<String, String> featureData = new HashMap<String, String>();
-
-                    for (CmisExtensionFeatureKeyValuePair keyValue : feature.getFeatureData()) {
-                        featureData.put(keyValue.getKey(), keyValue.getValue());
-                    }
-
-                    target.setFeatureData(featureData);
-                }
-
-                convertExtension(feature, target);
-
-                extensionFeatures.add(target);
-            }
-        }
-
-        // handle extensions
-        convertExtension(repositoryInfo, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a repository capability object.
-     */
-    public static RepositoryCapabilities convert(CmisRepositoryCapabilitiesType capabilities) {
-        if (capabilities == null) {
-            return null;
-        }
-
-        RepositoryCapabilitiesImpl result = new RepositoryCapabilitiesImpl();
-
-        result.setAllVersionsSearchable(capabilities.isCapabilityAllVersionsSearchable());
-        result.setCapabilityAcl(convert(CapabilityAcl.class, capabilities.getCapabilityACL()));
-        result.setCapabilityChanges(convert(CapabilityChanges.class, capabilities.getCapabilityChanges()));
-        result.setCapabilityContentStreamUpdates(convert(CapabilityContentStreamUpdates.class,
-                capabilities.getCapabilityContentStreamUpdatability()));
-        result.setCapabilityJoin(convert(CapabilityJoin.class, capabilities.getCapabilityJoin()));
-        result.setCapabilityQuery(convert(CapabilityQuery.class, capabilities.getCapabilityQuery()));
-        result.setCapabilityRendition(convert(CapabilityRenditions.class, capabilities.getCapabilityRenditions()));
-        result.setIsPwcSearchable(capabilities.isCapabilityPWCSearchable());
-        result.setIsPwcUpdatable(capabilities.isCapabilityPWCUpdatable());
-        result.setSupportsGetDescendants(capabilities.isCapabilityGetDescendants());
-        result.setSupportsGetFolderTree(capabilities.isCapabilityGetFolderTree());
-        result.setCapabilityOrderBy(convert(CapabilityOrderBy.class, capabilities.getCapabilityOrderBy()));
-        result.setSupportsMultifiling(capabilities.isCapabilityMultifiling());
-        result.setSupportsUnfiling(capabilities.isCapabilityUnfiling());
-        result.setSupportsVersionSpecificFiling(capabilities.isCapabilityVersionSpecificFiling());
-        if (capabilities.getCapabilityCreatablePropertyTypes() != null) {
-            CmisCreatablePropertyTypesType creatablePropertyTypes = capabilities.getCapabilityCreatablePropertyTypes();
-
-            CreatablePropertyTypesImpl target = new CreatablePropertyTypesImpl();
-            result.setCreatablePropertyTypes(target);
-
-            if (isNotEmpty(creatablePropertyTypes.getCanCreate())) {
-                Set<PropertyType> propertyTypeSet = EnumSet.noneOf(PropertyType.class);
-                target.setCanCreate(propertyTypeSet);
-                for (EnumPropertyType propType : creatablePropertyTypes.getCanCreate()) {
-                    PropertyType propertyType = convert(PropertyType.class, propType);
-                    if (propertyType != null) {
-                        propertyTypeSet.add(propertyType);
-                    }
-                }
-            }
-
-            convertExtension(creatablePropertyTypes, target);
-        }
-        if (capabilities.getCapabilityNewTypeSettableAttributes() != null) {
-            CmisNewTypeSettableAttributes newTypeSettableAttributes = capabilities
-                    .getCapabilityNewTypeSettableAttributes();
-
-            NewTypeSettableAttributesImpl target = new NewTypeSettableAttributesImpl();
-            result.setNewTypeSettableAttributes(target);
-
-            target.setCanSetId(newTypeSettableAttributes.isId());
-            target.setCanSetLocalName(newTypeSettableAttributes.isLocalName());
-            target.setCanSetLocalNamespace(newTypeSettableAttributes.isLocalNamespace());
-            target.setCanSetDisplayName(newTypeSettableAttributes.isDisplayName());
-            target.setCanSetQueryName(newTypeSettableAttributes.isQueryName());
-            target.setCanSetDescription(newTypeSettableAttributes.isDescription());
-            target.setCanSetCreatable(newTypeSettableAttributes.isCreatable());
-            target.setCanSetFileable(newTypeSettableAttributes.isFileable());
-            target.setCanSetQueryable(newTypeSettableAttributes.isQueryable());
-            target.setCanSetFulltextIndexed(newTypeSettableAttributes.isFulltextIndexed());
-            target.setCanSetIncludedInSupertypeQuery(newTypeSettableAttributes.isIncludedInSupertypeQuery());
-            target.setCanSetControllablePolicy(newTypeSettableAttributes.isControllablePolicy());
-            target.setCanSetControllableAcl(newTypeSettableAttributes.isControllableACL());
-
-            convertExtension(newTypeSettableAttributes, target);
-        }
-
-        // handle extensions
-        convertExtension(capabilities, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a ACL capability object.
-     */
-    public static AclCapabilities convert(CmisACLCapabilityType aclCapabilities) {
-        if (aclCapabilities == null) {
-            return null;
-        }
-
-        AclCapabilitiesDataImpl result = new AclCapabilitiesDataImpl();
-
-        result.setSupportedPermissions(convert(SupportedPermissions.class, aclCapabilities.getSupportedPermissions()));
-
-        result.setAclPropagation(convert(AclPropagation.class, aclCapabilities.getPropagation()));
-
-        List<PermissionDefinition> permissionDefinitionList = new ArrayList<PermissionDefinition>();
-        for (CmisPermissionDefinition permDef : aclCapabilities.getPermissions()) {
-            PermissionDefinitionDataImpl permDefData = new PermissionDefinitionDataImpl();
-            permDefData.setId(permDef.getPermission());
-            permDefData.setDescription(permDef.getDescription());
-            convertExtension(permDef, permDefData);
-
-            permissionDefinitionList.add(permDefData);
-        }
-        result.setPermissionDefinitionData(permissionDefinitionList);
-
-        Map<String, PermissionMapping> permissionMapping = new LinkedHashMap<String, PermissionMapping>();
-        for (CmisPermissionMapping permMapping : aclCapabilities.getMapping()) {
-            if (permMapping.getKey() != null) {
-                PermissionMappingDataImpl permMappingData = new PermissionMappingDataImpl();
-                String key = permMapping.getKey().value();
-                permMappingData.setKey(key);
-                permMappingData.setPermissions(permMapping.getPermission());
-                convertExtension(permMapping, permMappingData);
-                permissionMapping.put(key, permMappingData);
-            }
-        }
-        result.setPermissionMappingData(permissionMapping);
-
-        // handle extensions
-        convertExtension(aclCapabilities, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a repository info object.
-     */
-    public static CmisRepositoryInfoType convert(RepositoryInfo repositoryInfo, CmisVersion cmisVersion) {
-        if (repositoryInfo == null) {
-            return null;
-        }
-
-        CmisRepositoryInfoType result = new CmisRepositoryInfoType();
-
-        result.setAclCapability(convert(repositoryInfo.getAclCapabilities()));
-        result.setCapabilities(convert(repositoryInfo.getCapabilities(), cmisVersion));
-        result.setChangesIncomplete(repositoryInfo.getChangesIncomplete());
-        result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
-        result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
-        result.setPrincipalAnonymous(repositoryInfo.getPrincipalIdAnonymous());
-        result.setPrincipalAnyone(repositoryInfo.getPrincipalIdAnyone());
-        result.setProductName(repositoryInfo.getProductName());
-        result.setProductVersion(repositoryInfo.getProductVersion());
-        result.setRepositoryDescription(repositoryInfo.getDescription());
-        result.setRepositoryId(repositoryInfo.getId());
-        result.setRepositoryName(repositoryInfo.getName());
-        result.setRootFolderId(repositoryInfo.getRootFolderId());
-        result.setThinClientURI(repositoryInfo.getThinClientUri());
-        result.setVendorName(repositoryInfo.getVendorName());
-        if (repositoryInfo.getChangesOnType() != null) {
-            for (BaseTypeId baseType : repositoryInfo.getChangesOnType()) {
-                if (cmisVersion == CmisVersion.CMIS_1_0 && baseType == BaseTypeId.CMIS_ITEM) {
-                    LOG.warn("Receiver only understands CMIS 1.0 but the Changes On Type list in the Repository info contains the base type Item. "
-                            + "The Item base type has been removed from the list.");
-                    continue;
-                }
-                result.getChangesOnType().add(convert(EnumBaseObjectTypeIds.class, baseType));
-            }
-        }
-        if (cmisVersion != CmisVersion.CMIS_1_0 && repositoryInfo.getExtensionFeatures() != null) {
-            List<ExtensionFeature> extensionFeatures = repositoryInfo.getExtensionFeatures();
-
-            for (ExtensionFeature feature : extensionFeatures) {
-                CmisExtensionFeatureType target = new CmisExtensionFeatureType();
-
-                target.setId(feature.getId());
-                target.setUrl(feature.getUrl());
-                target.setCommonName(feature.getCommonName());
-                target.setVersionLabel(feature.getVersionLabel());
-                target.setDescription(feature.getDescription());
-
-                if (feature.getFeatureData() != null) {
-                    for (Map.Entry<String, String> entry : feature.getFeatureData().entrySet()) {
-                        CmisExtensionFeatureKeyValuePair keyValue = new CmisExtensionFeatureKeyValuePair();
-                        keyValue.setKey(entry.getKey());
-                        keyValue.setValue(entry.getValue());
-                        target.getFeatureData().add(keyValue);
-                    }
-                }
-
-                convertExtension(feature, target);
-
-                result.getExtendedFeatures().add(target);
-            }
-        }
-
-        // handle extensions
-        convertExtension(repositoryInfo, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a repository capability object.
-     */
-    public static CmisRepositoryCapabilitiesType convert(RepositoryCapabilities capabilities, CmisVersion cmisVersion) {
-        if (capabilities == null) {
-            return null;
-        }
-
-        CmisRepositoryCapabilitiesType result = new CmisRepositoryCapabilitiesType();
-
-        result.setCapabilityACL(convert(EnumCapabilityACL.class, capabilities.getAclCapability()));
-        result.setCapabilityAllVersionsSearchable(capabilities.isAllVersionsSearchableSupported());
-        result.setCapabilityChanges(convert(EnumCapabilityChanges.class, capabilities.getChangesCapability()));
-        result.setCapabilityContentStreamUpdatability(convert(EnumCapabilityContentStreamUpdates.class,
-                capabilities.getContentStreamUpdatesCapability()));
-        result.setCapabilityGetDescendants(capabilities.isGetDescendantsSupported());
-        result.setCapabilityGetFolderTree(capabilities.isGetFolderTreeSupported());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            result.setCapabilityOrderBy(convert(EnumCapabilityOrderBy.class, capabilities.getOrderByCapability()));
-        }
-        result.setCapabilityJoin(convert(EnumCapabilityJoin.class, capabilities.getJoinCapability()));
-        result.setCapabilityMultifiling(capabilities.isMultifilingSupported());
-        result.setCapabilityPWCSearchable(capabilities.isPwcSearchableSupported());
-        result.setCapabilityPWCUpdatable(capabilities.isPwcUpdatableSupported());
-        result.setCapabilityQuery(convert(EnumCapabilityQuery.class, capabilities.getQueryCapability()));
-        result.setCapabilityRenditions(convert(EnumCapabilityRendition.class, capabilities.getRenditionsCapability()));
-        result.setCapabilityUnfiling(capabilities.isUnfilingSupported());
-        result.setCapabilityVersionSpecificFiling(capabilities.isVersionSpecificFilingSupported());
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            if (capabilities.getCreatablePropertyTypes() != null) {
-                CreatablePropertyTypes creatablePropertyTypes = capabilities.getCreatablePropertyTypes();
-
-                CmisCreatablePropertyTypesType target = new CmisCreatablePropertyTypesType();
-                result.setCapabilityCreatablePropertyTypes(target);
-
-                if (creatablePropertyTypes.canCreate() != null) {
-                    for (PropertyType pt : creatablePropertyTypes.canCreate()) {
-                        target.getCanCreate().add(convert(EnumPropertyType.class, pt));
-                    }
-                }
-
-                convertExtension(creatablePropertyTypes, target);
-            }
-            if (capabilities.getNewTypeSettableAttributes() != null) {
-                NewTypeSettableAttributes newTypeSettableAttributes = capabilities.getNewTypeSettableAttributes();
-
-                CmisNewTypeSettableAttributes target = new CmisNewTypeSettableAttributes();
-                result.setCapabilityNewTypeSettableAttributes(target);
-
-                target.setId(newTypeSettableAttributes.canSetId() == null ? true : newTypeSettableAttributes.canSetId());
-                target.setLocalName(newTypeSettableAttributes.canSetLocalName() == null ? true
-                        : newTypeSettableAttributes.canSetLocalName());
-                target.setLocalNamespace(newTypeSettableAttributes.canSetLocalNamespace() == null ? true
-                        : newTypeSettableAttributes.canSetLocalNamespace());
-                target.setDisplayName(newTypeSettableAttributes.canSetDisplayName() == null ? true
-                        : newTypeSettableAttributes.canSetDisplayName());
-                target.setQueryName(newTypeSettableAttributes.canSetQueryName() == null ? true
-                        : newTypeSettableAttributes.canSetQueryName());
-                target.setDescription(newTypeSettableAttributes.canSetDescription() == null ? true
-                        : newTypeSettableAttributes.canSetDescription());
-                target.setCreatable(newTypeSettableAttributes.canSetCreatable() == null ? true
-                        : newTypeSettableAttributes.canSetCreatable());
-                target.setFileable(newTypeSettableAttributes.canSetFileable() == null ? true
-                        : newTypeSettableAttributes.canSetFileable());
-                target.setQueryable(newTypeSettableAttributes.canSetQueryable() == null ? true
-                        : newTypeSettableAttributes.canSetQueryable());
-                target.setFulltextIndexed(newTypeSettableAttributes.canSetFulltextIndexed() == null ? true
-                        : newTypeSettableAttributes.canSetFulltextIndexed());
-                target.setIncludedInSupertypeQuery(newTypeSettableAttributes.canSetIncludedInSupertypeQuery() == null ? true
-                        : newTypeSettableAttributes.canSetIncludedInSupertypeQuery());
-                target.setControllablePolicy(newTypeSettableAttributes.canSetControllablePolicy() == null ? true
-                        : newTypeSettableAttributes.canSetControllablePolicy());
-                target.setControllableACL(newTypeSettableAttributes.canSetControllableAcl() == null ? true
-                        : newTypeSettableAttributes.canSetControllableAcl());
-
-                convertExtension(newTypeSettableAttributes, target);
-            }
-        }
-
-        // handle extensions
-        convertExtension(capabilities, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a ACL capability object.
-     */
-    public static CmisACLCapabilityType convert(AclCapabilities aclCapabilities) {
-        if (aclCapabilities == null) {
-            return null;
-        }
-
-        CmisACLCapabilityType result = new CmisACLCapabilityType();
-
-        result.setSupportedPermissions(convert(EnumSupportedPermissions.class,
-                aclCapabilities.getSupportedPermissions()));
-
-        result.setPropagation(convert(EnumACLPropagation.class, aclCapabilities.getAclPropagation()));
-
-        if (aclCapabilities.getPermissions() != null) {
-            for (PermissionDefinition pdd : aclCapabilities.getPermissions()) {
-                CmisPermissionDefinition permDef = new CmisPermissionDefinition();
-                permDef.setDescription(pdd.getDescription());
-                permDef.setPermission(pdd.getId());
-                convertExtension(pdd, permDef);
-
-                result.getPermissions().add(permDef);
-            }
-        }
-
-        if (aclCapabilities.getPermissionMapping() != null) {
-            for (PermissionMapping pmd : aclCapabilities.getPermissionMapping().values()) {
-                CmisPermissionMapping permMap = new CmisPermissionMapping();
-                permMap.setKey(EnumAllowableActionsKey.fromValue(pmd.getKey()));
-
-                if (pmd.getPermissions() != null) {
-                    for (String permission : pmd.getPermissions()) {
-                        permMap.getPermission().add(permission);
-                    }
-                }
-
-                convertExtension(pmd, permMap);
-
-                result.getMapping().add(permMap);
-            }
-        }
-
-        // handle extensions
-        convertExtension(aclCapabilities, result);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Types ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a type definition object.
-     */
-    public static TypeDefinition convert(CmisTypeDefinitionType typeDefinition) {
-        if (typeDefinition == null) {
-            return null;
-        }
-
-        AbstractTypeDefinition result = null;
-
-        if (typeDefinition instanceof CmisTypeFolderDefinitionType) {
-            result = new FolderTypeDefinitionImpl();
-        } else if (typeDefinition instanceof CmisTypeDocumentDefinitionType) {
-            result = new DocumentTypeDefinitionImpl();
-
-            ((DocumentTypeDefinitionImpl) result).setContentStreamAllowed(convert(ContentStreamAllowed.class,
-                    ((CmisTypeDocumentDefinitionType) typeDefinition).getContentStreamAllowed()));
-            ((DocumentTypeDefinitionImpl) result).setIsVersionable(((CmisTypeDocumentDefinitionType) typeDefinition)
-                    .isVersionable());
-        } else if (typeDefinition instanceof CmisTypeRelationshipDefinitionType) {
-            result = new RelationshipTypeDefinitionImpl();
-
-            ((RelationshipTypeDefinitionImpl) result)
-                    .setAllowedSourceTypes(((CmisTypeRelationshipDefinitionType) typeDefinition)
-                            .getAllowedSourceTypes());
-            ((RelationshipTypeDefinitionImpl) result)
-                    .setAllowedTargetTypes(((CmisTypeRelationshipDefinitionType) typeDefinition)
-                            .getAllowedTargetTypes());
-        } else if (typeDefinition instanceof CmisTypePolicyDefinitionType) {
-            result = new PolicyTypeDefinitionImpl();
-        } else if (typeDefinition instanceof CmisTypeItemDefinitionType) {
-            result = new ItemTypeDefinitionImpl();
-        } else if (typeDefinition instanceof CmisTypeSecondaryDefinitionType) {
-            result = new SecondaryTypeDefinitionImpl();
-        } else {
-            throw new CmisRuntimeException("Type '" + typeDefinition.getId() + "' does not match a base type!");
-        }
-
-        result.setBaseTypeId(convert(BaseTypeId.class, typeDefinition.getBaseId()));
-        result.setDescription(typeDefinition.getDescription());
-        result.setDisplayName(typeDefinition.getDisplayName());
-        result.setId(typeDefinition.getId());
-        result.setIsControllableAcl(typeDefinition.isControllableACL());
-        result.setIsControllablePolicy(typeDefinition.isControllablePolicy());
-        result.setIsCreatable(typeDefinition.isCreatable());
-        result.setIsFileable(typeDefinition.isFileable());
-        result.setIsFulltextIndexed(typeDefinition.isFulltextIndexed());
-        result.setIsIncludedInSupertypeQuery(typeDefinition.isIncludedInSupertypeQuery());
-        result.setIsQueryable(typeDefinition.isQueryable());
-        result.setLocalName(typeDefinition.getLocalName());
-        result.setLocalNamespace(typeDefinition.getLocalNamespace());
-        result.setParentTypeId(typeDefinition.getParentId());
-        result.setQueryName(typeDefinition.getQueryName());
-
-        if (typeDefinition.getTypeMutability() != null) {
-            CmisTypeMutabilityCapabilitiesType typeMutability = typeDefinition.getTypeMutability();
-            TypeMutabilityImpl target = new TypeMutabilityImpl();
-
-            target.setCanCreate(typeMutability.isCreate());
-            target.setCanUpdate(typeMutability.isUpdate());
-            target.setCanDelete(typeMutability.isDelete());
-
-            convertExtension(typeMutability, target);
-
-            result.setTypeMutability(target);
-        }
-
-        for (CmisPropertyDefinitionType propertyDefinition : typeDefinition.getPropertyDefinition()) {
-            result.addPropertyDefinition(convert(propertyDefinition));
-        }
-
-        // handle extensions
-        convertExtension(typeDefinition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a property definition object.
-     */
-    public static PropertyDefinition<?> convert(CmisPropertyDefinitionType propertyDefinition) {
-        if (propertyDefinition == null) {
-            return null;
-        }
-
-        AbstractPropertyDefinition<?> result = null;
-
-        if (propertyDefinition instanceof CmisPropertyStringDefinitionType) {
-            result = new PropertyStringDefinitionImpl();
-
-            ((PropertyStringDefinitionImpl) result)
-                    .setChoices(convertChoiceStringList(((CmisPropertyStringDefinitionType) propertyDefinition)
-                            .getChoice()));
-
-            CmisPropertyString prop = ((CmisPropertyStringDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyStringDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-
-            // specific
-            ((PropertyStringDefinitionImpl) result)
-                    .setMaxLength(((CmisPropertyStringDefinitionType) propertyDefinition).getMaxLength());
-        } else if (propertyDefinition instanceof CmisPropertyIdDefinitionType) {
-            result = new PropertyIdDefinitionImpl();
-
-            ((PropertyIdDefinitionImpl) result)
-                    .setChoices(convertChoiceIdList(((CmisPropertyIdDefinitionType) propertyDefinition).getChoice()));
-
-            CmisPropertyId prop = ((CmisPropertyIdDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyIdDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-        } else if (propertyDefinition instanceof CmisPropertyIntegerDefinitionType) {
-            result = new PropertyIntegerDefinitionImpl();
-
-            ((PropertyIntegerDefinitionImpl) result)
-                    .setChoices(convertChoiceIntegerList(((CmisPropertyIntegerDefinitionType) propertyDefinition)
-                            .getChoice()));
-
-            CmisPropertyInteger prop = ((CmisPropertyIntegerDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyIntegerDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-
-            // specific
-            ((PropertyIntegerDefinitionImpl) result)
-                    .setMinValue(((CmisPropertyIntegerDefinitionType) propertyDefinition).getMinValue());
-            ((PropertyIntegerDefinitionImpl) result)
-                    .setMaxValue(((CmisPropertyIntegerDefinitionType) propertyDefinition).getMaxValue());
-        } else if (propertyDefinition instanceof CmisPropertyDecimalDefinitionType) {
-            result = new PropertyDecimalDefinitionImpl();
-
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setChoices(convertChoiceDecimalList(((CmisPropertyDecimalDefinitionType) propertyDefinition)
-                            .getChoice()));
-
-            CmisPropertyDecimal prop = ((CmisPropertyDecimalDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyDecimalDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-
-            // specific
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setMinValue(((CmisPropertyDecimalDefinitionType) propertyDefinition).getMinValue());
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setMaxValue(((CmisPropertyDecimalDefinitionType) propertyDefinition).getMaxValue());
-
-            BigInteger precision = ((CmisPropertyDecimalDefinitionType) propertyDefinition).getPrecision();
-            if (precision != null) {
-                if (BIG_INT_32.equals(precision)) {
-                    ((PropertyDecimalDefinitionImpl) result).setPrecision(DecimalPrecision.BITS32);
-                } else if (BIG_INT_64.equals(precision)) {
-                    ((PropertyDecimalDefinitionImpl) result).setPrecision(DecimalPrecision.BITS64);
-                }
-            }
-        } else if (propertyDefinition instanceof CmisPropertyBooleanDefinitionType) {
-            result = new PropertyBooleanDefinitionImpl();
-
-            ((PropertyBooleanDefinitionImpl) result)
-                    .setChoices(convertChoiceBooleanList(((CmisPropertyBooleanDefinitionType) propertyDefinition)
-                            .getChoice()));
-
-            CmisPropertyBoolean prop = ((CmisPropertyBooleanDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyBooleanDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-        } else if (propertyDefinition instanceof CmisPropertyDateTimeDefinitionType) {
-            result = new PropertyDateTimeDefinitionImpl();
-
-            ((PropertyDateTimeDefinitionImpl) result)
-                    .setChoices(convertChoiceDateTimeList(((CmisPropertyDateTimeDefinitionType) propertyDefinition)
-                            .getChoice()));
-
-            CmisPropertyDateTime prop = ((CmisPropertyDateTimeDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyDateTimeDefinitionImpl) result).setDefaultValue(convertXMLCalendar(prop.getValue()));
-            }
-
-            // specific
-            ((PropertyDateTimeDefinitionImpl) result).setDateTimeResolution(convert(DateTimeResolution.class,
-                    ((CmisPropertyDateTimeDefinitionType) propertyDefinition).getResolution()));
-        } else if (propertyDefinition instanceof CmisPropertyHtmlDefinitionType) {
-            result = new PropertyHtmlDefinitionImpl();
-
-            ((PropertyHtmlDefinitionImpl) result)
-                    .setChoices(convertChoiceHtmlList(((CmisPropertyHtmlDefinitionType) propertyDefinition).getChoice()));
-
-            CmisPropertyHtml prop = ((CmisPropertyHtmlDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyHtmlDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-        } else if (propertyDefinition instanceof CmisPropertyUriDefinitionType) {
-            result = new PropertyUriDefinitionImpl();
-
-            ((PropertyUriDefinitionImpl) result)
-                    .setChoices(convertChoiceUriList(((CmisPropertyUriDefinitionType) propertyDefinition).getChoice()));
-
-            CmisPropertyUri prop = ((CmisPropertyUriDefinitionType) propertyDefinition).getDefaultValue();
-            if (prop != null) {
-                ((PropertyUriDefinitionImpl) result).setDefaultValue(prop.getValue());
-            }
-        } else {
-            return null;
-        }
-
-        result.setCardinality(convert(Cardinality.class, propertyDefinition.getCardinality()));
-        result.setDescription(propertyDefinition.getDescription());
-        result.setDisplayName(propertyDefinition.getDisplayName());
-        result.setId(propertyDefinition.getId());
-        result.setIsInherited(propertyDefinition.isInherited());
-        result.setIsOpenChoice(propertyDefinition.isOpenChoice());
-        result.setIsQueryable(propertyDefinition.isQueryable());
-        result.setIsOrderable(propertyDefinition.isOrderable());
-        result.setIsRequired(propertyDefinition.isRequired());
-        result.setLocalName(propertyDefinition.getLocalName());
-        result.setLocalNamespace(propertyDefinition.getLocalNamespace());
-        result.setPropertyType(convert(PropertyType.class, propertyDefinition.getPropertyType()));
-        result.setQueryName(propertyDefinition.getQueryName());
-        result.setUpdatability(convert(Updatability.class, propertyDefinition.getUpdatability()));
-
-        // handle extensions
-        convertExtension(propertyDefinition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type definition object.
-     */
-    public static CmisTypeDefinitionType convert(TypeDefinition typeDefinition) {
-        if (typeDefinition == null) {
-            return null;
-        }
-
-        CmisTypeDefinitionType result = null;
-
-        if (typeDefinition instanceof DocumentTypeDefinition) {
-            result = new CmisTypeDocumentDefinitionType();
-
-            DocumentTypeDefinition docTypeDefintion = (DocumentTypeDefinition) typeDefinition;
-            ((CmisTypeDocumentDefinitionType) result).setVersionable(convertBoolean(docTypeDefintion.isVersionable(),
-                    false));
-            ((CmisTypeDocumentDefinitionType) result).setContentStreamAllowed(convert(EnumContentStreamAllowed.class,
-                    docTypeDefintion.getContentStreamAllowed()));
-        } else if (typeDefinition instanceof FolderTypeDefinition) {
-            result = new CmisTypeFolderDefinitionType();
-        } else if (typeDefinition instanceof RelationshipTypeDefinition) {
-            result = new CmisTypeRelationshipDefinitionType();
-
-            RelationshipTypeDefinition relationshipTypeDefinition = (RelationshipTypeDefinition) typeDefinition;
-
-            if (relationshipTypeDefinition.getAllowedSourceTypeIds() != null) {
-                for (String type : relationshipTypeDefinition.getAllowedSourceTypeIds()) {
-                    ((CmisTypeRelationshipDefinitionType) result).getAllowedSourceTypes().add(type);
-                }
-            }
-
-            if (relationshipTypeDefinition.getAllowedTargetTypeIds() != null) {
-                for (String type : relationshipTypeDefinition.getAllowedTargetTypeIds()) {
-                    ((CmisTypeRelationshipDefinitionType) result).getAllowedTargetTypes().add(type);
-                }
-            }
-        } else if (typeDefinition instanceof PolicyTypeDefinition) {
-            result = new CmisTypePolicyDefinitionType();
-        } else if (typeDefinition instanceof ItemTypeDefinition) {
-            result = new CmisTypeItemDefinitionType();
-        } else if (typeDefinition instanceof SecondaryTypeDefinition) {
-            result = new CmisTypeSecondaryDefinitionType();
-        } else {
-            return null;
-        }
-
-        result.setBaseId(convert(EnumBaseObjectTypeIds.class, typeDefinition.getBaseTypeId()));
-        result.setControllableACL(convertBoolean(typeDefinition.isControllableAcl(), false));
-        result.setControllablePolicy(convertBoolean(typeDefinition.isControllablePolicy(), false));
-        result.setCreatable(convertBoolean(typeDefinition.isCreatable(), false));
-        result.setDescription(typeDefinition.getDescription());
-        result.setDisplayName(typeDefinition.getDisplayName());
-        result.setFileable(convertBoolean(typeDefinition.isFileable(), false));
-        result.setFulltextIndexed(convertBoolean(typeDefinition.isFulltextIndexed(), false));
-        result.setId(typeDefinition.getId());
-        result.setIncludedInSupertypeQuery(convertBoolean(typeDefinition.isIncludedInSupertypeQuery(), false));
-        result.setLocalName(typeDefinition.getLocalName());
-        result.setLocalNamespace(typeDefinition.getLocalNamespace());
-        result.setParentId(typeDefinition.getParentTypeId());
-        result.setQueryable(convertBoolean(typeDefinition.isQueryable(), false));
-        result.setQueryName(typeDefinition.getQueryName());
-
-        if (typeDefinition.getTypeMutability() != null) {
-            TypeMutability typeMutability = typeDefinition.getTypeMutability();
-            CmisTypeMutabilityCapabilitiesType target = new CmisTypeMutabilityCapabilitiesType();
-
-            target.setCreate(typeMutability.canCreate() == null ? true : typeMutability.canCreate());
-            target.setUpdate(typeMutability.canUpdate() == null ? true : typeMutability.canUpdate());
-            target.setDelete(typeMutability.canDelete() == null ? true : typeMutability.canDelete());
-
-            convertExtension(typeMutability, target);
-
-            result.setTypeMutability(target);
-        }
-
-        if (typeDefinition.getPropertyDefinitions() != null) {
-            for (PropertyDefinition<?> propDef : typeDefinition.getPropertyDefinitions().values()) {
-                result.getPropertyDefinition().add(convert(propDef));
-            }
-        }
-
-        // handle extensions
-        convertExtension(typeDefinition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a property definition object.
-     */
-    public static CmisPropertyDefinitionType convert(PropertyDefinition<?> propertyDefinition) {
-        if (propertyDefinition == null) {
-            return null;
-        }
-
-        CmisPropertyDefinitionType result = null;
-
-        if (propertyDefinition instanceof PropertyStringDefinition) {
-            result = new CmisPropertyStringDefinitionType();
-
-            PropertyStringDefinition source = (PropertyStringDefinition) propertyDefinition;
-            CmisPropertyStringDefinitionType target = (CmisPropertyStringDefinitionType) result;
-
-            convertChoiceStringList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyString defaultValue = new CmisPropertyString();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (String value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-
-            // specific
-            target.setMaxLength(source.getMaxLength());
-        } else if (propertyDefinition instanceof PropertyIdDefinition) {
-            result = new CmisPropertyIdDefinitionType();
-
-            PropertyIdDefinition source = (PropertyIdDefinition) propertyDefinition;
-            CmisPropertyIdDefinitionType target = (CmisPropertyIdDefinitionType) result;
-
-            convertChoiceIdList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyId defaultValue = new CmisPropertyId();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (String value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-        } else if (propertyDefinition instanceof PropertyIntegerDefinition) {
-            result = new CmisPropertyIntegerDefinitionType();
-
-            PropertyIntegerDefinition source = (PropertyIntegerDefinition) propertyDefinition;
-            CmisPropertyIntegerDefinitionType target = (CmisPropertyIntegerDefinitionType) result;
-
-            convertChoiceIntegerList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyInteger defaultValue = new CmisPropertyInteger();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (BigInteger value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-
-            // specific
-            target.setMinValue(source.getMinValue());
-            target.setMaxValue(source.getMaxValue());
-        } else if (propertyDefinition instanceof PropertyDecimalDefinition) {
-            result = new CmisPropertyDecimalDefinitionType();
-
-            PropertyDecimalDefinition source = (PropertyDecimalDefinition) propertyDefinition;
-            CmisPropertyDecimalDefinitionType target = (CmisPropertyDecimalDefinitionType) result;
-
-            convertChoiceDecimalList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyDecimal defaultValue = new CmisPropertyDecimal();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (BigDecimal value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-
-            // specific
-            target.setMinValue(source.getMinValue());
-            target.setMaxValue(source.getMaxValue());
-            if (source.getPrecision() != null) {
-                target.setPrecision(source.getPrecision().value());
-            }
-        } else if (propertyDefinition instanceof PropertyBooleanDefinition) {
-            result = new CmisPropertyBooleanDefinitionType();
-
-            PropertyBooleanDefinition source = (PropertyBooleanDefinition) propertyDefinition;
-            CmisPropertyBooleanDefinitionType target = (CmisPropertyBooleanDefinitionType) result;
-
-            convertChoiceBooleanList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyBoolean defaultValue = new CmisPropertyBoolean();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (Boolean value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-        } else if (propertyDefinition instanceof PropertyDateTimeDefinition) {
-            result = new CmisPropertyDateTimeDefinitionType();
-
-            PropertyDateTimeDefinition source = (PropertyDateTimeDefinition) propertyDefinition;
-            CmisPropertyDateTimeDefinitionType target = (CmisPropertyDateTimeDefinitionType) result;
-
-            convertChoiceDateTimeList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyDateTime defaultValue = new CmisPropertyDateTime();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (XMLGregorianCalendar value : convertCalendar(source.getDefaultValue())) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-
-            // specific
-            target.setResolution(convert(EnumDateTimeResolution.class, source.getDateTimeResolution()));
-        } else if (propertyDefinition instanceof PropertyHtmlDefinition) {
-            result = new CmisPropertyHtmlDefinitionType();
-
-            PropertyHtmlDefinition source = (PropertyHtmlDefinition) propertyDefinition;
-            CmisPropertyHtmlDefinitionType target = (CmisPropertyHtmlDefinitionType) result;
-
-            convertChoiceHtmlList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyHtml defaultValue = new CmisPropertyHtml();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (String value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-        } else if (propertyDefinition instanceof PropertyUriDefinition) {
-            result = new CmisPropertyUriDefinitionType();
-
-            PropertyUriDefinition source = (PropertyUriDefinition) propertyDefinition;
-            CmisPropertyUriDefinitionType target = (CmisPropertyUriDefinitionType) result;
-
-            convertChoiceUriList(source.getChoices(), target.getChoice());
-
-            if (source.getDefaultValue() != null) {
-                CmisPropertyUri defaultValue = new CmisPropertyUri();
-                defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-                for (String value : source.getDefaultValue()) {
-                    defaultValue.getValue().add(value);
-                }
-                target.setDefaultValue(defaultValue);
-            }
-        } else {
-            return null;
-        }
-
-        result.setCardinality(convert(EnumCardinality.class, propertyDefinition.getCardinality()));
-        result.setDescription(propertyDefinition.getDescription());
-        result.setDisplayName(propertyDefinition.getDisplayName());
-        result.setId(propertyDefinition.getId());
-        result.setInherited(propertyDefinition.isInherited());
-        result.setLocalName(propertyDefinition.getLocalName());
-        result.setLocalNamespace(propertyDefinition.getLocalNamespace());
-        result.setOpenChoice(propertyDefinition.isOpenChoice());
-        result.setOrderable(convertBoolean(propertyDefinition.isOrderable(), false));
-        result.setPropertyType(convert(EnumPropertyType.class, propertyDefinition.getPropertyType()));
-        result.setQueryable(convertBoolean(propertyDefinition.isQueryable(), false));
-        result.setQueryName(propertyDefinition.getQueryName());
-        result.setRequired(convertBoolean(propertyDefinition.isRequired(), false));
-        result.setUpdatability(convert(EnumUpdatability.class, propertyDefinition.getUpdatability()));
-
-        // handle extensions
-        convertExtension(propertyDefinition, result);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Choices ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<String>> convertChoiceStringList(List<CmisChoiceString> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-        for (CmisChoiceString choice : choices) {
-            ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-            newChoice.setChoice(convertChoiceStringList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceStringList(List<Choice<String>> choices, List<CmisChoiceString> target) {
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<String> choice : choices) {
-            CmisChoiceString newChoice = new CmisChoiceString();
-
-            convertChoiceStringList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (String value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<String>> convertChoiceIdList(List<CmisChoiceId> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-        for (CmisChoiceId choice : choices) {
-            ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-            newChoice.setChoice(convertChoiceIdList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceIdList(List<Choice<String>> choices, List<CmisChoiceId> target) {
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<String> choice : choices) {
-            CmisChoiceId newChoice = new CmisChoiceId();
-
-            convertChoiceIdList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (String value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<BigInteger>> convertChoiceIntegerList(List<CmisChoiceInteger> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<BigInteger>> result = new ArrayList<Choice<BigInteger>>();
-
-        for (CmisChoiceInteger choice : choices) {
-            ChoiceImpl<BigInteger> newChoice = new ChoiceImpl<BigInteger>();
-
-            newChoice.setChoice(convertChoiceIntegerList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceIntegerList(List<Choice<BigInteger>> choices, List<CmisChoiceInteger> target) {
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<BigInteger> choice : choices) {
-            CmisChoiceInteger newChoice = new CmisChoiceInteger();
-
-            convertChoiceIntegerList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (BigInteger value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<BigDecimal>> convertChoiceDecimalList(List<CmisChoiceDecimal> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<BigDecimal>> result = new ArrayList<Choice<BigDecimal>>();
-
-        for (CmisChoiceDecimal choice : choices) {
-            ChoiceImpl<BigDecimal> newChoice = new ChoiceImpl<BigDecimal>();
-
-            newChoice.setChoice(convertChoiceDecimalList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceDecimalList(List<Choice<BigDecimal>> choices, List<CmisChoiceDecimal> target) {
-        assert target != null;
-
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<BigDecimal> choice : choices) {
-            CmisChoiceDecimal newChoice = new CmisChoiceDecimal();
-
-            convertChoiceDecimalList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (BigDecimal value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<Boolean>> convertChoiceBooleanList(List<CmisChoiceBoolean> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<Boolean>> result = new ArrayList<Choice<Boolean>>();
-
-        for (CmisChoiceBoolean choice : choices) {
-            ChoiceImpl<Boolean> newChoice = new ChoiceImpl<Boolean>();
-
-            newChoice.setChoice(convertChoiceBooleanList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceBooleanList(List<Choice<Boolean>> choices, List<CmisChoiceBoolean> target) {
-        assert target != null;
-
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<Boolean> choice : choices) {
-            CmisChoiceBoolean newChoice = new CmisChoiceBoolean();
-
-            convertChoiceBooleanList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (Boolean value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<GregorianCalendar>> convertChoiceDateTimeList(List<CmisChoiceDateTime> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<GregorianCalendar>> result = new ArrayList<Choice<GregorianCalendar>>();
-
-        for (CmisChoiceDateTime choice : choices) {
-            ChoiceImpl<GregorianCalendar> newChoice = new ChoiceImpl<GregorianCalendar>();
-
-            newChoice.setChoice(convertChoiceDateTimeList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(convertXMLCalendar(choice.getValue()));
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceDateTimeList(List<Choice<GregorianCalendar>> choices,
-            List<CmisChoiceDateTime> target) {
-        assert target != null;
-
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<GregorianCalendar> choice : choices) {
-            CmisChoiceDateTime newChoice = new CmisChoiceDateTime();
-
-            convertChoiceDateTimeList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (XMLGregorianCalendar value : convertCalendar(choice.getValue())) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<String>> convertChoiceHtmlList(List<CmisChoiceHtml> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-        for (CmisChoiceHtml choice : choices) {
-            ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-            newChoice.setChoice(convertChoiceHtmlList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceHtmlList(List<Choice<String>> choices, List<CmisChoiceHtml> target) {
-        assert target != null;
-
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<String> choice : choices) {
-            CmisChoiceHtml newChoice = new CmisChoiceHtml();
-
-            convertChoiceHtmlList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (String value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static List<Choice<String>> convertChoiceUriList(List<CmisChoiceUri> choices) {
-        if (choices == null) {
-            return null;
-        }
-
-        List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-        for (CmisChoiceUri choice : choices) {
-            ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-            newChoice.setChoice(convertChoiceUriList(choice.getChoice()));
-            newChoice.setDisplayName(choice.getDisplayName());
-            newChoice.setValue(choice.getValue());
-
-            result.add(newChoice);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a choices list.
-     */
-    private static void convertChoiceUriList(List<Choice<String>> choices, List<CmisChoiceUri> target) {
-        assert target != null;
-
-        if (choices == null) {
-            return;
-        }
-
-        for (Choice<String> choice : choices) {
-            CmisChoiceUri newChoice = new CmisChoiceUri();
-
-            convertChoiceUriList(choice.getChoice(), newChoice.getChoice());
-            newChoice.setDisplayName(choice.getDisplayName());
-
-            if (choice.getValue() != null) {
-                for (String value : choice.getValue()) {
-                    newChoice.getValue().add(value);
-                }
-            }
-
-            target.add(newChoice);
-        }
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Objects ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a CMIS object.
-     */
-    public static ObjectData convert(CmisObjectType object) {
-        if (object == null) {
-            return null;
-        }
-
-        ObjectDataImpl result = new ObjectDataImpl();
-
-        result.setAcl(convert(object.getAcl(), null));
-        result.setAllowableActions(convert(object.getAllowableActions()));
-        if (object.getChangeEventInfo() != null) {
-            ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-            if (object.getChangeEventInfo().getChangeTime() != null) {
-                changeEventInfo.setChangeTime(object.getChangeEventInfo().getChangeTime().toGregorianCalendar());
-            }
-            changeEventInfo.setChangeType(convert(ChangeType.class, object.getChangeEventInfo().getChangeType()));
-            convertExtension(object.getChangeEventInfo(), changeEventInfo);
-
-            result.setChangeEventInfo(changeEventInfo);
-        }
-        result.setIsExactAcl(object.isExactACL());
-        result.setPolicyIds(convert(object.getPolicyIds()));
-        result.setProperties(convert(object.getProperties()));
-        List<ObjectData> relationships = new ArrayList<ObjectData>();
-        for (CmisObjectType cmisObject : object.getRelationship()) {
-            relationships.add(convert(cmisObject));
-        }
-        result.setRelationships(relationships);
-        List<RenditionData> renditions = new ArrayList<RenditionData>();
-        for (CmisRenditionType rendition : object.getRendition()) {
-            renditions.add(convert(rendition));
-        }
-        result.setRenditions(renditions);
-
-        // handle extensions
-        convertExtension(object, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a properties object.
-     */
-    public static Properties convert(CmisPropertiesType properties) {
-        if (properties == null) {
-            return null;
-        }
-
-        PropertiesImpl result = new PropertiesImpl();
-
-        for (CmisProperty property : properties.getProperty()) {
-            result.addProperty(convert(property));
-        }
-
-        // handle extensions
-        convertExtension(properties, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a property object.
-     */
-    public static PropertyData<?> convert(CmisProperty property) {
-        if (property == null) {
-            return null;
-        }
-
-        PropertyData<?> result = null;
-
-        if (property instanceof CmisPropertyString) {
-            result = new PropertyStringImpl(property.getPropertyDefinitionId(),
-                    ((CmisPropertyString) property).getValue());
-        } else if (property instanceof CmisPropertyId) {
-            result = new PropertyIdImpl(property.getPropertyDefinitionId(), ((CmisPropertyId) property).getValue());
-        } else if (property instanceof CmisPropertyInteger) {
-            result = new PropertyIntegerImpl(property.getPropertyDefinitionId(),
-                    ((CmisPropertyInteger) property).getValue());
-        } else if (property instanceof CmisPropertyDecimal) {
-            result = new PropertyDecimalImpl(property.getPropertyDefinitionId(),
-                    ((CmisPropertyDecimal) property).getValue());
-        } else if (property instanceof CmisPropertyBoolean) {
-            result = new PropertyBooleanImpl(property.getPropertyDefinitionId(),
-                    ((CmisPropertyBoolean) property).getValue());
-        } else if (property instanceof CmisPropertyDateTime) {
-            result = new PropertyDateTimeImpl(property.getPropertyDefinitionId(),
-                    convertXMLCalendar(((CmisPropertyDateTime) property).getValue()));
-        } else if (property instanceof CmisPropertyHtml) {
-            result = new PropertyHtmlImpl(property.getPropertyDefinitionId(), ((CmisPropertyHtml) property).getValue());
-        } else if (property instanceof CmisPropertyUri) {
-            result = new PropertyUriImpl(property.getPropertyDefinitionId(), ((CmisPropertyUri) property).getValue());
-        } else {
-            return null;
-        }
-
-        ((AbstractPropertyData<?>) result).setLocalName(property.getLocalName());
-        ((AbstractPropertyData<?>) result).setQueryName(property.getQueryName());
-        ((AbstractPropertyData<?>) result).setDisplayName(property.getDisplayName());
-
-        // handle extensions
-        convertExtension(property, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a properties object.
-     */
-    public static CmisPropertiesType convert(Properties properties) {
-        if (properties == null) {
-            return null;
-        }
-
-        CmisPropertiesType result = new CmisPropertiesType();
-
-        if (properties.getProperties() != null) {
-            for (PropertyData<?> property : properties.getPropertyList()) {
-                result.getProperty().add(convert(property));
-            }
-        }
-
-        // handle extensions
-        convertExtension(properties, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a property object.
-     */
-    public static CmisProperty convert(PropertyData<?> property) {
-        if (property == null) {
-            return null;
-        }
-
-        CmisProperty result = null;
-
-        if (property instanceof PropertyString) {
-            result = new CmisPropertyString();
-            ((CmisPropertyString) result).getValue().addAll(((PropertyString) property).getValues());
-        } else if (property instanceof PropertyId) {
-            result = new CmisPropertyId();
-            ((CmisPropertyId) result).getValue().addAll(((PropertyId) property).getValues());
-        } else if (property instanceof PropertyInteger) {
-            result = new CmisPropertyInteger();
-            ((CmisPropertyInteger) result).getValue().addAll(((PropertyInteger) property).getValues());
-        } else if (property instanceof PropertyDecimal) {
-            result = new CmisPropertyDecimal();
-            ((CmisPropertyDecimal) result).getValue().addAll(((PropertyDecimal) property).getValues());
-        } else if (property instanceof PropertyBoolean) {
-            result = new CmisPropertyBoolean();
-            ((CmisPropertyBoolean) result).getValue().addAll(((PropertyBoolean) property).getValues());
-        } else if (property instanceof PropertyDateTime) {
-            result = new CmisPropertyDateTime();
-            ((CmisPropertyDateTime) result).getValue().addAll(
-                    convertCalendar(((PropertyDateTime) property).getValues()));
-        } else if (property instanceof PropertyHtml) {
-            result = new CmisPropertyHtml();
-            ((CmisPropertyHtml) result).getValue().addAll(((PropertyHtml) property).getValues());
-        } else if (property instanceof PropertyUri) {
-            result = new CmisPropertyUri();
-            ((CmisPropertyUri) result).getValue().addAll(((PropertyUri) property).getValues());
-        } else {
-            return null;
-        }
-
-        result.setPropertyDefinitionId(property.getId());
-        result.setLocalName(property.getLocalName());
-        result.setQueryName(property.getQueryName());
-        result.setDisplayName(property.getDisplayName());
-
-        return result;
-    }
-
-    /**
-     * Converts a rendition object.
-     */
-    public static RenditionData convert(CmisRenditionType rendition) {
-        if (rendition == null) {
-            return null;
-        }
-
-        RenditionDataImpl result = new RenditionDataImpl();
-
-        result.setBigHeight(rendition.getHeight());
-        result.setKind(rendition.getKind());
-        result.setBigLength(rendition.getLength());
-        result.setMimeType(rendition.getMimetype());
-        result.setRenditionDocumentId(rendition.getRenditionDocumentId());
-        result.setStreamId(rendition.getStreamId());
-        result.setTitle(rendition.getTitle());
-        result.setBigWidth(rendition.getWidth());
-
-        // handle extensions
-        convertExtension(rendition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a rendition object.
-     */
-    public static CmisRenditionType convert(RenditionData rendition) {
-        if (rendition == null) {
-            return null;
-        }
-
-        CmisRenditionType result = new CmisRenditionType();
-
-        result.setHeight(rendition.getBigHeight());
-        result.setKind(rendition.getKind());
-        result.setLength(rendition.getBigLength());
-        result.setMimetype(rendition.getMimeType());
-        result.setRenditionDocumentId(rendition.getRenditionDocumentId());
-        result.setStreamId(rendition.getStreamId());
-        result.setTitle(rendition.getTitle());
-        result.setWidth(rendition.getBigWidth());
-
-        // handle extensions
-        convertExtension(rendition, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a CMIS object.
-     */
-    public static CmisObjectType convert(ObjectData object, CmisVersion cmisVersion) {
-        if (object == null) {
-            return null;
-        }
-
-        CmisObjectType result = new CmisObjectType();
-
-        result.setAcl(convert(object.getAcl()));
-        result.setAllowableActions(convert(object.getAllowableActions(), cmisVersion));
-        if (object.getChangeEventInfo() != null) {
-            CmisChangeEventType changeEventInfo = new CmisChangeEventType();
-
-            changeEventInfo
-                    .setChangeType(convert(EnumTypeOfChanges.class, object.getChangeEventInfo().getChangeType()));
-            changeEventInfo.setChangeTime(convertCalendar(object.getChangeEventInfo().getChangeTime()));
-
-            convertExtension(object.getChangeEventInfo(), changeEventInfo);
-
-            result.setChangeEventInfo(changeEventInfo);
-        }
-        result.setExactACL(object.isExactAcl());
-        result.setPolicyIds(convert(object.getPolicyIds()));
-        result.setProperties(convert(object.getProperties()));
-        if (object.getRelationships() != null) {
-            for (ObjectData relationship : object.getRelationships()) {
-                result.getRelationship().add(convert(relationship, cmisVersion));
-            }
-        }
-        if (object.getRenditions() != null) {
-            for (RenditionData rendition : object.getRenditions()) {
-                result.getRendition().add(convert(rendition));
-            }
-        }
-
-        // handle extensions
-        convertExtension(object, result);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- ACLs and Policies ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts an ACL object with its ACEs.
-     */
-    public static Acl convert(CmisAccessControlListType acl, Boolean isExact) {
-        if (acl == null) {
-            return null;
-        }
-
-        AccessControlListImpl result = new AccessControlListImpl();
-
-        List<Ace> aces = new ArrayList<Ace>();
-        for (CmisAccessControlEntryType entry : acl.getPermission()) {
-            if (entry == null) {
-                continue;
-            }
-
-            AccessControlEntryImpl ace = new AccessControlEntryImpl();
-            ace.setDirect(entry.isDirect());
-            ace.setPermissions(entry.getPermission());
-            AccessControlPrincipalDataImpl principal = new AccessControlPrincipalDataImpl(
-                    entry.getPrincipal() == null ? null : entry.getPrincipal().getPrincipalId());
-            convertExtension(entry.getPrincipal(), principal);
-            ace.setPrincipal(principal);
-
-            // handle extensions
-            convertExtension(entry, ace);
-
-            aces.add(ace);
-        }
-
-        result.setAces(aces);
-
-        result.setExact(isExact);
-
-        // handle extensions
-        convertExtension(acl, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ACL object with its ACEs.
-     */
-    public static CmisAccessControlListType convert(Acl acl) {
-        if (acl == null) {
-            return null;
-        }
-
-        CmisAccessControlListType result = new CmisAccessControlListType();
-
-        if (acl.getAces() != null) {
-            for (Ace ace : acl.getAces()) {
-                if (ace == null) {
-                    continue;
-                }
-
-                CmisAccessControlEntryType entry = new CmisAccessControlEntryType();
-
-                if (ace.getPrincipal() != null) {
-                    CmisAccessControlPrincipalType pincipal = new CmisAccessControlPrincipalType();
-
-                    pincipal.setPrincipalId(ace.getPrincipal().getId());
-                    convertExtension(pincipal, ace.getPrincipal());
-
-                    entry.setPrincipal(pincipal);
-                }
-
-                entry.setDirect(ace.isDirect());
-                entry.getPermission().addAll(ace.getPermissions());
-
-                convertExtension(ace, entry);
-
-                result.getPermission().add(entry);
-            }
-        }
-
-        // handle extensions
-        convertExtension(acl, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an AllowableActions object.
-     */
-    public static AllowableActions convert(CmisAllowableActionsType allowableActions) {
-        if (allowableActions == null) {
-            return null;
-        }
-
-        AllowableActionsImpl result = new AllowableActionsImpl();
-
-        Set<Action> set = EnumSet.noneOf(Action.class);
-
-        if (Boolean.TRUE.equals(allowableActions.isCanAddObjectToFolder())) {
-            set.add(Action.CAN_ADD_OBJECT_TO_FOLDER);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanApplyACL())) {
-            set.add(Action.CAN_APPLY_ACL);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanApplyPolicy())) {
-            set.add(Action.CAN_APPLY_POLICY);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCancelCheckOut())) {
-            set.add(Action.CAN_CANCEL_CHECK_OUT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCheckIn())) {
-            set.add(Action.CAN_CHECK_IN);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCheckOut())) {
-            set.add(Action.CAN_CHECK_OUT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCreateDocument())) {
-            set.add(Action.CAN_CREATE_DOCUMENT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCreateFolder())) {
-            set.add(Action.CAN_CREATE_FOLDER);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCreateRelationship())) {
-            set.add(Action.CAN_CREATE_RELATIONSHIP);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanCreateItem())) {
-            set.add(Action.CAN_CREATE_ITEM);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanDeleteContentStream())) {
-            set.add(Action.CAN_DELETE_CONTENT_STREAM);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanDeleteObject())) {
-            set.add(Action.CAN_DELETE_OBJECT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanDeleteTree())) {
-            set.add(Action.CAN_DELETE_TREE);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetACL())) {
-            set.add(Action.CAN_GET_ACL);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetAllVersions())) {
-            set.add(Action.CAN_GET_ALL_VERSIONS);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetAppliedPolicies())) {
-            set.add(Action.CAN_GET_APPLIED_POLICIES);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetChildren())) {
-            set.add(Action.CAN_GET_CHILDREN);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetContentStream())) {
-            set.add(Action.CAN_GET_CONTENT_STREAM);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetDescendants())) {
-            set.add(Action.CAN_GET_DESCENDANTS);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetFolderParent())) {
-            set.add(Action.CAN_GET_FOLDER_PARENT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetFolderTree())) {
-            set.add(Action.CAN_GET_FOLDER_TREE);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetObjectParents())) {
-            set.add(Action.CAN_GET_OBJECT_PARENTS);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetObjectRelationships())) {
-            set.add(Action.CAN_GET_OBJECT_RELATIONSHIPS);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetProperties())) {
-            set.add(Action.CAN_GET_PROPERTIES);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanGetRenditions())) {
-            set.add(Action.CAN_GET_RENDITIONS);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanMoveObject())) {
-            set.add(Action.CAN_MOVE_OBJECT);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanRemoveObjectFromFolder())) {
-            set.add(Action.CAN_REMOVE_OBJECT_FROM_FOLDER);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanRemovePolicy())) {
-            set.add(Action.CAN_REMOVE_POLICY);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanSetContentStream())) {
-            set.add(Action.CAN_SET_CONTENT_STREAM);
-        }
-        if (Boolean.TRUE.equals(allowableActions.isCanUpdateProperties())) {
-            set.add(Action.CAN_UPDATE_PROPERTIES);
-        }
-
-        result.setAllowableActions(set);
-
-        // handle extensions
-        convertExtension(allowableActions, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an AllowableActions object.
-     */
-    public static CmisAllowableActionsType convert(AllowableActions allowableActions, CmisVersion cmisVersion) {
-        if (allowableActions == null) {
-            return null;
-        }
-
-        CmisAllowableActionsType result = new CmisAllowableActionsType();
-
-        if (allowableActions.getAllowableActions() != null) {
-            Set<Action> set = allowableActions.getAllowableActions();
-
-            result.setCanAddObjectToFolder(set.contains(Action.CAN_ADD_OBJECT_TO_FOLDER));
-            result.setCanApplyACL(set.contains(Action.CAN_APPLY_ACL));
-            result.setCanApplyPolicy(set.contains(Action.CAN_APPLY_POLICY));
-            result.setCanCancelCheckOut(set.contains(Action.CAN_CANCEL_CHECK_OUT));
-            result.setCanCheckIn(set.contains(Action.CAN_CHECK_IN));
-            result.setCanCheckOut(set.contains(Action.CAN_CHECK_OUT));
-            result.setCanCreateDocument(set.contains(Action.CAN_CREATE_DOCUMENT));
-            result.setCanCreateFolder(set.contains(Action.CAN_CREATE_FOLDER));
-            result.setCanCreateRelationship(set.contains(Action.CAN_CREATE_RELATIONSHIP));
-            if (set.contains(Action.CAN_CREATE_ITEM) && cmisVersion == CmisVersion.CMIS_1_0) {
-                LOG.warn("Receiver only understands CMIS 1.0 but the Allowable Actions contain the canCreateItem action. "
-                        + "The canCreateItem action has been removed from the Allowable Actions.");
-            } else {
-                result.setCanCreateItem(set.contains(Action.CAN_CREATE_ITEM));
-            }
-            result.setCanDeleteContentStream(set.contains(Action.CAN_DELETE_CONTENT_STREAM));
-            result.setCanDeleteObject(set.contains(Action.CAN_DELETE_OBJECT));
-            result.setCanDeleteTree(set.contains(Action.CAN_DELETE_TREE));
-            result.setCanGetACL(set.contains(Action.CAN_GET_ACL));
-            result.setCanGetAllVersions(set.contains(Action.CAN_GET_ALL_VERSIONS));
-            result.setCanGetAppliedPolicies(set.contains(Action.CAN_GET_APPLIED_POLICIES));
-            result.setCanGetChildren(set.contains(Action.CAN_GET_CHILDREN));
-            result.setCanGetContentStream(set.contains(Action.CAN_GET_CONTENT_STREAM));
-            result.setCanGetDescendants(set.contains(Action.CAN_GET_DESCENDANTS));
-            result.setCanGetFolderParent(set.contains(Action.CAN_GET_FOLDER_PARENT));
-            result.setCanGetFolderTree(set.contains(Action.CAN_GET_FOLDER_TREE));
-            result.setCanGetObjectParents(set.contains(Action.CAN_GET_OBJECT_PARENTS));
-            result.setCanGetObjectRelationships(set.contains(Action.CAN_GET_OBJECT_RELATIONSHIPS));
-            result.setCanGetProperties(set.contains(Action.CAN_GET_PROPERTIES));
-            result.setCanGetRenditions(set.contains(Action.CAN_GET_RENDITIONS));
-            result.setCanMoveObject(set.contains(Action.CAN_MOVE_OBJECT));
-            result.setCanRemoveObjectFromFolder(set.contains(Action.CAN_REMOVE_OBJECT_FROM_FOLDER));
-            result.setCanRemovePolicy(set.contains(Action.CAN_REMOVE_POLICY));
-            result.setCanSetContentStream(set.contains(Action.CAN_SET_CONTENT_STREAM));
-            result.setCanUpdateProperties(set.contains(Action.CAN_UPDATE_PROPERTIES));
-
-        }
-
-        // handle extensions
-        convertExtension(allowableActions, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a list of policy ids.
-     */
-    public static PolicyIdList convert(CmisListOfIdsType policyIds) {
-        if (policyIds == null) {
-            return null;
-        }
-
-        PolicyIdListImpl result = new PolicyIdListImpl();
-        result.setPolicyIds(policyIds.getId());
-
-        // handle extensions
-        convertExtension(policyIds, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a list of policy ids.
-     */
-    public static CmisListOfIdsType convert(PolicyIdList policyIds) {
-        if (policyIds == null) {
-            return null;
-        }
-
-        CmisListOfIdsType result = new CmisListOfIdsType();
-        if (policyIds.getPolicyIds() != null) {
-            for (String id : policyIds.getPolicyIds()) {
-                result.getId().add(id);
-            }
-        }
-
-        // handle extensions
-        convertExtension(policyIds, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a list of policy ids.
-     */
-    public static CmisListOfIdsType convertPolicyIds(List<String> policyIds) {
-        if (policyIds == null) {
-            return null;
-        }
-
-        CmisListOfIdsType result = new CmisListOfIdsType();
-        result.getId().addAll(policyIds);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Lists, containers and similar ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a list of calendar objects.
-     */
-    public static List<GregorianCalendar> convertXMLCalendar(List<XMLGregorianCalendar> calendar) {
-        if (calendar == null) {
-            return null;
-        }
-
-        List<GregorianCalendar> result = new ArrayList<GregorianCalendar>();
-        for (XMLGregorianCalendar cal : calendar) {
-            if (cal != null) {
-                result.add(cal.toGregorianCalendar());
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a list of calendar objects.
-     */
-    public static List<XMLGregorianCalendar> convertCalendar(List<GregorianCalendar> calendar) {
-        if (calendar == null) {
-            return null;
-        }
-
-        DatatypeFactory df;
-        try {
-            df = DatatypeFactory.newInstance();
-        } catch (DatatypeConfigurationException e) {
-            throw new CmisRuntimeException("Convert exception: " + e.getMessage(), e);
-        }
-
-        List<XMLGregorianCalendar> result = new ArrayList<XMLGregorianCalendar>();
-        for (GregorianCalendar cal : calendar) {
-            result.add(df.newXMLGregorianCalendar(cal));
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a calendar object.
-     */
-    public static XMLGregorianCalendar convertCalendar(GregorianCalendar calendar) {
-        if (calendar == null) {
-            return null;
-        }
-
-        DatatypeFactory df;
-        try {
-            df = DatatypeFactory.newInstance();
-        } catch (DatatypeConfigurationException e) {
-            throw new CmisRuntimeException("Convert exception: " + e.getMessage(), e);
-        }
-
-        return df.newXMLGregorianCalendar(calendar);
-    }
-
-    /**
-     * Converts a type list.
-     */
-    public static TypeDefinitionList convert(CmisTypeDefinitionListType typeList) {
-        if (typeList == null) {
-            return null;
-        }
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl();
-        List<TypeDefinition> types = new ArrayList<TypeDefinition>();
-        for (CmisTypeDefinitionType typeDefinition : typeList.getTypes()) {
-            types.add(convert(typeDefinition));
-        }
-
-        result.setList(types);
-        result.setHasMoreItems(typeList.isHasMoreItems());
-        result.setNumItems(typeList.getNumItems());
-
-        // handle extensions
-        convertExtension(typeList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type list.
-     */
-    public static CmisTypeDefinitionListType convert(TypeDefinitionList typeList) {
-        if (typeList == null) {
-            return null;
-        }
-
-        CmisTypeDefinitionListType result = new CmisTypeDefinitionListType();
-
-        if (typeList.getList() != null) {
-            for (TypeDefinition tdd : typeList.getList()) {
-                result.getTypes().add(convert(tdd));
-            }
-        }
-
-        result.setHasMoreItems(convertBoolean(typeList.hasMoreItems(), false));
-        result.setNumItems(typeList.getNumItems());
-
-        // handle extensions
-        convertExtension(typeList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a type container list.
-     */
-    public static List<TypeDefinitionContainer> convertTypeContainerList(List<CmisTypeContainer> typeContainers) {
-        if (typeContainers == null) {
-            return null;
-        }
-
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-        for (CmisTypeContainer container : typeContainers) {
-            TypeDefinitionContainerImpl newConatiner = new TypeDefinitionContainerImpl();
-            newConatiner.setTypeDefinition(convert(container.getType()));
-            newConatiner.setChildren(convertTypeContainerList(container.getChildren()));
-            convertExtension(container, newConatiner);
-
-            result.add(newConatiner);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a type container list.
-     */
-    public static void convertTypeContainerList(List<TypeDefinitionContainer> typeContainers,
-            List<CmisTypeContainer> target) {
-        if (typeContainers == null) {
-            return;
-        }
-
-        for (TypeDefinitionContainer container : typeContainers) {
-            CmisTypeContainer newConatiner = new CmisTypeContainer();
-            newConatiner.setType(convert(container.getTypeDefinition()));
-            convertTypeContainerList(container.getChildren(), newConatiner.getChildren());
-            convertExtension(container, newConatiner);
-
-            target.add(newConatiner);
-        }
-    }
-
-    /**
-     * Converts an ObjectInFolder object.
-     */
-    public static ObjectInFolderData convert(CmisObjectInFolderType objectInFolder) {
-        if (objectInFolder == null) {
-            return null;
-        }
-
-        ObjectInFolderDataImpl result = new ObjectInFolderDataImpl();
-
-        result.setObject(convert(objectInFolder.getObject()));
-        result.setPathSegment(objectInFolder.getPathSegment());
-
-        // handle extensions
-        convertExtension(objectInFolder, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectInFolder object.
-     */
-    public static CmisObjectInFolderType convert(ObjectInFolderData objectInFolder, CmisVersion cmisVersion) {
-        if (objectInFolder == null) {
-            return null;
-        }
-
-        CmisObjectInFolderType result = new CmisObjectInFolderType();
-
-        result.setObject(convert(objectInFolder.getObject(), cmisVersion));
-        result.setPathSegment(objectInFolder.getPathSegment());
-
-        // handle extensions
-        convertExtension(objectInFolder, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectParent object.
-     */
-    public static ObjectParentData convert(CmisObjectParentsType objectParent) {
-        if (objectParent == null) {
-            return null;
-        }
-
-        ObjectParentDataImpl result = new ObjectParentDataImpl();
-
-        result.setObject(convert(objectParent.getObject()));
-        result.setRelativePathSegment(objectParent.getRelativePathSegment());
-
-        // handle extensions
-        convertExtension(objectParent, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectParent object.
-     */
-    public static CmisObjectParentsType convert(ObjectParentData objectParent, CmisVersion cmisVersion) {
-        if (objectParent == null) {
-            return null;
-        }
-
-        CmisObjectParentsType result = new CmisObjectParentsType();
-
-        result.setObject(convert(objectParent.getObject(), cmisVersion));
-        result.setRelativePathSegment(objectParent.getRelativePathSegment());
-
-        // handle extensions
-        convertExtension(objectParent, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectInFolder list object.
-     */
-    public static ObjectInFolderList convert(CmisObjectInFolderListType objectInFolderList) {
-        if (objectInFolderList == null) {
-            return null;
-        }
-
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-        List<ObjectInFolderData> objects = new ArrayList<ObjectInFolderData>();
-        for (CmisObjectInFolderType object : objectInFolderList.getObjects()) {
-            objects.add(convert(object));
-        }
-
-        result.setObjects(objects);
-
-        result.setHasMoreItems(objectInFolderList.isHasMoreItems());
-        result.setNumItems(objectInFolderList.getNumItems());
-
-        // handle extensions
-        convertExtension(objectInFolderList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectInFolder list object.
-     */
-    public static CmisObjectInFolderListType convert(ObjectInFolderList objectInFolderList, CmisVersion cmisVersion) {
-        if (objectInFolderList == null) {
-            return null;
-        }
-
-        CmisObjectInFolderListType result = new CmisObjectInFolderListType();
-
-        if (objectInFolderList.getObjects() != null) {
-            for (ObjectInFolderData object : objectInFolderList.getObjects()) {
-                result.getObjects().add(convert(object, cmisVersion));
-            }
-        }
-
-        result.setHasMoreItems(objectInFolderList.hasMoreItems());
-        result.setNumItems(objectInFolderList.getNumItems());
-
-        // handle extensions
-        convertExtension(objectInFolderList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an Object list object.
-     */
-    public static ObjectList convert(CmisObjectListType objectList) {
-        if (objectList == null) {
-            return null;
-        }
-
-        ObjectListImpl result = new ObjectListImpl();
-
-        List<ObjectData> objects = new ArrayList<ObjectData>();
-        for (CmisObjectType object : objectList.getObjects()) {
-            objects.add(convert(object));
-        }
-
-        result.setObjects(objects);
-        result.setHasMoreItems(objectList.isHasMoreItems());
-        result.setNumItems(objectList.getNumItems());
-
-        // handle extensions
-        convertExtension(objectList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an Object list object.
-     */
-    public static CmisObjectListType convert(ObjectList objectList, CmisVersion cmisVersion) {
-        if (objectList == null) {
-            return null;
-        }
-
-        CmisObjectListType result = new CmisObjectListType();
-
-        if (objectList.getObjects() != null) {
-            for (ObjectData object : objectList.getObjects()) {
-                result.getObjects().add(convert(object, cmisVersion));
-            }
-        }
-
-        result.setHasMoreItems(objectList.hasMoreItems());
-        result.setNumItems(objectList.getNumItems());
-
-        // handle extensions
-        convertExtension(objectList, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectInFolder container object.
-     */
-    public static ObjectInFolderContainer convert(CmisObjectInFolderContainerType container) {
-        if (container == null) {
-            return null;
-        }
-
-        ObjectInFolderContainerImpl result = new ObjectInFolderContainerImpl();
-
-        result.setObject(convert(container.getObjectInFolder()));
-
-        List<ObjectInFolderContainer> containerList = new ArrayList<ObjectInFolderContainer>();
-        for (CmisObjectInFolderContainerType containerChild : container.getChildren()) {
-            containerList.add(convert(containerChild));
-        }
-
-        result.setChildren(containerList);
-
-        // handle extensions
-        convertExtension(container, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an ObjectInFolder container object.
-     */
-    public static CmisObjectInFolderContainerType convert(ObjectInFolderContainer container, CmisVersion cmisVersion) {
-        if (container == null) {
-            return null;
-        }
-
-        CmisObjectInFolderContainerType result = new CmisObjectInFolderContainerType();
-
-        result.setObjectInFolder(convert(container.getObject(), cmisVersion));
-
-        if (container.getChildren() != null) {
-            for (ObjectInFolderContainer child : container.getChildren()) {
-                result.getChildren().add(convert(child, cmisVersion));
-            }
-        }
-
-        // handle extensions
-        convertExtension(container, result);
-
-        return result;
-    }
-
-    /**
-     * Converts an access control list object.
-     */
-    public static Acl convert(CmisACLType acl) {
-        if (acl == null) {
-            return null;
-        }
-
-        Acl result = convert(acl.getACL(), acl.isExact());
-
-        // handle extensions
-        convertExtension(acl, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a FailedToDelete object.
-     */
-    public static FailedToDeleteData convert(DeleteTreeResponse.FailedToDelete failedToDelete) {
-        if (failedToDelete == null) {
-            return null;
-        }
-
-        FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-
-        result.setIds(failedToDelete.getObjectIds());
-
-        // handle extensions
-        convertExtension(failedToDelete, result);
-
-        return result;
-    }
-
-    /**
-     * Converts a FailedToDelete object.
-     */
-    public static DeleteTreeResponse.FailedToDelete convert(FailedToDeleteData failedToDelete) {
-        if (failedToDelete == null) {
-            return null;
-        }
-
-        DeleteTreeResponse.FailedToDelete result = new DeleteTreeResponse.FailedToDelete();
-
-        if (failedToDelete.getIds() != null) {
-            for (String id : failedToDelete.getIds()) {
-                result.getObjectIds().add(id);
-            }
-        }
-
-        // handle extensions
-        convertExtension(failedToDelete, result);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Stream ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a content stream object.
-     */
-    public static ContentStream convert(CmisContentStreamType contentStream, boolean partial) {
-        if (contentStream == null) {
-            return null;
-        }
-
-        ContentStreamImpl result;
-        if (partial) {
-            result = new PartialContentStreamImpl();
-        } else {
-            result = new ContentStreamImpl();
-        }
-
-        result.setFileName(contentStream.getFilename());
-        result.setLength(contentStream.getLength());
-        result.setMimeType(contentStream.getMimeType());
-
-        DataHandler streamDataHandler = contentStream.getStream();
-        if (streamDataHandler != null) {
-            try {
-                if (streamDataHandlerClass1 != null && streamDataHandlerClass1.isInstance(streamDataHandler)) {
-                    result.setStream((InputStream) streamDataHandlerReadMethod1.invoke(streamDataHandler,
-                            (Object[]) null));
-                } else if (streamDataHandlerClass2 != null && streamDataHandlerClass2.isInstance(streamDataHandler)) {
-                    result.setStream((InputStream) streamDataHandlerReadMethod2.invoke(streamDataHandler,
-                            (Object[]) null));
-                } else {
-                    result.setStream(contentStream.getStream().getInputStream());
-                }
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Could not get the stream: " + e.getMessage(), e);
-            }
-        }
-
-        // handle extensions
-        convertExtension(contentStream, result);
-
-        return result;
-    }
-
-    public static void closeStream(CmisContentStreamType contentStream) {
-        if (contentStream == null) {
-            return;
-        }
-
-        DataHandler streamDataHandler = contentStream.getStream();
-
-        if (streamDataHandler != null) {
-            try {
-                if (streamDataHandler instanceof Closeable) {
-                    ((Closeable) streamDataHandler).close();
-                } else {
-                    if (streamDataHandlerClass1 != null && streamDataHandlerClass1.isInstance(streamDataHandler)) {
-                        streamDataHandlerCloseMethod1.invoke(streamDataHandler, (Object[]) null);
-                    } else if (streamDataHandlerClass2 != null && streamDataHandlerClass2.isInstance(streamDataHandler)) {
-                        streamDataHandlerCloseMethod2.invoke(streamDataHandler, (Object[]) null);
-                    }
-                }
-            } catch (Exception e) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Closing the stream failed: " + e.toString(), e);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Converts a content stream object.
-     */
-    public static CmisContentStreamType convert(final ContentStream contentStream, final boolean allowClose) {
-        if (contentStream == null) {
-            return null;
-        }
-
-        CmisContentStreamType result = new CmisContentStreamType();
-
-        result.setFilename(contentStream.getFileName());
-        result.setLength(contentStream.getBigLength());
-        result.setMimeType(contentStream.getMimeType());
-
-        InputStream in = contentStream.getStream();
-        final InputStream stream;
-
-        // avoid double buffering
-        if (!(in instanceof BufferedInputStream) && !(in instanceof ByteArrayInputStream)) {
-            stream = new BufferedInputStream(in, BUFFER_SIZE);
-        } else {
-            stream = in;
-        }
-
-        result.setStream(new DataHandler(new DataSource() {
-
-            public OutputStream getOutputStream() throws IOException {
-                return null;
-            }
-
-            public String getName() {
-                return contentStream.getFileName();
-            }
-
-            public InputStream getInputStream() throws IOException {
-                if (allowClose) {
-                    return stream;
-                } else {
-                    return new FilterInputStream(stream) {
-                        @Override
-                        public void close() throws IOException {
-                            // prevent closing
-                        }
-                    };
-                }
-            }
-
-            public String getContentType() {
-                return contentStream.getMimeType();
-            }
-        }));
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Bulk update ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts bulk update data.
-     */
-    public static CmisBulkUpdateType convert(List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeTokens,
-            Properties properties, List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds) {
-        if (objectIdAndChangeTokens == null) {
-            return null;
-        }
-
-        CmisBulkUpdateType result = new CmisBulkUpdateType();
-
-        for (BulkUpdateObjectIdAndChangeToken idAndToken : objectIdAndChangeTokens) {
-            result.getObjectIdAndChangeToken().add(convert(idAndToken));
-        }
-        result.setProperties(convert(properties));
-        if (addSecondaryTypeIds != null) {
-            result.getAddSecondaryTypeIds().addAll(addSecondaryTypeIds);
-        }
-        if (removeSecondaryTypeIds != null) {
-            result.getRemoveSecondaryTypeIds().addAll(removeSecondaryTypeIds);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts bulk update object id and change token.
-     */
-    public static CmisObjectIdAndChangeTokenType convert(BulkUpdateObjectIdAndChangeToken objectIdAndChangeToken) {
-        if (objectIdAndChangeToken == null) {
-            return null;
-        }
-
-        CmisObjectIdAndChangeTokenType result = new CmisObjectIdAndChangeTokenType();
-
-        result.setId(objectIdAndChangeToken.getId());
-        result.setNewId(objectIdAndChangeToken.getNewId());
-        result.setChangeToken(objectIdAndChangeToken.getChangeToken());
-
-        // handle extensions
-        convertExtension(objectIdAndChangeToken, result);
-
-        return result;
-    }
-
-    /**
-     * Converts bulk update object id and change token.
-     */
-    public static BulkUpdateObjectIdAndChangeToken convert(CmisObjectIdAndChangeTokenType objectIdAndChangeToken) {
-        if (objectIdAndChangeToken == null) {
-            return null;
-        }
-
-        BulkUpdateObjectIdAndChangeTokenImpl result = new BulkUpdateObjectIdAndChangeTokenImpl();
-
-        result.setId(objectIdAndChangeToken.getId());
-        result.setNewId(objectIdAndChangeToken.getNewId());
-        result.setChangeToken(objectIdAndChangeToken.getChangeToken());
-
-        // handle extensions
-        convertExtension(objectIdAndChangeToken, result);
-
-        return result;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Extensions and holders ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts a binding extension into a Web Services extension.
-     */
-    public static CmisExtensionType convert(ExtensionsData extension) {
-        if (extension == null) {
-            return null;
-        }
-
-        CmisExtensionType result = new CmisExtensionType();
-
-        if (extension.getExtensions() != null) {
-            for (CmisExtensionElement ext : extension.getExtensions()) {
-                result.getAny().add(convertCmisExtensionElementToNode(ext));
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a binding extension into a Web Services extension holder.
-     */
-    public static javax.xml.ws.Holder<CmisExtensionType> convertExtensionHolder(ExtensionsData extension) {
-        if (extension == null) {
-            return null;
-        }
-
-        javax.xml.ws.Holder<CmisExtensionType> result = new javax.xml.ws.Holder<CmisExtensionType>();
-        result.value = convert(extension);
-
-        return result;
-    }
-
-    /**
-     * Copies a holder value.
-     */
-    public static void setExtensionValues(javax.xml.ws.Holder<CmisExtensionType> source, ExtensionsData target) {
-        if (target == null) {
-            return;
-        }
-        target.setExtensions(null);
-
-        if ((source == null) || (source.value == null)) {
-            return;
-        }
-
-        List<CmisExtensionElement> list = new ArrayList<CmisExtensionElement>();
-        target.setExtensions(list);
-
-        if (!source.value.getAny().isEmpty()) {
-            for (Object obj : source.value.getAny()) {
-                list.add(convertDomToCmisExtensionElement(obj));
-            }
-        }
-    }
-
-    /**
-     * Converts a Web Services extension extension into a binding holder.
-     */
-    public static ExtensionsData convertExtensionHolder(javax.xml.ws.Holder<CmisExtensionType> extension) {
-        if (extension == null) {
-            return null;
-        }
-
-        return convert(extension.value);
-    }
-
-    /**
-     * Copies a holder value.
-     */
-    public static void setExtensionValues(ExtensionsData source, javax.xml.ws.Holder<CmisExtensionType> target) {
-        if ((target == null) || (target.value == null)) {
-            return;
-        }
-        target.value.getAny().clear();
-
-        if ((source == null) || (source.getExtensions() == null)) {
-            return;
-        }
-
-        if (source.getExtensions() != null) {
-            for (CmisExtensionElement ext : source.getExtensions()) {
-                target.value.getAny().add(convertCmisExtensionElementToNode(ext));
-            }
-        }
-    }
-
-    /**
-     * Converts a holder into a WS holder.
-     */
-    public static <T> javax.xml.ws.Holder<T> convertHolder(Holder<T> orgHolder) {
-        if (orgHolder == null) {
-            return null;
-        }
-
-        javax.xml.ws.Holder<T> result = new javax.xml.ws.Holder<T>();
-        result.value = orgHolder.getValue();
-
-        return result;
-    }
-
-    /**
-     * Converts a WS holder into a holder.
-     */
-    public static <T> Holder<T> convertHolder(javax.xml.ws.Holder<T> orgHolder) {
-        if (orgHolder == null) {
-            return null;
-        }
-
-        Holder<T> result = new Holder<T>();
-        result.setValue(orgHolder.value);
-
-        return result;
-    }
-
-    /**
-     * Copies a holder value for a WS holder to a holder.
-     */
-    public static <T> void setHolderValue(javax.xml.ws.Holder<T> source, Holder<T> target) {
-        if ((source == null) || (target == null)) {
-            return;
-        }
-
-        target.setValue(source.value);
-    }
-
-    /**
-     * Copies a holder value for a holder to a WS holder.
-     */
-    public static <T> void setHolderValue(Holder<T> source, javax.xml.ws.Holder<T> target) {
-        if ((source == null) || (target == null)) {
-            return;
-        }
-
-        target.value = source.getValue();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static void convertExtension(Object source, ExtensionsData target) {
-        if (source == null) {
-            return;
-        }
-
-        try {
-            Method m = source.getClass().getMethod("getAny", new Class<?>[0]);
-            List<Object> list = (List<Object>) m.invoke(source, new Object[0]);
-
-            if (!list.isEmpty()) {
-                List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-                for (Object obj : list) {
-                    extensions.add(convertDomToCmisExtensionElement(obj));
-                }
-
-                target.setExtensions(extensions);
-            } else {
-                target.setExtensions(null);
-            }
-        } catch (NoSuchMethodException e) {
-            // ignore
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Exception: " + e.getMessage(), e);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public static void convertExtension(ExtensionsData source, Object target) {
-        if (source == null) {
-            return;
-        }
-
-        try {
-            Method m = target.getClass().getMethod("getAny", new Class<?>[0]);
-            List<Object> list = (List<Object>) m.invoke(target, new Object[0]);
-
-            list.clear();
-            if (source.getExtensions() != null) {
-                for (CmisExtensionElement ext : source.getExtensions()) {
-                    list.add(convertCmisExtensionElementToNode(ext));
-                }
-            }
-        } catch (NoSuchMethodException e) {
-            // ignore
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Exception: " + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Converts an extension object.
-     */
-    public static ExtensionsData convert(CmisExtensionType extension) {
-        if (extension == null) {
-            return null;
-        }
-
-        ExtensionDataImpl result = new ExtensionDataImpl();
-        List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-        result.setExtensions(extensions);
-
-        for (Object obj : extension.getAny()) {
-            extensions.add(convertDomToCmisExtensionElement(obj));
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a DOM node to a CMIS extension element
-     */
-    private static CmisExtensionElement convertDomToCmisExtensionElement(Object source) {
-        // if it's not a Node, skip it
-        if (!(source instanceof Node)) {
-            return null;
-        }
-
-        Node node = (Node) source;
-        if (node.getNodeType() != Node.ELEMENT_NODE) {
-            return null;
-        }
-
-        String name = node.getLocalName();
-        String namespace = node.getNamespaceURI();
-
-        CmisExtensionElement result = null;
-        List<CmisExtensionElement> cmisChildren = new ArrayList<CmisExtensionElement>();
-        StringBuilder value = new StringBuilder();
-
-        NodeList children = node.getChildNodes();
-
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                CmisExtensionElement cmisChild = convertDomToCmisExtensionElement(child);
-                if (cmisChild != null) {
-                    cmisChildren.add(cmisChild);
-                }
-            } else if (child.getNodeType() == Node.TEXT_NODE) {
-                value.append(child.getNodeValue());
-            }
-        }
-
-        Map<String, String> attributes = null;
-        if (node.getAttributes() != null) {
-            attributes = new HashMap<String, String>();
-            for (int i = 0; i < node.getAttributes().getLength(); i++) {
-                Node attrNode = node.getAttributes().item(i);
-
-                String attrNamespace = attrNode.getNamespaceURI();
-
-                if (attrNamespace == null || attrNamespace.equals(namespace)) {
-                    attributes.put(attrNode.getLocalName(), attrNode.getNodeValue());
-                }
-            }
-        }
-
-        if (cmisChildren.isEmpty()) {
-            result = new CmisExtensionElementImpl(namespace, name, attributes, value.toString());
-        } else {
-            result = new CmisExtensionElementImpl(namespace, name, attributes, cmisChildren);
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts a CMIS extension element to a DOM node.
-     */
-    private static Node convertCmisExtensionElementToNode(CmisExtensionElement source) {
-        if (source == null) {
-            return null;
-        }
-
-        Document doc = null;
-
-        try {
-            doc = XMLUtils.newDomDocument();
-        } catch (ParserConfigurationException e) {
-            throw new CmisRuntimeException("Unable to convert extensions!", e);
-        }
-
-        Element root = doc.createElementNS(
-                (source.getNamespace() == null ? DEFAULT_EXTENSION_NS : source.getNamespace()), source.getName());
-        doc.appendChild(root);
-
-        if (source.getValue() != null) {
-            root.appendChild(doc.createTextNode(source.getValue()));
-        } else {
-            for (CmisExtensionElement child : source.getChildren()) {
-                root.appendChild(convertCmisExtensionElementToNode(child, root, doc));
-            }
-        }
-
-        // set attributes
-        if (source.getAttributes() != null) {
-            for (Map.Entry<String, String> e : source.getAttributes().entrySet()) {
-                root.setAttributeNS((source.getNamespace() == null ? DEFAULT_EXTENSION_NS : source.getNamespace()),
-                        e.getKey(), e.getValue());
-            }
-        }
-
-        return root;
-    }
-
-    /**
-     * Converts a CMIS extension element to a DOM node.
-     */
-    private static Node convertCmisExtensionElementToNode(CmisExtensionElement source, Element parent, Document doc) {
-        if (source == null) {
-            return null;
-        }
-
-        Element element = doc.createElementNS(
-                (source.getNamespace() == null ? DEFAULT_EXTENSION_NS : source.getNamespace()), source.getName());
-
-        if (source.getValue() != null) {
-            element.appendChild(doc.createTextNode(source.getValue()));
-        } else {
-            for (CmisExtensionElement child : source.getChildren()) {
-                element.appendChild(convertCmisExtensionElementToNode(child, element, doc));
-            }
-        }
-
-        // set attributes
-        if (source.getAttributes() != null) {
-            for (Map.Entry<String, String> e : source.getAttributes().entrySet()) {
-                element.setAttributeNS((source.getNamespace() == null ? DEFAULT_EXTENSION_NS : source.getNamespace()),
-                        e.getKey(), e.getValue());
-            }
-        }
-
-        return element;
-    }
-
-    private static boolean convertBoolean(Boolean value, boolean def) {
-        return (value == null ? def : value.booleanValue());
-    }
-
-    // -------------------------------------------------------------------------
-    // --- Enums ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Converts an Enum.
-     */
-    public static <T extends Enum<T>> T convert(Class<T> destClass, Enum<?> source) {
-        if (source == null) {
-            return null;
-        }
-
-        return Enum.valueOf(destClass, source.name());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstants.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstants.java
deleted file mode 100644
index f61a6e1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstants.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-@SuppressWarnings("PMD.AvoidDuplicateLiterals")
-public final class XMLConstants {
-
-    private XMLConstants() {
-    }
-
-    // namespaces
-    public static final String NAMESPACE_CMIS = "http://docs.oasis-open.org/ns/cmis/core/200908/";
-    public static final String NAMESPACE_ATOM = "http://www.w3.org/2005/Atom";
-    public static final String NAMESPACE_APP = "http://www.w3.org/2007/app";
-    public static final String NAMESPACE_RESTATOM = "http://docs.oasis-open.org/ns/cmis/restatom/200908/";
-    public static final String NAMESPACE_XSI = "http://www.w3.org/2001/XMLSchema-instance";
-    public static final String NAMESPACE_APACHE_CHEMISTRY = "http://chemistry.apache.org/";
-
-    // prefixes
-    public static final String PREFIX_XSI = "xsi";
-    public static final String PREFIX_ATOM = "atom";
-    public static final String PREFIX_APP = "app";
-    public static final String PREFIX_CMIS = "cmis";
-    public static final String PREFIX_RESTATOM = "cmisra";
-    public static final String PREFIX_APACHE_CHEMISTY = "chemistry";
-
-    // tags
-    public static final String TAG_REPOSITORY_INFO = "repositoryInfo";
-
-    public static final String TAG_REPINFO_ID = "repositoryId";
-    public static final String TAG_REPINFO_NAME = "repositoryName";
-    public static final String TAG_REPINFO_DESCRIPTION = "repositoryDescription";
-    public static final String TAG_REPINFO_VENDOR = "vendorName";
-    public static final String TAG_REPINFO_PRODUCT = "productName";
-    public static final String TAG_REPINFO_PRODUCT_VERSION = "productVersion";
-    public static final String TAG_REPINFO_ROOT_FOLDER_ID = "rootFolderId";
-    public static final String TAG_REPINFO_CAPABILITIES = "capabilities";
-    public static final String TAG_REPINFO_ACL_CAPABILITIES = "aclCapability";
-    public static final String TAG_REPINFO_CHANGE_LOG_TOKEN = "latestChangeLogToken";
-    public static final String TAG_REPINFO_CMIS_VERSION_SUPPORTED = "cmisVersionSupported";
-    public static final String TAG_REPINFO_THIN_CLIENT_URI = "thinClientURI";
-    public static final String TAG_REPINFO_CHANGES_INCOMPLETE = "changesIncomplete";
-    public static final String TAG_REPINFO_CHANGES_ON_TYPE = "changesOnType";
-    public static final String TAG_REPINFO_PRINCIPAL_ID_ANONYMOUS = "principalAnonymous";
-    public static final String TAG_REPINFO_PRINCIPAL_ID_ANYONE = "principalAnyone";
-    public static final String TAG_REPINFO_EXTENDED_FEATURES = "extendedFeatures";
-
-    public static final String TAG_CAP_CONTENT_STREAM_UPDATABILITY = "capabilityContentStreamUpdatability";
-    public static final String TAG_CAP_CHANGES = "capabilityChanges";
-    public static final String TAG_CAP_RENDITIONS = "capabilityRenditions";
-    public static final String TAG_CAP_GET_DESCENDANTS = "capabilityGetDescendants";
-    public static final String TAG_CAP_GET_FOLDER_TREE = "capabilityGetFolderTree";
-    public static final String TAG_CAP_MULTIFILING = "capabilityMultifiling";
-    public static final String TAG_CAP_UNFILING = "capabilityUnfiling";
-    public static final String TAG_CAP_VERSION_SPECIFIC_FILING = "capabilityVersionSpecificFiling";
-    public static final String TAG_CAP_PWC_SEARCHABLE = "capabilityPWCSearchable";
-    public static final String TAG_CAP_PWC_UPDATABLE = "capabilityPWCUpdatable";
-    public static final String TAG_CAP_ALL_VERSIONS_SEARCHABLE = "capabilityAllVersionsSearchable";
-    public static final String TAG_CAP_ORDER_BY = "capabilityOrderBy";
-    public static final String TAG_CAP_QUERY = "capabilityQuery";
-    public static final String TAG_CAP_JOIN = "capabilityJoin";
-    public static final String TAG_CAP_ACL = "capabilityACL";
-    public static final String TAG_CAP_CREATABLE_PROPERTY_TYPES = "capabilityCreatablePropertyTypes";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES = "capabilityNewTypeSettableAttributes";
-
-    public static final String TAG_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE = "canCreate";
-
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID = "id";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME = "localName";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE = "localNamespace";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME = "displayName";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME = "queryName";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION = "description";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE = "creatable";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE = "fileable";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE = "queryable";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED = "fulltextIndexed";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY = "includedInSupertypeQuery";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY = "controllablePolicy";
-    public static final String TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL = "controllableACL";
-
-    public static final String TAG_ACLCAP_SUPPORTED_PERMISSIONS = "supportedPermissions";
-    public static final String TAG_ACLCAP_ACL_PROPAGATION = "propagation";
-    public static final String TAG_ACLCAP_PERMISSIONS = "permissions";
-    public static final String TAG_ACLCAP_PERMISSION_MAPPING = "mapping";
-
-    public static final String TAG_ACLCAP_PERMISSION_PERMISSION = "permission";
-    public static final String TAG_ACLCAP_PERMISSION_DESCRIPTION = "description";
-
-    public static final String TAG_ACLCAP_MAPPING_KEY = "key";
-    public static final String TAG_ACLCAP_MAPPING_PERMISSION = "permission";
-
-    public static final String TAG_FEATURE_ID = "id";
-    public static final String TAG_FEATURE_URL = "url";
-    public static final String TAG_FEATURE_COMMON_NAME = "commonName";
-    public static final String TAG_FEATURE_VERSION_LABEL = "versionLabel";
-    public static final String TAG_FEATURE_DESCRIPTION = "description";
-    public static final String TAG_FEATURE_DATA = "featureData";
-
-    public static final String TAG_FEATURE_DATA_KEY = "key";
-    public static final String TAG_FEATURE_DATA_VALUE = "value";
-
-    public static final String TAG_OBJECT = "object";
-
-    public static final String TAG_OBJECT_PROPERTIES = "properties";
-    public static final String TAG_OBJECT_ALLOWABLE_ACTIONS = "allowableActions";
-    public static final String TAG_OBJECT_RELATIONSHIP = "relationship";
-    public static final String TAG_OBJECT_CHANGE_EVENT_INFO = "changeEventInfo";
-    public static final String TAG_OBJECT_ACL = "acl";
-    public static final String TAG_OBJECT_EXACT_ACL = "exactACL";
-    public static final String TAG_OBJECT_POLICY_IDS = "policyIds";
-    public static final String TAG_OBJECT_RENDITION = "rendition";
-
-    public static final String TAG_PROP_BOOLEAN = "propertyBoolean";
-    public static final String TAG_PROP_ID = "propertyId";
-    public static final String TAG_PROP_INTEGER = "propertyInteger";
-    public static final String TAG_PROP_DATETIME = "propertyDateTime";
-    public static final String TAG_PROP_DECIMAL = "propertyDecimal";
-    public static final String TAG_PROP_HTML = "propertyHtml";
-    public static final String TAG_PROP_STRING = "propertyString";
-    public static final String TAG_PROP_URI = "propertyUri";
-
-    public static final String TAG_CHANGE_EVENT_TYPE = "changeType";
-    public static final String TAG_CHANGE_EVENT_TIME = "changeTime";
-
-    public static final String TAG_ACL_PERMISSISONS = "permission";
-    public static final String TAG_ACL_IS_EXACT = "permission";
-    public static final String TAG_ACE_PRINCIPAL = "principal";
-    public static final String TAG_ACE_PRINCIPAL_ID = "principalId";
-    public static final String TAG_ACE_PERMISSIONS = "permission";
-    public static final String TAG_ACE_IS_DIRECT = "direct";
-
-    public static final String TAG_POLICY_ID = "id";
-
-    public static final String TAG_RENDITION_STREAM_ID = "streamId";
-    public static final String TAG_RENDITION_MIMETYPE = "mimetype";
-    public static final String TAG_RENDITION_LENGTH = "length";
-    public static final String TAG_RENDITION_KIND = "kind";
-    public static final String TAG_RENDITION_TITLE = "title";
-    public static final String TAG_RENDITION_HEIGHT = "height";
-    public static final String TAG_RENDITION_WIDTH = "width";
-    public static final String TAG_RENDITION_DOCUMENT_ID = "renditionDocumentId";
-
-    public static final String ATTR_PROPERTY_ID = "propertyDefinitionId";
-    public static final String ATTR_PROPERTY_LOCALNAME = "localName";
-    public static final String ATTR_PROPERTY_DISPLAYNAME = "displayName";
-    public static final String ATTR_PROPERTY_QUERYNAME = "queryName";
-    public static final String TAG_PROPERTY_VALUE = "value";
-
-    public static final String TAG_TYPE = "type";
-
-    public static final String ATTR_DOCUMENT_TYPE = "cmisTypeDocumentDefinitionType";
-    public static final String ATTR_FOLDER_TYPE = "cmisTypeFolderDefinitionType";
-    public static final String ATTR_RELATIONSHIP_TYPE = "cmisTypeRelationshipDefinitionType";
-    public static final String ATTR_POLICY_TYPE = "cmisTypePolicyDefinitionType";
-    public static final String ATTR_ITEM_TYPE = "cmisTypeItemDefinitionType";
-    public static final String ATTR_SECONDARY_TYPE = "cmisTypeSecondaryDefinitionType";
-
-    public static final String TAG_TYPE_ID = "id";
-    public static final String TAG_TYPE_LOCALNAME = "localName";
-    public static final String TAG_TYPE_LOCALNAMESPACE = "localNamespace";
-    public static final String TAG_TYPE_DISPLAYNAME = "displayName";
-    public static final String TAG_TYPE_QUERYNAME = "queryName";
-    public static final String TAG_TYPE_DESCRIPTION = "description";
-    public static final String TAG_TYPE_BASE_ID = "baseId";
-    public static final String TAG_TYPE_PARENT_ID = "parentId";
-    public static final String TAG_TYPE_CREATABLE = "creatable";
-    public static final String TAG_TYPE_FILEABLE = "fileable";
-    public static final String TAG_TYPE_QUERYABLE = "queryable";
-    public static final String TAG_TYPE_FULLTEXT_INDEXED = "fulltextIndexed";
-    public static final String TAG_TYPE_INCLUDE_IN_SUPERTYPE_QUERY = "includedInSupertypeQuery";
-    public static final String TAG_TYPE_CONTROLABLE_POLICY = "controllablePolicy";
-    public static final String TAG_TYPE_CONTROLABLE_ACL = "controllableACL";
-    public static final String TAG_TYPE_TYPE_MUTABILITY = "typeMutability";
-    public static final String TAG_TYPE_VERSIONABLE = "versionable"; // document
-    public static final String TAG_TYPE_CONTENTSTREAM_ALLOWED = "contentStreamAllowed"; // document
-    public static final String TAG_TYPE_ALLOWED_SOURCE_TYPES = "allowedSourceTypes"; // relationship
-    public static final String TAG_TYPE_ALLOWED_TARGET_TYPES = "allowedTargetTypes"; // relationship
-
-    public static final String TAG_TYPE_PROP_DEF_BOOLEAN = "propertyBooleanDefinition";
-    public static final String TAG_TYPE_PROP_DEF_DATETIME = "propertyDateTimeDefinition";
-    public static final String TAG_TYPE_PROP_DEF_DECIMAL = "propertyDecimalDefinition";
-    public static final String TAG_TYPE_PROP_DEF_ID = "propertyIdDefinition";
-    public static final String TAG_TYPE_PROP_DEF_INTEGER = "propertyIntegerDefinition";
-    public static final String TAG_TYPE_PROP_DEF_HTML = "propertyHtmlDefinition";
-    public static final String TAG_TYPE_PROP_DEF_STRING = "propertyStringDefinition";
-    public static final String TAG_TYPE_PROP_DEF_URI = "propertyUriDefinition";
-
-    public static final String TAG_PROPERTY_TYPE_ID = "id";
-    public static final String TAG_PROPERTY_TYPE_LOCALNAME = "localName";
-    public static final String TAG_PROPERTY_TYPE_LOCALNAMESPACE = "localNamespace";
-    public static final String TAG_PROPERTY_TYPE_DISPLAYNAME = "displayName";
-    public static final String TAG_PROPERTY_TYPE_QUERYNAME = "queryName";
-    public static final String TAG_PROPERTY_TYPE_DESCRIPTION = "description";
-    public static final String TAG_PROPERTY_TYPE_PROPERTY_TYPE = "propertyType";
-    public static final String TAG_PROPERTY_TYPE_CARDINALITY = "cardinality";
-    public static final String TAG_PROPERTY_TYPE_UPDATABILITY = "updatability";
-    public static final String TAG_PROPERTY_TYPE_INHERITED = "inherited";
-    public static final String TAG_PROPERTY_TYPE_REQUIRED = "required";
-    public static final String TAG_PROPERTY_TYPE_QUERYABLE = "queryable";
-    public static final String TAG_PROPERTY_TYPE_ORDERABLE = "orderable";
-    public static final String TAG_PROPERTY_TYPE_OPENCHOICE = "openChoice";
-
-    public static final String TAG_PROPERTY_TYPE_DEAULT_VALUE = "defaultValue";
-
-    public static final String TAG_PROPERTY_TYPE_MAX_LENGTH = "maxLength";
-    public static final String TAG_PROPERTY_TYPE_MIN_VALUE = "minValue";
-    public static final String TAG_PROPERTY_TYPE_MAX_VALUE = "maxValue";
-    public static final String TAG_PROPERTY_TYPE_PRECISION = "precision";
-    public static final String TAG_PROPERTY_TYPE_RESOLUTION = "resolution";
-
-    public static final String TAG_PROPERTY_TYPE_CHOICE = "choice";
-    public static final String ATTR_PROPERTY_TYPE_CHOICE_DISPLAYNAME = "displayName";
-    public static final String TAG_PROPERTY_TYPE_CHOICE_VALUE = "value";
-    public static final String TAG_PROPERTY_TYPE_CHOICE_CHOICE = "choice";
-
-    public static final String TAG_TYPE_TYPE_MUTABILITY_CREATE = "create";
-    public static final String TAG_TYPE_TYPE_MUTABILITY_UPDATE = "update";
-    public static final String TAG_TYPE_TYPE_MUTABILITY_DELETE = "delete";
-
-    public static final String TAG_QUERY = "query";
-    public static final String TAG_QUERY_STATEMENT = "statement";
-    public static final String TAG_QUERY_SEARCHALLVERSIONS = "searchAllVersions";
-    public static final String TAG_QUERY_INCLUDEALLOWABLEACTIONS = "includeAllowableActions";
-    public static final String TAG_QUERY_INCLUDERELATIONSHIPS = "includeRelationships";
-    public static final String TAG_QUERY_RENDITIONFILTER = "renditionFilter";
-    public static final String TAG_QUERY_MAXITEMS = "maxItems";
-    public static final String TAG_QUERY_SKIPCOUNT = "skipCount";
-
-    public static final String TAG_BULK_UPDATE = "bulkUpdate";
-    public static final String TAG_BULK_UPDATE_ID_AND_TOKEN = "objectIdAndChangeToken";
-    public static final String TAG_BULK_UPDATE_PROPERTIES = "properties";
-    public static final String TAG_BULK_UPDATE_ADD_SECONDARY_TYPES = "addSecondaryTypeIds";
-    public static final String TAG_BULK_UPDATE_REMOVE_SECONDARY_TYPES = "removeSecondaryTypeIds";
-
-    public static final String TAG_IDANDTOKEN_ID = "id";
-    public static final String TAG_IDANDTOKEN_NEWID = "newId";
-    public static final String TAG_IDANDTOKEN_CHANGETOKEN = "changeToken";
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java
deleted file mode 100644
index a2e7f78..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConstraints.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-public final class XMLConstraints {
-
-    private XMLConstraints() {
-    }
-
-    public static final int MAX_STRING_LENGTH = 100 * 1024;
-
-    public static final int MAX_EXTENSIONS_WIDTH = 500;
-    public static final int MAX_EXTENSIONS_DEPTH = 20;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java
deleted file mode 100644
index ae1bdd9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLConverter.java
+++ /dev/null
@@ -1,2753 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.XMLConstants.*;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.data.Principal;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.PropertyUri;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class XMLConverter {
-
-    private static final Logger LOG = LoggerFactory.getLogger(XMLConverter.class);
-
-    private XMLConverter() {
-    }
-
-    // ---------------
-    // --- writers ---
-    // ---------------
-
-    public static void writeRepositoryInfo(XMLStreamWriter writer, CmisVersion cmisVersion, String namespace,
-            RepositoryInfo source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(namespace, TAG_REPOSITORY_INFO);
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_ID, source.getId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_NAME, source.getName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_DESCRIPTION, source.getDescription());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_VENDOR, source.getVendorName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRODUCT, source.getProductName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRODUCT_VERSION, source.getProductVersion());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_ROOT_FOLDER_ID, source.getRootFolderId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGE_LOG_TOKEN,
-                source.getLatestChangeLogToken());
-        writeRepositoryCapabilities(writer, cmisVersion, source.getCapabilities());
-        writeAclCapabilities(writer, cmisVersion, source.getAclCapabilities());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CMIS_VERSION_SUPPORTED,
-                source.getCmisVersionSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_THIN_CLIENT_URI, source.getThinClientUri());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGES_INCOMPLETE,
-                source.getChangesIncomplete());
-        if (source.getChangesOnType() != null) {
-            for (BaseTypeId baseType : source.getChangesOnType()) {
-                if (cmisVersion == CmisVersion.CMIS_1_0 && baseType == BaseTypeId.CMIS_ITEM) {
-                    LOG.warn("Receiver only understands CMIS 1.0 but the Changes On Type list in the Repository info contains the base type Item. "
-                            + "The Item base type has been removed from the list.");
-                    continue;
-                }
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_CHANGES_ON_TYPE, baseType);
-            }
-        }
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRINCIPAL_ID_ANONYMOUS,
-                source.getPrincipalIdAnonymous());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_REPINFO_PRINCIPAL_ID_ANYONE,
-                source.getPrincipalIdAnyone());
-        if (cmisVersion != CmisVersion.CMIS_1_0 && source.getExtensionFeatures() != null) {
-            for (ExtensionFeature feature : source.getExtensionFeatures()) {
-                writeExtendedFeatures(writer, cmisVersion, feature);
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writeRepositoryCapabilities(XMLStreamWriter writer, CmisVersion cmisVersion,
-            RepositoryCapabilities source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(PREFIX_CMIS, TAG_REPINFO_CAPABILITIES, NAMESPACE_CMIS);
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ACL, source.getAclCapability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ALL_VERSIONS_SEARCHABLE,
-                source.isAllVersionsSearchableSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CHANGES, source.getChangesCapability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CONTENT_STREAM_UPDATABILITY,
-                source.getContentStreamUpdatesCapability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_GET_DESCENDANTS, source.isGetDescendantsSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_GET_FOLDER_TREE, source.isGetFolderTreeSupported());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_ORDER_BY, source.getOrderByCapability());
-        }
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_MULTIFILING, source.isMultifilingSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_PWC_SEARCHABLE, source.isPwcSearchableSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_PWC_UPDATABLE, source.isPwcUpdatableSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_QUERY, source.getQueryCapability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_RENDITIONS, source.getRenditionsCapability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_UNFILING, source.isUnfilingSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_VERSION_SPECIFIC_FILING,
-                source.isVersionSpecificFilingSupported());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_JOIN, source.getJoinCapability());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            if (source.getCreatablePropertyTypes() != null) {
-                CreatablePropertyTypes creatablePropertyTypes = source.getCreatablePropertyTypes();
-
-                writer.writeStartElement(PREFIX_CMIS, TAG_CAP_CREATABLE_PROPERTY_TYPES, NAMESPACE_CMIS);
-
-                if (creatablePropertyTypes.canCreate() != null) {
-                    for (PropertyType pt : creatablePropertyTypes.canCreate()) {
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE,
-                                pt);
-                    }
-                }
-
-                writeExtensions(writer, creatablePropertyTypes);
-                writer.writeEndElement();
-            }
-            if (source.getNewTypeSettableAttributes() != null) {
-                NewTypeSettableAttributes newTypeSettableAttributes = source.getNewTypeSettableAttributes();
-
-                writer.writeStartElement(PREFIX_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES, NAMESPACE_CMIS);
-
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID,
-                        newTypeSettableAttributes.canSetId());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME,
-                        newTypeSettableAttributes.canSetLocalName());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,
-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE,
-                        newTypeSettableAttributes.canSetLocalNamespace());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME,
-                        newTypeSettableAttributes.canSetDisplayName());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME,
-                        newTypeSettableAttributes.canSetQueryName());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION,
-                        newTypeSettableAttributes.canSetDescription());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE,
-                        newTypeSettableAttributes.canSetCreatable());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE,
-                        newTypeSettableAttributes.canSetFileable());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE,
-                        newTypeSettableAttributes.canSetQueryable());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,
-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED,
-                        newTypeSettableAttributes.canSetFulltextIndexed());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,
-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY,
-                        newTypeSettableAttributes.canSetIncludedInSupertypeQuery());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,
-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY,
-                        newTypeSettableAttributes.canSetControllablePolicy());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS,
-                        TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL,
-                        newTypeSettableAttributes.canSetControllableAcl());
-
-                writeExtensions(writer, newTypeSettableAttributes);
-                writer.writeEndElement();
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writeAclCapabilities(XMLStreamWriter writer, CmisVersion cmisVersion, AclCapabilities source)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(PREFIX_CMIS, TAG_REPINFO_ACL_CAPABILITIES, NAMESPACE_CMIS);
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_SUPPORTED_PERMISSIONS,
-                source.getSupportedPermissions());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_ACL_PROPAGATION, source.getAclPropagation());
-        if (source.getPermissions() != null) {
-            for (PermissionDefinition pd : source.getPermissions()) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_ACLCAP_PERMISSIONS, NAMESPACE_CMIS);
-
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_PERMISSION, pd.getId());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_PERMISSION_DESCRIPTION,
-                        pd.getDescription());
-
-                writeExtensions(writer, pd);
-                writer.writeEndElement();
-            }
-        }
-        if (source.getPermissionMapping() != null) {
-            for (PermissionMapping pm : source.getPermissionMapping().values()) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_ACLCAP_PERMISSION_MAPPING, NAMESPACE_CMIS);
-
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_MAPPING_KEY, pm.getKey());
-                if (pm.getPermissions() != null) {
-                    for (String perm : pm.getPermissions()) {
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACLCAP_MAPPING_PERMISSION, perm);
-                    }
-                }
-
-                writeExtensions(writer, pm);
-                writer.writeEndElement();
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writeExtendedFeatures(XMLStreamWriter writer, CmisVersion cmisVersion, ExtensionFeature source)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(PREFIX_CMIS, TAG_REPINFO_EXTENDED_FEATURES, NAMESPACE_CMIS);
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_ID, source.getId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_URL, source.getUrl());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_COMMON_NAME, source.getCommonName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_VERSION_LABEL, source.getVersionLabel());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DESCRIPTION, source.getDescription());
-        if (source.getFeatureData() != null) {
-            for (Map.Entry<String, String> data : source.getFeatureData().entrySet()) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_FEATURE_DATA, NAMESPACE_CMIS);
-
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DATA_KEY, data.getKey());
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_FEATURE_DATA_VALUE, data.getValue());
-
-                writer.writeEndElement();
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    // --------------------------
-    // --- definition writers ---
-    // --------------------------
-
-    public static void writeTypeDefinition(XMLStreamWriter writer, CmisVersion cmisVersion, String namespace,
-            TypeDefinition source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {
-                LOG.warn("Receiver only understands CMIS 1.0. It may not able to handle an Item type definition.");
-            } else if (source.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY) {
-                LOG.warn("Receiver only understands CMIS 1.0. It may not able to handle a Secondary type definition.");
-            }
-        }
-
-        writer.writeStartElement(namespace, TAG_TYPE);
-        writer.writeNamespace(PREFIX_XSI, NAMESPACE_XSI);
-        String prefix = writer.getPrefix(namespace);
-        if (prefix != null) {
-            writer.writeNamespace(prefix, namespace);
-        }
-
-        if (source.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_DOCUMENT_TYPE);
-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_FOLDER_TYPE);
-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_RELATIONSHIP) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_RELATIONSHIP_TYPE);
-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_POLICY) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_POLICY_TYPE);
-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_ITEM_TYPE);
-        } else if (source.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY) {
-            writer.writeAttribute(PREFIX_XSI, NAMESPACE_XSI, "type", PREFIX_CMIS + ":" + ATTR_SECONDARY_TYPE);
-        } else {
-            throw new CmisRuntimeException("Type definition has no base type id!");
-        }
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ID, source.getId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_LOCALNAME, source.getLocalName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_LOCALNAMESPACE, source.getLocalNamespace());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_DISPLAYNAME, source.getDisplayName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_QUERYNAME, source.getQueryName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_DESCRIPTION, source.getDescription());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_BASE_ID, source.getBaseTypeId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_PARENT_ID, source.getParentTypeId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CREATABLE, source.isCreatable());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_FILEABLE, source.isFileable());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_QUERYABLE, source.isQueryable());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_FULLTEXT_INDEXED, source.isFulltextIndexed());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_INCLUDE_IN_SUPERTYPE_QUERY,
-                source.isIncludedInSupertypeQuery());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTROLABLE_POLICY, source.isControllablePolicy());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTROLABLE_ACL, source.isControllableAcl());
-        if (cmisVersion != CmisVersion.CMIS_1_0 && source.getTypeMutability() != null) {
-            TypeMutability tm = source.getTypeMutability();
-
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_TYPE_MUTABILITY, NAMESPACE_CMIS);
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_CREATE, tm.canCreate());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_UPDATE, tm.canUpdate());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_TYPE_MUTABILITY_DELETE, tm.canDelete());
-
-            writeExtensions(writer, tm);
-            writer.writeEndElement();
-        }
-        if (source.getPropertyDefinitions() != null) {
-            for (PropertyDefinition<?> pd : source.getPropertyDefinitions().values()) {
-                writePropertyDefinition(writer, cmisVersion, pd);
-            }
-        }
-
-        if (source instanceof DocumentTypeDefinition) {
-            DocumentTypeDefinition docDef = (DocumentTypeDefinition) source;
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_VERSIONABLE, docDef.isVersionable());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_CONTENTSTREAM_ALLOWED,
-                    docDef.getContentStreamAllowed());
-        }
-
-        if (source instanceof RelationshipTypeDefinition) {
-            RelationshipTypeDefinition relDef = (RelationshipTypeDefinition) source;
-            if (relDef.getAllowedSourceTypeIds() != null) {
-                for (String id : relDef.getAllowedSourceTypeIds()) {
-                    if (id != null) {
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ALLOWED_SOURCE_TYPES, id);
-                    }
-                }
-            }
-            if (relDef.getAllowedTargetTypeIds() != null) {
-                for (String id : relDef.getAllowedTargetTypeIds()) {
-                    if (id != null) {
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_TYPE_ALLOWED_TARGET_TYPES, id);
-                    }
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writePropertyDefinition(XMLStreamWriter writer, CmisVersion cmisVersion,
-            PropertyDefinition<?> source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (source.getPropertyType() == null) {
-            throw new CmisRuntimeException("Property type for property definition '" + source.getId() + "' is not set!");
-        }
-
-        switch (source.getPropertyType()) {
-        case STRING:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_STRING, NAMESPACE_CMIS);
-            break;
-        case ID:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_ID, NAMESPACE_CMIS);
-            break;
-        case INTEGER:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_INTEGER, NAMESPACE_CMIS);
-            break;
-        case BOOLEAN:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_BOOLEAN, NAMESPACE_CMIS);
-            break;
-        case DATETIME:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_DATETIME, NAMESPACE_CMIS);
-            break;
-        case DECIMAL:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_DECIMAL, NAMESPACE_CMIS);
-            break;
-        case HTML:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_HTML, NAMESPACE_CMIS);
-            break;
-        case URI:
-            writer.writeStartElement(PREFIX_CMIS, TAG_TYPE_PROP_DEF_URI, NAMESPACE_CMIS);
-            break;
-        default:
-            throw new CmisRuntimeException("Property defintion has no property type!");
-        }
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_ID, source.getId());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_LOCALNAME, source.getLocalName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_LOCALNAMESPACE,
-                source.getLocalNamespace());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_DISPLAYNAME, source.getDisplayName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_QUERYNAME, source.getQueryName());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_DESCRIPTION, source.getDescription());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_PROPERTY_TYPE, source.getPropertyType());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CARDINALITY, source.getCardinality());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_UPDATABILITY, source.getUpdatability());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_INHERITED, source.isInherited());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_REQUIRED, source.isRequired());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_QUERYABLE, source.isQueryable());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_ORDERABLE, source.isOrderable());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_OPENCHOICE, source.isOpenChoice());
-
-        if (source instanceof PropertyStringDefinition) {
-            PropertyStringDefinition def = (PropertyStringDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyStringImpl((String) null, def.getDefaultValue()), true);
-            }
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_LENGTH, def.getMaxLength());
-        } else if (source instanceof PropertyIdDefinition) {
-            PropertyIdDefinition def = (PropertyIdDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyIdImpl((String) null, def.getDefaultValue()), true);
-            }
-        } else if (source instanceof PropertyIntegerDefinition) {
-            PropertyIntegerDefinition def = (PropertyIntegerDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyIntegerImpl((String) null, def.getDefaultValue()), true);
-            }
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_VALUE, def.getMaxValue());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MIN_VALUE, def.getMinValue());
-        } else if (source instanceof PropertyBooleanDefinition) {
-            PropertyBooleanDefinition def = (PropertyBooleanDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyBooleanImpl((String) null, def.getDefaultValue()), true);
-            }
-        } else if (source instanceof PropertyDateTimeDefinition) {
-            PropertyDateTimeDefinition def = (PropertyDateTimeDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyDateTimeImpl((String) null, def.getDefaultValue()), true);
-            }
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_RESOLUTION,
-                    def.getDateTimeResolution());
-        } else if (source instanceof PropertyDecimalDefinition) {
-            PropertyDecimalDefinition def = (PropertyDecimalDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyDecimalImpl((String) null, def.getDefaultValue()), true);
-            }
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MAX_VALUE, def.getMaxValue());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_MIN_VALUE, def.getMinValue());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_PRECISION, def.getPrecision());
-        } else if (source instanceof PropertyHtmlDefinition) {
-            PropertyHtmlDefinition def = (PropertyHtmlDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyHtmlImpl((String) null, def.getDefaultValue()), true);
-            }
-        } else if (source instanceof PropertyUriDefinition) {
-            PropertyUriDefinition def = (PropertyUriDefinition) source;
-
-            if (def.getDefaultValue() != null) {
-                writeProperty(writer, new PropertyUriImpl((String) null, def.getDefaultValue()), true);
-            }
-        }
-
-        if (source.getChoices() != null) {
-            for (Choice<?> c : source.getChoices()) {
-                if (c != null) {
-                    writeChoice(writer, source.getPropertyType(), c);
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static void writeChoice(XMLStreamWriter writer, PropertyType propType, Choice<?> source)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(PREFIX_CMIS, TAG_PROPERTY_TYPE_CHOICE, NAMESPACE_CMIS);
-
-        if (source.getDisplayName() != null) {
-            writer.writeAttribute(ATTR_PROPERTY_TYPE_CHOICE_DISPLAYNAME, source.getDisplayName());
-        }
-
-        if (source.getValue() != null) {
-            switch (propType) {
-            case STRING:
-            case ID:
-            case HTML:
-            case URI:
-                for (String value : (List<String>) source.getValue()) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);
-                }
-                break;
-            case INTEGER:
-                for (BigInteger value : (List<BigInteger>) source.getValue()) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);
-                }
-                break;
-            case BOOLEAN:
-                for (Boolean value : (List<Boolean>) source.getValue()) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);
-                }
-                break;
-            case DATETIME:
-                for (GregorianCalendar value : (List<GregorianCalendar>) source.getValue()) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);
-                }
-                break;
-            case DECIMAL:
-                for (BigDecimal value : (List<BigDecimal>) source.getValue()) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_TYPE_CHOICE_VALUE, value);
-                }
-                break;
-            default:
-            }
-        }
-
-        if (source.getChoice() != null) {
-            for (Choice<?> c : source.getChoice()) {
-                if (c != null) {
-                    writeChoice(writer, propType, c);
-                }
-            }
-        }
-
-        writer.writeEndElement();
-    }
-
-    // -----------------------
-    // --- object writers ---
-    // -----------------------
-
-    public static void writeObject(XMLStreamWriter writer, CmisVersion cmisVersion, String namespace, ObjectData source)
-            throws XMLStreamException {
-        writeObject(writer, cmisVersion, false, TAG_OBJECT, namespace, source);
-    }
-
-    public static void writeObject(XMLStreamWriter writer, CmisVersion cmisVersion, boolean root, String name,
-            String namespace, ObjectData source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            if (source.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {
-                LOG.warn("Receiver only understands CMIS 1.0. It may not be able to handle an Item object.");
-            }
-        }
-
-        if (root) {
-            writer.writeStartElement(PREFIX_CMIS, name, NAMESPACE_CMIS);
-            writer.writeNamespace(PREFIX_CMIS, NAMESPACE_CMIS);
-        } else {
-            writer.writeStartElement(namespace, name);
-        }
-
-        if (source.getProperties() != null) {
-            Properties properties = source.getProperties();
-
-            writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_PROPERTIES, NAMESPACE_CMIS);
-
-            if (properties.getPropertyList() != null) {
-                for (PropertyData<?> property : properties.getPropertyList()) {
-                    writeProperty(writer, property, false);
-                }
-            }
-
-            writeExtensions(writer, properties);
-            writer.writeEndElement();
-        }
-        if (source.getAllowableActions() != null) {
-            writeAllowableActions(writer, cmisVersion, false, source.getAllowableActions());
-        }
-        if (source.getRelationships() != null) {
-            for (ObjectData rel : source.getRelationships()) {
-                if (rel != null) {
-                    writeObject(writer, cmisVersion, false, TAG_OBJECT_RELATIONSHIP, NAMESPACE_CMIS, rel);
-                }
-            }
-        }
-        if (source.getChangeEventInfo() != null) {
-            ChangeEventInfo info = source.getChangeEventInfo();
-
-            writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_CHANGE_EVENT_INFO, NAMESPACE_CMIS);
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CHANGE_EVENT_TYPE, info.getChangeType());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_CHANGE_EVENT_TIME, info.getChangeTime());
-
-            writeExtensions(writer, info);
-            writer.writeEndElement();
-        }
-        if (source.getAcl() != null) {
-            writeAcl(writer, cmisVersion, false, source.getAcl());
-        }
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_OBJECT_EXACT_ACL, source.isExactAcl());
-        if (source.getPolicyIds() != null) {
-            PolicyIdList pids = source.getPolicyIds();
-
-            writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_POLICY_IDS, NAMESPACE_CMIS);
-
-            if (pids.getPolicyIds() != null) {
-                for (String id : pids.getPolicyIds()) {
-                    if (id != null) {
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_POLICY_ID, id);
-                    }
-                }
-            }
-
-            writeExtensions(writer, pids);
-            writer.writeEndElement();
-        }
-        if (source.getRenditions() != null) {
-            for (RenditionData rend : source.getRenditions()) {
-                if (rend != null) {
-                    writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_RENDITION, NAMESPACE_CMIS);
-
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_STREAM_ID, rend.getStreamId());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_MIMETYPE, rend.getMimeType());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_LENGTH, rend.getBigLength());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_KIND, rend.getKind());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_TITLE, rend.getTitle());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_HEIGHT, rend.getBigHeight());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_WIDTH, rend.getBigWidth());
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_RENDITION_DOCUMENT_ID,
-                            rend.getRenditionDocumentId());
-
-                    writeExtensions(writer, rend);
-                    writer.writeEndElement();
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static void writeProperty(XMLStreamWriter writer, PropertyData<?> source, boolean isDefaultValue)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (isDefaultValue) {
-            writer.writeStartElement(PREFIX_CMIS, TAG_PROPERTY_TYPE_DEAULT_VALUE, NAMESPACE_CMIS);
-        } else {
-            if (source instanceof PropertyString) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_STRING, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyId) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_ID, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyInteger) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_INTEGER, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyBoolean) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_BOOLEAN, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyDateTime) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_DATETIME, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyDecimal) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_DECIMAL, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyHtml) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_HTML, NAMESPACE_CMIS);
-            } else if (source instanceof PropertyUri) {
-                writer.writeStartElement(PREFIX_CMIS, TAG_PROP_URI, NAMESPACE_CMIS);
-            } else {
-                throw new CmisRuntimeException("Invalid property datatype!");
-            }
-        }
-
-        if (source.getId() != null) {
-            writer.writeAttribute(ATTR_PROPERTY_ID, source.getId());
-        }
-        if (source.getDisplayName() != null) {
-            writer.writeAttribute(ATTR_PROPERTY_DISPLAYNAME, source.getDisplayName());
-        }
-        if (source.getLocalName() != null) {
-            writer.writeAttribute(ATTR_PROPERTY_LOCALNAME, source.getLocalName());
-        }
-        if (source.getQueryName() != null) {
-            writer.writeAttribute(ATTR_PROPERTY_QUERYNAME, source.getQueryName());
-        }
-
-        if ((source instanceof PropertyString) || (source instanceof PropertyId) || (source instanceof PropertyHtml)
-                || (source instanceof PropertyUri)) {
-            List<String> values = (List<String>) source.getValues();
-            if (values != null) {
-                for (String value : values) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);
-                }
-            }
-        } else if (source instanceof PropertyInteger) {
-            List<BigInteger> values = ((PropertyInteger) source).getValues();
-            if (values != null) {
-                for (BigInteger value : values) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);
-                }
-            }
-        } else if (source instanceof PropertyBoolean) {
-            List<Boolean> values = ((PropertyBoolean) source).getValues();
-            if (values != null) {
-                for (Boolean value : values) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);
-                }
-            }
-        } else if (source instanceof PropertyDateTime) {
-            List<GregorianCalendar> values = ((PropertyDateTime) source).getValues();
-            if (values != null) {
-                for (GregorianCalendar value : values) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);
-                }
-            }
-        } else if (source instanceof PropertyDecimal) {
-            List<BigDecimal> values = ((PropertyDecimal) source).getValues();
-            if (values != null) {
-                for (BigDecimal value : values) {
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_PROPERTY_VALUE, value);
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writeAllowableActions(XMLStreamWriter writer, CmisVersion cmisVersion, boolean root,
-            AllowableActions source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (root) {
-            writer.writeStartElement(PREFIX_CMIS, "allowableActions", NAMESPACE_CMIS);
-            writer.writeNamespace(PREFIX_CMIS, NAMESPACE_CMIS);
-        } else {
-            writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_ALLOWABLE_ACTIONS, NAMESPACE_CMIS);
-        }
-
-        if (source.getAllowableActions() != null) {
-            for (Action action : Action.values()) {
-                if (source.getAllowableActions().contains(action)) {
-                    if (action == Action.CAN_CREATE_ITEM && cmisVersion == CmisVersion.CMIS_1_0) {
-                        LOG.warn("Receiver only understands CMIS 1.0 but the Allowable Actions contain the canCreateItem action. "
-                                + "The canCreateItem action has been removed from the Allowable Actions.");
-                        continue;
-                    }
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, action.value(), Boolean.TRUE);
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    public static void writeAcl(XMLStreamWriter writer, CmisVersion cmisVersion, boolean root, Acl source)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        if (root) {
-            writer.writeStartElement(PREFIX_CMIS, "acl", NAMESPACE_CMIS);
-            writer.writeNamespace(PREFIX_CMIS, NAMESPACE_CMIS);
-        } else {
-            writer.writeStartElement(PREFIX_CMIS, TAG_OBJECT_ACL, NAMESPACE_CMIS);
-        }
-
-        if (source.getAces() != null) {
-            for (Ace ace : source.getAces()) {
-                if (ace != null) {
-                    writer.writeStartElement(PREFIX_CMIS, TAG_ACL_PERMISSISONS, NAMESPACE_CMIS);
-
-                    if (ace.getPrincipal() != null) {
-                        Principal principal = ace.getPrincipal();
-
-                        writer.writeStartElement(PREFIX_CMIS, TAG_ACE_PRINCIPAL, NAMESPACE_CMIS);
-
-                        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_PRINCIPAL_ID, principal.getId());
-
-                        writeExtensions(writer, principal);
-                        writer.writeEndElement();
-                    }
-                    if (ace.getPermissions() != null) {
-                        for (String perm : ace.getPermissions()) {
-                            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_PERMISSIONS, perm);
-                        }
-                    }
-                    XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_ACE_IS_DIRECT, ace.isDirect());
-
-                    writeExtensions(writer, ace);
-                    writer.writeEndElement();
-                }
-            }
-        }
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    // -------------
-    // --- query ---
-    // -------------
-
-    public static void writeQuery(XMLStreamWriter writer, CmisVersion cmisVersion, QueryTypeImpl source)
-            throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        writer.writeStartElement(NAMESPACE_CMIS, TAG_QUERY);
-        writer.writeNamespace(PREFIX_CMIS, NAMESPACE_CMIS);
-
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_STATEMENT, source.getStatement());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_SEARCHALLVERSIONS, source.getSearchAllVersions());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_INCLUDEALLOWABLEACTIONS,
-                source.getIncludeAllowableActions());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_INCLUDERELATIONSHIPS,
-                source.getIncludeRelationships());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_RENDITIONFILTER, source.getRenditionFilter());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_MAXITEMS, source.getMaxItems());
-        XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_QUERY_SKIPCOUNT, source.getSkipCount());
-
-        writeExtensions(writer, source);
-        writer.writeEndElement();
-    }
-
-    // -------------------
-    // --- bulk update ---
-    // -------------------
-
-    public static void writeBulkUpdate(XMLStreamWriter writer, String namespace, BulkUpdateImpl bulkUpdate)
-            throws XMLStreamException {
-        if (bulkUpdate == null || bulkUpdate.getObjectIdAndChangeToken() == null) {
-            return;
-        }
-
-        writer.writeStartElement(namespace, TAG_BULK_UPDATE);
-
-        for (BulkUpdateObjectIdAndChangeToken idAndToken : bulkUpdate.getObjectIdAndChangeToken()) {
-            if (idAndToken == null) {
-                continue;
-            }
-
-            writer.writeStartElement(PREFIX_CMIS, TAG_BULK_UPDATE_ID_AND_TOKEN, NAMESPACE_CMIS);
-
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_IDANDTOKEN_ID, idAndToken.getId());
-            XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_IDANDTOKEN_CHANGETOKEN, idAndToken.getChangeToken());
-
-            writeExtensions(writer, idAndToken);
-            writer.writeEndElement();
-        }
-
-        if (bulkUpdate.getProperties() != null) {
-            Properties properties = bulkUpdate.getProperties();
-            writer.writeStartElement(PREFIX_CMIS, TAG_BULK_UPDATE_PROPERTIES, NAMESPACE_CMIS);
-
-            if (properties.getPropertyList() != null) {
-                for (PropertyData<?> property : properties.getPropertyList()) {
-                    writeProperty(writer, property, false);
-                }
-            }
-
-            writeExtensions(writer, properties);
-            writer.writeEndElement();
-        }
-
-        if (bulkUpdate.getAddSecondaryTypeIds() != null) {
-            for (String id : bulkUpdate.getAddSecondaryTypeIds()) {
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_BULK_UPDATE_ADD_SECONDARY_TYPES, id);
-            }
-        }
-
-        if (bulkUpdate.getRemoveSecondaryTypeIds() != null) {
-            for (String id : bulkUpdate.getRemoveSecondaryTypeIds()) {
-                XMLUtils.write(writer, PREFIX_CMIS, NAMESPACE_CMIS, TAG_BULK_UPDATE_REMOVE_SECONDARY_TYPES, id);
-            }
-        }
-
-        writer.writeEndElement();
-    }
-
-    // -------------------------
-    // --- extension writers ---
-    // -------------------------
-
-    public static void writeExtensions(XMLStreamWriter writer, ExtensionsData source) throws XMLStreamException {
-        if (source == null) {
-            return;
-        }
-
-        List<String> ns = new ArrayList<String>();
-
-        if (source.getExtensions() != null) {
-            for (CmisExtensionElement element : source.getExtensions()) {
-                if (element == null) {
-                    continue;
-                }
-
-                writeExtensionElement(writer, element, ns);
-            }
-        }
-    }
-
-    private static void writeExtensionElement(XMLStreamWriter writer, CmisExtensionElement source, List<String> ns)
-            throws XMLStreamException {
-        if (source == null || source.getName() == null) {
-            return;
-        }
-
-        boolean addedNamespace = false;
-
-        if (source.getNamespace() != null) {
-            String prefix = writer.getPrefix(source.getNamespace());
-            if (prefix == null) {
-                int p = ns.indexOf(source.getNamespace());
-
-                if (p == -1) {
-                    prefix = "e" + (ns.size() + 1);
-                    ns.add(source.getNamespace());
-                    addedNamespace = true;
-                } else {
-                    prefix = "e" + (p + 1);
-                }
-            }
-
-            writer.writeStartElement(prefix, source.getName(), source.getNamespace());
-
-            if (addedNamespace) {
-                writer.writeNamespace(prefix, source.getNamespace());
-            }
-        } else {
-            writer.writeStartElement(source.getName());
-        }
-
-        if (source.getAttributes() != null) {
-            for (Map.Entry<String, String> attr : source.getAttributes().entrySet()) {
-                writer.writeAttribute(attr.getKey(), attr.getValue());
-            }
-        }
-
-        if (source.getValue() != null) {
-            writer.writeCharacters(source.getValue());
-        } else {
-            if (source.getChildren() != null) {
-                for (CmisExtensionElement child : source.getChildren()) {
-                    writeExtensionElement(writer, child, ns);
-                }
-            }
-        }
-
-        writer.writeEndElement();
-
-        if (addedNamespace) {
-            ns.remove(ns.size() - 1);
-        }
-    }
-
-    // ---------------
-    // --- parsers ---
-    // ---------------
-
-    public static RepositoryInfo convertRepositoryInfo(XMLStreamReader parser) throws XMLStreamException {
-        return REPOSITORY_INFO_PARSER.walk(parser);
-    }
-
-    public static TypeDefinition convertTypeDefinition(XMLStreamReader parser) throws XMLStreamException {
-        return TYPE_DEF_PARSER.walk(parser);
-    }
-
-    public static ObjectData convertObject(XMLStreamReader parser) throws XMLStreamException {
-        return OBJECT_PARSER.walk(parser);
-    }
-
-    public static QueryTypeImpl convertQuery(XMLStreamReader parser) throws XMLStreamException {
-        return QUERY_PARSER.walk(parser);
-    }
-
-    public static AllowableActions convertAllowableActions(XMLStreamReader parser) throws XMLStreamException {
-        return ALLOWABLE_ACTIONS_PARSER.walk(parser);
-    }
-
-    public static Acl convertAcl(XMLStreamReader parser) throws XMLStreamException {
-        return ACL_PARSER.walk(parser);
-    }
-
-    public static BulkUpdateImpl convertBulkUpdate(XMLStreamReader parser) throws XMLStreamException {
-        return BULK_UPDATE_PARSER.walk(parser);
-    }
-
-    // ------------------------------
-    // --- repository info parser ---
-    // ------------------------------
-
-    private static final XMLWalker<RepositoryInfoImpl> REPOSITORY_INFO_PARSER = new XMLWalker<RepositoryInfoImpl>() {
-        @Override
-        protected RepositoryInfoImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new RepositoryInfoImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, RepositoryInfoImpl target) throws XMLStreamException {
-
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_REPINFO_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_NAME)) {
-                    target.setName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_DESCRIPTION)) {
-                    target.setDescription(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_VENDOR)) {
-                    target.setVendorName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_PRODUCT)) {
-                    target.setProductName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_PRODUCT_VERSION)) {
-                    target.setProductVersion(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_ROOT_FOLDER_ID)) {
-                    target.setRootFolder(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_CHANGE_LOG_TOKEN)) {
-                    target.setLatestChangeLogToken(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_CAPABILITIES)) {
-                    target.setCapabilities(CAPABILITIES_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_ACL_CAPABILITIES)) {
-                    target.setAclCapabilities(ACL_CAPABILITIES_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_CMIS_VERSION_SUPPORTED)) {
-                    target.setCmisVersionSupported(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_THIN_CLIENT_URI)) {
-                    target.setThinClientUri(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_CHANGES_INCOMPLETE)) {
-                    target.setChangesIncomplete(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_CHANGES_ON_TYPE)) {
-                    target.setChangesOnType(addToList(target.getChangesOnType(), readEnum(parser, BaseTypeId.class)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_PRINCIPAL_ID_ANONYMOUS)) {
-                    target.setPrincipalAnonymous(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_PRINCIPAL_ID_ANYONE)) {
-                    target.setPrincipalAnyone(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_REPINFO_EXTENDED_FEATURES)) {
-                    target.setExtensionFeature(addToList(target.getExtensionFeatures(),
-                            EXTENDED_FEATURES_PARSER.walk(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<RepositoryCapabilitiesImpl> CAPABILITIES_PARSER = new XMLWalker<RepositoryCapabilitiesImpl>() {
-        @Override
-        protected RepositoryCapabilitiesImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new RepositoryCapabilitiesImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, RepositoryCapabilitiesImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_CAP_ACL)) {
-                    target.setCapabilityAcl(readEnum(parser, CapabilityAcl.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_ALL_VERSIONS_SEARCHABLE)) {
-                    target.setAllVersionsSearchable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_CHANGES)) {
-                    target.setCapabilityChanges(readEnum(parser, CapabilityChanges.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_CONTENT_STREAM_UPDATABILITY)) {
-                    target.setCapabilityContentStreamUpdates(readEnum(parser, CapabilityContentStreamUpdates.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_GET_DESCENDANTS)) {
-                    target.setSupportsGetDescendants(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_GET_FOLDER_TREE)) {
-                    target.setSupportsGetFolderTree(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_ORDER_BY)) {
-                    target.setCapabilityOrderBy(readEnum(parser, CapabilityOrderBy.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_MULTIFILING)) {
-                    target.setSupportsMultifiling(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_PWC_SEARCHABLE)) {
-                    target.setIsPwcSearchable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_PWC_UPDATABLE)) {
-                    target.setIsPwcUpdatable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_QUERY)) {
-                    target.setCapabilityQuery(readEnum(parser, CapabilityQuery.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_RENDITIONS)) {
-                    target.setCapabilityRendition(readEnum(parser, CapabilityRenditions.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_UNFILING)) {
-                    target.setSupportsUnfiling(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_VERSION_SPECIFIC_FILING)) {
-                    target.setSupportsVersionSpecificFiling(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_JOIN)) {
-                    target.setCapabilityJoin(readEnum(parser, CapabilityJoin.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_CREATABLE_PROPERTY_TYPES)) {
-                    target.setCreatablePropertyTypes(CREATABLE_PROPERTY_TYPES_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES)) {
-                    target.setNewTypeSettableAttributes(NEW_TYPES_SETTABLE_ATTRIBUTES_PARSER.walk(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<CreatablePropertyTypesImpl> CREATABLE_PROPERTY_TYPES_PARSER = new XMLWalker<CreatablePropertyTypesImpl>() {
-        @Override
-        protected CreatablePropertyTypesImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new CreatablePropertyTypesImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, CreatablePropertyTypesImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_CAP_CREATABLE_PROPERTY_TYPES_CANCREATE)) {
-                    target.canCreate().add(readEnum(parser, PropertyType.class));
-                    return true;
-                }
-            }
-            return false;
-        }
-    };
-
-    private static final XMLWalker<NewTypeSettableAttributesImpl> NEW_TYPES_SETTABLE_ATTRIBUTES_PARSER = new XMLWalker<NewTypeSettableAttributesImpl>() {
-        @Override
-        protected NewTypeSettableAttributesImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new NewTypeSettableAttributesImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, NewTypeSettableAttributesImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_ID)) {
-                    target.setCanSetId(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAME)) {
-                    target.setCanSetLocalName(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_LOCALNAMESPACE)) {
-                    target.setCanSetLocalNamespace(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DISPLAYNAME)) {
-                    target.setCanSetDisplayName(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYNAME)) {
-                    target.setCanSetQueryName(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_DESCRIPTION)) {
-                    target.setCanSetDescription(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CREATEABLE)) {
-                    target.setCanSetCreatable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FILEABLE)) {
-                    target.setCanSetFileable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_QUERYABLE)) {
-                    target.setCanSetQueryable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_FULLTEXTINDEXED)) {
-                    target.setCanSetFulltextIndexed(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_INCLUDEDINSUPERTYTPEQUERY)) {
-                    target.setCanSetIncludedInSupertypeQuery(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEPOLICY)) {
-                    target.setCanSetControllablePolicy(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CAP_NEW_TYPE_SETTABLE_ATTRIBUTES_CONTROLABLEACL)) {
-                    target.setCanSetControllableAcl(readBoolean(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AclCapabilitiesDataImpl> ACL_CAPABILITIES_PARSER = new XMLWalker<AclCapabilitiesDataImpl>() {
-        @Override
-        protected AclCapabilitiesDataImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new AclCapabilitiesDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AclCapabilitiesDataImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACLCAP_SUPPORTED_PERMISSIONS)) {
-                    target.setSupportedPermissions(readEnum(parser, SupportedPermissions.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACLCAP_ACL_PROPAGATION)) {
-                    target.setAclPropagation(readEnum(parser, AclPropagation.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACLCAP_PERMISSIONS)) {
-                    target.setPermissionDefinitionData(addToList(target.getPermissions(),
-                            PERMISSION_DEFINITION_PARSER.walk(parser)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACLCAP_PERMISSION_MAPPING)) {
-                    PermissionMapping pm = PERMISSION_MAPPING_PARSER.walk(parser);
-
-                    Map<String, PermissionMapping> mapping = target.getPermissionMapping();
-                    mapping.put(pm.getKey(), pm);
-
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<PermissionDefinitionDataImpl> PERMISSION_DEFINITION_PARSER = new XMLWalker<PermissionDefinitionDataImpl>() {
-        @Override
-        protected PermissionDefinitionDataImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new PermissionDefinitionDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, PermissionDefinitionDataImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACLCAP_PERMISSION_PERMISSION)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACLCAP_PERMISSION_DESCRIPTION)) {
-                    target.setDescription(readText(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<PermissionMappingDataImpl> PERMISSION_MAPPING_PARSER = new XMLWalker<PermissionMappingDataImpl>() {
-        @Override
-        protected PermissionMappingDataImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new PermissionMappingDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, PermissionMappingDataImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACLCAP_MAPPING_KEY)) {
-                    target.setKey(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACLCAP_MAPPING_PERMISSION)) {
-                    target.setPermissions(addToList(target.getPermissions(), readText(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<ExtensionFeatureImpl> EXTENDED_FEATURES_PARSER = new XMLWalker<ExtensionFeatureImpl>() {
-        @Override
-        protected ExtensionFeatureImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new ExtensionFeatureImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, ExtensionFeatureImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_FEATURE_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_URL)) {
-                    target.setUrl(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_COMMON_NAME)) {
-                    target.setCommonName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_VERSION_LABEL)) {
-                    target.setVersionLabel(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_DESCRIPTION)) {
-                    target.setDescription(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_DATA)) {
-                    String[] data = FEATURE_DATA_PARSER.walk(parser);
-
-                    Map<String, String> featureData = target.getFeatureData();
-                    featureData.put(data[0], data[1]);
-
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<String[]> FEATURE_DATA_PARSER = new XMLWalker<String[]>() {
-        @Override
-        protected String[] prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new String[2];
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, String[] target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_FEATURE_DATA_KEY)) {
-                    target[0] = readText(parser);
-                    return true;
-                }
-
-                if (isTag(name, TAG_FEATURE_DATA_VALUE)) {
-                    target[1] = readText(parser);
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    // --------------------------
-    // --- definition parsers ---
-    // --------------------------
-
-    private static final XMLWalker<AbstractTypeDefinition> TYPE_DEF_PARSER = new XMLWalker<AbstractTypeDefinition>() {
-        @Override
-        protected AbstractTypeDefinition prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-
-            AbstractTypeDefinition result = null;
-
-            String typeAttr = parser.getAttributeValue(NAMESPACE_XSI, "type");
-            if (typeAttr != null) {
-                if (typeAttr.endsWith(ATTR_DOCUMENT_TYPE)) {
-                    result = new DocumentTypeDefinitionImpl();
-                } else if (typeAttr.endsWith(ATTR_FOLDER_TYPE)) {
-                    result = new FolderTypeDefinitionImpl();
-                } else if (typeAttr.endsWith(ATTR_RELATIONSHIP_TYPE)) {
-                    result = new RelationshipTypeDefinitionImpl();
-                    ((RelationshipTypeDefinitionImpl) result).setAllowedSourceTypes(new ArrayList<String>());
-                    ((RelationshipTypeDefinitionImpl) result).setAllowedTargetTypes(new ArrayList<String>());
-                } else if (typeAttr.endsWith(ATTR_POLICY_TYPE)) {
-                    result = new PolicyTypeDefinitionImpl();
-                } else if (typeAttr.endsWith(ATTR_ITEM_TYPE)) {
-                    result = new ItemTypeDefinitionImpl();
-                } else if (typeAttr.endsWith(ATTR_SECONDARY_TYPE)) {
-                    result = new SecondaryTypeDefinitionImpl();
-                }
-            }
-
-            if (result == null) {
-                throw new CmisInvalidArgumentException("Cannot read type definition!");
-            }
-
-            return result;
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AbstractTypeDefinition target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_TYPE_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_LOCALNAME)) {
-                    target.setLocalName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_LOCALNAMESPACE)) {
-                    target.setLocalNamespace(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_DISPLAYNAME)) {
-                    target.setDisplayName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_QUERYNAME)) {
-                    target.setQueryName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_DESCRIPTION)) {
-                    target.setDescription(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_BASE_ID)) {
-                    BaseTypeId baseType = readEnum(parser, BaseTypeId.class);
-                    if (baseType == null) {
-                        throw new CmisInvalidArgumentException("Invalid base type!");
-                    }
-
-                    target.setBaseTypeId(baseType);
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_PARENT_ID)) {
-                    target.setParentTypeId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_CREATABLE)) {
-                    target.setIsCreatable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_FILEABLE)) {
-                    target.setIsFileable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_QUERYABLE)) {
-                    target.setIsQueryable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_FULLTEXT_INDEXED)) {
-                    target.setIsFulltextIndexed(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_INCLUDE_IN_SUPERTYPE_QUERY)) {
-                    target.setIsIncludedInSupertypeQuery(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_CONTROLABLE_POLICY)) {
-                    target.setIsControllablePolicy(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_CONTROLABLE_ACL)) {
-                    target.setIsControllableAcl(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY)) {
-                    target.setTypeMutability(TYPE_MUTABILITY_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_PROP_DEF_STRING) || isTag(name, TAG_TYPE_PROP_DEF_ID)
-                        || isTag(name, TAG_TYPE_PROP_DEF_BOOLEAN) || isTag(name, TAG_TYPE_PROP_DEF_INTEGER)
-                        || isTag(name, TAG_TYPE_PROP_DEF_DATETIME) || isTag(name, TAG_TYPE_PROP_DEF_DECIMAL)
-                        || isTag(name, TAG_TYPE_PROP_DEF_HTML) || isTag(name, TAG_TYPE_PROP_DEF_URI)) {
-                    target.addPropertyDefinition(PROPERTY_TYPE_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (target instanceof DocumentTypeDefinitionImpl) {
-                    if (isTag(name, TAG_TYPE_VERSIONABLE)) {
-                        ((DocumentTypeDefinitionImpl) target).setIsVersionable(readBoolean(parser));
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_TYPE_CONTENTSTREAM_ALLOWED)) {
-                        ((DocumentTypeDefinitionImpl) target).setContentStreamAllowed(readEnum(parser,
-                                ContentStreamAllowed.class));
-                        return true;
-                    }
-                }
-
-                if (target instanceof RelationshipTypeDefinitionImpl) {
-                    if (isTag(name, TAG_TYPE_ALLOWED_SOURCE_TYPES)) {
-                        RelationshipTypeDefinitionImpl relTarget = (RelationshipTypeDefinitionImpl) target;
-                        relTarget
-                                .setAllowedSourceTypes(addToList(relTarget.getAllowedSourceTypeIds(), readText(parser)));
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_TYPE_ALLOWED_TARGET_TYPES)) {
-                        RelationshipTypeDefinitionImpl relTarget = (RelationshipTypeDefinitionImpl) target;
-                        relTarget
-                                .setAllowedTargetTypes(addToList(relTarget.getAllowedTargetTypeIds(), readText(parser)));
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<TypeMutabilityImpl> TYPE_MUTABILITY_PARSER = new XMLWalker<TypeMutabilityImpl>() {
-        @Override
-        protected TypeMutabilityImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new TypeMutabilityImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, TypeMutabilityImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_CREATE)) {
-                    target.setCanCreate(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_UPDATE)) {
-                    target.setCanUpdate(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_TYPE_TYPE_MUTABILITY_DELETE)) {
-                    target.setCanDelete(readBoolean(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AbstractPropertyDefinition<?>> PROPERTY_TYPE_PARSER = new XMLWalker<AbstractPropertyDefinition<?>>() {
-        @Override
-        protected AbstractPropertyDefinition<?> prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            AbstractPropertyDefinition<?> result = null;
-
-            if (isTag(name, TAG_TYPE_PROP_DEF_STRING)) {
-                result = new PropertyStringDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_ID)) {
-                result = new PropertyIdDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_BOOLEAN)) {
-                result = new PropertyBooleanDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_INTEGER)) {
-                result = new PropertyIntegerDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_DATETIME)) {
-                result = new PropertyDateTimeDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_DECIMAL)) {
-                result = new PropertyDecimalDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_HTML)) {
-                result = new PropertyHtmlDefinitionImpl();
-            } else if (isTag(name, TAG_TYPE_PROP_DEF_URI)) {
-                result = new PropertyUriDefinitionImpl();
-            }
-
-            if (result == null) {
-                throw new CmisInvalidArgumentException("Cannot read property type definition!");
-            }
-
-            return result;
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AbstractPropertyDefinition<?> target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_PROPERTY_TYPE_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_LOCALNAME)) {
-                    target.setLocalName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_LOCALNAMESPACE)) {
-                    target.setLocalNamespace(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_DISPLAYNAME)) {
-                    target.setDisplayName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_QUERYNAME)) {
-                    target.setQueryName(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_DESCRIPTION)) {
-                    target.setDescription(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_PROPERTY_TYPE)) {
-                    PropertyType propType = readEnum(parser, PropertyType.class);
-                    if (propType == null) {
-                        throw new CmisInvalidArgumentException("Invalid property data type!");
-                    }
-
-                    target.setPropertyType(propType);
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_CARDINALITY)) {
-                    Cardinality cardinality = readEnum(parser, Cardinality.class);
-                    if (cardinality == null) {
-                        throw new CmisInvalidArgumentException("Invalid cardinality!");
-                    }
-
-                    target.setCardinality(cardinality);
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_UPDATABILITY)) {
-                    Updatability updatability = readEnum(parser, Updatability.class);
-                    if (updatability == null) {
-                        throw new CmisInvalidArgumentException("Invalid updatability!");
-                    }
-
-                    target.setUpdatability(updatability);
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_INHERITED)) {
-                    target.setIsInherited(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_REQUIRED)) {
-                    target.setIsRequired(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_QUERYABLE)) {
-                    target.setIsQueryable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_ORDERABLE)) {
-                    target.setIsOrderable(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_OPENCHOICE)) {
-                    target.setIsOpenChoice(readBoolean(parser));
-                    return true;
-                }
-
-                if (target instanceof PropertyStringDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyString prop = PROPERTY_STRING_PARSER.walk(parser);
-                        ((PropertyStringDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyStringDefinitionImpl) target);
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_LENGTH)) {
-                        ((PropertyStringDefinitionImpl) target).setMaxLength(readInteger(parser));
-                        return true;
-                    }
-                } else if (target instanceof PropertyIdDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyId prop = PROPERTY_ID_PARSER.walk(parser);
-                        ((PropertyIdDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyIdDefinitionImpl) target);
-                        return true;
-                    }
-                } else if (target instanceof PropertyBooleanDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyBoolean prop = PROPERTY_BOOLEAN_PARSER.walk(parser);
-                        ((PropertyBooleanDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_BOOLEAN_PARSER.addToChoiceList(parser, (PropertyBooleanDefinitionImpl) target);
-                        return true;
-                    }
-                } else if (target instanceof PropertyIntegerDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyInteger prop = PROPERTY_INTEGER_PARSER.walk(parser);
-                        ((PropertyIntegerDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_INTEGER_PARSER.addToChoiceList(parser, (PropertyIntegerDefinitionImpl) target);
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_VALUE)) {
-                        ((PropertyIntegerDefinitionImpl) target).setMaxValue(readInteger(parser));
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_MIN_VALUE)) {
-                        ((PropertyIntegerDefinitionImpl) target).setMinValue(readInteger(parser));
-                        return true;
-                    }
-                } else if (target instanceof PropertyDateTimeDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyDateTime prop = PROPERTY_DATETIME_PARSER.walk(parser);
-                        ((PropertyDateTimeDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_DATETIME_PARSER.addToChoiceList(parser, (PropertyDateTimeDefinitionImpl) target);
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_RESOLUTION)) {
-                        ((PropertyDateTimeDefinitionImpl) target).setDateTimeResolution(readEnum(parser,
-                                DateTimeResolution.class));
-                        return true;
-                    }
-                } else if (target instanceof PropertyDecimalDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyDecimal prop = PROPERTY_DECIMAL_PARSER.walk(parser);
-                        ((PropertyDecimalDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_DECIMAL_PARSER.addToChoiceList(parser, (PropertyDecimalDefinitionImpl) target);
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_MAX_VALUE)) {
-                        ((PropertyDecimalDefinitionImpl) target).setMaxValue(readDecimal(parser));
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_MIN_VALUE)) {
-                        ((PropertyDecimalDefinitionImpl) target).setMinValue(readDecimal(parser));
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_PRECISION)) {
-                        try {
-                            ((PropertyDecimalDefinitionImpl) target).setPrecision(DecimalPrecision
-                                    .fromValue(readInteger(parser)));
-                        } catch (IllegalArgumentException e) {
-                            // invalid enum value - ignore
-                        }
-                        return true;
-                    }
-                } else if (target instanceof PropertyHtmlDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyHtml prop = PROPERTY_HTML_PARSER.walk(parser);
-                        ((PropertyHtmlDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyHtmlDefinitionImpl) target);
-                        return true;
-                    }
-                } else if (target instanceof PropertyUriDefinitionImpl) {
-                    if (isTag(name, TAG_PROPERTY_TYPE_DEAULT_VALUE)) {
-                        PropertyUri prop = PROPERTY_URI_PARSER.walk(parser);
-                        ((PropertyUriDefinitionImpl) target).setDefaultValue(prop.getValues());
-                        return true;
-                    }
-
-                    if (isTag(name, TAG_PROPERTY_TYPE_CHOICE)) {
-                        CHOICE_STRING_PARSER.addToChoiceList(parser, (PropertyUriDefinitionImpl) target);
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final ChoiceXMLWalker<String> CHOICE_STRING_PARSER = new ChoiceXMLWalker<String>() {
-        @Override
-        protected ChoiceImpl<String> createTarget(XMLStreamReader parser, QName name) {
-            return new ChoiceImpl<String>();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, ChoiceImpl<String> target) throws XMLStreamException {
-            target.setValue(addToList(target.getValue(), readText(parser)));
-        }
-
-        protected void addChoice(XMLStreamReader parser, ChoiceImpl<String> target) throws XMLStreamException {
-            target.setChoice(addToList(target.getChoice(), CHOICE_STRING_PARSER.walk(parser)));
-        }
-    };
-
-    private static final ChoiceXMLWalker<Boolean> CHOICE_BOOLEAN_PARSER = new ChoiceXMLWalker<Boolean>() {
-        @Override
-        protected ChoiceImpl<Boolean> createTarget(XMLStreamReader parser, QName name) {
-            return new ChoiceImpl<Boolean>();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, ChoiceImpl<Boolean> target) throws XMLStreamException {
-            target.setValue(addToList(target.getValue(), readBoolean(parser)));
-        }
-
-        protected void addChoice(XMLStreamReader parser, ChoiceImpl<Boolean> target) throws XMLStreamException {
-            target.setChoice(addToList(target.getChoice(), CHOICE_BOOLEAN_PARSER.walk(parser)));
-        }
-    };
-
-    private static final ChoiceXMLWalker<BigInteger> CHOICE_INTEGER_PARSER = new ChoiceXMLWalker<BigInteger>() {
-        @Override
-        protected ChoiceImpl<BigInteger> createTarget(XMLStreamReader parser, QName name) {
-            return new ChoiceImpl<BigInteger>();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, ChoiceImpl<BigInteger> target) throws XMLStreamException {
-            target.setValue(addToList(target.getValue(), readInteger(parser)));
-        }
-
-        protected void addChoice(XMLStreamReader parser, ChoiceImpl<BigInteger> target) throws XMLStreamException {
-            target.setChoice(addToList(target.getChoice(), CHOICE_INTEGER_PARSER.walk(parser)));
-        }
-    };
-
-    private static final ChoiceXMLWalker<GregorianCalendar> CHOICE_DATETIME_PARSER = new ChoiceXMLWalker<GregorianCalendar>() {
-        @Override
-        protected ChoiceImpl<GregorianCalendar> createTarget(XMLStreamReader parser, QName name) {
-            return new ChoiceImpl<GregorianCalendar>();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, ChoiceImpl<GregorianCalendar> target) throws XMLStreamException {
-            target.setValue(addToList(target.getValue(), readDateTime(parser)));
-        }
-
-        protected void addChoice(XMLStreamReader parser, ChoiceImpl<GregorianCalendar> target)
-                throws XMLStreamException {
-            target.setChoice(addToList(target.getChoice(), CHOICE_DATETIME_PARSER.walk(parser)));
-        }
-    };
-
-    private static final ChoiceXMLWalker<BigDecimal> CHOICE_DECIMAL_PARSER = new ChoiceXMLWalker<BigDecimal>() {
-        @Override
-        protected ChoiceImpl<BigDecimal> createTarget(XMLStreamReader parser, QName name) {
-            return new ChoiceImpl<BigDecimal>();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, ChoiceImpl<BigDecimal> target) throws XMLStreamException {
-            target.setValue(addToList(target.getValue(), readDecimal(parser)));
-        }
-
-        protected void addChoice(XMLStreamReader parser, ChoiceImpl<BigDecimal> target) throws XMLStreamException {
-            target.setChoice(addToList(target.getChoice(), CHOICE_DECIMAL_PARSER.walk(parser)));
-        }
-    };
-
-    private abstract static class ChoiceXMLWalker<T> extends XMLWalker<ChoiceImpl<T>> {
-
-        public void addToChoiceList(XMLStreamReader parser, AbstractPropertyDefinition<T> propDef)
-                throws XMLStreamException {
-            propDef.setChoices(addToList(propDef.getChoices(), walk(parser)));
-        }
-
-        protected abstract ChoiceImpl<T> createTarget(XMLStreamReader parser, QName name);
-
-        @Override
-        protected ChoiceImpl<T> prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            ChoiceImpl<T> result = createTarget(parser, name);
-
-            if (parser.getAttributeCount() > 0) {
-                for (int i = 0; i < parser.getAttributeCount(); i++) {
-                    String attr = parser.getAttributeLocalName(i);
-                    if (ATTR_PROPERTY_TYPE_CHOICE_DISPLAYNAME.equals(attr)) {
-                        result.setDisplayName(parser.getAttributeValue(i));
-                    }
-                }
-            }
-
-            return result;
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, ChoiceImpl<T> target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_PROPERTY_TYPE_CHOICE_VALUE)) {
-                    try {
-                        addValue(parser, target);
-                    } catch (CmisInvalidArgumentException e) {
-                        // a few repositories send invalid values here
-                        if (LOG.isWarnEnabled()) {
-                            LOG.warn("Found invalid choice value for choice entry \"{}\"!", target.getDisplayName(), e);
-                        }
-                    }
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROPERTY_TYPE_CHOICE_CHOICE)) {
-                    addChoice(parser, target);
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-        protected abstract void addValue(XMLStreamReader parser, ChoiceImpl<T> target) throws XMLStreamException;
-
-        protected abstract void addChoice(XMLStreamReader parser, ChoiceImpl<T> target) throws XMLStreamException;
-    }
-
-    // ---------------------------------
-    // --- objects and lists parsers ---
-    // ---------------------------------
-
-    private static final XMLWalker<ObjectDataImpl> OBJECT_PARSER = new XMLWalker<ObjectDataImpl>() {
-        @Override
-        protected ObjectDataImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new ObjectDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, ObjectDataImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_OBJECT_PROPERTIES)) {
-                    target.setProperties(PROPERTIES_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_ALLOWABLE_ACTIONS)) {
-                    target.setAllowableActions(ALLOWABLE_ACTIONS_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_RELATIONSHIP)) {
-                    target.setRelationships(addToList(target.getRelationships(), OBJECT_PARSER.walk(parser)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_CHANGE_EVENT_INFO)) {
-                    target.setChangeEventInfo(CHANGE_EVENT_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_ACL)) {
-                    target.setAcl(ACL_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_EXACT_ACL)) {
-                    target.setIsExactAcl(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_POLICY_IDS)) {
-                    target.setPolicyIds(POLICY_IDS_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_OBJECT_RENDITION)) {
-                    target.setRenditions(addToList(target.getRenditions(), RENDITION_PARSER.walk(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<PropertiesImpl> PROPERTIES_PARSER = new XMLWalker<PropertiesImpl>() {
-        @Override
-        protected PropertiesImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new PropertiesImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, PropertiesImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_PROP_STRING)) {
-                    target.addProperty(PROPERTY_STRING_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_ID)) {
-                    target.addProperty(PROPERTY_ID_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_BOOLEAN)) {
-                    target.addProperty(PROPERTY_BOOLEAN_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_INTEGER)) {
-                    target.addProperty(PROPERTY_INTEGER_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_DATETIME)) {
-                    target.addProperty(PROPERTY_DATETIME_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_DECIMAL)) {
-                    target.addProperty(PROPERTY_DECIMAL_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_HTML)) {
-                    target.addProperty(PROPERTY_HTML_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_PROP_URI)) {
-                    target.addProperty(PROPERTY_URI_PARSER.walk(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AllowableActionsImpl> ALLOWABLE_ACTIONS_PARSER = new XMLWalker<AllowableActionsImpl>() {
-        @Override
-        protected AllowableActionsImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new AllowableActionsImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AllowableActionsImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                try {
-                    Action action = Action.fromValue(name.getLocalPart());
-
-                    Set<Action> actions = target.getAllowableActions();
-
-                    if (Boolean.TRUE.equals(readBoolean(parser))) {
-                        actions.add(action);
-                    }
-
-                    return true;
-                } catch (IllegalArgumentException e) {
-                    // extension tag -> ignore
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<ChangeEventInfoDataImpl> CHANGE_EVENT_PARSER = new XMLWalker<ChangeEventInfoDataImpl>() {
-        @Override
-        protected ChangeEventInfoDataImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new ChangeEventInfoDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, ChangeEventInfoDataImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_CHANGE_EVENT_TYPE)) {
-                    target.setChangeType(readEnum(parser, ChangeType.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_CHANGE_EVENT_TIME)) {
-                    target.setChangeTime(readDateTime(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AccessControlListImpl> ACL_PARSER = new XMLWalker<AccessControlListImpl>() {
-        @Override
-        protected AccessControlListImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new AccessControlListImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AccessControlListImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACL_PERMISSISONS)) {
-                    target.setAces(addToList(target.getAces(), ACE_PARSER.walk(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AccessControlEntryImpl> ACE_PARSER = new XMLWalker<AccessControlEntryImpl>() {
-        @Override
-        protected AccessControlEntryImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new AccessControlEntryImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AccessControlEntryImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACE_PRINCIPAL)) {
-                    target.setPrincipal(PRINCIPAL_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACE_PERMISSIONS)) {
-                    target.setPermissions(addToList(target.getPermissions(), readText(parser)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_ACE_IS_DIRECT)) {
-                    target.setDirect(readBoolean(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<AccessControlPrincipalDataImpl> PRINCIPAL_PARSER = new XMLWalker<AccessControlPrincipalDataImpl>() {
-        @Override
-        protected AccessControlPrincipalDataImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new AccessControlPrincipalDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, AccessControlPrincipalDataImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_ACE_PRINCIPAL_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<PolicyIdListImpl> POLICY_IDS_PARSER = new XMLWalker<PolicyIdListImpl>() {
-        @Override
-        protected PolicyIdListImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new PolicyIdListImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, PolicyIdListImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_POLICY_ID)) {
-                    target.setPolicyIds(addToList(target.getPolicyIds(), readText(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<RenditionDataImpl> RENDITION_PARSER = new XMLWalker<RenditionDataImpl>() {
-        @Override
-        protected RenditionDataImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new RenditionDataImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, RenditionDataImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_RENDITION_STREAM_ID)) {
-                    target.setStreamId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_MIMETYPE)) {
-                    target.setMimeType(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_LENGTH)) {
-                    target.setBigLength(readInteger(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_KIND)) {
-                    target.setKind(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_TITLE)) {
-                    target.setTitle(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_HEIGHT)) {
-                    target.setBigHeight(readInteger(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_WIDTH)) {
-                    target.setBigWidth(readInteger(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_RENDITION_DOCUMENT_ID)) {
-                    target.setRenditionDocumentId(readText(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    // ------------------------
-    // --- property parsers ---
-    // ------------------------
-
-    private static final PropertyXMLWalker<PropertyStringImpl> PROPERTY_STRING_PARSER = new PropertyStringXMLWalker<PropertyStringImpl>() {
-        @Override
-        protected PropertyStringImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyStringImpl();
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyIdImpl> PROPERTY_ID_PARSER = new PropertyStringXMLWalker<PropertyIdImpl>() {
-        @Override
-        protected PropertyIdImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyIdImpl();
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyHtmlImpl> PROPERTY_HTML_PARSER = new PropertyStringXMLWalker<PropertyHtmlImpl>() {
-        @Override
-        protected PropertyHtmlImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyHtmlImpl();
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyUriImpl> PROPERTY_URI_PARSER = new PropertyStringXMLWalker<PropertyUriImpl>() {
-        @Override
-        protected PropertyUriImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyUriImpl();
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyBooleanImpl> PROPERTY_BOOLEAN_PARSER = new PropertyXMLWalker<PropertyBooleanImpl>() {
-        @Override
-        protected PropertyBooleanImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyBooleanImpl();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, PropertyBooleanImpl target) throws XMLStreamException {
-            target.setValues(addToList(target.getValues(), readBoolean(parser)));
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyIntegerImpl> PROPERTY_INTEGER_PARSER = new PropertyXMLWalker<PropertyIntegerImpl>() {
-        @Override
-        protected PropertyIntegerImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyIntegerImpl();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, PropertyIntegerImpl target) throws XMLStreamException {
-            target.setValues(addToList(target.getValues(), readInteger(parser)));
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyDecimalImpl> PROPERTY_DECIMAL_PARSER = new PropertyXMLWalker<PropertyDecimalImpl>() {
-        @Override
-        protected PropertyDecimalImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyDecimalImpl();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, PropertyDecimalImpl target) throws XMLStreamException {
-            target.setValues(addToList(target.getValues(), readDecimal(parser)));
-        }
-    };
-
-    private static final PropertyXMLWalker<PropertyDateTimeImpl> PROPERTY_DATETIME_PARSER = new PropertyXMLWalker<PropertyDateTimeImpl>() {
-        @Override
-        protected PropertyDateTimeImpl createTarget(XMLStreamReader parser, QName name) {
-            return new PropertyDateTimeImpl();
-        }
-
-        @Override
-        protected void addValue(XMLStreamReader parser, PropertyDateTimeImpl target) throws XMLStreamException {
-            target.setValues(addToList(target.getValues(), readDateTime(parser)));
-        }
-    };
-
-    private abstract static class PropertyXMLWalker<T extends AbstractPropertyData<?>> extends XMLWalker<T> {
-
-        protected abstract T createTarget(XMLStreamReader parser, QName name);
-
-        @Override
-        protected T prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            T result = createTarget(parser, name);
-
-            if (parser.getAttributeCount() > 0) {
-                for (int i = 0; i < parser.getAttributeCount(); i++) {
-                    String attr = parser.getAttributeLocalName(i);
-                    if (ATTR_PROPERTY_ID.equals(attr)) {
-                        result.setId(parser.getAttributeValue(i));
-                    } else if (ATTR_PROPERTY_LOCALNAME.equals(attr)) {
-                        result.setLocalName(parser.getAttributeValue(i));
-                    } else if (ATTR_PROPERTY_DISPLAYNAME.equals(attr)) {
-                        result.setDisplayName(parser.getAttributeValue(i));
-                    } else if (ATTR_PROPERTY_QUERYNAME.equals(attr)) {
-                        result.setQueryName(parser.getAttributeValue(i));
-                    }
-                }
-            }
-
-            return result;
-        }
-
-        protected abstract void addValue(XMLStreamReader parser, T target) throws XMLStreamException;
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, T target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_PROPERTY_VALUE)) {
-                    try {
-                        addValue(parser, target);
-                    } catch (CmisInvalidArgumentException e) {
-                        // a few repositories send invalid values here
-                        // for example, in some cases SharePoint sends an empty
-                        // "value" tag instead of omitting the "value" tag to
-                        // indicate a "not set" value
-                        // -> being tolerant is better than breaking an
-                        // application because of this
-                        if (LOG.isWarnEnabled()) {
-                            LOG.warn("Found invalid property value for property {}!", target.getId(), e);
-                        }
-                    }
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-    }
-
-    private abstract static class PropertyStringXMLWalker<T extends AbstractPropertyData<String>> extends
-            PropertyXMLWalker<T> {
-        @Override
-        protected void addValue(XMLStreamReader parser, T target) throws XMLStreamException {
-            target.setValues(addToList(target.getValues(), readText(parser)));
-        }
-    }
-
-    // --------------------
-    // --- query parser ---
-    // --------------------
-
-    private static final XMLWalker<QueryTypeImpl> QUERY_PARSER = new XMLWalker<QueryTypeImpl>() {
-        @Override
-        protected QueryTypeImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new QueryTypeImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, QueryTypeImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_QUERY_STATEMENT)) {
-                    target.setStatement(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_SEARCHALLVERSIONS)) {
-                    target.setSearchAllVersions(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_INCLUDEALLOWABLEACTIONS)) {
-                    target.setIncludeAllowableActions(readBoolean(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_INCLUDERELATIONSHIPS)) {
-                    target.setIncludeRelationships(readEnum(parser, IncludeRelationships.class));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_RENDITIONFILTER)) {
-                    target.setRenditionFilter(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_MAXITEMS)) {
-                    target.setMaxItems(readInteger(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_QUERY_SKIPCOUNT)) {
-                    target.setSkipCount(readInteger(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    // --------------------------
-    // --- bulk update parser ---
-    // --------------------------
-
-    private static final XMLWalker<BulkUpdateImpl> BULK_UPDATE_PARSER = new XMLWalker<BulkUpdateImpl>() {
-        @Override
-        protected BulkUpdateImpl prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException {
-            return new BulkUpdateImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, BulkUpdateImpl target) throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_BULK_UPDATE_ID_AND_TOKEN)) {
-                    target.setObjectIdAndChangeToken(addToList(target.getObjectIdAndChangeToken(),
-                            ID_AND_TOKEN_PARSER.walk(parser)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_BULK_UPDATE_PROPERTIES)) {
-                    target.setProperties(PROPERTIES_PARSER.walk(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_BULK_UPDATE_ADD_SECONDARY_TYPES)) {
-                    target.setAddSecondaryTypeIds(addToList(target.getAddSecondaryTypeIds(), readText(parser)));
-                    return true;
-                }
-
-                if (isTag(name, TAG_BULK_UPDATE_REMOVE_SECONDARY_TYPES)) {
-                    target.setRemoveSecondaryTypeIds(addToList(target.getRemoveSecondaryTypeIds(), readText(parser)));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-
-    private static final XMLWalker<BulkUpdateObjectIdAndChangeTokenImpl> ID_AND_TOKEN_PARSER = new XMLWalker<BulkUpdateObjectIdAndChangeTokenImpl>() {
-        @Override
-        protected BulkUpdateObjectIdAndChangeTokenImpl prepareTarget(XMLStreamReader parser, QName name)
-                throws XMLStreamException {
-            return new BulkUpdateObjectIdAndChangeTokenImpl();
-        }
-
-        @Override
-        protected boolean read(XMLStreamReader parser, QName name, BulkUpdateObjectIdAndChangeTokenImpl target)
-                throws XMLStreamException {
-            if (isCmisNamespace(name)) {
-                if (isTag(name, TAG_IDANDTOKEN_ID)) {
-                    target.setId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_IDANDTOKEN_NEWID)) {
-                    target.setNewId(readText(parser));
-                    return true;
-                }
-
-                if (isTag(name, TAG_IDANDTOKEN_CHANGETOKEN)) {
-                    target.setChangeToken(readText(parser));
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    };
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java
deleted file mode 100644
index c75ea70..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLUtils.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import com.ctc.wstx.api.InvalidCharHandler;
-import com.ctc.wstx.api.WstxOutputProperties;
-import com.ctc.wstx.stax.WstxInputFactory;
-import com.ctc.wstx.stax.WstxOutputFactory;
-
-public final class XMLUtils {
-
-    private static final Logger LOG = LoggerFactory.getLogger(XMLUtils.class);
-
-    private static final XMLInputFactory XML_INPUT_FACTORY;
-    static {
-        XMLInputFactory factory;
-
-        try {
-            // Woodstox is the only supported and tested StAX implementation
-            WstxInputFactory wstxFactory = (WstxInputFactory) ClassLoaderUtil.loadClass(
-                    "com.ctc.wstx.stax.WstxInputFactory").newInstance();
-            wstxFactory.configureForSpeed();
-
-            factory = wstxFactory;
-        } catch (Exception e) {
-            // other StAX implementations may work, too
-            factory = XMLInputFactory.newInstance();
-
-            try {
-                // for the SJSXP parser
-                factory.setProperty("reuse-instance", Boolean.FALSE);
-            } catch (IllegalArgumentException ex) {
-                // ignore
-            }
-
-            LOG.warn("Unsupported StAX parser: " + factory.getClass().getName() + " (Exception: " + e.toString() + ")",
-                    e);
-        }
-
-        factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
-        factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
-        factory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE);
-
-        XML_INPUT_FACTORY = factory;
-    }
-
-    private static final XMLOutputFactory XML_OUTPUT_FACTORY;
-    static {
-        XMLOutputFactory factory;
-
-        try {
-            // Woodstox is the only supported and tested StAX implementation
-            WstxOutputFactory wstxFactory = (WstxOutputFactory) ClassLoaderUtil.loadClass(
-                    "com.ctc.wstx.stax.WstxOutputFactory").newInstance();
-            wstxFactory.configureForSpeed();
-            wstxFactory.setProperty(WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER,
-                    new InvalidCharHandler.ReplacingHandler(' '));
-
-            factory = wstxFactory;
-        } catch (Exception e) {
-            // other StAX implementations may work, too
-            factory = XMLOutputFactory.newInstance();
-
-            try {
-                // for the SJSXP parser
-                factory.setProperty("reuse-instance", Boolean.FALSE);
-            } catch (IllegalArgumentException ex) {
-                // ignore
-            }
-
-            LOG.warn("Unsupported StAX parser: " + factory.getClass().getName() + " (Exception: " + e.toString() + ")",
-                    e);
-        }
-
-        factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.FALSE);
-
-        XML_OUTPUT_FACTORY = factory;
-    }
-
-    private XMLUtils() {
-    }
-
-    // --------------
-    // --- writer ---
-    // --------------
-
-    /**
-     * Creates a new XML writer.
-     */
-    public static XMLStreamWriter createWriter(OutputStream out) throws XMLStreamException {
-        assert out != null;
-
-        return XML_OUTPUT_FACTORY.createXMLStreamWriter(out, IOUtils.UTF8);
-    }
-
-    /**
-     * Starts a XML document.
-     */
-    public static void startXmlDocument(XMLStreamWriter writer) throws XMLStreamException {
-        assert writer != null;
-
-        writer.setPrefix(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-        writer.setPrefix(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-        writer.setPrefix(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-        writer.setPrefix(XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY);
-
-        writer.writeStartDocument();
-    }
-
-    /**
-     * Ends a XML document.
-     */
-    public static void endXmlDocument(XMLStreamWriter writer) throws XMLStreamException {
-        assert writer != null;
-
-        writer.writeEndDocument();
-        writer.close();
-    }
-
-    /**
-     * Writes a String tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag, String value)
-            throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        if (namespace == null) {
-            writer.writeStartElement(tag);
-        } else {
-            writer.writeStartElement(prefix, tag, namespace);
-        }
-        writer.writeCharacters(value);
-        writer.writeEndElement();
-    }
-
-    /**
-     * Writes an Integer tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag, BigInteger value)
-            throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        write(writer, prefix, namespace, tag, value.toString());
-    }
-
-    /**
-     * Writes a Decimal tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag, BigDecimal value)
-            throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        write(writer, prefix, namespace, tag, value.toPlainString());
-    }
-
-    /**
-     * Writes a DateTime tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag,
-            GregorianCalendar value) throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        write(writer, prefix, namespace, tag, DateTimeHelper.formatXmlDateTime(value));
-    }
-
-    /**
-     * Writes a Boolean tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag, Boolean value)
-            throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        write(writer, prefix, namespace, tag, value ? "true" : "false");
-    }
-
-    /**
-     * Writes an Enum tag.
-     */
-    public static void write(XMLStreamWriter writer, String prefix, String namespace, String tag, Enum<?> value)
-            throws XMLStreamException {
-        assert writer != null;
-
-        if (value == null) {
-            return;
-        }
-
-        Object enumValue;
-        try {
-            enumValue = value.getClass().getMethod("value", new Class[0]).invoke(value, new Object[0]);
-        } catch (Exception e) {
-            throw new XMLStreamException("Cannot get enum value", e);
-        }
-
-        write(writer, prefix, namespace, tag, enumValue.toString());
-    }
-
-    // ---------------
-    // ---- parser ---
-    // ---------------
-
-    /**
-     * Creates a new XML parser with OpenCMIS default settings.
-     */
-    public static XMLStreamReader createParser(InputStream stream) throws XMLStreamException {
-        return XML_INPUT_FACTORY.createXMLStreamReader(stream);
-    }
-
-    /**
-     * Moves the parser to the next element.
-     */
-    public static boolean next(XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        if (parser.hasNext()) {
-            parser.next();
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Skips a tag or subtree.
-     */
-    public static void skip(XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        int level = 1;
-        while (next(parser)) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                level++;
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                level--;
-                if (level == 0) {
-                    break;
-                }
-            }
-        }
-
-        next(parser);
-    }
-
-    /**
-     * Moves the parser to the next start element.
-     * 
-     * @return <code>true</code> if another start element has been found,
-     *         <code>false</code> otherwise
-     */
-    public static boolean findNextStartElemenet(XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        while (true) {
-            int event = parser.getEventType();
-
-            if (event == XMLStreamReader.START_ELEMENT) {
-                return true;
-            }
-
-            if (parser.hasNext()) {
-                parser.next();
-            } else {
-                return false;
-            }
-        }
-    }
-
-    /**
-     * Parses a tag that contains text.
-     */
-    public static String readText(XMLStreamReader parser, int maxLength) throws XMLStreamException {
-        assert parser != null;
-        assert maxLength >= 0;
-
-        StringBuilder sb = new StringBuilder();
-
-        next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else if (event == XMLStreamReader.CHARACTERS || event == XMLStreamReader.CDATA) {
-                int len = parser.getTextLength();
-                if (len > 0) {
-                    if (sb.length() + len > maxLength) {
-                        throw new CmisInvalidArgumentException("String limit exceeded!");
-                    }
-
-                    char[] chars = parser.getTextCharacters();
-                    int offset = parser.getTextStart();
-
-                    sb.append(chars, offset, len);
-                }
-            } else if (event == XMLStreamReader.START_ELEMENT) {
-                throw new XMLStreamException("Unexpected tag: " + parser.getName());
-            }
-
-            if (!next(parser)) {
-                break;
-            }
-        }
-
-        next(parser);
-
-        return sb.toString();
-    }
-
-    // ------------------
-    // ---- DOM stuff ---
-    // ------------------
-
-    /**
-     * Creates a new {@link DocumentBuilder} object.
-     */
-    private static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        factory.setNamespaceAware(true);
-        factory.setValidating(false);
-        factory.setIgnoringComments(true);
-        factory.setExpandEntityReferences(false);
-        factory.setCoalescing(false);
-
-        factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
-        factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
-        factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
-
-        return factory.newDocumentBuilder();
-    }
-
-    /**
-     * Creates a new DOM document.
-     */
-    public static Document newDomDocument() throws ParserConfigurationException {
-        return newDocumentBuilder().newDocument();
-    }
-
-    /**
-     * Parses a stream and returns the DOM document.
-     */
-    public static Document parseDomDocument(InputStream stream) throws ParserConfigurationException, SAXException,
-            IOException {
-        return newDocumentBuilder().parse(stream);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
deleted file mode 100644
index c1d109f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.next;
-import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.skip;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-
-public abstract class XMLWalker<T> {
-
-    public T walk(XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        final T result = prepareTarget(parser, parser.getName());
-
-        next(parser);
-
-        // walk through all tags
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-                if (!read(parser, name, result)) {
-                    if (result instanceof ExtensionsData) {
-                        handleExtension(parser, (ExtensionsData) result);
-                    } else {
-                        skip(parser);
-                    }
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        next(parser);
-
-        return result;
-    }
-
-    protected boolean isCmisNamespace(QName name) {
-        assert name != null;
-
-        return XMLConstants.NAMESPACE_CMIS.hashCode() == name.getNamespaceURI().hashCode()
-                && XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI());
-    }
-
-    protected boolean isAtomNamespace(QName name) {
-        assert name != null;
-
-        return XMLConstants.NAMESPACE_ATOM.hashCode() == name.getNamespaceURI().hashCode()
-                && XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI());
-    }
-
-    protected boolean isTag(QName name, String tag) {
-        assert name != null;
-        assert tag != null;
-
-        return tag.hashCode() == name.getLocalPart().hashCode() && tag.equals(name.getLocalPart());
-    }
-
-    protected void handleExtension(XMLStreamReader parser, ExtensionsData extData) throws XMLStreamException {
-        assert parser != null;
-
-        List<CmisExtensionElement> extensions = extData.getExtensions();
-        if (extensions == null) {
-            extensions = new ArrayList<CmisExtensionElement>();
-            extData.setExtensions(extensions);
-        }
-
-        if (extensions.size() + 1 > XMLConstraints.MAX_EXTENSIONS_WIDTH) {
-            throw new CmisInvalidArgumentException("Too many extensions!");
-        }
-
-        extensions.add(handleExtensionLevel(parser, 0));
-    }
-
-    private CmisExtensionElement handleExtensionLevel(final XMLStreamReader parser, final int level)
-            throws XMLStreamException {
-        assert parser != null;
-
-        final QName name = parser.getName();
-        Map<String, String> attributes = null;
-        StringBuilder sb = new StringBuilder();
-        List<CmisExtensionElement> children = null;
-
-        if (parser.getAttributeCount() > 0) {
-            attributes = new HashMap<String, String>();
-
-            for (int i = 0; i < parser.getAttributeCount(); i++) {
-                attributes.put(parser.getAttributeLocalName(i), parser.getAttributeValue(i));
-            }
-        }
-
-        next(parser);
-
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else if (event == XMLStreamReader.CHARACTERS) {
-                String s = parser.getText();
-                if (s != null) {
-                    if (sb.length() + s.length() > XMLConstraints.MAX_STRING_LENGTH) {
-                        throw new CmisInvalidArgumentException("String limit exceeded!");
-                    }
-                    sb.append(s);
-                }
-            } else if (event == XMLStreamReader.START_ELEMENT) {
-                if (level + 1 > XMLConstraints.MAX_EXTENSIONS_DEPTH) {
-                    throw new CmisInvalidArgumentException("Extensions tree too deep!");
-                }
-
-                if (children == null) {
-                    children = new ArrayList<CmisExtensionElement>();
-                }
-
-                if (children.size() + 1 > XMLConstraints.MAX_EXTENSIONS_WIDTH) {
-                    throw new CmisInvalidArgumentException("Extensions tree too wide!");
-                }
-
-                children.add(handleExtensionLevel(parser, level + 1));
-
-                continue;
-            }
-
-            if (!next(parser)) {
-                break;
-            }
-        }
-
-        next(parser);
-
-        if (children != null) {
-            return new CmisExtensionElementImpl(name.getNamespaceURI(), name.getLocalPart(), attributes, children);
-        } else {
-            return new CmisExtensionElementImpl(name.getNamespaceURI(), name.getLocalPart(), attributes, sb.toString());
-        }
-    }
-
-    protected <S> List<S> addToList(List<S> list, S value) {
-        if (list == null || list.isEmpty()) {
-            list = new ArrayList<S>();
-        }
-        list.add(value);
-
-        return list;
-    }
-
-    protected String readText(final XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        return XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH);
-    }
-
-    protected Boolean readBoolean(final XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        String value = readText(parser);
-
-        if ("true".equals(value) || "1".equals(value)) {
-            return Boolean.TRUE;
-        }
-
-        if ("false".equals(value) || "0".equals(value)) {
-            return Boolean.FALSE;
-        }
-
-        throw new CmisInvalidArgumentException("Invalid boolean value!");
-    }
-
-    protected BigInteger readInteger(final XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        String value = readText(parser);
-
-        try {
-            return new BigInteger(value);
-        } catch (NumberFormatException e) {
-            throw new CmisInvalidArgumentException("Invalid integer value!", e);
-        }
-    }
-
-    protected BigDecimal readDecimal(final XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        String value = readText(parser);
-
-        try {
-            return new BigDecimal(value);
-        } catch (NumberFormatException e) {
-            throw new CmisInvalidArgumentException("Invalid decimal value!", e);
-        }
-    }
-
-    protected GregorianCalendar readDateTime(final XMLStreamReader parser) throws XMLStreamException {
-        assert parser != null;
-
-        String value = readText(parser);
-
-        GregorianCalendar result = DateTimeHelper.parseXmlDateTime(value);
-        if (result == null) {
-            throw new CmisInvalidArgumentException("Invalid datetime value!");
-        }
-
-        return result;
-    }
-
-    public <E extends Enum<E>> E readEnum(final XMLStreamReader parser, final Class<E> clazz) throws XMLStreamException {
-        assert parser != null;
-        assert clazz != null;
-
-        return CmisEnumHelper.fromValue(readText(parser), clazz);
-    }
-
-    protected abstract T prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException;
-
-    protected abstract boolean read(XMLStreamReader parser, QName name, T target) throws XMLStreamException;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractExtensionData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractExtensionData.java
deleted file mode 100644
index 006b0b4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractExtensionData.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * Abstract extension data implementation.
- */
-public abstract class AbstractExtensionData implements ExtensionsData, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<CmisExtensionElement> extensions;
-
-    public List<CmisExtensionElement> getExtensions() {
-        return extensions;
-    }
-
-    public void setExtensions(List<CmisExtensionElement> extensions) {
-        this.extensions = extensions;
-    }
-
-    @Override
-    public String toString() {
-        return "[extensions=" + extensions + "]";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyData.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyData.java
deleted file mode 100644
index 2f6be9b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyData.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDataWithDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Abstract property data implementation.
- */
-public abstract class AbstractPropertyData<T> extends AbstractExtensionData implements MutablePropertyData<T>,
-        PropertyDataWithDefinition<T> {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String displayName;
-    private String localName;
-    private String queryName;
-    private PropertyDefinition<T> propDef;
-
-    private List<T> values = Collections.emptyList();
-
-    public PropertyDefinition<T> getPropertyDefinition() {
-        return propDef;
-    }
-
-    public void setPropertyDefinition(PropertyDefinition<T> propDef) {
-        this.propDef = propDef;
-        if (propDef != null) {
-            this.id = propDef.getId();
-            this.displayName = propDef.getDisplayName();
-            this.localName = propDef.getLocalName();
-            this.queryName = propDef.getQueryName();
-        } else {
-            this.id = null;
-            this.displayName = null;
-            this.localName = null;
-            this.queryName = null;
-        }
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    public String getLocalName() {
-        return localName;
-    }
-
-    public void setLocalName(String localName) {
-        this.localName = localName;
-    }
-
-    public String getQueryName() {
-        return queryName;
-    }
-
-    public void setQueryName(String queryName) {
-        this.queryName = queryName;
-    }
-
-    public List<T> getValues() {
-        return values;
-    }
-
-    public void setValues(List<T> values) {
-        if (values == null) {
-            this.values = Collections.emptyList();
-        } else {
-            this.values = values;
-        }
-    }
-
-    public void setValue(T value) {
-        if (value == null) {
-            values = Collections.emptyList();
-        } else {
-            values = new ArrayList<T>(1);
-            values.add(value);
-        }
-    }
-
-    public T getFirstValue() {
-        if (values != null && !values.isEmpty()) {
-            return values.get(0);
-        }
-
-        return null;
-    }
-
-    @Override
-    public String toString() {
-        return "Property [id=" + id + ", display Name=" + displayName + ", local name=" + localName + ", query name="
-                + queryName + ", values=" + values + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyDefinition.java
deleted file mode 100644
index 76b5e86..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractPropertyDefinition.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-
-/**
- * Abstract property definition data implementation.
- */
-public abstract class AbstractPropertyDefinition<T> extends AbstractExtensionData implements
-        MutablePropertyDefinition<T> {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String localName;
-    private String localNamespace;
-    private String queryName;
-    private String displayName;
-    private String description;
-    private PropertyType propertyType;
-    private Cardinality cardinality;
-    private List<Choice<T>> choiceList;
-    private List<T> defaultValue;
-    private Updatability updatability;
-    private Boolean isInherited;
-    private Boolean isQueryable;
-    private Boolean isOrderable;
-    private Boolean isRequired;
-    private Boolean isOpenChoice;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getLocalName() {
-        return localName;
-    }
-
-    public void setLocalName(String localName) {
-        this.localName = localName;
-    }
-
-    public String getLocalNamespace() {
-        return localNamespace;
-    }
-
-    public void setLocalNamespace(String localNamespace) {
-        this.localNamespace = localNamespace;
-    }
-
-    public String getQueryName() {
-        return queryName;
-    }
-
-    public void setQueryName(String queryName) {
-        this.queryName = queryName;
-    }
-
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public PropertyType getPropertyType() {
-        return propertyType;
-    }
-
-    public void setPropertyType(PropertyType propertyType) {
-        this.propertyType = propertyType;
-    }
-
-    public Cardinality getCardinality() {
-        return cardinality;
-    }
-
-    public void setCardinality(Cardinality cardinality) {
-        this.cardinality = cardinality;
-    }
-
-    public List<Choice<T>> getChoices() {
-        if (choiceList == null) {
-            choiceList = new ArrayList<Choice<T>>();
-        }
-
-        return choiceList;
-    }
-
-    public void setChoices(List<Choice<T>> choiceList) {
-        this.choiceList = choiceList;
-    }
-
-    public List<T> getDefaultValue() {
-        if (defaultValue == null) {
-            defaultValue = new ArrayList<T>();
-        }
-
-        return defaultValue;
-    }
-
-    public void setDefaultValue(List<T> defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    public Updatability getUpdatability() {
-        return updatability;
-    }
-
-    public void setUpdatability(Updatability updatability) {
-        this.updatability = updatability;
-    }
-
-    public Boolean isInherited() {
-        return isInherited;
-    }
-
-    public void setIsInherited(Boolean isInherited) {
-        this.isInherited = isInherited;
-    }
-
-    public Boolean isQueryable() {
-        return isQueryable;
-    }
-
-    public void setIsQueryable(Boolean isQueryable) {
-        this.isQueryable = isQueryable;
-    }
-
-    public Boolean isOrderable() {
-        return isOrderable;
-    }
-
-    public void setIsOrderable(Boolean isOrderable) {
-        this.isOrderable = isOrderable;
-    }
-
-    public Boolean isRequired() {
-        return isRequired;
-    }
-
-    public void setIsRequired(Boolean isRequired) {
-        this.isRequired = isRequired;
-    }
-
-    public Boolean isOpenChoice() {
-        return isOpenChoice;
-    }
-
-    public void setIsOpenChoice(Boolean isOpenChoice) {
-        this.isOpenChoice = isOpenChoice;
-    }
-
-    @Override
-    public String toString() {
-        return "Property Definition [id=" + id + ", display name=" + displayName + ", description=" + description
-                + ", local name=" + localName + ", local namespace=" + localNamespace + ", query name=" + queryName
-                + ", property type=" + propertyType + ", cardinality=" + cardinality + ", choice list=" + choiceList
-                + ", default value=" + defaultValue + ", is inherited=" + isInherited + ", is open choice="
-                + isOpenChoice + ", is queryable=" + isQueryable + ", is required=" + isRequired + ", updatability="
-                + updatability + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractTypeDefinition.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractTypeDefinition.java
deleted file mode 100644
index 4cf7149..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AbstractTypeDefinition.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * Abstract type definition data implementation.
- */
-public abstract class AbstractTypeDefinition extends AbstractExtensionData implements MutableTypeDefinition {
-
-    private static final long serialVersionUID = 2L;
-
-    private String id;
-    private String localName;
-    private String localNamespace;
-    private String queryName;
-    private String displayName;
-    private String description;
-    private BaseTypeId baseId;
-    private String parentId;
-    private Boolean isCreatable;
-    private Boolean isFileable;
-    private Boolean isQueryable;
-    private Boolean isIncludedInSupertypeQuery;
-    private Boolean isFulltextIndexed;
-    private Boolean isControllableACL;
-    private Boolean isControllablePolicy;
-    private LinkedHashMap<String, PropertyDefinition<?>> propertyDefinitions = new LinkedHashMap<String, PropertyDefinition<?>>();
-    private TypeMutability typeMutability;
-
-    public void initialize(TypeDefinition typeDefinition) {
-        assert typeDefinition != null;
-
-        setId(typeDefinition.getId());
-        setLocalName(typeDefinition.getLocalName());
-        setLocalNamespace(typeDefinition.getLocalNamespace());
-        setQueryName(typeDefinition.getQueryName());
-        setDisplayName(typeDefinition.getDisplayName());
-        setDescription(typeDefinition.getDescription());
-        setBaseTypeId(typeDefinition.getBaseTypeId());
-        setParentTypeId(typeDefinition.getParentTypeId());
-        setIsCreatable(typeDefinition.isCreatable());
-        setIsFileable(typeDefinition.isFileable());
-        setIsQueryable(typeDefinition.isQueryable());
-        setIsIncludedInSupertypeQuery(typeDefinition.isIncludedInSupertypeQuery());
-        setIsFulltextIndexed(typeDefinition.isFulltextIndexed());
-        setIsControllableAcl(typeDefinition.isControllableAcl());
-        setIsControllablePolicy(typeDefinition.isControllablePolicy());
-        setPropertyDefinitions(typeDefinition.getPropertyDefinitions());
-        setTypeMutability(typeDefinition.getTypeMutability());
-        setExtensions(typeDefinition.getExtensions());
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getLocalName() {
-        return localName;
-    }
-
-    public void setLocalName(String localName) {
-        this.localName = localName;
-    }
-
-    public String getLocalNamespace() {
-        return localNamespace;
-    }
-
-    public void setLocalNamespace(String localNamespace) {
-        this.localNamespace = localNamespace;
-    }
-
-    public String getQueryName() {
-        return queryName;
-    }
-
-    public void setQueryName(String queryName) {
-        this.queryName = queryName;
-    }
-
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public BaseTypeId getBaseTypeId() {
-        return baseId;
-    }
-
-    public void setBaseTypeId(BaseTypeId baseId) {
-        this.baseId = baseId;
-    }
-
-    public String getParentTypeId() {
-        return parentId;
-    }
-
-    public void setParentTypeId(String parentId) {
-        if (parentId == null || parentId.length() == 0) {
-            this.parentId = null;
-        } else {
-            this.parentId = parentId;
-        }
-    }
-
-    public Boolean isCreatable() {
-        return isCreatable;
-    }
-
-    public void setIsCreatable(Boolean isCreatable) {
-        this.isCreatable = isCreatable;
-    }
-
-    public Boolean isFileable() {
-        return isFileable;
-    }
-
-    public void setIsFileable(Boolean isFileable) {
-        this.isFileable = isFileable;
-    }
-
-    public Boolean isQueryable() {
-        return isQueryable;
-    }
-
-    public void setIsQueryable(Boolean isQueryable) {
-        this.isQueryable = isQueryable;
-    }
-
-    public Boolean isIncludedInSupertypeQuery() {
-        return isIncludedInSupertypeQuery;
-    }
-
-    public void setIsIncludedInSupertypeQuery(Boolean isIncludedInSupertypeQuery) {
-        this.isIncludedInSupertypeQuery = isIncludedInSupertypeQuery;
-    }
-
-    public Boolean isFulltextIndexed() {
-        return isFulltextIndexed;
-    }
-
-    public void setIsFulltextIndexed(Boolean isFulltextIndexed) {
-        this.isFulltextIndexed = isFulltextIndexed;
-    }
-
-    public Boolean isControllableAcl() {
-        return isControllableACL;
-    }
-
-    public void setIsControllableAcl(Boolean isControllableACL) {
-        this.isControllableACL = isControllableACL;
-    }
-
-    public Boolean isControllablePolicy() {
-        return isControllablePolicy;
-    }
-
-    public void setIsControllablePolicy(Boolean isControllablePolicy) {
-        this.isControllablePolicy = isControllablePolicy;
-    }
-
-    public Map<String, PropertyDefinition<?>> getPropertyDefinitions() {
-        return propertyDefinitions;
-    }
-
-    public void setPropertyDefinitions(Map<String, PropertyDefinition<?>> newPropertyDefinitions) {
-        if (newPropertyDefinitions == null) {
-            propertyDefinitions = new LinkedHashMap<String, PropertyDefinition<?>>();
-        } else if (newPropertyDefinitions instanceof LinkedHashMap) {
-            propertyDefinitions = (LinkedHashMap<String, PropertyDefinition<?>>) newPropertyDefinitions;
-        } else {
-            propertyDefinitions = new LinkedHashMap<String, PropertyDefinition<?>>(newPropertyDefinitions);
-        }
-    }
-
-    public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-        if (propertyDefinition == null) {
-            return;
-        }
-
-        propertyDefinitions.put(propertyDefinition.getId(), propertyDefinition);
-    }
-
-    public void removePropertyDefinition(String propertyId) {
-        if (propertyId == null) {
-            return;
-        }
-
-        propertyDefinitions.remove(propertyId);
-    }
-
-    public void removeAllPropertyDefinitions() {
-        propertyDefinitions = new LinkedHashMap<String, PropertyDefinition<?>>();
-    }
-
-    public TypeMutability getTypeMutability() {
-        return typeMutability;
-    }
-
-    public void setTypeMutability(TypeMutability typeMutability) {
-        this.typeMutability = typeMutability;
-    }
-
-    @Override
-    public String toString() {
-        return "Type Definition [base id=" + baseId + ", id=" + id + ", display Name=" + displayName + ", description="
-                + description + ", local name=" + localName + ", local namespace=" + localNamespace + ", query name="
-                + queryName + ", parent id=" + parentId + ", is controllable ACL=" + isControllableACL
-                + ", is controllable policy=" + isControllablePolicy + ", is creatable=" + isCreatable
-                + ", is fileable=" + isFileable + ", is fulltext indexed=" + isFulltextIndexed
-                + ", is included in supertype query=" + isIncludedInSupertypeQuery + ", is queryable=" + isQueryable
-                + ", property definitions=" + propertyDefinitions + ", typeMutability=" + typeMutability + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlEntryImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlEntryImpl.java
deleted file mode 100644
index 91279d1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlEntryImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutableAce;
-import org.apache.chemistry.opencmis.commons.data.Principal;
-
-/**
- * Access Control Entry data implementation.
- */
-public class AccessControlEntryImpl extends AbstractExtensionData implements MutableAce, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<String> permissions;
-    private Principal principal;
-    private boolean isDirect = true;
-
-    /**
-     * Constructor.
-     */
-    public AccessControlEntryImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public AccessControlEntryImpl(Principal principal, List<String> permissions) {
-        this.principal = principal;
-        this.permissions = permissions;
-    }
-
-    public Principal getPrincipal() {
-        return principal;
-    }
-
-    public String getPrincipalId() {
-        return principal == null ? null : principal.getId();
-    }
-
-    public void setPrincipal(Principal principal) {
-        this.principal = principal;
-    }
-
-    public List<String> getPermissions() {
-        if (permissions == null) {
-            permissions = new ArrayList<String>();
-        }
-
-        return permissions;
-    }
-
-    public void setPermissions(List<String> permissions) {
-        this.permissions = permissions;
-    }
-
-    public boolean isDirect() {
-        return isDirect;
-    }
-
-    public void setDirect(boolean direct) {
-        this.isDirect = direct;
-    }
-
-    @Override
-    public String toString() {
-        return "Access Control Entry [principal=" + principal + ", permissions=" + permissions + ", is direct="
-                + isDirect + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlListImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlListImpl.java
deleted file mode 100644
index 8265cc6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlListImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.MutableAcl;
-
-/**
- * Access control list data implementation.
- */
-public class AccessControlListImpl extends AbstractExtensionData implements MutableAcl, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<Ace> aces;
-    private Boolean isExact;
-
-    /**
-     * Constructor.
-     */
-    public AccessControlListImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public AccessControlListImpl(List<Ace> aces) {
-        this.aces = aces;
-    }
-
-    public List<Ace> getAces() {
-        if (aces == null) {
-            aces = new ArrayList<Ace>();
-        }
-
-        return aces;
-    }
-
-    public void setAces(List<Ace> aces) {
-        this.aces = aces;
-    }
-
-    public Boolean isExact() {
-        return isExact;
-    }
-
-    public void setExact(Boolean isExact) {
-        this.isExact = isExact;
-    }
-
-    @Override
-    public String toString() {
-        return "Access Control List [ACEs=" + aces + ", is exact=" + isExact + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlPrincipalDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlPrincipalDataImpl.java
deleted file mode 100644
index 7523129..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AccessControlPrincipalDataImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePrincipal;
-
-/**
- * AccessControlPrincipalData implementation.
- */
-public class AccessControlPrincipalDataImpl extends AbstractExtensionData implements MutablePrincipal {
-
-    private static final long serialVersionUID = 1L;
-
-    private String principalId;
-
-    /**
-     * Constructor.
-     */
-    public AccessControlPrincipalDataImpl() {
-    }
-
-    /**
-     * Constructor with principal ID.
-     * 
-     * @param principalId
-     *            the principal ID
-     */
-    public AccessControlPrincipalDataImpl(String principalId) {
-        this.principalId = principalId;
-    }
-
-    public String getId() {
-        return principalId;
-    }
-
-    public void setId(String principalId) {
-        this.principalId = principalId;
-    }
-
-    /**
-     * @deprecated use {@link #setId(String)}
-     */
-    @Deprecated
-    public void setPrincipalId(String principalId) {
-        setId(principalId);
-    }
-
-    @Override
-    public String toString() {
-        return "Access Control Principal [principalId=" + principalId + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AclCapabilitiesDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AclCapabilitiesDataImpl.java
deleted file mode 100644
index 251da34..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AclCapabilitiesDataImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-
-/**
- * AclCapabilities Implementation.
- */
-public class AclCapabilitiesDataImpl extends AbstractExtensionData implements AclCapabilities {
-
-    private static final long serialVersionUID = 1L;
-
-    private SupportedPermissions supportedPermissions;
-    private AclPropagation aclPropagation;
-    private Map<String, PermissionMapping> permissionMapping;
-    private List<PermissionDefinition> permissionDefinitionList;
-
-    public SupportedPermissions getSupportedPermissions() {
-        return supportedPermissions;
-    }
-
-    public void setSupportedPermissions(SupportedPermissions supportedPermissions) {
-        this.supportedPermissions = supportedPermissions;
-    }
-
-    public AclPropagation getAclPropagation() {
-        return aclPropagation;
-    }
-
-    public void setAclPropagation(AclPropagation aclPropagation) {
-        this.aclPropagation = aclPropagation;
-    }
-
-    public Map<String, PermissionMapping> getPermissionMapping() {
-        if (permissionMapping == null) {
-            permissionMapping = new HashMap<String, PermissionMapping>();
-        }
-
-        return permissionMapping;
-    }
-
-    public void setPermissionMappingData(Map<String, PermissionMapping> permissionMapping) {
-        this.permissionMapping = permissionMapping;
-    }
-
-    public List<PermissionDefinition> getPermissions() {
-        if (permissionDefinitionList == null) {
-            permissionDefinitionList = new ArrayList<PermissionDefinition>();
-        }
-
-        return permissionDefinitionList;
-    }
-
-    public void setPermissionDefinitionData(List<PermissionDefinition> permissionDefinitionList) {
-        this.permissionDefinitionList = permissionDefinitionList;
-    }
-
-    @Override
-    public String toString() {
-        return "ACL Capabilities [ACL propagation=" + aclPropagation + ", permission definition list="
-                + permissionDefinitionList + ", permission mappings=" + permissionMapping + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AllowableActionsImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AllowableActionsImpl.java
deleted file mode 100644
index 1864332..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/AllowableActionsImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-
-/**
- * Allowable Actions.
- */
-public class AllowableActionsImpl extends AbstractExtensionData implements AllowableActions {
-
-    private static final long serialVersionUID = 1L;
-
-    private Set<Action> allowableActions;
-
-    public Set<Action> getAllowableActions() {
-        if (allowableActions == null) {
-            allowableActions = EnumSet.noneOf(Action.class);
-        }
-
-        return allowableActions;
-    }
-
-    public void setAllowableActions(Set<Action> allowableActions) {
-        this.allowableActions = allowableActions;
-    }
-
-    @Override
-    public String toString() {
-        return "Allowable Actions [allowable actions=" + allowableActions + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BindingsObjectFactoryImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BindingsObjectFactoryImpl.java
deleted file mode 100644
index 36bbe0e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BindingsObjectFactoryImpl.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.InputStream;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.MutableAce;
-import org.apache.chemistry.opencmis.commons.data.MutableAcl;
-import org.apache.chemistry.opencmis.commons.data.MutableContentStream;
-import org.apache.chemistry.opencmis.commons.data.MutableProperties;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyData;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyId;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyString;
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyUri;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-
-/**
- * CMIS binding object factory implementation.
- */
-public class BindingsObjectFactoryImpl implements BindingsObjectFactory, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    public BindingsObjectFactoryImpl() {
-    }
-
-    public MutableAce createAccessControlEntry(String principal, List<String> permissions) {
-        return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principal), permissions);
-    }
-
-    public MutableAcl createAccessControlList(List<Ace> aces) {
-        return new AccessControlListImpl(aces);
-    }
-
-    public MutableContentStream createContentStream(String filename, BigInteger length, String mimetype,
-            InputStream stream) {
-        return new ContentStreamImpl(filename, length, mimetype, stream);
-    }
-
-    public MutableProperties createPropertiesData(List<PropertyData<?>> properties) {
-        return new PropertiesImpl(properties);
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> MutablePropertyData<T> createPropertyData(PropertyDefinition<T> pd, Object value) {
-        String id = pd.getId();
-        boolean single = pd.getCardinality() == Cardinality.SINGLE;
-        if (pd instanceof PropertyBooleanDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyBooleanData(id, (Boolean) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyBooleanData(id, (List<Boolean>) value);
-            }
-        } else if (pd instanceof PropertyDateTimeDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyDateTimeData(id, (GregorianCalendar) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyDateTimeData(id, (List<GregorianCalendar>) value);
-            }
-        } else if (pd instanceof PropertyDecimalDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyDecimalData(id, (BigDecimal) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyDecimalData(id, (List<BigDecimal>) value);
-            }
-        } else if (pd instanceof PropertyHtmlDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyHtmlData(id, (String) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyHtmlData(id, (List<String>) value);
-            }
-        } else if (pd instanceof PropertyIdDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyIdData(id, (String) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyIdData(id, (List<String>) value);
-            }
-        } else if (pd instanceof PropertyIntegerDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyIntegerData(id, (BigInteger) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyIntegerData(id, (List<BigInteger>) value);
-            }
-        } else if (pd instanceof PropertyStringDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyStringData(id, (String) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyStringData(id, (List<String>) value);
-            }
-        } else if (pd instanceof PropertyUriDefinition) {
-            if (single) {
-                return (MutablePropertyData<T>) createPropertyUriData(id, (String) value);
-            } else {
-                return (MutablePropertyData<T>) createPropertyUriData(id, (List<String>) value);
-            }
-        }
-        throw new CmisRuntimeException("Unknown property definition: " + pd);
-    }
-
-    public MutablePropertyBoolean createPropertyBooleanData(String id, List<Boolean> values) {
-        return new PropertyBooleanImpl(id, values);
-    }
-
-    public MutablePropertyBoolean createPropertyBooleanData(String id, Boolean value) {
-        return new PropertyBooleanImpl(id, value);
-    }
-
-    public MutablePropertyDateTime createPropertyDateTimeData(String id, List<GregorianCalendar> values) {
-        return new PropertyDateTimeImpl(id, values);
-    }
-
-    public MutablePropertyDateTime createPropertyDateTimeData(String id, GregorianCalendar value) {
-        return new PropertyDateTimeImpl(id, value);
-    }
-
-    public MutablePropertyDecimal createPropertyDecimalData(String id, List<BigDecimal> values) {
-        return new PropertyDecimalImpl(id, values);
-    }
-
-    public MutablePropertyDecimal createPropertyDecimalData(String id, BigDecimal value) {
-        return new PropertyDecimalImpl(id, value);
-    }
-
-    public MutablePropertyHtml createPropertyHtmlData(String id, List<String> values) {
-        return new PropertyHtmlImpl(id, values);
-    }
-
-    public MutablePropertyHtml createPropertyHtmlData(String id, String value) {
-        return new PropertyHtmlImpl(id, value);
-    }
-
-    public MutablePropertyId createPropertyIdData(String id, List<String> values) {
-        return new PropertyIdImpl(id, values);
-    }
-
-    public MutablePropertyId createPropertyIdData(String id, String value) {
-        return new PropertyIdImpl(id, value);
-    }
-
-    public MutablePropertyInteger createPropertyIntegerData(String id, List<BigInteger> values) {
-        return new PropertyIntegerImpl(id, values);
-    }
-
-    public MutablePropertyInteger createPropertyIntegerData(String id, BigInteger value) {
-        return new PropertyIntegerImpl(id, value);
-    }
-
-    public MutablePropertyString createPropertyStringData(String id, List<String> values) {
-        return new PropertyStringImpl(id, values);
-    }
-
-    public MutablePropertyString createPropertyStringData(String id, String value) {
-        return new PropertyStringImpl(id, value);
-    }
-
-    public MutablePropertyUri createPropertyUriData(String id, List<String> values) {
-        return new PropertyUriImpl(id, values);
-    }
-
-    public MutablePropertyUri createPropertyUriData(String id, String value) {
-        return new PropertyUriImpl(id, value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateImpl.java
deleted file mode 100644
index 10b0352..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-
-public class BulkUpdateImpl extends AbstractExtensionData {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken;
-    private Properties properties;
-    private List<String> addSecondaryTypeIds;
-    private List<String> removeSecondaryTypeIds;
-
-    public List<BulkUpdateObjectIdAndChangeToken> getObjectIdAndChangeToken() {
-        return objectIdAndChangeToken;
-    }
-
-    public void setObjectIdAndChangeToken(List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken) {
-        this.objectIdAndChangeToken = objectIdAndChangeToken;
-    }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
-
-    public List<String> getAddSecondaryTypeIds() {
-        return addSecondaryTypeIds;
-    }
-
-    public void setAddSecondaryTypeIds(List<String> addSecondaryTypeIds) {
-        this.addSecondaryTypeIds = addSecondaryTypeIds;
-    }
-
-    public List<String> getRemoveSecondaryTypeIds() {
-        return removeSecondaryTypeIds;
-    }
-
-    public void setRemoveSecondaryTypeIds(List<String> removeSecondaryTypeIds) {
-        this.removeSecondaryTypeIds = removeSecondaryTypeIds;
-    }
-
-    @Override
-    public String toString() {
-        return "BulkUpdate [objectIdAndChangeToken=" + objectIdAndChangeToken + ", properties=" + properties
-                + ", addSecondaryTypeIds=" + addSecondaryTypeIds + ", removeSecondaryTypeIds=" + removeSecondaryTypeIds
-                + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateObjectIdAndChangeTokenImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateObjectIdAndChangeTokenImpl.java
deleted file mode 100644
index 7eecf6e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/BulkUpdateObjectIdAndChangeTokenImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-
-public class BulkUpdateObjectIdAndChangeTokenImpl extends AbstractExtensionData implements
-        BulkUpdateObjectIdAndChangeToken {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String newId;
-    private String changeToken = null;
-
-    public BulkUpdateObjectIdAndChangeTokenImpl() {
-    }
-
-    public BulkUpdateObjectIdAndChangeTokenImpl(String id, String changeToken) {
-        this.id = id;
-        this.newId = null;
-        this.changeToken = changeToken;
-    }
-
-    public BulkUpdateObjectIdAndChangeTokenImpl(String id, String newId, String changeToken) {
-        this.id = id;
-        this.newId = newId;
-        this.changeToken = changeToken;
-    }
-
-    public BulkUpdateObjectIdAndChangeTokenImpl(String id, String newId, String changeToken,
-            List<CmisExtensionElement> extensions) {
-        this.id = id;
-        this.newId = newId;
-        this.changeToken = changeToken;
-        setExtensions(extensions);
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public String getNewId() {
-        return newId;
-    }
-
-    public String getChangeToken() {
-        return changeToken;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public void setNewId(String newId) {
-        this.newId = newId;
-    }
-
-    public void setChangeToken(String changeToken) {
-        this.changeToken = changeToken;
-    }
-
-    @Override
-    public String toString() {
-        return "BulkUpdateObjectIdAndChangeToken [id=" + id + ", newId=" + newId + ", changeToken=" + changeToken + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChangeEventInfoDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChangeEventInfoDataImpl.java
deleted file mode 100644
index bd480d4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChangeEventInfoDataImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-
-/**
- * Change event.
- */
-public class ChangeEventInfoDataImpl extends AbstractExtensionData implements ChangeEventInfo {
-
-    private static final long serialVersionUID = 1L;
-
-    private GregorianCalendar changeTime;
-    private ChangeType changeType;
-
-    public ChangeEventInfoDataImpl() {
-    }
-
-    public ChangeEventInfoDataImpl(ChangeType changeType, GregorianCalendar changeTime) {
-        this.changeType = changeType;
-        this.changeTime = changeTime;
-    }
-
-    public GregorianCalendar getChangeTime() {
-        return changeTime;
-    }
-
-    public void setChangeTime(GregorianCalendar changeTime) {
-        this.changeTime = changeTime;
-    }
-
-    public ChangeType getChangeType() {
-        return changeType;
-    }
-
-    public void setChangeType(ChangeType changeType) {
-        this.changeType = changeType;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChoiceImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChoiceImpl.java
deleted file mode 100644
index 720d993..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ChoiceImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-
-/**
- * Choice implementation.
- */
-public class ChoiceImpl<T> implements Choice<T> {
-
-    private static final long serialVersionUID = 1L;
-
-    private String displayName;
-    private List<T> value;
-    private List<Choice<T>> choice;
-
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    public List<T> getValue() {
-        if (value == null) {
-            value = new ArrayList<T>();
-        }
-
-        return value;
-    }
-
-    public void setValue(List<T> value) {
-        this.value = value;
-    }
-
-    public void setValue(T value) {
-        this.value = new ArrayList<T>();
-        this.value.add(value);
-    }
-
-    public List<Choice<T>> getChoice() {
-        if (choice == null) {
-            choice = new ArrayList<Choice<T>>();
-        }
-
-        return choice;
-    }
-
-    public void setChoice(List<Choice<T>> choice) {
-        this.choice = choice;
-    }
-
-    @Override
-    public String toString() {
-        return "Choice [displayName=" + displayName + ", value=" + value + ", choice=" + choice + "]";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CmisExtensionElementImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CmisExtensionElementImpl.java
deleted file mode 100644
index ae6e56c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CmisExtensionElementImpl.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-
-public class CmisExtensionElementImpl implements CmisExtensionElement {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String name;
-    private final String namespace;
-    private final String value;
-    private Map<String, String> attributes;
-    private final List<CmisExtensionElement> children;
-
-    /**
-     * Constructor for a leaf.
-     */
-    public CmisExtensionElementImpl(String namespace, String name, Map<String, String> attributes, String value) {
-        if (name == null) {
-            throw new IllegalArgumentException("Name must set!");
-        }
-
-        this.name = name;
-        this.namespace = namespace;
-        this.value = value;
-        children = Collections.emptyList();
-
-        if (attributes != null) {
-            this.attributes = Collections.unmodifiableMap(new HashMap<String, String>(attributes));
-        } else {
-            this.attributes = Collections.emptyMap();
-        }
-    }
-
-    /**
-     * Constructor for a node.
-     */
-    public CmisExtensionElementImpl(String namespace, String name, Map<String, String> attributes,
-            List<CmisExtensionElement> children) {
-        if (name == null) {
-            throw new IllegalArgumentException("Name must set!");
-        }
-
-        this.name = name;
-        this.namespace = namespace;
-        this.value = null;
-
-        if (children != null) {
-            this.children = Collections.unmodifiableList(new ArrayList<CmisExtensionElement>(children));
-        } else {
-            this.children = Collections.emptyList();
-        }
-
-        if (attributes != null) {
-            this.attributes = Collections.unmodifiableMap(new HashMap<String, String>(attributes));
-        } else {
-            this.attributes = Collections.emptyMap();
-        }
-    }
-
-    /**
-     * Copy constructor.
-     */
-    public CmisExtensionElementImpl(CmisExtensionElement element) {
-        if (element == null) {
-            throw new IllegalArgumentException("Element must set!");
-        }
-        if (element.getName() == null) {
-            throw new IllegalArgumentException("Name must set!");
-        }
-
-        this.name = element.getName();
-        this.namespace = element.getNamespace();
-        this.value = element.getValue();
-        this.children = element.getChildren();
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getNamespace() {
-        return namespace;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public List<CmisExtensionElement> getChildren() {
-        return children;
-    }
-
-    public Map<String, String> getAttributes() {
-        return attributes;
-    }
-
-    public String toTreeString(int level) {
-        StringBuilder sb = new StringBuilder();
-        nextTreelevel(sb, level);
-        return sb.toString();
-    }
-
-    private void nextTreelevel(StringBuilder sb, int level) {
-        for (int i = 0; i < level; i++) {
-            sb.append("  ");
-        }
-
-        sb.append((namespace == null ? "" : "{" + namespace + "}") + name + " " + attributes + ": ");
-
-        if (children.isEmpty()) {
-            sb.append(value);
-            sb.append('\n');
-        } else {
-            sb.append('\n');
-
-            for (CmisExtensionElement element : children) {
-                if (element instanceof CmisExtensionElementImpl) {
-                    sb.append(((CmisExtensionElementImpl) element).toTreeString(level + 1));
-                } else if (element != null) {
-                    for (int i = 0; i < level + 1; i++) {
-                        sb.append("  ");
-                    }
-                    sb.append(element.toString());
-                    sb.append('\n');
-                }
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        return (namespace == null ? "" : "{" + namespace + "}") + name + " " + attributes + ": "
-                + (children.isEmpty() ? value : children.toString());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
deleted file mode 100644
index 79c169a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
-
-public class ContentStreamHashImpl implements ContentStreamHash {
-
-    public static final String ALGORITHM_MD5 = "md5";
-    public static final String ALGORITHM_SHA1 = "sha-1";
-    public static final String ALGORITHM_SHA224 = "sha-224";
-    public static final String ALGORITHM_SHA256 = "sha-256";
-    public static final String ALGORITHM_SHA384 = "sha-384";
-    public static final String ALGORITHM_SHA512 = "sha-512";
-    public static final String ALGORITHM_SHA3 = "sha-3";
-
-    private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
-
-    private String propertyValue;
-    private String algorithm = null;
-    private String hash = null;
-
-    /**
-     * Constructs an object from the {@code cmis:contentStreamHash} property
-     * value.
-     * 
-     * @param propertyValue
-     *            the property value
-     */
-    public ContentStreamHashImpl(String propertyValue) {
-        this.propertyValue = propertyValue;
-
-        if (propertyValue == null) {
-            return;
-        }
-
-        String pv = propertyValue.trim();
-        int algEnd = pv.indexOf('}');
-        if (pv.charAt(0) != '{' || algEnd < 1) {
-            return;
-        }
-
-        this.algorithm = pv.substring(1, algEnd).toLowerCase(Locale.ENGLISH);
-        this.hash = pv.substring(algEnd + 1).replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
-    }
-
-    /**
-     * Constructs an object from the algorithm and hash.
-     * 
-     * @param algorithm
-     *            the algorithm
-     * @param hash
-     *            the hash value
-     */
-    public ContentStreamHashImpl(String algorithm, String hashStr) {
-        if (algorithm == null || algorithm.trim().length() == 0) {
-            throw new IllegalArgumentException("Algorithm must be set!");
-        }
-
-        if (hashStr == null || hashStr.trim().length() == 0) {
-            throw new IllegalArgumentException("Hash must be set!");
-        }
-
-        this.algorithm = algorithm.toLowerCase(Locale.ENGLISH);
-        this.hash = hashStr.replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
-        this.propertyValue = "{" + this.algorithm + "}" + this.hash;
-    }
-
-    /**
-     * Constructs an object from the algorithm and hash.
-     * 
-     * @param algorithm
-     *            the algorithm
-     * @param hashBytes
-     *            the hash value as byte array
-     */
-    public ContentStreamHashImpl(String algorithm, byte[] hashBytes) {
-        if (algorithm == null || algorithm.trim().length() == 0) {
-            throw new IllegalArgumentException("Algorithm must be set!");
-        }
-
-        if (hashBytes == null || hashBytes.length == 0) {
-            throw new IllegalArgumentException("Hash must be set!");
-        }
-
-        this.algorithm = algorithm.toLowerCase(Locale.ENGLISH);
-        this.hash = byteArrayToHexString(hashBytes);
-        this.propertyValue = "{" + this.algorithm + "}" + this.hash;
-    }
-
-    public String getPropertyValue() {
-        return propertyValue;
-    }
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    public String getHash() {
-        return hash;
-    }
-
-    @Override
-    public int hashCode() {
-        return propertyValue.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-
-        ContentStreamHashImpl other = (ContentStreamHashImpl) obj;
-        if (propertyValue == null) {
-            if (other.propertyValue != null) {
-                return false;
-            }
-        } else if (!propertyValue.equals(other.propertyValue)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public String toString() {
-        return propertyValue;
-    }
-
-    /**
-     * Creates a list of content hashes from a stream
-     * <p>
-     * This method consumes the stream but doesn't close it.
-     * 
-     * @param stream
-     *            the stream
-     * @param algorithm
-     *            the algorithms
-     * @return the list of content hashes
-     */
-    public static List<ContentStreamHash> createContentStreamHashes(InputStream stream, String... algorithm)
-            throws IOException, NoSuchAlgorithmException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream must be set!");
-        }
-
-        if (algorithm == null || algorithm.length == 0) {
-            throw new IllegalArgumentException("Algorithm must be set!");
-        }
-
-        MessageDigest[] md = new MessageDigest[algorithm.length];
-        for (int i = 0; i < algorithm.length; i++) {
-            md[i] = MessageDigest.getInstance(algorithm[i]);
-        }
-
-        int b;
-        byte[] buffer = new byte[64 * 1024];
-        while ((b = stream.read(buffer)) > -1) {
-            for (int j = 0; j < md.length; j++) {
-                md[j].update(buffer, 0, b);
-            }
-        }
-
-        List<ContentStreamHash> result = new ArrayList<ContentStreamHash>();
-
-        for (int i = 0; i < md.length; i++) {
-            result.add(new ContentStreamHashImpl(algorithm[i], md[i].digest()));
-        }
-
-        return result;
-    }
-
-    protected static String byteArrayToHexString(byte[] bytes) {
-        int n = bytes.length;
-        char[] hashHex = new char[n * 2];
-        for (int i = 0; i < n; i++) {
-            hashHex[i * 2] = HEX_DIGITS[(0xF0 & bytes[i]) >>> 4];
-            hashHex[i * 2 + 1] = HEX_DIGITS[0x0F & bytes[i]];
-        }
-
-        return new String(hashHex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamImpl.java
deleted file mode 100644
index 4bb4261..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamImpl.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.data.MutableContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-/**
- * Content stream data implementation.
- */
-public class ContentStreamImpl extends AbstractExtensionData implements MutableContentStream {
-
-    private static final long serialVersionUID = 1L;
-
-    private String filename;
-    private BigInteger length;
-    private String mimetype;
-    private transient InputStream stream;
-
-    /**
-     * Constructor.
-     */
-    public ContentStreamImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public ContentStreamImpl(String filename, BigInteger length, String mimetype, InputStream stream) {
-        this.filename = filename;
-        this.length = length;
-        this.mimetype = mimetype;
-        this.stream = stream;
-    }
-
-    /**
-     * Convenience constructor for tests.
-     */
-    public ContentStreamImpl(String filename, String mimetype, String string) {
-        if (string == null) {
-            throw new IllegalArgumentException("String must be set!");
-        }
-
-        byte[] bytes = null;
-        try {
-            bytes = string.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-        }
-
-        this.filename = filename;
-        this.length = BigInteger.valueOf(bytes.length);
-        this.mimetype = mimetype;
-        this.stream = new ByteArrayInputStream(bytes);
-    }
-
-    public String getFileName() {
-        return filename;
-    }
-
-    public void setFileName(String filename) {
-        this.filename = filename;
-    }
-
-    public long getLength() {
-        return length == null ? -1 : length.longValue();
-    }
-
-    public BigInteger getBigLength() {
-        return length;
-    }
-
-    public void setLength(BigInteger length) {
-        this.length = length;
-    }
-
-    public String getMimeType() {
-        return mimetype;
-    }
-
-    public void setMimeType(String mimeType) {
-        this.mimetype = mimeType;
-    }
-
-    public InputStream getStream() {
-        return stream;
-    }
-
-    public void setStream(InputStream stream) {
-        this.stream = stream;
-    }
-
-    @Override
-    public String toString() {
-        return "ContentStream [filename=" + filename + ", length=" + length + ", MIME type=" + mimetype
-                + ", has stream=" + (stream != null) + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CreatablePropertyTypesImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CreatablePropertyTypesImpl.java
deleted file mode 100644
index b013560..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/CreatablePropertyTypesImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * ;License;); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * ;AS IS; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-
-public class CreatablePropertyTypesImpl extends ExtensionDataImpl implements CreatablePropertyTypes {
-
-    private static final long serialVersionUID = 1L;
-
-    private Set<PropertyType> propertyTypeSet;
-
-    public Set<PropertyType> canCreate() {
-        if (propertyTypeSet == null) {
-            propertyTypeSet = EnumSet.noneOf(PropertyType.class);
-        }
-
-        return propertyTypeSet;
-    }
-
-    public void setCanCreate(Set<PropertyType> propertyTypeSet) {
-        this.propertyTypeSet = propertyTypeSet;
-    }
-
-    @Override
-    public String toString() {
-        return "CreatablePropertyTypes [propertyTypeSet=" + propertyTypeSet + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/DocumentTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/DocumentTypeDefinitionImpl.java
deleted file mode 100644
index 1f400b1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/DocumentTypeDefinitionImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-
-/**
- * Document type definition.
- */
-public class DocumentTypeDefinitionImpl extends AbstractTypeDefinition implements MutableDocumentTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private ContentStreamAllowed contentStreamAllowed = ContentStreamAllowed.NOTALLOWED;
-    private Boolean isVersionable = Boolean.FALSE;
-
-    public ContentStreamAllowed getContentStreamAllowed() {
-        return contentStreamAllowed;
-    }
-
-    public void setContentStreamAllowed(ContentStreamAllowed contentStreamAllowed) {
-        this.contentStreamAllowed = contentStreamAllowed;
-    }
-
-    public Boolean isVersionable() {
-        return isVersionable;
-    }
-
-    public void setIsVersionable(Boolean isVersionable) {
-        this.isVersionable = isVersionable;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionDataImpl.java
deleted file mode 100644
index 0d0e0d0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionDataImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-
-/**
- * ExtensionsData implementation.
- */
-public class ExtensionDataImpl extends AbstractExtensionData implements
-        ExtensionsData, Serializable {
-    private static final long serialVersionUID = 1L;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionFeatureImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionFeatureImpl.java
deleted file mode 100644
index f73885b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ExtensionFeatureImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-
-public class ExtensionFeatureImpl extends ExtensionDataImpl implements ExtensionFeature {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String url;
-    private String commonName;
-    private String versionLabel;
-    private String description;
-    private Map<String, String> featureData;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public String getCommonName() {
-        return commonName;
-    }
-
-    public void setCommonName(String commonName) {
-        this.commonName = commonName;
-    }
-
-    public String getVersionLabel() {
-        return versionLabel;
-    }
-
-    public void setVersionLabel(String versionLabel) {
-        this.versionLabel = versionLabel;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Map<String, String> getFeatureData() {
-        if (featureData == null) {
-            featureData = new HashMap<String, String>();
-        }
-
-        return featureData;
-    }
-
-    public void setFeatureData(Map<String, String> featureData) {
-        this.featureData = featureData;
-    }
-
-    @Override
-    public String toString() {
-        return "Extension Feature [id=" + id + ", url=" + url + ", commonName=" + commonName + ", versionLabel="
-                + versionLabel + ", description=" + description + ", featureData=" + featureData + "]"
-                + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FailedToDeleteDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FailedToDeleteDataImpl.java
deleted file mode 100644
index ae8d36b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FailedToDeleteDataImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-
-/**
- * FailedToDeleteData implementation.
- */
-public class FailedToDeleteDataImpl extends AbstractExtensionData implements FailedToDeleteData {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<String> ids;
-
-    public List<String> getIds() {
-        if (ids == null) {
-            ids = new ArrayList<String>();
-        }
-
-        return ids;
-    }
-
-    public void setIds(List<String> ids) {
-        this.ids = ids;
-    }
-
-    @Override
-    public String toString() {
-        return "FailedToDeleteData [IDs=" + ids + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FolderTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FolderTypeDefinitionImpl.java
deleted file mode 100644
index df71030..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/FolderTypeDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-
-/**
- * Folder type definition.
- */
-public class FolderTypeDefinitionImpl extends AbstractTypeDefinition implements MutableFolderTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ItemTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ItemTypeDefinitionImpl.java
deleted file mode 100644
index 4292e80..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ItemTypeDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
-
-/**
- * Item type definition.
- */
-public class ItemTypeDefinitionImpl extends AbstractTypeDefinition implements MutableItemTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/LastModifiedContentStreamImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/LastModifiedContentStreamImpl.java
deleted file mode 100644
index f80d324..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/LastModifiedContentStreamImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.data.LastModifiedContentStream;
-
-/**
- * Content stream data with last modified date implementation.
- */
-public class LastModifiedContentStreamImpl extends ContentStreamImpl implements LastModifiedContentStream {
-
-    private static final long serialVersionUID = 1L;
-
-    private GregorianCalendar lastModified;
-
-    /**
-     * Constructor.
-     */
-    public LastModifiedContentStreamImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public LastModifiedContentStreamImpl(String filename, BigInteger length, String mimetype, InputStream stream,
-            GregorianCalendar lastModified) {
-        super(filename, length, mimetype, stream);
-        this.lastModified = lastModified;
-    }
-
-    public GregorianCalendar getLastModified() {
-        return lastModified;
-    }
-
-    public void setLastModified(GregorianCalendar lastModified) {
-        this.lastModified = lastModified;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/NewTypeSettableAttributesImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/NewTypeSettableAttributesImpl.java
deleted file mode 100644
index 2deef52..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/NewTypeSettableAttributesImpl.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * ;License;); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * ;AS IS; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.Serializable;
-
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-
-public class NewTypeSettableAttributesImpl extends ExtensionDataImpl implements NewTypeSettableAttributes, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Boolean id;
-    private Boolean localName;
-    private Boolean localNamespace;
-    private Boolean displayName;
-    private Boolean queryName;
-    private Boolean description;
-    private Boolean creatable;
-    private Boolean fileable;
-    private Boolean queryable;
-    private Boolean fulltextIndexed;
-    private Boolean includedInSupertypeQuery;
-    private Boolean controllablePolicy;
-    private Boolean controllableACL;
-
-    public Boolean canSetId() {
-        return id;
-    }
-
-    public void setCanSetId(Boolean id) {
-        this.id = id;
-    }
-
-    public Boolean canSetLocalName() {
-        return localName;
-    }
-
-    public void setCanSetLocalName(Boolean localName) {
-        this.localName = localName;
-    }
-
-    public Boolean canSetLocalNamespace() {
-        return localNamespace;
-    }
-
-    public void setCanSetLocalNamespace(Boolean localNamespace) {
-        this.localNamespace = localNamespace;
-    }
-
-    public Boolean canSetDisplayName() {
-        return displayName;
-    }
-
-    public void setCanSetDisplayName(Boolean displayName) {
-        this.displayName = displayName;
-    }
-
-    public Boolean canSetQueryName() {
-        return queryName;
-    }
-
-    public void setCanSetQueryName(Boolean queryName) {
-        this.queryName = queryName;
-    }
-
-    public Boolean canSetDescription() {
-        return description;
-    }
-
-    public void setCanSetDescription(Boolean description) {
-        this.description = description;
-    }
-
-    public Boolean canSetCreatable() {
-        return creatable;
-    }
-
-    public void setCanSetCreatable(Boolean creatable) {
-        this.creatable = creatable;
-    }
-
-    public Boolean canSetFileable() {
-        return fileable;
-    }
-
-    public void setCanSetFileable(Boolean fileable) {
-        this.fileable = fileable;
-    }
-
-    public Boolean canSetQueryable() {
-        return queryable;
-    }
-
-    public void setCanSetQueryable(Boolean queryable) {
-        this.queryable = queryable;
-    }
-
-    public Boolean canSetFulltextIndexed() {
-        return fulltextIndexed;
-    }
-
-    public void setCanSetFulltextIndexed(Boolean fulltextIndexed) {
-        this.fulltextIndexed = fulltextIndexed;
-    }
-
-    public Boolean canSetIncludedInSupertypeQuery() {
-        return includedInSupertypeQuery;
-    }
-
-    public void setCanSetIncludedInSupertypeQuery(Boolean includedInSupertypeQuery) {
-        this.includedInSupertypeQuery = includedInSupertypeQuery;
-    }
-
-    public Boolean canSetControllablePolicy() {
-        return controllablePolicy;
-    }
-
-    public void setCanSetControllablePolicy(Boolean controllablePolicy) {
-        this.controllablePolicy = controllablePolicy;
-    }
-
-    public Boolean canSetControllableAcl() {
-        return controllableACL;
-    }
-
-    public void setCanSetControllableAcl(Boolean controllableACL) {
-        this.controllableACL = controllableACL;
-    }
-
-    @Override
-    public String toString() {
-        return "NewTypeSettableAttributes [id=" + id + ", localName=" + localName + ", localNamespace="
-                + localNamespace + ", displayName=" + displayName + ", queryName=" + queryName + ", description="
-                + description + ", creatable=" + creatable + ", fileable=" + fileable + ", queryable=" + queryable
-                + ", fulltextIndexed=" + fulltextIndexed + ", includedInSupertypeQuery=" + includedInSupertypeQuery
-                + ", controllablePolicy=" + controllablePolicy + ", controllableACL=" + controllableACL + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectDataImpl.java
deleted file mode 100644
index ec39eb1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectDataImpl.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.data.MutableObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-
-/**
- * ObjectData implementation.
- */
-public class ObjectDataImpl extends AbstractExtensionData implements MutableObjectData {
-
-    private static final long serialVersionUID = 1L;
-
-    private Properties properties;
-    private ChangeEventInfo changeEventInfo;
-    private List<ObjectData> relationships;
-    private List<RenditionData> renditions;
-    private PolicyIdList policyIds;
-    private AllowableActions allowableActions;
-    private Acl acl;
-    private Boolean isExactAcl;
-
-    public String getId() {
-        Object value = getFirstValue(PropertyIds.OBJECT_ID);
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        return null;
-    }
-
-    public BaseTypeId getBaseTypeId() {
-        Object value = getFirstValue(PropertyIds.BASE_TYPE_ID);
-        if (value instanceof String) {
-            try {
-                return BaseTypeId.fromValue((String) value);
-            } catch (Exception e) {
-                // invalid base type -> return null
-            }
-        }
-
-        return null;
-    }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
-
-    public ChangeEventInfo getChangeEventInfo() {
-        return changeEventInfo;
-    }
-
-    public void setChangeEventInfo(ChangeEventInfo changeEventInfo) {
-        this.changeEventInfo = changeEventInfo;
-    }
-
-    public List<ObjectData> getRelationships() {
-        if (relationships == null) {
-            relationships = new ArrayList<ObjectData>();
-        }
-
-        return relationships;
-    }
-
-    public void setRelationships(List<ObjectData> relationships) {
-        this.relationships = relationships;
-    }
-
-    public List<RenditionData> getRenditions() {
-        if (renditions == null) {
-            renditions = new ArrayList<RenditionData>();
-        }
-
-        return renditions;
-    }
-
-    public void setRenditions(List<RenditionData> renditions) {
-        this.renditions = renditions;
-    }
-
-    public PolicyIdList getPolicyIds() {
-        return policyIds;
-    }
-
-    public void setPolicyIds(PolicyIdList policyIds) {
-        this.policyIds = policyIds;
-    }
-
-    public AllowableActions getAllowableActions() {
-        return allowableActions;
-    }
-
-    public void setAllowableActions(AllowableActions allowableActions) {
-        this.allowableActions = allowableActions;
-    }
-
-    public Acl getAcl() {
-        return acl;
-    }
-
-    public void setAcl(Acl acl) {
-        this.acl = acl;
-    }
-
-    public Boolean isExactAcl() {
-        return isExactAcl;
-    }
-
-    public void setIsExactAcl(Boolean isExactACL) {
-        this.isExactAcl = isExactACL;
-    }
-
-    // ---- internal ----
-
-    /**
-     * Returns the first value of a property or <code>null</code> if the
-     * property is not set.
-     */
-    private Object getFirstValue(String id) {
-        if ((properties == null) || (properties.getProperties() == null)) {
-            return null;
-        }
-
-        PropertyData<?> property = properties.getProperties().get(id);
-        if (property == null) {
-            return null;
-        }
-
-        return property.getFirstValue();
-    }
-
-    @Override
-    public String toString() {
-        return "Object Data [properties=" + properties + ", allowable actions=" + allowableActions
-                + ", change event info=" + changeEventInfo + ", ACL=" + acl + ", is exact ACL=" + isExactAcl
-                + ", policy ids=" + policyIds + ", relationships=" + relationships + ", renditions=" + renditions + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderContainerImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderContainerImpl.java
deleted file mode 100644
index 641cb86..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderContainerImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-
-/**
- * ObjectInFolderContainer implementation.
- */
-public class ObjectInFolderContainerImpl extends AbstractExtensionData implements ObjectInFolderContainer {
-
-    private static final long serialVersionUID = 1L;
-
-    private ObjectInFolderData object;
-    private List<ObjectInFolderContainer> children;
-
-    /**
-     * Constructor.
-     */
-    public ObjectInFolderContainerImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public ObjectInFolderContainerImpl(ObjectInFolderData object) {
-        if (object == null) {
-            throw new IllegalArgumentException("Object must be set!");
-        }
-
-        this.object = object;
-    }
-
-    public ObjectInFolderData getObject() {
-        return object;
-    }
-
-    public void setObject(ObjectInFolderData object) {
-        if (object == null) {
-            throw new IllegalArgumentException("Object must be set!");
-        }
-
-        this.object = object;
-    }
-
-    public List<ObjectInFolderContainer> getChildren() {
-        if (children == null) {
-            children = new ArrayList<ObjectInFolderContainer>();
-        }
-
-        return children;
-    }
-
-    public void setChildren(List<ObjectInFolderContainer> children) {
-        this.children = children;
-    }
-
-    @Override
-    public String toString() {
-        return "ObjectInFolder Container [object=" + object + ", children=" + children + "]";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderDataImpl.java
deleted file mode 100644
index 8cbb540..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderDataImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-
-/**
- * ObjectInFolderData implementation.
- */
-public class ObjectInFolderDataImpl extends AbstractExtensionData implements ObjectInFolderData {
-
-    private static final long serialVersionUID = 1L;
-
-    private ObjectData object;
-    private String pathSegment;
-
-    /**
-     * Constructor.
-     */
-    public ObjectInFolderDataImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public ObjectInFolderDataImpl(ObjectData object) {
-        if (object == null) {
-            throw new IllegalArgumentException("Object must be set!");
-        }
-
-        this.object = object;
-    }
-
-    public ObjectData getObject() {
-        return object;
-    }
-
-    public void setObject(ObjectData object) {
-        if (object == null) {
-            throw new IllegalArgumentException("Object must be set!");
-        }
-
-        this.object = object;
-    }
-
-    public String getPathSegment() {
-        return pathSegment;
-    }
-
-    public void setPathSegment(String pathSegment) {
-        this.pathSegment = pathSegment;
-    }
-
-    @Override
-    public String toString() {
-        return "ObjectInFolder [object=" + object + ", path segment=" + pathSegment + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderListImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderListImpl.java
deleted file mode 100644
index 53e183b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectInFolderListImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-
-/**
- * ObjectInFolderList implementation.
- */
-public class ObjectInFolderListImpl extends AbstractExtensionData implements ObjectInFolderList {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<ObjectInFolderData> objects;
-    private Boolean hasMoreItems = Boolean.FALSE;
-    private BigInteger numItems;
-
-    public List<ObjectInFolderData> getObjects() {
-        if (objects == null) {
-            objects = new ArrayList<ObjectInFolderData>();
-        }
-
-        return objects;
-    }
-
-    public void setObjects(List<ObjectInFolderData> objects) {
-        this.objects = objects;
-    }
-
-    public Boolean hasMoreItems() {
-        return hasMoreItems;
-    }
-
-    public void setHasMoreItems(Boolean hasMoreItems) {
-        this.hasMoreItems = hasMoreItems;
-    }
-
-    public BigInteger getNumItems() {
-        return numItems;
-    }
-
-    public void setNumItems(BigInteger numItems) {
-        this.numItems = numItems;
-    }
-
-    @Override
-    public String toString() {
-        return "ObjectInFolder List [objects=" + objects + ", has more items=" + hasMoreItems + ", num items="
-                + numItems + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectListImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectListImpl.java
deleted file mode 100644
index 7bc6335..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectListImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-
-/**
- * ObjectList implementation.
- */
-public class ObjectListImpl extends AbstractExtensionData implements ObjectList {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<ObjectData> objects;
-    private Boolean hasMoreItems = Boolean.FALSE;
-    private BigInteger numItems;
-
-    public List<ObjectData> getObjects() {
-        if (objects == null) {
-            objects = new ArrayList<ObjectData>();
-        }
-
-        return objects;
-    }
-
-    public void setObjects(List<ObjectData> objects) {
-        this.objects = objects;
-    }
-
-    public Boolean hasMoreItems() {
-        return hasMoreItems;
-    }
-
-    public void setHasMoreItems(Boolean hasMoreItems) {
-        this.hasMoreItems = hasMoreItems;
-    }
-
-    public BigInteger getNumItems() {
-        return numItems;
-    }
-
-    public void setNumItems(BigInteger numItems) {
-        this.numItems = numItems;
-    }
-
-    @Override
-    public String toString() {
-        return "Object List [objects=" + objects + ", has more items=" + hasMoreItems + ", num items=" + numItems + "]";
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectParentDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectParentDataImpl.java
deleted file mode 100644
index 720a233..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ObjectParentDataImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-
-/**
- * ObjectParentData implementation.
- */
-public class ObjectParentDataImpl extends AbstractExtensionData implements ObjectParentData {
-
-    private static final long serialVersionUID = 1L;
-
-    private ObjectData object;
-    private String relativePathSegment;
-
-    /**
-     * Constructor.
-     */
-    public ObjectParentDataImpl() {
-    }
-
-    /**
-     * Constructor.
-     */
-    public ObjectParentDataImpl(ObjectData object) {
-        this.object = object;
-    }
-
-    public ObjectData getObject() {
-        return object;
-    }
-
-    public void setObject(ObjectData object) {
-        this.object = object;
-    }
-
-    public String getRelativePathSegment() {
-        return relativePathSegment;
-    }
-
-    public void setRelativePathSegment(String relativePathSegment) {
-        this.relativePathSegment = relativePathSegment;
-    }
-
-    @Override
-    public String toString() {
-        return "Object Parent [object=" + object + ", relative path segment=" + relativePathSegment + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PartialContentStreamImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PartialContentStreamImpl.java
deleted file mode 100644
index 095efe4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PartialContentStreamImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.io.InputStream;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.data.PartialContentStream;
-
-/**
- * Implementation of the {@link PartialContentStream} interface.
- */
-public class PartialContentStreamImpl extends ContentStreamImpl implements PartialContentStream {
-
-    public PartialContentStreamImpl() {
-    }
-
-    public PartialContentStreamImpl(String filename, BigInteger length, String mimetype, InputStream stream) {
-        super(filename, length, mimetype, stream);
-    }
-
-    public PartialContentStreamImpl(String filename, String mimetype, String string) {
-        super(filename, mimetype, string);
-    }
-
-    private static final long serialVersionUID = 1L;
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionDefinitionDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionDefinitionDataImpl.java
deleted file mode 100644
index 84c6ddb..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionDefinitionDataImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-
-/**
- * Permission definition.
- */
-public class PermissionDefinitionDataImpl extends AbstractExtensionData implements PermissionDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private String permission;
-    private String description;
-
-    public String getId() {
-        return permission;
-    }
-
-    public void setId(String permission) {
-        this.permission = permission;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    @Override
-    public String toString() {
-        return "Permission Definition [permission=" + permission + ", description=" + description + "]"
-                + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionMappingDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionMappingDataImpl.java
deleted file mode 100644
index 57b5be2..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PermissionMappingDataImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-
-/**
- * Permission mapping.
- */
-public class PermissionMappingDataImpl extends AbstractExtensionData implements PermissionMapping {
-
-    private static final long serialVersionUID = 1L;
-
-    private String key;
-    private List<String> permissions;
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public List<String> getPermissions() {
-        if (permissions == null) {
-            permissions = new ArrayList<String>();
-        }
-
-        return permissions;
-    }
-
-    public void setPermissions(List<String> permissions) {
-        this.permissions = permissions;
-    }
-
-    @Override
-    public String toString() {
-        return "Permission Mapping [key=" + key + ", permissions=" + permissions + "]" + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyIdListImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyIdListImpl.java
deleted file mode 100644
index fd2f8ba..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyIdListImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-
-/**
- * PolicyIdList implementation.
- */
-public class PolicyIdListImpl extends AbstractExtensionData implements PolicyIdList {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<String> policyIds;
-
-    public List<String> getPolicyIds() {
-        return policyIds;
-    }
-
-    public void setPolicyIds(List<String> policyIds) {
-        this.policyIds = policyIds;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyTypeDefinitionImpl.java
deleted file mode 100644
index 22684de..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PolicyTypeDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
-
-/**
- * Policy type definition.
- */
-public class PolicyTypeDefinitionImpl extends AbstractTypeDefinition implements MutablePolicyTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertiesImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertiesImpl.java
deleted file mode 100644
index 174a177..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertiesImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.MutableProperties;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-
-/**
- * Properties data implementation.
- */
-public class PropertiesImpl extends AbstractExtensionData implements MutableProperties {
-
-    private static final long serialVersionUID = 1L;
-
-    private final List<PropertyData<?>> propertyList = new ArrayList<PropertyData<?>>();
-    private final Map<String, PropertyData<?>> properties = new LinkedHashMap<String, PropertyData<?>>();
-
-    /**
-     * Constructor.
-     */
-    public PropertiesImpl() {
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param properties
-     *            initial collection of properties
-     */
-    public PropertiesImpl(Collection<PropertyData<?>> properties) {
-        addProperties(properties);
-    }
-
-    /**
-     * Shallow copy constructor.
-     * 
-     * Creates a new collection of properties but references the original
-     * property and extension objects.
-     */
-    public PropertiesImpl(Properties properties) {
-        if (properties == null) {
-            throw new IllegalArgumentException("Properties not set!");
-        }
-
-        addProperties(properties.getPropertyList());
-        setExtensions(properties.getExtensions());
-    }
-
-    public Map<String, PropertyData<?>> getProperties() {
-        return Collections.unmodifiableMap(properties);
-    }
-
-    public List<PropertyData<?>> getPropertyList() {
-        return Collections.unmodifiableList(propertyList);
-    }
-
-    protected void addProperties(Collection<PropertyData<?>> properties) {
-        if (properties != null) {
-            for (PropertyData<?> prop : properties) {
-                addProperty(prop);
-            }
-        }
-    }
-
-    public void addProperty(PropertyData<?> property) {
-        if (property == null) {
-            return;
-        }
-
-        propertyList.add(property);
-        properties.put(property.getId(), property);
-    }
-
-    public void replaceProperty(PropertyData<?> property) {
-        if (property == null || property.getId() == null) {
-            return;
-        }
-
-        removeProperty(property.getId());
-
-        propertyList.add(property);
-        properties.put(property.getId(), property);
-    }
-
-    public void removeProperty(String id) {
-        if (id == null) {
-            return;
-        }
-
-        Iterator<PropertyData<?>> iterator = propertyList.iterator();
-        while (iterator.hasNext()) {
-            PropertyData<?> property = iterator.next();
-            if (id.equals(property.getId())) {
-                iterator.remove();
-                break;
-            }
-        }
-
-        properties.remove(id);
-    }
-
-    @Override
-    public String toString() {
-        return "Properties Data [properties=" + propertyList + "]" + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanDefinitionImpl.java
deleted file mode 100644
index 9b10b77..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyBooleanDefinition;
-
-/**
- * Boolean property definition data implementation.
- */
-public class PropertyBooleanDefinitionImpl extends AbstractPropertyDefinition<Boolean> implements
-        MutablePropertyBooleanDefinition {
-
-    private static final long serialVersionUID = 1L;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanImpl.java
deleted file mode 100644
index badaf91..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyBooleanImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyBoolean;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Boolean property data implementation.
- */
-public class PropertyBooleanImpl extends AbstractPropertyData<Boolean> implements MutablePropertyBoolean {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyBooleanImpl() {
-    }
-
-    public PropertyBooleanImpl(String id, List<Boolean> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyBooleanImpl(String id, Boolean value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyBooleanImpl(PropertyDefinition<Boolean> propDef, List<Boolean> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyBooleanImpl(PropertyDefinition<Boolean> propDef, Boolean value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeDefinitionImpl.java
deleted file mode 100644
index 4d874ab..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeDefinitionImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-
-/**
- * DateTime property definition data implementation.
- */
-public class PropertyDateTimeDefinitionImpl extends AbstractPropertyDefinition<GregorianCalendar> implements
-        MutablePropertyDateTimeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private DateTimeResolution dateTimeResolution;
-
-    public DateTimeResolution getDateTimeResolution() {
-        return dateTimeResolution;
-    }
-
-    public void setDateTimeResolution(DateTimeResolution dateTimeResolution) {
-        this.dateTimeResolution = dateTimeResolution;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeImpl.java
deleted file mode 100644
index 4827443..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDateTimeImpl.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyDateTime;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * DateTime property data implementation.
- */
-public class PropertyDateTimeImpl extends AbstractPropertyData<GregorianCalendar> implements MutablePropertyDateTime {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyDateTimeImpl() {
-    }
-
-    public PropertyDateTimeImpl(String id, List<GregorianCalendar> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyDateTimeImpl(String id, GregorianCalendar value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyDateTimeImpl(PropertyDefinition<GregorianCalendar> propDef, List<GregorianCalendar> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyDateTimeImpl(PropertyDefinition<GregorianCalendar> propDef, GregorianCalendar value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalDefinitionImpl.java
deleted file mode 100644
index d469f55..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalDefinitionImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigDecimal;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-
-/**
- * Decimal property definition data implementation.
- */
-public class PropertyDecimalDefinitionImpl extends AbstractPropertyDefinition<BigDecimal> implements
-        MutablePropertyDecimalDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private BigDecimal minValue;
-    private BigDecimal maxValue;
-    private DecimalPrecision precision;
-
-    public BigDecimal getMinValue() {
-        return minValue;
-    }
-
-    public void setMinValue(BigDecimal minValue) {
-        this.minValue = minValue;
-    }
-
-    public BigDecimal getMaxValue() {
-        return maxValue;
-    }
-
-    public void setMaxValue(BigDecimal maxValue) {
-        this.maxValue = maxValue;
-    }
-
-    public DecimalPrecision getPrecision() {
-        return precision;
-    }
-
-    public void setPrecision(DecimalPrecision precision) {
-        this.precision = precision;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalImpl.java
deleted file mode 100644
index 07d79ea..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyDecimalImpl.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyDecimal;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Decimal property data implementation.
- */
-public class PropertyDecimalImpl extends AbstractPropertyData<BigDecimal> implements MutablePropertyDecimal {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyDecimalImpl() {
-    }
-
-    public PropertyDecimalImpl(String id, List<BigDecimal> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyDecimalImpl(String id, BigDecimal value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyDecimalImpl(PropertyDefinition<BigDecimal> propDef, List<BigDecimal> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyDecimalImpl(PropertyDefinition<BigDecimal> propDef, BigDecimal value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlDefinitionImpl.java
deleted file mode 100644
index d48a0c4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyHtmlDefinition;
-
-/**
- * HTML property definition data implementation.
- */
-public class PropertyHtmlDefinitionImpl extends AbstractPropertyDefinition<String> implements
-        MutablePropertyHtmlDefinition {
-
-    private static final long serialVersionUID = 1L;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlImpl.java
deleted file mode 100644
index 56aad6b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyHtmlImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyHtml;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * HTML property data implementation.
- */
-public class PropertyHtmlImpl extends AbstractPropertyData<String> implements MutablePropertyHtml {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyHtmlImpl() {
-    }
-
-    public PropertyHtmlImpl(String id, List<String> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyHtmlImpl(String id, String value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyHtmlImpl(PropertyDefinition<String> propDef, List<String> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyHtmlImpl(PropertyDefinition<String> propDef, String value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdDefinitionImpl.java
deleted file mode 100644
index 31a5885..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdDefinitionImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyIdDefinition;
-
-/**
- * Id property definition data implementation.
- */
-public class PropertyIdDefinitionImpl extends AbstractPropertyDefinition<String> implements MutablePropertyIdDefinition {
-
-    private static final long serialVersionUID = 1L;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdImpl.java
deleted file mode 100644
index 379beaa..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIdImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyId;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Id property data implementation.
- */
-public class PropertyIdImpl extends AbstractPropertyData<String> implements MutablePropertyId {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyIdImpl() {
-    }
-
-    public PropertyIdImpl(String id, List<String> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyIdImpl(String id, String value) {
-        setId(id);
-        setValue(value);
-    }
-    
-    public PropertyIdImpl(PropertyDefinition<String> propDef, List<String> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyIdImpl(PropertyDefinition<String> propDef, String value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerDefinitionImpl.java
deleted file mode 100644
index bcd05ee..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerDefinitionImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyIntegerDefinition;
-
-/**
- * Boolean property definition data implementation.
- */
-public class PropertyIntegerDefinitionImpl extends AbstractPropertyDefinition<BigInteger> implements
-        MutablePropertyIntegerDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private BigInteger minValue;
-    private BigInteger maxValue;
-
-    public BigInteger getMinValue() {
-        return minValue;
-    }
-
-    public void setMinValue(BigInteger minValue) {
-        this.minValue = minValue;
-    }
-
-    public BigInteger getMaxValue() {
-        return maxValue;
-    }
-
-    public void setMaxValue(BigInteger maxValue) {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerImpl.java
deleted file mode 100644
index da9f5ee..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyIntegerImpl.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyInteger;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Integer property data implementation.
- */
-public class PropertyIntegerImpl extends AbstractPropertyData<BigInteger> implements MutablePropertyInteger {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyIntegerImpl() {
-    }
-
-    public PropertyIntegerImpl(String id, List<BigInteger> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyIntegerImpl(String id, BigInteger value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyIntegerImpl(PropertyDefinition<BigInteger> propDef, List<BigInteger> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyIntegerImpl(PropertyDefinition<BigInteger> propDef, BigInteger value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringDefinitionImpl.java
deleted file mode 100644
index 88e39b4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringDefinitionImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyStringDefinition;
-
-/**
- * String property definition data implementation.
- */
-public class PropertyStringDefinitionImpl extends AbstractPropertyDefinition<String> implements
-        MutablePropertyStringDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private BigInteger maxLength;
-
-    public BigInteger getMaxLength() {
-        return maxLength;
-    }
-
-    public void setMaxLength(BigInteger maxLength) {
-        this.maxLength = maxLength;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringImpl.java
deleted file mode 100644
index cec2919..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyStringImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * String property data implementation.
- */
-public class PropertyStringImpl extends AbstractPropertyData<String> implements MutablePropertyString {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyStringImpl() {
-    }
-
-    public PropertyStringImpl(String id, List<String> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyStringImpl(String id, String value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyStringImpl(PropertyDefinition<String> propDef, List<String> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyStringImpl(PropertyDefinition<String> propDef, String value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriDefinitionImpl.java
deleted file mode 100644
index 8a42b98..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriDefinitionImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyUriDefinition;
-
-/**
- * URI property definition data implementation.
- */
-public class PropertyUriDefinitionImpl extends AbstractPropertyDefinition<String> implements
-        MutablePropertyUriDefinition {
-
-    private static final long serialVersionUID = 1L;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriImpl.java
deleted file mode 100644
index c3f9d27..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/PropertyUriImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.MutablePropertyUri;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-
-/**
- * Uri property data implementation.
- */
-public class PropertyUriImpl extends AbstractPropertyData<String> implements MutablePropertyUri {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyUriImpl() {
-    }
-
-    public PropertyUriImpl(String id, List<String> values) {
-        setId(id);
-        setValues(values);
-    }
-
-    public PropertyUriImpl(String id, String value) {
-        setId(id);
-        setValue(value);
-    }
-
-    public PropertyUriImpl(PropertyDefinition<String> propDef, List<String> values) {
-        setPropertyDefinition(propDef);
-        setValues(values);
-    }
-
-    public PropertyUriImpl(PropertyDefinition<String> propDef, String value) {
-        setPropertyDefinition(propDef);
-        setValue(value);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/QueryTypeImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/QueryTypeImpl.java
deleted file mode 100644
index 66bef19..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/QueryTypeImpl.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-public class QueryTypeImpl extends AbstractExtensionData {
-
-    private static final long serialVersionUID = 1L;
-
-    private String statement;
-    private Boolean searchAllVersions;
-    private Boolean includeAllowableActions;
-    private IncludeRelationships includeRelationships;
-    private String renditionFilter;
-    private BigInteger maxItems;
-    private BigInteger skipCount;
-
-    public QueryTypeImpl() {
-    }
-
-    public String getStatement() {
-        return statement;
-    }
-
-    public void setStatement(String statement) {
-        this.statement = statement;
-    }
-
-    public Boolean getSearchAllVersions() {
-        return searchAllVersions;
-    }
-
-    public void setSearchAllVersions(Boolean searchAllVersions) {
-        this.searchAllVersions = searchAllVersions;
-    }
-
-    public Boolean getIncludeAllowableActions() {
-        return includeAllowableActions;
-    }
-
-    public void setIncludeAllowableActions(Boolean includeAllowableActions) {
-        this.includeAllowableActions = includeAllowableActions;
-    }
-
-    public IncludeRelationships getIncludeRelationships() {
-        return includeRelationships;
-    }
-
-    public void setIncludeRelationships(IncludeRelationships includeRelationships) {
-        this.includeRelationships = includeRelationships;
-    }
-
-    public String getRenditionFilter() {
-        return renditionFilter;
-    }
-
-    public void setRenditionFilter(String renditionFilter) {
-        this.renditionFilter = renditionFilter;
-    }
-
-    public BigInteger getMaxItems() {
-        return maxItems;
-    }
-
-    public void setMaxItems(BigInteger maxItems) {
-        this.maxItems = maxItems;
-    }
-
-    public BigInteger getSkipCount() {
-        return skipCount;
-    }
-
-    public void setSkipCount(BigInteger skipCount) {
-        this.skipCount = skipCount;
-    }
-
-    @Override
-    public String toString() {
-        return "QueryType [statement=" + statement + ", searchAllVersions=" + searchAllVersions
-                + ", includeAllowableActions=" + includeAllowableActions + ", includeRelationships="
-                + includeRelationships + ", renditionFilter=" + renditionFilter + ", maxItems=" + maxItems
-                + ", skipCount=" + skipCount + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RelationshipTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RelationshipTypeDefinitionImpl.java
deleted file mode 100644
index 9c03a50..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RelationshipTypeDefinitionImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
-
-/**
- * Relationship type definition.
- */
-public class RelationshipTypeDefinitionImpl extends AbstractTypeDefinition implements MutableRelationshipTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<String> allowedSourceTypes;
-    private List<String> allowedTargetTypes;
-
-    public List<String> getAllowedSourceTypeIds() {
-        if (allowedSourceTypes == null) {
-            allowedSourceTypes = new ArrayList<String>();
-        }
-
-        return allowedSourceTypes;
-    }
-
-    public void setAllowedSourceTypes(List<String> allowedSourceTypes) {
-        this.allowedSourceTypes = allowedSourceTypes;
-    }
-
-    public List<String> getAllowedTargetTypeIds() {
-        if (allowedTargetTypes == null) {
-            allowedTargetTypes = new ArrayList<String>();
-        }
-
-        return allowedTargetTypes;
-    }
-
-    public void setAllowedTargetTypes(List<String> allowedTargetTypes) {
-        this.allowedTargetTypes = allowedTargetTypes;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RenditionDataImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RenditionDataImpl.java
deleted file mode 100644
index f29f6c6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RenditionDataImpl.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-
-/**
- * RenditionData implementation.
- */
-public class RenditionDataImpl extends AbstractExtensionData implements RenditionData {
-
-    private static final long serialVersionUID = 1L;
-
-    private String streamId;
-    private String mimeType;
-    private BigInteger length;
-    private String kind;
-    private String title;
-    private BigInteger width;
-    private BigInteger height;
-    private String renditionDocumentId;
-
-    public RenditionDataImpl() {
-    }
-
-    public RenditionDataImpl(String streamId, String mimeType, BigInteger length, String kind, String title,
-            BigInteger width, BigInteger height, String renditionDocumentId) {
-        this.streamId = streamId;
-        this.mimeType = mimeType;
-        this.length = length;
-        this.kind = kind;
-        this.title = title;
-        this.width = width;
-        this.height = height;
-        this.renditionDocumentId = renditionDocumentId;
-    }
-
-    public String getStreamId() {
-        return streamId;
-    }
-
-    public void setStreamId(String streamId) {
-        this.streamId = streamId;
-    }
-
-    public String getMimeType() {
-        return mimeType;
-    }
-
-    public void setMimeType(String mimeType) {
-        this.mimeType = mimeType;
-    }
-
-    public BigInteger getBigLength() {
-        return length;
-    }
-
-    public void setBigLength(BigInteger length) {
-        this.length = length;
-    }
-
-    public String getKind() {
-        return kind;
-    }
-
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public BigInteger getBigHeight() {
-        return height;
-    }
-
-    public void setBigHeight(BigInteger height) {
-        this.height = height;
-    }
-
-    public BigInteger getBigWidth() {
-        return width;
-    }
-
-    public void setBigWidth(BigInteger width) {
-        this.width = width;
-    }
-
-    public String getRenditionDocumentId() {
-        return renditionDocumentId;
-    }
-
-    public void setRenditionDocumentId(String renditionDocumentId) {
-        this.renditionDocumentId = renditionDocumentId;
-    }
-
-    @Override
-    public String toString() {
-        return "RenditionDataImpl [, kind=" + kind + ", title=" + title + ", MIME type=" + mimeType + ", length="
-                + length + ", rendition document id=" + renditionDocumentId + ", stream id=" + streamId + " height="
-                + height + ", width=" + width + "]" + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryCapabilitiesImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryCapabilitiesImpl.java
deleted file mode 100644
index bc5c4cb..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryCapabilitiesImpl.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-
-/**
- * RepositoryCapabilities Implementation.
- */
-public class RepositoryCapabilitiesImpl extends AbstractExtensionData implements RepositoryCapabilities {
-
-    private static final long serialVersionUID = 2L;
-
-    private Boolean allVersionsSearchable;
-    private CapabilityAcl capabilityAcl;
-    private CapabilityChanges capabilityChanges;
-    private CapabilityContentStreamUpdates capabilityContentStreamUpdates;
-    private CapabilityJoin capabilityJoin;
-    private CapabilityQuery capabilityQuery;
-    private CapabilityRenditions capabilityRendition;
-    private Boolean isPwcSearchable;
-    private Boolean isPwcUpdatable;
-    private Boolean supportsGetDescendants;
-    private Boolean supportsGetFolderTree;
-    private CapabilityOrderBy capabilityOrderBy;
-    private Boolean supportsMultifiling;
-    private Boolean supportsUnfiling;
-    private Boolean supportsVersionSpecificFiling;
-    private CreatablePropertyTypes creatablePropertyTypes;
-    private NewTypeSettableAttributes newTypeSettableAttributes;
-
-    /**
-     * Constructor.
-     */
-    public RepositoryCapabilitiesImpl() {
-    }
-
-    public RepositoryCapabilitiesImpl(RepositoryCapabilities data) {
-        allVersionsSearchable = data.isAllVersionsSearchableSupported();
-        capabilityAcl = data.getAclCapability();
-        capabilityChanges = data.getChangesCapability();
-        capabilityContentStreamUpdates = data.getContentStreamUpdatesCapability();
-        capabilityJoin = data.getJoinCapability();
-        capabilityQuery = data.getQueryCapability();
-        capabilityRendition = data.getRenditionsCapability();
-        isPwcSearchable = data.isPwcSearchableSupported();
-        isPwcUpdatable = data.isPwcUpdatableSupported();
-        supportsGetDescendants = data.isGetDescendantsSupported();
-        supportsGetFolderTree = data.isGetFolderTreeSupported();
-        capabilityOrderBy = data.getOrderByCapability();
-        supportsMultifiling = data.isMultifilingSupported();
-        supportsUnfiling = data.isUnfilingSupported();
-        supportsVersionSpecificFiling = data.isVersionSpecificFilingSupported();
-        creatablePropertyTypes = data.getCreatablePropertyTypes();
-        newTypeSettableAttributes = data.getNewTypeSettableAttributes();
-        setExtensions(data.getExtensions());
-    }
-
-    public Boolean isAllVersionsSearchableSupported() {
-        return allVersionsSearchable;
-    }
-
-    public void setAllVersionsSearchable(Boolean allVersionsSearchable) {
-        this.allVersionsSearchable = allVersionsSearchable;
-    }
-
-    public CapabilityAcl getAclCapability() {
-        return capabilityAcl;
-    }
-
-    public void setCapabilityAcl(CapabilityAcl capabilityAcl) {
-        this.capabilityAcl = capabilityAcl;
-    }
-
-    public CapabilityChanges getChangesCapability() {
-        return capabilityChanges;
-    }
-
-    public void setCapabilityChanges(CapabilityChanges capabilityChanges) {
-        this.capabilityChanges = capabilityChanges;
-    }
-
-    public CapabilityContentStreamUpdates getContentStreamUpdatesCapability() {
-        return capabilityContentStreamUpdates;
-    }
-
-    public void setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates capabilityContentStreamUpdates) {
-        this.capabilityContentStreamUpdates = capabilityContentStreamUpdates;
-    }
-
-    public CapabilityJoin getJoinCapability() {
-        return capabilityJoin;
-    }
-
-    public void setCapabilityJoin(CapabilityJoin capabilityJoin) {
-        this.capabilityJoin = capabilityJoin;
-    }
-
-    public CapabilityQuery getQueryCapability() {
-        return capabilityQuery;
-    }
-
-    public void setCapabilityQuery(CapabilityQuery capabilityQuery) {
-        this.capabilityQuery = capabilityQuery;
-    }
-
-    public CapabilityRenditions getRenditionsCapability() {
-        return capabilityRendition;
-    }
-
-    public void setCapabilityRendition(CapabilityRenditions capabilityRendition) {
-        this.capabilityRendition = capabilityRendition;
-    }
-
-    public Boolean isPwcSearchableSupported() {
-        return isPwcSearchable;
-    }
-
-    public void setIsPwcSearchable(Boolean isPwcSearchable) {
-        this.isPwcSearchable = isPwcSearchable;
-    }
-
-    public Boolean isPwcUpdatableSupported() {
-        return isPwcUpdatable;
-    }
-
-    public void setIsPwcUpdatable(Boolean isPwcUpdatable) {
-        this.isPwcUpdatable = isPwcUpdatable;
-    }
-
-    public Boolean isGetDescendantsSupported() {
-        return supportsGetDescendants;
-    }
-
-    public void setSupportsGetDescendants(Boolean supportsGetDescendants) {
-        this.supportsGetDescendants = supportsGetDescendants;
-    }
-
-    public Boolean isGetFolderTreeSupported() {
-        return supportsGetFolderTree;
-    }
-
-    public void setSupportsGetFolderTree(Boolean supportsGetFolderTree) {
-        this.supportsGetFolderTree = supportsGetFolderTree;
-    }
-
-    public CapabilityOrderBy getOrderByCapability() {
-        return capabilityOrderBy;
-    }
-
-    public void setCapabilityOrderBy(CapabilityOrderBy capabilityOrderBy) {
-        this.capabilityOrderBy = capabilityOrderBy;
-    }
-
-    /**
-     * @deprecated use {@link #setCapabilityOrderBy(CapabilityOrderBy)}
-     */
-    @Deprecated
-    public void setOrderByCapability(CapabilityOrderBy capabilityOrderBy) {
-        setCapabilityOrderBy(capabilityOrderBy);
-    }
-
-    public Boolean isMultifilingSupported() {
-        return supportsMultifiling;
-    }
-
-    public void setSupportsMultifiling(Boolean supportsMultifiling) {
-        this.supportsMultifiling = supportsMultifiling;
-    }
-
-    public Boolean isUnfilingSupported() {
-        return supportsUnfiling;
-    }
-
-    public void setSupportsUnfiling(Boolean supportsUnfiling) {
-        this.supportsUnfiling = supportsUnfiling;
-    }
-
-    public Boolean isVersionSpecificFilingSupported() {
-        return supportsVersionSpecificFiling;
-    }
-
-    public void setSupportsVersionSpecificFiling(Boolean supportsVersionSpecificFiling) {
-        this.supportsVersionSpecificFiling = supportsVersionSpecificFiling;
-    }
-
-    public CreatablePropertyTypes getCreatablePropertyTypes() {
-        return creatablePropertyTypes;
-    }
-
-    public void setCreatablePropertyTypes(CreatablePropertyTypes creatablePropertyTypes) {
-        this.creatablePropertyTypes = creatablePropertyTypes;
-    }
-
-    public NewTypeSettableAttributes getNewTypeSettableAttributes() {
-        return newTypeSettableAttributes;
-    }
-
-    public void setNewTypeSettableAttributes(NewTypeSettableAttributes newTypeSettableAttributes) {
-        this.newTypeSettableAttributes = newTypeSettableAttributes;
-    }
-
-    @Override
-    public String toString() {
-        return "Repository Capabilities [all versions searchable=" + allVersionsSearchable + ", capability ACL="
-                + capabilityAcl + ", capability changes=" + capabilityChanges + ", capability content stream updates="
-                + capabilityContentStreamUpdates + ", capability join=" + capabilityJoin + ", capability query="
-                + capabilityQuery + ", capability rendition=" + capabilityRendition + ", is PWC searchable="
-                + isPwcSearchable + ", is PWC updatable=" + isPwcUpdatable + ", supports GetDescendants="
-                + supportsGetDescendants + ", supports GetFolderTree=" + supportsGetFolderTree
-                + ", supports multifiling=" + supportsMultifiling + ", supports unfiling=" + supportsUnfiling
-                + ", supports version specific filing=" + supportsVersionSpecificFiling + ", creatable property types="
-                + creatablePropertyTypes + ", newTypeSettableAttributes=" + newTypeSettableAttributes + "]"
-                + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoBrowserBindingImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoBrowserBindingImpl.java
deleted file mode 100644
index b5039f3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoBrowserBindingImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-/**
- * Repository info data implementation including browser binding specific data.
- */
-public class RepositoryInfoBrowserBindingImpl extends RepositoryInfoImpl {
-
-    private static final long serialVersionUID = 1L;
-
-    private String repositoryUrl;
-    private String rootUrl;
-
-    public String getRepositoryUrl() {
-        return repositoryUrl;
-    }
-
-    public void setRepositoryUrl(String repositoryUrl) {
-        this.repositoryUrl = repositoryUrl;
-    }
-
-    public String getRootUrl() {
-        return rootUrl;
-    }
-
-    public void setRootUrl(String rootUrl) {
-        this.rootUrl = rootUrl;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoImpl.java
deleted file mode 100644
index 374a3f4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/RepositoryInfoImpl.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-/**
- * Repository info data implementation.
- */
-public class RepositoryInfoImpl extends AbstractExtensionData implements RepositoryInfo {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String name;
-    private String description;
-    private String versionSupported;
-    private RepositoryCapabilities capabilities;
-    private String rootFolderId;
-    private AclCapabilities aclCapabilities;
-    private String principalAnonymous;
-    private String principalAnyone;
-    private String thinClientUri;
-    private Boolean changesIncomplete;
-    private List<BaseTypeId> changesOnType;
-    private String latestChangeLogToken;
-    private String vendorName;
-    private String productName;
-    private String productVersion;
-    private List<ExtensionFeature> extensionFeatures;
-
-    /**
-     * Constructor.
-     */
-    public RepositoryInfoImpl() {
-    }
-
-    public RepositoryInfoImpl(RepositoryInfo data) {
-        id = data.getId();
-        name = data.getName();
-        description = data.getDescription();
-        versionSupported = data.getCmisVersionSupported();
-        capabilities = data.getCapabilities();
-        rootFolderId = data.getRootFolderId();
-        aclCapabilities = data.getAclCapabilities();
-        principalAnonymous = data.getPrincipalIdAnonymous();
-        principalAnyone = data.getPrincipalIdAnyone();
-        thinClientUri = data.getThinClientUri();
-        changesIncomplete = data.getChangesIncomplete();
-        changesOnType = data.getChangesOnType();
-        latestChangeLogToken = data.getLatestChangeLogToken();
-        vendorName = data.getVendorName();
-        productName = data.getProductName();
-        productVersion = data.getProductVersion();
-        extensionFeatures = data.getExtensionFeatures();
-        setExtensions(data.getExtensions());
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getCmisVersionSupported() {
-        if (versionSupported == null) {
-            return "1.0";
-        }
-
-        return versionSupported;
-    }
-
-    public void setCmisVersionSupported(String versionSupported) {
-        this.versionSupported = versionSupported;
-    }
-
-    public CmisVersion getCmisVersion() {
-        if (versionSupported == null) {
-            return CmisVersion.CMIS_1_0;
-        }
-
-        try {
-            return CmisVersion.fromValue(versionSupported);
-        } catch (IllegalArgumentException e) {
-            return CmisVersion.CMIS_1_0;
-        }
-    }
-
-    public void setCmisVersion(CmisVersion cmisVersion) {
-        if (cmisVersion == null) {
-            versionSupported = CmisVersion.CMIS_1_0.value();
-        } else {
-            versionSupported = cmisVersion.value();
-        }
-    }
-
-    public RepositoryCapabilities getCapabilities() {
-        return capabilities;
-    }
-
-    public void setCapabilities(RepositoryCapabilities capabilities) {
-        this.capabilities = capabilities;
-    }
-
-    public String getRootFolderId() {
-        return rootFolderId;
-    }
-
-    public void setRootFolder(String rootFolderId) {
-        this.rootFolderId = rootFolderId;
-    }
-
-    public AclCapabilities getAclCapabilities() {
-        return aclCapabilities;
-    }
-
-    public void setAclCapabilities(AclCapabilities aclCapabilities) {
-        this.aclCapabilities = aclCapabilities;
-    }
-
-    public String getPrincipalIdAnonymous() {
-        return principalAnonymous;
-    }
-
-    public void setPrincipalAnonymous(String principalAnonymous) {
-        this.principalAnonymous = principalAnonymous;
-    }
-
-    public String getPrincipalIdAnyone() {
-        return principalAnyone;
-    }
-
-    public void setPrincipalAnyone(String principalAnyone) {
-        this.principalAnyone = principalAnyone;
-    }
-
-    public String getThinClientUri() {
-        return thinClientUri;
-    }
-
-    public void setThinClientUri(String thinClientUri) {
-        this.thinClientUri = thinClientUri;
-    }
-
-    public Boolean getChangesIncomplete() {
-        return changesIncomplete;
-    }
-
-    public void setChangesIncomplete(Boolean changesIncomplete) {
-        this.changesIncomplete = changesIncomplete;
-    }
-
-    public List<BaseTypeId> getChangesOnType() {
-        if (changesOnType == null) {
-            changesOnType = new ArrayList<BaseTypeId>();
-        }
-
-        return changesOnType;
-    }
-
-    public void setChangesOnType(List<BaseTypeId> changesOnType) {
-        this.changesOnType = changesOnType;
-    }
-
-    public String getLatestChangeLogToken() {
-        return latestChangeLogToken;
-    }
-
-    public void setLatestChangeLogToken(String latestChangeLogToken) {
-        this.latestChangeLogToken = latestChangeLogToken;
-    }
-
-    public String getVendorName() {
-        return vendorName;
-    }
-
-    public void setVendorName(String vendorName) {
-        this.vendorName = vendorName;
-    }
-
-    public String getProductName() {
-        return productName;
-    }
-
-    public void setProductName(String productName) {
-        this.productName = productName;
-    }
-
-    public String getProductVersion() {
-        return productVersion;
-    }
-
-    public void setProductVersion(String productVersion) {
-        this.productVersion = productVersion;
-    }
-
-    public List<ExtensionFeature> getExtensionFeatures() {
-        return extensionFeatures;
-    }
-
-    public void setExtensionFeature(List<ExtensionFeature> extensionFeatures) {
-        this.extensionFeatures = extensionFeatures;
-    }
-
-    @Override
-    public String toString() {
-        return "Repository Info [id=" + id + ", name=" + name + ", description=" + description + ", capabilities="
-                + capabilities + ", ACL capabilities=" + aclCapabilities + ", changes incomplete=" + changesIncomplete
-                + ", changes on type=" + changesOnType + ", latest change log token=" + latestChangeLogToken
-                + ", principal anonymous=" + principalAnonymous + ", principal anyone=" + principalAnyone
-                + ", vendor name=" + vendorName + ", product name=" + productName + ", product version="
-                + productVersion + ", root folder id=" + rootFolderId + ", thin client URI=" + thinClientUri
-                + ", version supported=" + versionSupported + ", extension features=" + extensionFeatures + "]"
-                + super.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/SecondaryTypeDefinitionImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/SecondaryTypeDefinitionImpl.java
deleted file mode 100644
index 31f67fa..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/SecondaryTypeDefinitionImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-
-public class SecondaryTypeDefinitionImpl extends AbstractTypeDefinition implements MutableSecondaryTypeDefinition {
-
-    private static final long serialVersionUID = 1L;
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionContainerImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionContainerImpl.java
deleted file mode 100644
index 56cbbdd..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionContainerImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-
-/**
- * TypeDefinitionContainer implementation.
- */
-public class TypeDefinitionContainerImpl extends AbstractExtensionData implements TypeDefinitionContainer {
-
-    private static final long serialVersionUID = 1L;
-
-    private TypeDefinition type;
-    private List<TypeDefinitionContainer> children;
-
-    public TypeDefinitionContainerImpl() {
-    }
-
-    public TypeDefinitionContainerImpl(TypeDefinition typeDef) {
-        type = typeDef;
-        children = new ArrayList<TypeDefinitionContainer>();
-    }
-
-    public TypeDefinition getTypeDefinition() {
-        return type;
-    }
-
-    public void setTypeDefinition(TypeDefinition type) {
-        this.type = type;
-    }
-
-    public List<TypeDefinitionContainer> getChildren() {
-        if (children == null) {
-            children = new ArrayList<TypeDefinitionContainer>();
-        }
-
-        return children;
-    }
-
-    public void setChildren(List<TypeDefinitionContainer> children) {
-        this.children = children;
-    }
-
-    @Override
-    public String toString() {
-        return "Type Definition Container [type=" + type + " ,children=" + children + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionListImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionListImpl.java
deleted file mode 100644
index c26bd5f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeDefinitionListImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-
-/**
- * TypeDefinitionList implementation.
- */
-public class TypeDefinitionListImpl extends AbstractExtensionData implements TypeDefinitionList {
-
-    private static final long serialVersionUID = 1L;
-
-    private List<TypeDefinition> list;
-    private Boolean hasMoreItems = Boolean.FALSE;
-    private BigInteger numItems;
-
-    /**
-     * Default constructor.
-     */
-    public TypeDefinitionListImpl() {
-    }
-
-    /**
-     * Constructor from a list.
-     * 
-     * @param list
-     *            the initial list
-     */
-    public TypeDefinitionListImpl(List<TypeDefinition> list) {
-        this.list = list;
-        this.hasMoreItems = Boolean.FALSE;
-        this.numItems = BigInteger.valueOf(list.size());
-    }
-
-    public List<TypeDefinition> getList() {
-        return list;
-    }
-
-    public void setList(List<TypeDefinition> list) {
-        this.list = list;
-    }
-
-    public Boolean hasMoreItems() {
-        return hasMoreItems;
-    }
-
-    public void setHasMoreItems(Boolean hasMoreItems) {
-        this.hasMoreItems = hasMoreItems;
-    }
-
-    public BigInteger getNumItems() {
-        return numItems;
-    }
-
-    public void setNumItems(BigInteger numItems) {
-        this.numItems = numItems;
-    }
-
-    @Override
-    public String toString() {
-        return "Type Definition List [list=" + list + ", has more items=" + hasMoreItems + ", num items=" + numItems
-                + "]" + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java
deleted file mode 100644
index e1b82fd..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.dataobjects;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-
-public class TypeMutabilityImpl extends ExtensionDataImpl implements TypeMutability {
-
-    private static final long serialVersionUID = 1L;
-
-    private Boolean canCreate;
-    private Boolean canUpdate;
-    private Boolean canDelete;
-
-    public Boolean canCreate() {
-        return canCreate;
-    }
-
-    public void setCanCreate(Boolean canCreate) {
-        this.canCreate = canCreate;
-    }
-
-    public Boolean canUpdate() {
-        return canUpdate;
-    }
-
-    public void setCanUpdate(Boolean canUpdate) {
-        this.canUpdate = canUpdate;
-    }
-
-    public Boolean canDelete() {
-        return canDelete;
-    }
-
-    public void setCanDelete(Boolean canDelete) {
-        this.canDelete = canDelete;
-    }
-
-    @Override
-    public String toString() {
-        return "TypeMutability [canCreate=" + canCreate + ", canUpdate=" + canUpdate + ", canDelete=" + canDelete + "]"
-                + super.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONArray.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONArray.java
deleted file mode 100644
index 9ac90cd..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONArray.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A JSON array. JSONObject supports java.util.List interface.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public class JSONArray extends ArrayList<Object> implements List<Object>, JSONAware, JSONStreamAware {
-    private static final long serialVersionUID = 3957988303675231981L;
-
-    /**
-     * Encode a list into JSON text and write it to out. If this list is also a
-     * JSONStreamAware or a JSONAware, JSONStreamAware and JSONAware specific
-     * behaviours will be ignored at this top level.
-     * 
-     * @see org.json.simple.JSONValue#writeJSONString(Object, Writer)
-     * 
-     * @param list
-     * @param out
-     */
-    public static void writeJSONString(List<Object> list, Writer out) throws IOException {
-        if (list == null) {
-            out.write("null");
-            return;
-        }
-
-        boolean first = true;
-
-        out.write('[');
-        for (Object value : list) {
-            if (first) {
-                first = false;
-            } else {
-                out.write(',');
-            }
-
-            if (value == null) {
-                out.write("null");
-                continue;
-            }
-
-            JSONValue.writeJSONString(value, out);
-        }
-        out.write(']');
-    }
-
-    public void writeJSONString(Writer out) throws IOException {
-        writeJSONString(this, out);
-    }
-
-    /**
-     * Convert a list to JSON text. The result is a JSON array. If this list is
-     * also a JSONAware, JSONAware specific behaviours will be omitted at this
-     * top level.
-     * 
-     * @see org.json.simple.JSONValue#toJSONString(Object)
-     * 
-     * @param list
-     * @return JSON text, or "null" if list is null.
-     */
-    public static String toJSONString(List<Object> list) {
-        if (list == null) {
-            return "null";
-        }
-
-        boolean first = true;
-        StringBuilder sb = new StringBuilder();
-
-        sb.append('[');
-        for (Object value : list) {
-            if (first) {
-                first = false;
-            } else {
-                sb.append(',');
-            }
-
-            if (value == null) {
-                sb.append("null");
-                continue;
-            }
-            sb.append(JSONValue.toJSONString(value));
-        }
-        sb.append(']');
-        return sb.toString();
-    }
-
-    public String toJSONString() {
-        return toJSONString(this);
-    }
-
-    public String toString() {
-        return toJSONString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONAware.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONAware.java
deleted file mode 100644
index 75a4654..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONAware.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-/**
- * Beans that support customized output of JSON text shall implement this
- * interface.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public interface JSONAware {
-    /**
-     * @return JSON text
-     */
-    String toJSONString();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONObject.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONObject.java
deleted file mode 100644
index fc3cdee..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONObject.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * A JSON object. Key value pairs are order by insertion. JSONObject supports
- * java.util.Map interface.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public class JSONObject extends LinkedHashMap<String, Object> implements Map<String, Object>, JSONAware, JSONStreamAware {
-
-    private static final long serialVersionUID = 1;
-
-    @Override
-    public Object put(String key, Object value) {
-        if (key == null) {
-            throw new NullPointerException("JSON key must not be null!");
-        }
-
-        return super.put(key, value);
-    }
-
-    /**
-     * Encode a map into JSON text and write it to out. If this map is also a
-     * JSONAware or JSONStreamAware, JSONAware or JSONStreamAware specific
-     * behaviours will be ignored at this top level.
-     * 
-     * @see org.json.simple.JSONValue#writeJSONString(Object, Writer)
-     * 
-     * @param map
-     * @param out
-     */
-    public static void writeJSONString(Map<String, Object> map, Writer out) throws IOException {
-        if (map == null) {
-            out.write("null");
-            return;
-        }
-
-        boolean first = true;
-
-        out.write('{');
-        for (Map.Entry<String, Object> entry : map.entrySet()) {
-            if (first) {
-                first = false;
-            } else {
-                out.write(',');
-            }
-
-            out.write('\"');
-            if (entry.getKey() == null) {
-                out.write("null");
-            } else {
-                out.write(escape(entry.getKey()));
-            }
-            out.write('\"');
-            out.write(':');
-            JSONValue.writeJSONString(entry.getValue(), out);
-        }
-        out.write('}');
-    }
-
-    public void writeJSONString(Writer out) throws IOException {
-        writeJSONString(this, out);
-    }
-
-    /**
-     * Convert a map to JSON text. The result is a JSON object. If this map is
-     * also a JSONAware, JSONAware specific behaviours will be omitted at this
-     * top level.
-     * 
-     * @see org.json.simple.JSONValue#toJSONString(Object)
-     * 
-     * @param map
-     * @return JSON text, or "null" if map is null.
-     */
-    public static String toJSONString(Map<String, Object> map) {
-        if (map == null) {
-            return "null";
-        }
-
-        StringBuilder sb = new StringBuilder();
-        boolean first = true;
-
-        sb.append('{');
-        for (Map.Entry<String, Object> entry : map.entrySet()) {
-            if (first) {
-                first = false;
-            } else {
-                sb.append(',');
-            }
-
-            toJSONString(entry.getKey(), entry.getValue(), sb);
-        }
-        sb.append('}');
-
-        return sb.toString();
-    }
-
-    public String toJSONString() {
-        return toJSONString(this);
-    }
-
-    private static String toJSONString(String key, Object value, StringBuilder sb) {
-        sb.append('\"');
-        if (key == null) {
-            sb.append("null");
-        } else {
-            JSONValue.escape(key, sb);
-        }
-
-        sb.append('\"').append(':');
-
-        sb.append(JSONValue.toJSONString(value));
-
-        return sb.toString();
-    }
-
-    public String toString() {
-        return toJSONString();
-    }
-
-    public static String toString(String key, Object value) {
-        StringBuilder sb = new StringBuilder();
-        toJSONString(key, value, sb);
-        return sb.toString();
-    }
-
-    /**
-     * Escape quotes, \, /, \r, \n, \b, \f, \t and other control characters
-     * (U+0000 through U+001F). It's the same as JSONValue.escape() only for
-     * compatibility here.
-     * 
-     * @see JSONValue#escape(String)
-     * 
-     * @param s
-     * @return
-     */
-    public static String escape(String s) {
-        return JSONValue.escape(s);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONStreamAware.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONStreamAware.java
deleted file mode 100644
index 622c9e0..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONStreamAware.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * Beans that support customized output of JSON text to a writer shall implement
- * this interface.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public interface JSONStreamAware {
-    /**
-     * write JSON string to out.
-     */
-    void writeJSONString(Writer out) throws IOException;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONValue.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONValue.java
deleted file mode 100644
index b6058f6..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/JSONValue.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.Writer;
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-
-/**
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public final class JSONValue {
-
-    private JSONValue() {
-    }
-
-    /**
-     * Parse JSON text into java object from the input source. Please use
-     * parseWithException() if you don't want to ignore the exception.
-     * 
-     * @see org.json.simple.parser.JSONParser#parse(Reader)
-     * @see #parseWithException(Reader)
-     * 
-     * @param in
-     * @return Instance of the following: org.json.simple.JSONObject,
-     *         org.json.simple.JSONArray, java.lang.String, java.lang.Number,
-     *         java.lang.Boolean, null
-     * 
-     */
-    public static Object parse(Reader in) {
-        try {
-            JSONParser parser = new JSONParser();
-            return parser.parse(in);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    public static Object parse(String s) {
-        StringReader in = new StringReader(s);
-        return parse(in);
-    }
-
-    /**
-     * Parse JSON text into java object from the input source.
-     * 
-     * @see org.json.simple.parser.JSONParser
-     * 
-     * @param in
-     * @return Instance of the following: org.json.simple.JSONObject,
-     *         org.json.simple.JSONArray, java.lang.String, java.lang.Number,
-     *         java.lang.Boolean, null
-     * 
-     * @throws IOException
-     * @throws JSONParseException
-     */
-    public static Object parseWithException(Reader in) throws IOException, JSONParseException {
-        JSONParser parser = new JSONParser();
-        return parser.parse(in);
-    }
-
-    public static Object parseWithException(String s) throws JSONParseException {
-        JSONParser parser = new JSONParser();
-        return parser.parse(s);
-    }
-
-    /**
-     * Encode an object into JSON text and write it to out.
-     * <p>
-     * If this object is a Map or a List, and it's also a JSONStreamAware or a
-     * JSONAware, JSONStreamAware or JSONAware will be considered firstly.
-     * <p>
-     * DO NOT call this method from writeJSONString(Writer) of a class that
-     * implements both JSONStreamAware and (Map or List) with "this" as the
-     * first parameter, use JSONObject.writeJSONString(Map, Writer) or
-     * JSONArray.writeJSONString(List, Writer) instead.
-     * 
-     * @see org.json.simple.JSONObject#writeJSONString(Map, Writer)
-     * @see org.json.simple.JSONArray#writeJSONString(List, Writer)
-     * 
-     * @param value
-     * @param writer
-     */
-    @SuppressWarnings("unchecked")
-    public static void writeJSONString(Object value, Writer out) throws IOException {
-        if (value == null) {
-            out.write("null");
-            return;
-        }
-
-        if (value instanceof String) {
-            out.write('\"');
-            out.write(escape((String) value));
-            out.write('\"');
-            return;
-        }
-
-        if (value instanceof Double) {
-            if (((Double) value).isInfinite() || ((Double) value).isNaN()) {
-                out.write("null");
-            } else {
-                out.write(value.toString());
-            }
-            return;
-        }
-
-        if (value instanceof Float) {
-            if (((Float) value).isInfinite() || ((Float) value).isNaN()) {
-                out.write("null");
-            } else {
-                out.write(value.toString());
-            }
-            return;
-        }
-
-        if (value instanceof BigDecimal) {
-            out.write(((BigDecimal) value).toPlainString());
-            return;
-        }
-
-        if (value instanceof Number) {
-            out.write(value.toString());
-            return;
-        }
-
-        if (value instanceof Boolean) {
-            out.write(value.toString());
-            return;
-        }
-
-        if (value instanceof JSONStreamAware) {
-            ((JSONStreamAware) value).writeJSONString(out);
-            return;
-        }
-
-        if (value instanceof JSONAware) {
-            out.write(((JSONAware) value).toJSONString());
-            return;
-        }
-
-        if (value instanceof Map) {
-            JSONObject.writeJSONString((Map<String, Object>) value, out);
-            return;
-        }
-
-        if (value instanceof List) {
-            JSONArray.writeJSONString((List<Object>) value, out);
-            return;
-        }
-
-        out.write(value.toString());
-    }
-
-    /**
-     * Convert an object to JSON text.
-     * <p>
-     * If this object is a Map or a List, and it's also a JSONAware, JSONAware
-     * will be considered firstly.
-     * <p>
-     * DO NOT call this method from toJSONString() of a class that implements
-     * both JSONAware and Map or List with "this" as the parameter, use
-     * JSONObject.toJSONString(Map) or JSONArray.toJSONString(List) instead.
-     * 
-     * @see org.json.simple.JSONObject#toJSONString(Map)
-     * @see org.json.simple.JSONArray#toJSONString(List)
-     * 
-     * @param value
-     * @return JSON text, or "null" if value is null or it's an NaN or an INF
-     *         number.
-     */
-    @SuppressWarnings("unchecked")
-    public static String toJSONString(Object value) {
-        if (value == null) {
-            return "null";
-        }
-
-        if (value instanceof String) {
-            return "\"" + escape((String) value) + "\"";
-        }
-
-        if (value instanceof Double) {
-            if (((Double) value).isInfinite() || ((Double) value).isNaN()) {
-                return "null";
-            } else {
-                return value.toString();
-            }
-        }
-
-        if (value instanceof Float) {
-            if (((Float) value).isInfinite() || ((Float) value).isNaN()) {
-                return "null";
-            } else {
-                return value.toString();
-            }
-        }
-
-        if (value instanceof BigDecimal) {
-            return ((BigDecimal) value).toPlainString();
-        }
-
-        if (value instanceof Number) {
-            return value.toString();
-        }
-
-        if (value instanceof Boolean) {
-            return value.toString();
-        }
-
-        if (value instanceof JSONAware) {
-            return ((JSONAware) value).toJSONString();
-        }
-
-        if (value instanceof Map) {
-            return JSONObject.toJSONString((Map<String, Object>) value);
-        }
-
-        if (value instanceof List) {
-            return JSONArray.toJSONString((List<Object>) value);
-        }
-
-        return value.toString();
-    }
-
-    /**
-     * Escape quotes, \, /, \r, \n, \b, \f, \t and other control characters
-     * (U+0000 through U+001F).
-     * 
-     * @param s
-     * @return
-     */
-    public static String escape(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-        escape(s, sb);
-        return sb.toString();
-    }
-
-    /**
-     * @param s
-     *            - Must not be null.
-     * @param sb
-     */
-    static void escape(String s, StringBuilder sb) {
-        for (int i = 0; i < s.length(); i++) {
-            char ch = s.charAt(i);
-            switch (ch) {
-            case '"':
-                sb.append("\\\"");
-                break;
-            case '\\':
-                sb.append("\\\\");
-                break;
-            case '\b':
-                sb.append("\\b");
-                break;
-            case '\f':
-                sb.append("\\f");
-                break;
-            case '\n':
-                sb.append("\\n");
-                break;
-            case '\r':
-                sb.append("\\r");
-                break;
-            case '\t':
-                sb.append("\\t");
-                break;
-            case '/':
-                sb.append("\\/");
-                break;
-            default:
-                // Reference: http://www.unicode.org/versions/Unicode5.1.0/
-                if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F')
-                        || (ch >= '\u2000' && ch <= '\u20FF')) {
-                    String ss = Integer.toHexString(ch);
-                    sb.append("\\u");
-                    for (int k = 0; k < 4 - ss.length(); k++) {
-                        sb.append('0');
-                    }
-                    sb.append(ss.toUpperCase());
-                } else {
-                    sb.append(ch);
-                }
-            }
-        }// for
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContainerFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContainerFactory.java
deleted file mode 100644
index bbb903e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContainerFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Container factory for creating containers for JSON object and JSON array.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @see JSONParser#parse(java.io.Reader, ContainerFactory)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public interface ContainerFactory {
-    /**
-     * @return A Map instance to store JSON object, or null if you want to use
-     *         JSONObject.
-     */
-    Map<String, Object> createObjectContainer();
-
-    /**
-     * @return A List instance to store JSON array, or null if you want to use
-     *         JSONArray.
-     */
-    List<Object> creatArrayContainer();
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContentHandler.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContentHandler.java
deleted file mode 100644
index 837c655..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/ContentHandler.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-import java.io.IOException;
-
-/**
- * A simplified and stoppable SAX-like content handler for stream processing of
- * JSON text.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @see org.xml.sax.ContentHandler
- * @see JSONParser#parse(java.io.Reader, ContentHandler, boolean)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public interface ContentHandler {
-    /**
-     * Receive notification of the beginning of JSON processing. The parser will
-     * invoke this method only once.
-     * 
-     * @throws JSONParseException
-     *             - JSONParser will stop and throw the same exception to the
-     *             caller when receiving this exception.
-     */
-    void startJSON() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the end of JSON processing.
-     * 
-     * @throws JSONParseException
-     */
-    void endJSON() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the beginning of a JSON object.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     *             - JSONParser will stop and throw the same exception to the
-     *             caller when receiving this exception.
-     * @see #endJSON
-     */
-    boolean startObject() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the end of a JSON object.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     * 
-     * @see #startObject
-     */
-    boolean endObject() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the beginning of a JSON object entry.
-     * 
-     * @param key
-     *            - Key of a JSON object entry.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     * 
-     * @see #endObjectEntry
-     */
-    boolean startObjectEntry(String key) throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the end of the value of previous object entry.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     * 
-     * @see #startObjectEntry
-     */
-    boolean endObjectEntry() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the beginning of a JSON array.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     * 
-     * @see #endArray
-     */
-    boolean startArray() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the end of a JSON array.
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     * 
-     * @see #startArray
-     */
-    boolean endArray() throws JSONParseException, IOException;
-
-    /**
-     * Receive notification of the JSON primitive values: java.lang.String,
-     * java.lang.Number, java.lang.Boolean null
-     * 
-     * @param value
-     *            - Instance of the following: java.lang.String,
-     *            java.lang.Number, java.lang.Boolean null
-     * 
-     * @return false if the handler wants to stop parsing after return.
-     * @throws JSONParseException
-     */
-    boolean primitive(Object value) throws JSONParseException, IOException;
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParseException.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParseException.java
deleted file mode 100644
index a8067d3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParseException.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-/**
- * ParseException explains why and where the error occurs in source JSON text.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public class JSONParseException extends Exception {
-    private static final long serialVersionUID = -7880698968187728548L;
-
-    public static final int ERROR_UNEXPECTED_CHAR = 0;
-    public static final int ERROR_UNEXPECTED_TOKEN = 1;
-    public static final int ERROR_UNEXPECTED_EXCEPTION = 2;
-
-    private int errorType;
-    private Object unexpectedObject;
-    private int position;
-
-    public JSONParseException(int errorType) {
-        this(-1, errorType, null);
-    }
-
-    public JSONParseException(int errorType, Object unexpectedObject) {
-        this(-1, errorType, unexpectedObject);
-    }
-
-    public JSONParseException(int position, int errorType, Object unexpectedObject) {
-        this.position = position;
-        this.errorType = errorType;
-        this.unexpectedObject = unexpectedObject;
-    }
-
-    public int getErrorType() {
-        return errorType;
-    }
-
-    public void setErrorType(int errorType) {
-        this.errorType = errorType;
-    }
-
-    /**
-     * @see org.json.simple.parser.JSONParser#getPosition()
-     * 
-     * @return The character position (starting with 0) of the input where the
-     *         error occurs.
-     */
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(int position) {
-        this.position = position;
-    }
-
-    /**
-     * @see org.json.simple.parser.Yytoken
-     * 
-     * @return One of the following base on the value of errorType:
-     *         ERROR_UNEXPECTED_CHAR java.lang.Character ERROR_UNEXPECTED_TOKEN
-     *         org.json.simple.parser.Yytoken ERROR_UNEXPECTED_EXCEPTION
-     *         java.lang.Exception
-     */
-    public Object getUnexpectedObject() {
-        return unexpectedObject;
-    }
-
-    public void setUnexpectedObject(Object unexpectedObject) {
-        this.unexpectedObject = unexpectedObject;
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        switch (errorType) {
-        case ERROR_UNEXPECTED_CHAR:
-            sb.append("Unexpected character (").append(unexpectedObject).append(") at position ").append(position)
-                    .append('.');
-            break;
-        case ERROR_UNEXPECTED_TOKEN:
-            sb.append("Unexpected token ").append(unexpectedObject).append(" at position ").append(position)
-                    .append('.');
-            break;
-        case ERROR_UNEXPECTED_EXCEPTION:
-            sb.append("Unexpected exception at position ").append(position).append(": ").append(unexpectedObject);
-            break;
-        default:
-            sb.append("Unkown error at position ").append(position).append('.');
-            break;
-        }
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParser.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParser.java
deleted file mode 100644
index 3f382d2..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/JSONParser.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-
-/**
- * Parser for JSON text. Please note that JSONParser is NOT thread-safe.
- * 
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public class JSONParser {
-    public static final int S_INIT = 0;
-    public static final int S_IN_FINISHED_VALUE = 1; // string, number, boolean,
-                                                     // null, object, array
-    public static final int S_IN_OBJECT = 2;
-    public static final int S_IN_ARRAY = 3;
-    public static final int S_PASSED_PAIR_KEY = 4;
-    public static final int S_IN_PAIR_VALUE = 5;
-    public static final int S_END = 6;
-    public static final int S_IN_ERROR = -1;
-
-    private ArrayDeque<Integer> handlerStatusStack;
-    private Yylex lexer = new Yylex((Reader) null);
-    private Yytoken token = null;
-    private int status = S_INIT;
-
-    private int peekStatus(Deque<Integer> statusStack) {
-        if (statusStack.isEmpty()) {
-            return -1;
-        }
-
-        return statusStack.getFirst();
-    }
-
-    /**
-     * Reset the parser to the initial state without resetting the underlying
-     * reader.
-     * 
-     */
-    public void reset() {
-        token = null;
-        status = S_INIT;
-        handlerStatusStack = null;
-    }
-
-    /**
-     * Reset the parser to the initial state with a new character reader.
-     * 
-     * @param in
-     *            - The new character reader.
-     * @throws IOException
-     * @throws JSONParseException
-     */
-    public void reset(Reader in) {
-        lexer.yyreset(in);
-        reset();
-    }
-
-    /**
-     * @return The position of the beginning of the current token.
-     */
-    public int getPosition() {
-        return lexer.getPosition();
-    }
-
-    public Object parse(String s) throws JSONParseException {
-        return parse(s, (ContainerFactory) null);
-    }
-
-    public Object parse(String s, ContainerFactory containerFactory) throws JSONParseException {
-        StringReader in = new StringReader(s);
-        try {
-            return parse(in, containerFactory);
-        } catch (IOException ie) {
-            /*
-             * Actually it will never happen.
-             */
-            throw new JSONParseException(-1, JSONParseException.ERROR_UNEXPECTED_EXCEPTION, ie);
-        }
-    }
-
-    public Object parse(Reader in) throws IOException, JSONParseException {
-        return parse(in, (ContainerFactory) null);
-    }
-
-    /**
-     * Parse JSON text into java object from the input source.
-     * 
-     * @param in
-     * @param containerFactory
-     *            - Use this factory to createyour own JSON object and JSON
-     *            array containers.
-     * @return Instance of the following: org.json.simple.JSONObject,
-     *         org.json.simple.JSONArray, java.lang.String, java.lang.Number,
-     *         java.lang.Boolean, null
-     * 
-     * @throws IOException
-     * @throws JSONParseException
-     */
-    @SuppressWarnings("unchecked")
-    public Object parse(Reader in, ContainerFactory containerFactory) throws IOException, JSONParseException {
-        reset(in);
-        Deque<Integer> statusStack = new ArrayDeque<Integer>();
-        Deque<Object> valueStack = new ArrayDeque<Object>();
-
-        try {
-            do {
-                nextToken();
-                switch (status) {
-                case S_INIT:
-                    switch (token.type) {
-                    case Yytoken.TYPE_VALUE:
-                        status = S_IN_FINISHED_VALUE;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(token.value);
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(createObjectContainer(containerFactory));
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(createArrayContainer(containerFactory));
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }// inner switch
-                    break;
-
-                case S_IN_FINISHED_VALUE:
-                    if (token.type == Yytoken.TYPE_EOF) {
-                        return valueStack.removeFirst();
-                    } else {
-                        throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                    }
-
-                case S_IN_OBJECT:
-                    switch (token.type) {
-                    case Yytoken.TYPE_COMMA:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        if (token.value instanceof String) {
-                            String key = (String) token.value;
-                            valueStack.addFirst(key);
-                            status = S_PASSED_PAIR_KEY;
-                            statusStack.addFirst(Integer.valueOf(status));
-                        } else {
-                            status = S_IN_ERROR;
-                        }
-                        break;
-                    case Yytoken.TYPE_RIGHT_BRACE:
-                        if (valueStack.size() > 1) {
-                            statusStack.removeFirst();
-                            valueStack.removeFirst();
-                            status = peekStatus(statusStack);
-                        } else {
-                            status = S_IN_FINISHED_VALUE;
-                        }
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                        break;
-                    }// inner switch
-                    break;
-
-                case S_PASSED_PAIR_KEY:
-                    switch (token.type) {
-                    case Yytoken.TYPE_COLON:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        statusStack.removeFirst();
-                        String key = (String) valueStack.removeFirst();
-                        Map<String, Object> parent = (Map<String, Object>) valueStack.getFirst();
-                        parent.put(key, token.value);
-                        status = peekStatus(statusStack);
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        statusStack.removeFirst();
-                        key = (String) valueStack.removeFirst();
-                        parent = (Map<String, Object>) valueStack.getFirst();
-                        List<Object> newArray = createArrayContainer(containerFactory);
-                        parent.put(key, newArray);
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(newArray);
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        statusStack.removeFirst();
-                        key = (String) valueStack.removeFirst();
-                        parent = (Map<String, Object>) valueStack.getFirst();
-                        Map<String, Object> newObject = createObjectContainer(containerFactory);
-                        parent.put(key, newObject);
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(newObject);
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }
-                    break;
-
-                case S_IN_ARRAY:
-                    switch (token.type) {
-                    case Yytoken.TYPE_COMMA:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        List<Object> val = (List<Object>) valueStack.getFirst();
-                        val.add(token.value);
-                        break;
-                    case Yytoken.TYPE_RIGHT_SQUARE:
-                        if (valueStack.size() > 1) {
-                            statusStack.removeFirst();
-                            valueStack.removeFirst();
-                            status = peekStatus(statusStack);
-                        } else {
-                            status = S_IN_FINISHED_VALUE;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        val = (List<Object>) valueStack.getFirst();
-                        Map<String, Object> newObject = createObjectContainer(containerFactory);
-                        val.add(newObject);
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(newObject);
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        val = (List<Object>) valueStack.getFirst();
-                        List<Object> newArray = createArrayContainer(containerFactory);
-                        val.add(newArray);
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        valueStack.addFirst(newArray);
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }// inner switch
-                    break;
-                case S_IN_ERROR:
-                    throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                }// switch
-                if (status == S_IN_ERROR) {
-                    throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                }
-            } while (token.type != Yytoken.TYPE_EOF);
-        } catch (IOException ie) {
-            throw ie;
-        }
-
-        throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-    }
-
-    private void nextToken() throws JSONParseException, IOException {
-        token = lexer.yylex();
-        if (token == null) {
-            token = new Yytoken(Yytoken.TYPE_EOF, null);
-        }
-    }
-
-    private Map<String, Object> createObjectContainer(ContainerFactory containerFactory) {
-        if (containerFactory == null) {
-            return new JSONObject();
-        }
-
-        Map<String, Object> m = containerFactory.createObjectContainer();
-
-        if (m == null) {
-            return new JSONObject();
-        }
-
-        return m;
-    }
-
-    private List<Object> createArrayContainer(ContainerFactory containerFactory) {
-        if (containerFactory == null) {
-            return new JSONArray();
-        }
-
-        List<Object> l = containerFactory.creatArrayContainer();
-
-        if (l == null) {
-            return new JSONArray();
-        }
-
-        return l;
-    }
-
-    public void parse(String s, ContentHandler contentHandler) throws JSONParseException {
-        parse(s, contentHandler, false);
-    }
-
-    public void parse(String s, ContentHandler contentHandler, boolean isResume) throws JSONParseException {
-        StringReader in = new StringReader(s);
-        try {
-            parse(in, contentHandler, isResume);
-        } catch (IOException ie) {
-            /*
-             * Actually it will never happen.
-             */
-            throw new JSONParseException(-1, JSONParseException.ERROR_UNEXPECTED_EXCEPTION, ie);
-        }
-    }
-
-    public void parse(Reader in, ContentHandler contentHandler) throws IOException, JSONParseException {
-        parse(in, contentHandler, false);
-    }
-
-    /**
-     * Stream processing of JSON text.
-     * 
-     * @see ContentHandler
-     * 
-     * @param in
-     * @param contentHandler
-     * @param isResume
-     *            - Indicates if it continues previous parsing operation. If set
-     *            to true, resume parsing the old stream, and parameter 'in'
-     *            will be ignored. If this method is called for the first time
-     *            in this instance, isResume will be ignored.
-     * 
-     * @throws IOException
-     * @throws JSONParseException
-     */
-    public void parse(Reader in, ContentHandler contentHandler, boolean isResume) throws IOException,
-            JSONParseException {
-        if (!isResume) {
-            reset(in);
-            handlerStatusStack = new ArrayDeque<Integer>();
-        } else {
-            if (handlerStatusStack == null) {
-                isResume = false;
-                reset(in);
-                handlerStatusStack = new ArrayDeque<Integer>();
-            }
-        }
-
-        ArrayDeque<Integer> statusStack = handlerStatusStack;
-
-        try {
-            do {
-                switch (status) {
-                case S_INIT:
-                    contentHandler.startJSON();
-                    nextToken();
-                    switch (token.type) {
-                    case Yytoken.TYPE_VALUE:
-                        status = S_IN_FINISHED_VALUE;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.primitive(token.value)) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startObject()) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startArray()) {
-                            return;
-                        }
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }// inner switch
-                    break;
-
-                case S_IN_FINISHED_VALUE:
-                    nextToken();
-                    if (token.type == Yytoken.TYPE_EOF) {
-                        contentHandler.endJSON();
-                        status = S_END;
-                        return;
-                    } else {
-                        status = S_IN_ERROR;
-                        throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                    }
-
-                case S_IN_OBJECT:
-                    nextToken();
-                    switch (token.type) {
-                    case Yytoken.TYPE_COMMA:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        if (token.value instanceof String) {
-                            String key = (String) token.value;
-                            status = S_PASSED_PAIR_KEY;
-                            statusStack.addFirst(Integer.valueOf(status));
-                            if (!contentHandler.startObjectEntry(key)) {
-                                return;
-                            }
-                        } else {
-                            status = S_IN_ERROR;
-                        }
-                        break;
-                    case Yytoken.TYPE_RIGHT_BRACE:
-                        if (statusStack.size() > 1) {
-                            statusStack.removeFirst();
-                            status = peekStatus(statusStack);
-                        } else {
-                            status = S_IN_FINISHED_VALUE;
-                        }
-                        if (!contentHandler.endObject()) {
-                            return;
-                        }
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                        break;
-                    }// inner switch
-                    break;
-
-                case S_PASSED_PAIR_KEY:
-                    nextToken();
-                    switch (token.type) {
-                    case Yytoken.TYPE_COLON:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        statusStack.removeFirst();
-                        status = peekStatus(statusStack);
-                        if (!contentHandler.primitive(token.value)) {
-                            return;
-                        }
-                        if (!contentHandler.endObjectEntry()) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        statusStack.removeFirst();
-                        statusStack.addFirst(Integer.valueOf(S_IN_PAIR_VALUE));
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startArray()) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        statusStack.removeFirst();
-                        statusStack.addFirst(Integer.valueOf(S_IN_PAIR_VALUE));
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startObject()) {
-                            return;
-                        }
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }
-                    break;
-
-                case S_IN_PAIR_VALUE:
-                    /*
-                     * S_IN_PAIR_VALUE is just a marker to indicate the end of
-                     * an object entry, it doesn't proccess any token, therefore
-                     * delay consuming token until next round.
-                     */
-                    statusStack.removeFirst();
-                    status = peekStatus(statusStack);
-                    if (!contentHandler.endObjectEntry()) {
-                        return;
-                    }
-                    break;
-
-                case S_IN_ARRAY:
-                    nextToken();
-                    switch (token.type) {
-                    case Yytoken.TYPE_COMMA:
-                        break;
-                    case Yytoken.TYPE_VALUE:
-                        if (!contentHandler.primitive(token.value)) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_RIGHT_SQUARE:
-                        if (statusStack.size() > 1) {
-                            statusStack.removeFirst();
-                            status = peekStatus(statusStack);
-                        } else {
-                            status = S_IN_FINISHED_VALUE;
-                        }
-                        if (!contentHandler.endArray()) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_BRACE:
-                        status = S_IN_OBJECT;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startObject()) {
-                            return;
-                        }
-                        break;
-                    case Yytoken.TYPE_LEFT_SQUARE:
-                        status = S_IN_ARRAY;
-                        statusStack.addFirst(Integer.valueOf(status));
-                        if (!contentHandler.startArray()) {
-                            return;
-                        }
-                        break;
-                    default:
-                        status = S_IN_ERROR;
-                    }// inner switch
-                    break;
-
-                case S_END:
-                    return;
-
-                case S_IN_ERROR:
-                    throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                }// switch
-                if (status == S_IN_ERROR) {
-                    throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-                }
-            } while (token.type != Yytoken.TYPE_EOF);
-        } catch (IOException ie) {
-            status = S_IN_ERROR;
-            throw ie;
-        } catch (JSONParseException pe) {
-            status = S_IN_ERROR;
-            throw pe;
-        } catch (RuntimeException re) {
-            status = S_IN_ERROR;
-            throw re;
-        }
-
-        status = S_IN_ERROR;
-        throw new JSONParseException(getPosition(), JSONParseException.ERROR_UNEXPECTED_TOKEN, token);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yylex.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yylex.java
deleted file mode 100644
index a85901a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yylex.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- */
-class Yylex {
-
-    /** This character denotes the end of file */
-    public static final int YYEOF = -1;
-
-    /** initial size of the lookahead buffer */
-    private static final int ZZ_BUFFERSIZE = 16384;
-
-    /** lexical states */
-    public static final int YYINITIAL = 0;
-    public static final int STRING_BEGIN = 2;
-
-    /**
-     * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
-     * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the
-     * beginning of a line l is of the form l = 2*k, k a non negative integer
-     */
-    private static final int ZZ_LEXSTATE[] = { 0, 0, 1, 1 };
-
-    /**
-     * Translates characters to character classes
-     */
-    private static final String ZZ_CMAP_PACKED = "\11\0\1\7\1\7\2\0\1\7\22\0\1\7\1\0\1\11\10\0"
-            + "\1\6\1\31\1\2\1\4\1\12\12\3\1\32\6\0\4\1\1\5" + "\1\1\24\0\1\27\1\10\1\30\3\0\1\22\1\13\2\1\1\21"
-            + "\1\14\5\0\1\23\1\0\1\15\3\0\1\16\1\24\1\17\1\20" + "\5\0\1\25\1\0\1\26\uff82\0";
-
-    /**
-     * Translates characters to character classes
-     */
-    private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
-
-    /**
-     * Translates DFA states to action switch labels.
-     */
-    private static final int[] ZZ_ACTION = zzUnpackAction();
-
-    private static final String ZZ_ACTION_PACKED_0 = "\2\0\2\1\1\2\1\3\1\4\3\1\1\5\1\6"
-            + "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\5\0" + "\1\14\1\16\1\17\1\20\1\21\1\22\1\23\1\24"
-            + "\1\0\1\25\1\0\1\25\4\0\1\26\1\27\2\0" + "\1\30";
-
-    private static int[] zzUnpackAction() {
-        int[] result = new int[45];
-        zzUnpackAction(ZZ_ACTION_PACKED_0, 0, result);
-        return result;
-    }
-
-    private static int zzUnpackAction(String packed, int offset, int[] result) {
-        int i = 0; /* index in packed string */
-        int j = offset; /* index in unpacked array */
-        int l = packed.length();
-        while (i < l) {
-            int count = packed.charAt(i++);
-            int value = packed.charAt(i++);
-            do {
-                result[j++] = value;
-            } while (--count > 0);
-        }
-        return j;
-    }
-
-    /**
-     * Translates a state to a row index in the transition table
-     */
-    private static final int[] ZZ_ROWMAP = zzUnpackRowMap();
-
-    private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\33\0\66\0\121\0\154\0\207\0\66\0\242"
-            + "\0\275\0\330\0\66\0\66\0\66\0\66\0\66\0\66"
-            + "\0\363\0\u010e\0\66\0\u0129\0\u0144\0\u015f\0\u017a\0\u0195"
-            + "\0\66\0\66\0\66\0\66\0\66\0\66\0\66\0\66"
-            + "\0\u01b0\0\u01cb\0\u01e6\0\u01e6\0\u0201\0\u021c\0\u0237\0\u0252" + "\0\66\0\66\0\u026d\0\u0288\0\66";
-
-    private static int[] zzUnpackRowMap() {
-        int[] result = new int[45];
-        zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, 0, result);
-        return result;
-    }
-
-    private static int zzUnpackRowMap(String packed, int offset, int[] result) {
-        int i = 0; /* index in packed string */
-        int j = offset; /* index in unpacked array */
-        int l = packed.length();
-        while (i < l) {
-            int high = packed.charAt(i++) << 16;
-            result[j++] = high | packed.charAt(i++);
-        }
-        return j;
-    }
-
-    /**
-     * The transition table of the DFA
-     */
-    private static final int ZZ_TRANS[] = { 2, 2, 3, 4, 2, 2, 2, 5, 2, 6, 2, 2, 7, 8, 2, 9, 2, 2, 2, 2, 2, 10, 11, 12,
-            13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-            16, 16, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, 4, 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, 16, 16, 16, 16, 16, 16, 16, 16, -1, -1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-            16, 16, 16, -1, -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, 34, 35, -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, 39, -1, 39, -1, 39, -1, -1, -1, -1, -1, 39, 39, -1, -1, -1, -1, 39, 39, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, 33, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, 42, -1, 42, -1, 42, -1, -1, -1, -1, -1, 42, 42, -1, -1, -1, -1, 42, 42, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, 43, -1, 43, -1, 43, -1, -1, -1, -1, -1, 43, 43, -1, -1, -1, -1, 43, 43, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, 44, -1, 44, -1, 44, -1, -1, -1, -1, -1, 44, 44, -1, -1, -1, -1, 44, 44, -1, -1, -1, -1, -1,
-            -1, -1, -1, };
-
-    /* error codes */
-    private static final int ZZ_UNKNOWN_ERROR = 0;
-    private static final int ZZ_NO_MATCH = 1;
-    private static final int ZZ_PUSHBACK_2BIG = 2;
-
-    /* error messages for the codes above */
-    private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input",
-            "Error: pushback value was too large" };
-
-    /**
-     * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
-     */
-    private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute();
-
-    private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\1\11\3\1\1\11\3\1\6\11\2\1\1\11"
-            + "\5\0\10\11\1\0\1\1\1\0\1\1\4\0\2\11" + "\2\0\1\11";
-
-    private static int[] zzUnpackAttribute() {
-        int[] result = new int[45];
-        zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, 0, result);
-        return result;
-    }
-
-    private static int zzUnpackAttribute(String packed, int offset, int[] result) {
-        int i = 0; /* index in packed string */
-        int j = offset; /* index in unpacked array */
-        int l = packed.length();
-        while (i < l) {
-            int count = packed.charAt(i++);
-            int value = packed.charAt(i++);
-            do {
-                result[j++] = value;
-            } while (--count > 0);
-        }
-        return j;
-    }
-
-    /** the input device */
-    private java.io.Reader zzReader;
-
-    /** the current state of the DFA */
-    private int zzState;
-
-    /** the current lexical state */
-    private int zzLexicalState = YYINITIAL;
-
-    /**
-     * this buffer contains the current text to be matched and is the source of
-     * the yytext() string
-     */
-    private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
-
-    /** the textposition at the last accepting state */
-    private int zzMarkedPos;
-
-    /** the current text position in the buffer */
-    private int zzCurrentPos;
-
-    /** startRead marks the beginning of the yytext() string in the buffer */
-    private int zzStartRead;
-
-    /**
-     * endRead marks the last character in the buffer, that has been read from
-     * input
-     */
-    private int zzEndRead;
-
-    /** the number of characters up to the start of the matched text */
-    private int yychar;
-
-    /** zzAtEOF == true <=> the scanner is at the EOF */
-    private boolean zzAtEOF;
-
-    /* user code: */
-    private StringBuilder sb = new StringBuilder();
-
-    int getPosition() {
-        return yychar;
-    }
-
-    /**
-     * Creates a new scanner There is also a java.io.InputStream version of this
-     * constructor.
-     * 
-     * @param in
-     *            the java.io.Reader to read input from.
-     */
-    Yylex(java.io.Reader in) {
-        this.zzReader = in;
-    }
-
-    /**
-     * Unpacks the compressed character translation table.
-     * 
-     * @param packed
-     *            the packed character translation table
-     * @return the unpacked character translation table
-     */
-    private static char[] zzUnpackCMap(String packed) {
-        char[] map = new char[0x10000];
-        int i = 0; /* index in packed string */
-        int j = 0; /* index in unpacked array */
-        while (i < 90) {
-            int count = packed.charAt(i++);
-            char value = packed.charAt(i++);
-            do {
-                map[j++] = value;
-            } while (--count > 0);
-        }
-        return map;
-    }
-
-    /**
-     * Refills the input buffer.
-     * 
-     * @return <code>false</code>, iff there was new input.
-     * 
-     * @exception java.io.IOException
-     *                if any I/O-Error occurs
-     */
-    private boolean zzRefill() throws java.io.IOException {
-
-        /* first: make room (if you can) */
-        if (zzStartRead > 0) {
-            System.arraycopy(zzBuffer, zzStartRead, zzBuffer, 0, zzEndRead - zzStartRead);
-
-            /* translate stored positions */
-            zzEndRead -= zzStartRead;
-            zzCurrentPos -= zzStartRead;
-            zzMarkedPos -= zzStartRead;
-            zzStartRead = 0;
-        }
-
-        /* is the buffer big enough? */
-        if (zzCurrentPos >= zzBuffer.length) {
-            /* if not: blow it up */
-            char newBuffer[] = new char[zzCurrentPos * 2];
-            System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
-            zzBuffer = newBuffer;
-        }
-
-        /* finally: fill the buffer with new input */
-        int numRead = zzReader.read(zzBuffer, zzEndRead, zzBuffer.length - zzEndRead);
-
-        if (numRead > 0) {
-            zzEndRead += numRead;
-            return false;
-        }
-        // unlikely but not impossible: read 0 characters, but not at end of
-        // stream
-        if (numRead == 0) {
-            int c = zzReader.read();
-            if (c == -1) {
-                return true;
-            } else {
-                zzBuffer[zzEndRead++] = (char) c;
-                return false;
-            }
-        }
-
-        // numRead < 0
-        return true;
-    }
-
-    /**
-     * Closes the input stream.
-     */
-    public final void yyclose() throws java.io.IOException {
-        zzAtEOF = true; /* indicate end of file */
-        zzEndRead = zzStartRead; /* invalidate buffer */
-
-        if (zzReader != null) {
-            zzReader.close();
-        }
-    }
-
-    /**
-     * Resets the scanner to read from a new input stream. Does not close the
-     * old reader.
-     * 
-     * All internal variables are reset, the old input stream <b>cannot</b> be
-     * reused (internal buffer is discarded and lost). Lexical state is set to
-     * <tt>ZZ_INITIAL</tt>.
-     * 
-     * @param reader
-     *            the new input stream
-     */
-    public final void yyreset(java.io.Reader reader) {
-        zzReader = reader;
-        zzAtEOF = false;
-        zzEndRead = 0;
-        zzStartRead = 0;
-        zzCurrentPos = 0;
-        zzMarkedPos = 0;
-        yychar = 0;
-        zzLexicalState = YYINITIAL;
-    }
-
-    /**
-     * Returns the current lexical state.
-     */
-    public final int yystate() {
-        return zzLexicalState;
-    }
-
-    /**
-     * Enters a new lexical state
-     * 
-     * @param newState
-     *            the new lexical state
-     */
-    public final void yybegin(int newState) {
-        zzLexicalState = newState;
-    }
-
-    /**
-     * Returns the text matched by the current regular expression.
-     */
-    public final String yytext() {
-        return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
-    }
-
-    /**
-     * Returns the character at position <tt>pos</tt> from the matched text.
-     * 
-     * It is equivalent to yytext().charAt(pos), but faster
-     * 
-     * @param pos
-     *            the position of the character to fetch. A value from 0 to
-     *            yylength()-1.
-     * 
-     * @return the character at position pos
-     */
-    public final char yycharat(int pos) {
-        return zzBuffer[zzStartRead + pos];
-    }
-
-    /**
-     * Returns the length of the matched text region.
-     */
-    public final int yylength() {
-        return zzMarkedPos - zzStartRead;
-    }
-
-    /**
-     * Reports an error that occured while scanning.
-     * 
-     * In a wellformed scanner (no or only correct usage of yypushback(int) and
-     * a match-all fallback rule) this method will only be called with things
-     * that "Can't Possibly Happen". If this method is called, something is
-     * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.).
-     * 
-     * Usual syntax/scanner level error handling should be done in error
-     * fallback rules.
-     * 
-     * @param errorCode
-     *            the code of the errormessage to display
-     */
-    private void zzScanError(int errorCode) {
-        String message;
-        try {
-            message = ZZ_ERROR_MSG[errorCode];
-        } catch (ArrayIndexOutOfBoundsException e) {
-            message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
-        }
-
-        throw new Error(message);
-    }
-
-    /**
-     * Pushes the specified amount of characters back into the input stream.
-     * 
-     * They will be read again by then next call of the scanning method
-     * 
-     * @param number
-     *            the number of characters to be read again. This number must
-     *            not be greater than yylength()!
-     */
-    public void yypushback(int number) {
-        if (number > yylength()) {
-            zzScanError(ZZ_PUSHBACK_2BIG);
-        }
-
-        zzMarkedPos -= number;
-    }
-
-    /**
-     * Resumes scanning until the next regular expression is matched, the end of
-     * input is encountered or an I/O-Error occurs.
-     * 
-     * @return the next token
-     * @exception java.io.IOException
-     *                if any I/O-Error occurs
-     */
-    public Yytoken yylex() throws java.io.IOException, JSONParseException {
-        int zzInput;
-        int zzAction;
-
-        // cached fields:
-        int zzCurrentPosL;
-        int zzMarkedPosL;
-        int zzEndReadL = zzEndRead;
-        char[] zzBufferL = zzBuffer;
-        char[] zzCMapL = ZZ_CMAP;
-
-        int[] zzTransL = ZZ_TRANS;
-        int[] zzRowMapL = ZZ_ROWMAP;
-        int[] zzAttrL = ZZ_ATTRIBUTE;
-
-        while (true) {
-            zzMarkedPosL = zzMarkedPos;
-
-            yychar += zzMarkedPosL - zzStartRead;
-
-            zzAction = -1;
-
-            zzCurrentPosL = zzMarkedPosL;
-            zzCurrentPos = zzMarkedPosL;
-            zzStartRead = zzMarkedPosL;
-
-            zzState = ZZ_LEXSTATE[zzLexicalState];
-
-            zzForAction: {
-                while (true) {
-
-                    if (zzCurrentPosL < zzEndReadL) {
-                        zzInput = zzBufferL[zzCurrentPosL++];
-                    } else if (zzAtEOF) {
-                        zzInput = YYEOF;
-                        break zzForAction;
-                    } else {
-                        // store back cached positions
-                        zzCurrentPos = zzCurrentPosL;
-                        zzMarkedPos = zzMarkedPosL;
-                        boolean eof = zzRefill();
-                        // get translated positions and possibly new buffer
-                        zzCurrentPosL = zzCurrentPos;
-                        zzMarkedPosL = zzMarkedPos;
-                        zzBufferL = zzBuffer;
-                        zzEndReadL = zzEndRead;
-                        if (eof) {
-                            zzInput = YYEOF;
-                            break zzForAction;
-                        } else {
-                            zzInput = zzBufferL[zzCurrentPosL++];
-                        }
-                    }
-                    int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];
-                    if (zzNext == -1) {
-                        break zzForAction;
-                    }
-                    zzState = zzNext;
-
-                    int zzAttributes = zzAttrL[zzState];
-                    if ((zzAttributes & 1) == 1) {
-                        zzAction = zzState;
-                        zzMarkedPosL = zzCurrentPosL;
-                        if ((zzAttributes & 8) == 8) {
-                            break zzForAction;
-                        }
-                    }
-
-                }
-            }
-
-            // store back cached position
-            zzMarkedPos = zzMarkedPosL;
-
-            switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-            case 11: {
-                sb.append(yytext());
-                break;
-            }
-            case 25:
-                break;
-            case 4: {
-                sb.delete(0, sb.length());
-                yybegin(STRING_BEGIN);
-                break;
-            }
-            case 26:
-                break;
-            case 16: {
-                sb.append('\b');
-                break;
-            }
-            case 27:
-                break;
-            case 6: {
-                return new Yytoken(Yytoken.TYPE_RIGHT_BRACE, null);
-            }
-            case 28:
-                break;
-            case 23: {
-                Boolean val = Boolean.valueOf(yytext());
-                return new Yytoken(Yytoken.TYPE_VALUE, val);
-            }
-            case 29:
-                break;
-            case 22: {
-                return new Yytoken(Yytoken.TYPE_VALUE, null);
-            }
-            case 30:
-                break;
-            case 13: {
-                yybegin(YYINITIAL);
-                return new Yytoken(Yytoken.TYPE_VALUE, sb.toString());
-            }
-            case 31:
-                break;
-            case 12: {
-                sb.append('\\');
-                break;
-            }
-            case 32:
-                break;
-            case 21: {
-                BigDecimal val = new BigDecimal(yytext());
-                return new Yytoken(Yytoken.TYPE_VALUE, val);
-            }
-            case 33:
-                break;
-            case 1: {
-                throw new JSONParseException(yychar, JSONParseException.ERROR_UNEXPECTED_CHAR,
-                        Character.valueOf(yycharat(0)));
-            }
-            case 34:
-                break;
-            case 8: {
-                return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE, null);
-            }
-            case 35:
-                break;
-            case 19: {
-                sb.append('\r');
-                break;
-            }
-            case 36:
-                break;
-            case 15: {
-                sb.append('/');
-                break;
-            }
-            case 37:
-                break;
-            case 10: {
-                return new Yytoken(Yytoken.TYPE_COLON, null);
-            }
-            case 38:
-                break;
-            case 14: {
-                sb.append('"');
-                break;
-            }
-            case 39:
-                break;
-            case 5: {
-                return new Yytoken(Yytoken.TYPE_LEFT_BRACE, null);
-            }
-            case 40:
-                break;
-            case 17: {
-                sb.append('\f');
-                break;
-            }
-            case 41:
-                break;
-            case 24: {
-                try {
-                    int ch = Integer.parseInt(yytext().substring(2), 16);
-                    sb.append((char) ch);
-                } catch (Exception e) {
-                    throw new JSONParseException(yychar, JSONParseException.ERROR_UNEXPECTED_EXCEPTION, e);
-                }
-            }
-            case 42:
-                break;
-            case 20: {
-                sb.append('\t');
-                break;
-            }
-            case 43:
-                break;
-            case 7:
-                return new Yytoken(Yytoken.TYPE_LEFT_SQUARE, null);
-            case 44:
-                break;
-            case 2: {
-                BigInteger val = new BigInteger(yytext());
-                return new Yytoken(Yytoken.TYPE_VALUE, val);
-            }
-            case 45:
-                break;
-            case 18: {
-                sb.append('\n');
-                break;
-            }
-            case 46:
-                break;
-            case 9:
-                return new Yytoken(Yytoken.TYPE_COMMA, null);
-            case 47:
-                break;
-            case 3:
-                break;
-            case 48:
-                break;
-            default:
-                if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-                    zzAtEOF = true;
-                    return null;
-                } else {
-                    zzScanError(ZZ_NO_MATCH);
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yytoken.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yytoken.java
deleted file mode 100644
index 5f47211..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/json/parser/Yytoken.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json.parser;
-
-/**
- * (Taken from JSON.simple <http://code.google.com/p/json-simple/> and modified
- * for OpenCMIS.)
- * 
- * @author FangYidong<fangyidong@yahoo.com.cn>
- */
-public class Yytoken {
-    public static final int TYPE_VALUE = 0;// JSON primitive value:
-                                           // string,number,boolean,null
-    public static final int TYPE_LEFT_BRACE = 1;
-    public static final int TYPE_RIGHT_BRACE = 2;
-    public static final int TYPE_LEFT_SQUARE = 3;
-    public static final int TYPE_RIGHT_SQUARE = 4;
-    public static final int TYPE_COMMA = 5;
-    public static final int TYPE_COLON = 6;
-    public static final int TYPE_EOF = -1;// end of file
-
-    public int type = 0;
-    public Object value = null;
-
-    public Yytoken(int type, Object value) {
-        this.type = type;
-        this.value = value;
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        switch (type) {
-        case TYPE_VALUE:
-            sb.append("VALUE(").append(value).append(')');
-            break;
-        case TYPE_LEFT_BRACE:
-            sb.append("LEFT BRACE({)");
-            break;
-        case TYPE_RIGHT_BRACE:
-            sb.append("RIGHT BRACE(})");
-            break;
-        case TYPE_LEFT_SQUARE:
-            sb.append("LEFT SQUARE([)");
-            break;
-        case TYPE_RIGHT_SQUARE:
-            sb.append("RIGHT SQUARE(])");
-            break;
-        case TYPE_COMMA:
-            sb.append("COMMA(,)");
-            break;
-        case TYPE_COLON:
-            sb.append("COLON(:)");
-            break;
-        case TYPE_EOF:
-            sb.append("END OF FILE");
-            break;
-        default:
-            assert false;
-        }
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java
deleted file mode 100644
index e5edb5b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java
+++ /dev/null
@@ -1,1331 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.server;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractCmisService implements CmisService, ObjectInfoHandler {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractCmisService.class);
-
-    private Map<String, ObjectInfo> objectInfoMap;
-    private boolean addObjectInfos = true;
-
-    // --- repository service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required. Convenience implementation is present.</li>
-     * </ul>
-     */
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        RepositoryInfo result = null;
-
-        List<RepositoryInfo> repositories = getRepositoryInfos(extension);
-        if (repositories != null) {
-            for (RepositoryInfo ri : repositories) {
-                if (ri.getId().equals(repositoryId)) {
-                    result = ri;
-                    break;
-                }
-            }
-        }
-
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Repository '" + repositoryId + "' does not exist!");
-        }
-
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * </ul>
-     */
-    public abstract List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * </ul>
-     */
-    public abstract TypeDefinitionList getTypeChildren(String repositoryId, String typeId,
-            Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional. Convenience implementation is present.</li>
-     * </ul>
-     */
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        // check depth
-        int d = (depth == null ? -1 : depth.intValue());
-        if (d == 0) {
-            throw new CmisInvalidArgumentException("Depth must not be 0!");
-        }
-        if (typeId == null) {
-            d = -1;
-        }
-
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-
-        TypeDefinitionList children = getTypeChildren(repositoryId, typeId, includePropertyDefinitions,
-                BigInteger.valueOf(Integer.MAX_VALUE), BigInteger.ZERO, null);
-
-        if (children != null && isNotEmpty(children.getList())) {
-            for (TypeDefinition td : children.getList()) {
-                TypeDefinitionContainerImpl tdc = new TypeDefinitionContainerImpl(td);
-                addTypeChildren(repositoryId, includePropertyDefinitions, (d > 0 ? d - 1 : -1), tdc);
-                result.add(tdc);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Helper method for
-     * {@link #getTypeDescendants(String, String, BigInteger, Boolean, ExtensionsData)}
-     * .
-     */
-    private void addTypeChildren(String repositoryId, Boolean includePropertyDefinitions, int depth,
-            TypeDefinitionContainerImpl container) {
-
-        if (depth == 0) {
-            return;
-        }
-
-        TypeDefinitionList children = getTypeChildren(repositoryId, container.getTypeDefinition().getId(),
-                includePropertyDefinitions, BigInteger.valueOf(Integer.MAX_VALUE), BigInteger.ZERO, null);
-
-        if (children != null && isNotEmpty(children.getList())) {
-            List<TypeDefinitionContainer> list = new ArrayList<TypeDefinitionContainer>();
-            container.setChildren(list);
-
-            for (TypeDefinition td : children.getList()) {
-                TypeDefinitionContainerImpl tdc = new TypeDefinitionContainerImpl(td);
-                addTypeChildren(repositoryId, includePropertyDefinitions, (depth > 0 ? depth - 1 : -1), tdc);
-                list.add(tdc);
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * </ul>
-     */
-    public abstract TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Introduced in CMIS 1.1</li>
-     * </ul>
-     */
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Introduced in CMIS 1.1</li>
-     * </ul>
-     */
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Introduced in CMIS 1.1</li>
-     * </ul>
-     */
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- navigation service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * <li>Object infos should contain the folder and all returned children.</li>
-     * </ul>
-     */
-    public abstract ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the folder and all returned descendants.</li>
-     * </ul>
-     */
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the folder and all returned descendants.</li>
-     * </ul>
-     */
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * <li>Object infos should contain the object and all returned parents.</li>
-     * </ul>
-     */
-    public abstract List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned parent folder.</li>
-     * </ul>
-     */
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the folder and the returned objects.</li>
-     * </ul>
-     */
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- object service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub</li>
-     * <li>Implementation is optional. Convenience implementation is present.</li>
-     * <li>Object infos should contain the newly created object.</li>
-     * </ul>
-     */
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        // check properties
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        // check object type id
-        PropertyData<?> obbjectTypeIdProperty = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        if (obbjectTypeIdProperty == null || !(obbjectTypeIdProperty.getFirstValue() instanceof String)) {
-            throw new CmisInvalidArgumentException("Property '" + PropertyIds.OBJECT_TYPE_ID + "' must be set!");
-        }
-
-        // get the type
-        String objectTypeId = obbjectTypeIdProperty.getFirstValue().toString();
-        TypeDefinition type = getTypeDefinition(repositoryId, objectTypeId, null);
-
-        // create object
-        String newId;
-        switch (type.getBaseTypeId()) {
-        case CMIS_DOCUMENT:
-            newId = createDocument(repositoryId, properties, folderId, contentStream, versioningState, policies, null,
-                    null, extension);
-            break;
-        case CMIS_FOLDER:
-            newId = createFolder(repositoryId, properties, folderId, policies, null, null, extension);
-            break;
-        case CMIS_POLICY:
-            newId = createPolicy(repositoryId, properties, folderId, policies, null, null, extension);
-            break;
-        case CMIS_ITEM:
-            newId = createItem(repositoryId, properties, folderId, policies, null, null, extension);
-            break;
-        default:
-            newId = null;
-        }
-
-        // check new object id
-        if (newId == null) {
-            throw new CmisRuntimeException("Creation failed!");
-        }
-
-        // return the new object id
-        return newId;
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the newly created object.</li>
-     * </ul>
-     */
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional. Convenience implementation is present.</li>
-     * </ul>
-     */
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return getObject(repositoryId, objectId, "cmis:objectId", true, IncludeRelationships.NONE, "cmis:none", false,
-                false, extension).getAllowableActions();
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is required.</li>
-     * <li>Object infos should contain the returned object.</li>
-     * </ul>
-     */
-    public abstract ObjectData getObject(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension);
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional. Convenience implementation is present.</li>
-     * </ul>
-     */
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        return getObject(repositoryId, objectId, filter, false, IncludeRelationships.NONE, "cmis:none", false, false,
-                extension).getProperties();
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned object.</li>
-     * </ul>
-     */
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the updated object.</li>
-     * </ul>
-     */
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Introduced in CMIS 1.1</li>
-     * </ul>
-     */
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the moved object.</li>
-     * </ul>
-     */
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional. Convenience implementation is present
-     * (forwards to
-     * {@link #deleteObjectOrCancelCheckOut(String, String, Boolean, ExtensionsData)}
-     * ).</li>
-     * </ul>
-     */
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, extension);
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Introduced in CMIS 1.1</li>
-     * </ul>
-     */
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- versioning service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the checked out object.</li>
-     * </ul>
-     */
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the checked in object.</li>
-     * </ul>
-     */
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned object.</li>
-     * </ul>
-     */
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Local</li>
-     * <li>Implementation is optional. Convenience implementation is present, if
-     * {@link #getObjectOfLatestVersion(String, String, String, Boolean, String, Boolean, IncludeRelationships, String, Boolean, Boolean, ExtensionsData)}
-     * is implemented.</li>
-     * </ul>
-     */
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        return getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, false,
-                IncludeRelationships.NONE, "cmis:none", false, false, extension).getProperties();
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned objects.</li>
-     * </ul>
-     */
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- discovery service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned objects.</li>
-     * </ul>
-     */
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- multi filing service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the added object.</li>
-     * </ul>
-     */
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the removed object.</li>
-     * </ul>
-     */
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- relationship service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the object and the returned relationship
-     * objects.</li>
-     * </ul>
-     */
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- ACL service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- policy service ---
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the applied policy object.</li>
-     * </ul>
-     */
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * <li>Object infos should contain the returned policy objects.</li>
-     * </ul>
-     */
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub, Web Services, Browser, Local</li>
-     * <li>Implementation is optional.</li>
-     * </ul>
-     */
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        throw new CmisNotSupportedException("Not supported!");
-    }
-
-    // --- server specific ---
-
-    /**
-     * Returns the object info map.
-     */
-    private Map<String, ObjectInfo> getObjectInfoMap() {
-        if (objectInfoMap == null) {
-            objectInfoMap = new HashMap<String, ObjectInfo>();
-        }
-
-        return objectInfoMap;
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * <p>
-     * <b>Implementation Hints:</b>
-     * <ul>
-     * <li>Bindings: AtomPub</li>
-     * <li>If the object info is not found, the object info will be assembled.
-     * To do that the repository info, the object, the object parent, the object
-     * history and the base type definitions will be fetched. If you want to
-     * change this behavior, override this method.</li>
-     * </ul>
-     */
-    public ObjectInfo getObjectInfo(String repositoryId, String objectId) {
-        Map<String, ObjectInfo> oim = getObjectInfoMap();
-        ObjectInfo info = oim.get(objectId);
-        if (info == null) {
-            // object info has not been found -> create one
-            try {
-                // switch off object info collection to avoid side effects
-                addObjectInfos = false;
-
-                // get the object and its info
-                ObjectData object = getObject(repositoryId, objectId, null, Boolean.TRUE, IncludeRelationships.BOTH,
-                        "*", Boolean.TRUE, Boolean.FALSE, null);
-                info = getObjectInfoIntern(repositoryId, object);
-
-                // switch on object info collection
-                addObjectInfos = true;
-
-                // add object info
-                addObjectInfo(info);
-            } catch (Exception e) {
-                info = null;
-
-                if (LOG.isTraceEnabled()) {
-                    LOG.trace("Getting the object info for object {} in repository {}  failed: {}", objectId,
-                            repositoryId, e.toString(), e);
-                }
-            } finally {
-                addObjectInfos = true;
-            }
-        }
-        return info;
-    }
-
-    /**
-     * Collects the {@link ObjectInfo} about an object.
-     * 
-     * @param repositoryId
-     *            the repository id
-     * @param object
-     *            the object
-     * @return the collected object info
-     */
-    protected ObjectInfo getObjectInfoIntern(String repositoryId, ObjectData object) {
-        // if the object has no properties, stop here
-        if (object.getProperties() == null || object.getProperties().getProperties() == null) {
-            throw new CmisRuntimeException("No properties!");
-        }
-
-        ObjectInfoImpl info = new ObjectInfoImpl();
-
-        // get the repository info
-        RepositoryInfo repositoryInfo = null;
-        try {
-            repositoryInfo = getRepositoryInfo(repositoryId, null);
-        } catch (CmisRuntimeException e) {
-            LOG.error("getRepositoryInfo returned an error while compiling object info for object {}.", object.getId(),
-                    e);
-            throw e;
-        }
-
-        // general properties
-        info.setObject(object);
-        info.setId(object.getId());
-        info.setName(getStringProperty(object, PropertyIds.NAME));
-        info.setCreatedBy(getStringProperty(object, PropertyIds.CREATED_BY));
-        info.setCreationDate(getDateTimeProperty(object, PropertyIds.CREATED_BY));
-        info.setLastModificationDate(getDateTimeProperty(object, PropertyIds.LAST_MODIFICATION_DATE));
-        info.setTypeId(getIdProperty(object, PropertyIds.OBJECT_TYPE_ID));
-        info.setBaseType(object.getBaseTypeId());
-
-        // versioning
-        info.setIsCurrentVersion(object.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT);
-        info.setWorkingCopyId(null);
-        info.setWorkingCopyOriginalId(null);
-
-        info.setVersionSeriesId(getIdProperty(object, PropertyIds.VERSION_SERIES_ID));
-        if (info.getVersionSeriesId() != null) {
-            Boolean isLatest = getBooleanProperty(object, PropertyIds.IS_LATEST_VERSION);
-            info.setIsCurrentVersion(isLatest == null ? true : isLatest.booleanValue());
-
-            Boolean isCheckedOut = getBooleanProperty(object, PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-            if (isCheckedOut != null && isCheckedOut.booleanValue()) {
-                info.setWorkingCopyId(getIdProperty(object, PropertyIds.VERSION_SERIES_CHECKED_OUT_ID));
-
-                // get latest version
-                try {
-                    List<ObjectData> versions = getAllVersions(repositoryId, object.getId(), info.getVersionSeriesId(),
-                            null, Boolean.FALSE, null);
-                    if (isNotEmpty(versions)) {
-                        info.setWorkingCopyOriginalId(versions.get(0).getId());
-                    }
-                } catch (CmisNotSupportedException nse) {
-                    if (LOG.isWarnEnabled()) {
-                        LOG.warn("getAllVersions is not implemented! Object info for object {} might be incorrect.",
-                                info.getId(), nse);
-                    }
-                }
-            }
-        }
-
-        // content
-        String fileName = getStringProperty(object, PropertyIds.CONTENT_STREAM_FILE_NAME);
-        String mimeType = getStringProperty(object, PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        String streamId = getIdProperty(object, PropertyIds.CONTENT_STREAM_ID);
-        BigInteger length = getIntegerProperty(object, PropertyIds.CONTENT_STREAM_LENGTH);
-        boolean hasContent = fileName != null || mimeType != null || streamId != null || length != null;
-        if (hasContent) {
-            info.setHasContent(hasContent);
-            info.setContentType(mimeType);
-            info.setFileName(fileName);
-        } else {
-            info.setHasContent(false);
-            info.setContentType(null);
-            info.setFileName(null);
-        }
-
-        // parent
-        if (object.getBaseTypeId() == BaseTypeId.CMIS_RELATIONSHIP) {
-            info.setHasParent(false);
-        } else if (object.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-            info.setHasParent(!object.getId().equals(repositoryInfo.getRootFolderId()));
-        } else {
-            try {
-                List<ObjectParentData> parents = getObjectParents(repositoryId, object.getId(), null, Boolean.FALSE,
-                        IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, null);
-                info.setHasParent(isNotEmpty(parents));
-            } catch (CmisInvalidArgumentException e) {
-                info.setHasParent(false);
-            } catch (CmisNotSupportedException nse) {
-                if (LOG.isWarnEnabled()) {
-                    LOG.warn("getObjectParents is not implemented! Object info for object {} might be incorrect.",
-                            info.getId(), nse);
-                }
-            }
-        }
-
-        // policies and relationships
-        info.setSupportsRelationships(false);
-        info.setSupportsPolicies(false);
-
-        try {
-            TypeDefinitionList baseTypesList = getTypeChildren(repositoryId, null, Boolean.FALSE,
-                    BigInteger.valueOf(6), BigInteger.ZERO, null);
-            for (TypeDefinition type : baseTypesList.getList()) {
-                if (BaseTypeId.CMIS_RELATIONSHIP.value().equals(type.getId())) {
-                    info.setSupportsRelationships(true);
-                } else if (BaseTypeId.CMIS_POLICY.value().equals(type.getId())) {
-                    info.setSupportsPolicies(true);
-                }
-            }
-        } catch (CmisNotSupportedException nse) {
-            if (LOG.isWarnEnabled()) {
-                LOG.warn("getTypeChildren is not implemented! Object info for object {} might be incorrect.",
-                        info.getId(), nse);
-            }
-        }
-
-        // renditions
-        info.setRenditionInfos(null);
-        List<RenditionData> renditions = object.getRenditions();
-        if (isNotEmpty(renditions)) {
-            List<RenditionInfo> renditionInfos = new ArrayList<RenditionInfo>();
-            for (RenditionData rendition : renditions) {
-                RenditionInfoImpl renditionInfo = new RenditionInfoImpl();
-                renditionInfo.setId(rendition.getStreamId());
-                renditionInfo.setKind(rendition.getKind());
-                renditionInfo.setContentType(rendition.getMimeType());
-                renditionInfo.setTitle(rendition.getTitle());
-                renditionInfo.setLength(rendition.getBigLength());
-                renditionInfos.add(renditionInfo);
-            }
-            info.setRenditionInfos(renditionInfos);
-        }
-
-        // relationships
-        info.setRelationshipSourceIds(null);
-        info.setRelationshipTargetIds(null);
-        List<ObjectData> relationships = object.getRelationships();
-        if (isNotEmpty(relationships)) {
-            List<String> sourceIds = new ArrayList<String>();
-            List<String> targetIds = new ArrayList<String>();
-            for (ObjectData relationship : relationships) {
-                String sourceId = getIdProperty(relationship, PropertyIds.SOURCE_ID);
-                String targetId = getIdProperty(relationship, PropertyIds.TARGET_ID);
-                if (object.getId().equals(sourceId)) {
-                    sourceIds.add(relationship.getId());
-                }
-                if (object.getId().equals(targetId)) {
-                    targetIds.add(relationship.getId());
-                }
-            }
-            if (isNotEmpty(sourceIds)) {
-                info.setRelationshipSourceIds(sourceIds);
-            }
-            if (isNotEmpty(targetIds)) {
-                info.setRelationshipTargetIds(targetIds);
-            }
-        }
-
-        // global settings
-        info.setHasAcl(false);
-        info.setSupportsDescendants(false);
-        info.setSupportsFolderTree(false);
-
-        RepositoryCapabilities capabilities = repositoryInfo.getCapabilities();
-        if (capabilities != null) {
-            info.setHasAcl(capabilities.getAclCapability() == CapabilityAcl.DISCOVER
-                    || capabilities.getAclCapability() == CapabilityAcl.MANAGE);
-            if (object.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-                info.setSupportsDescendants(Boolean.TRUE.equals(capabilities.isGetDescendantsSupported()));
-                info.setSupportsFolderTree(Boolean.TRUE.equals(capabilities.isGetFolderTreeSupported()));
-            }
-        }
-
-        return info;
-    }
-
-    /**
-     * Adds an object info.
-     */
-    public void addObjectInfo(ObjectInfo objectInfo) {
-        if (!addObjectInfos) {
-            return;
-        }
-
-        if (objectInfo != null && objectInfo.getId() != null) {
-            getObjectInfoMap().put(objectInfo.getId(), objectInfo);
-        }
-    }
-
-    /**
-     * Clears the object info map.
-     */
-    public void clearObjectInfos() {
-        objectInfoMap = null;
-    }
-
-    public void close() {
-        clearObjectInfos();
-    }
-
-    // --- helpers ---
-
-    protected String getStringProperty(ObjectData object, String name) {
-        PropertyData<?> property = object.getProperties().getProperties().get(name);
-        if (property instanceof PropertyString) {
-            return ((PropertyString) property).getFirstValue();
-        }
-        return null;
-    }
-
-    protected String getIdProperty(ObjectData object, String name) {
-        PropertyData<?> property = object.getProperties().getProperties().get(name);
-        if (property instanceof PropertyId) {
-            return ((PropertyId) property).getFirstValue();
-        }
-        return null;
-    }
-
-    protected GregorianCalendar getDateTimeProperty(ObjectData object, String name) {
-        PropertyData<?> property = object.getProperties().getProperties().get(name);
-        if (property instanceof PropertyDateTime) {
-            return ((PropertyDateTime) property).getFirstValue();
-        }
-        return null;
-    }
-
-    protected Boolean getBooleanProperty(ObjectData object, String name) {
-        PropertyData<?> property = object.getProperties().getProperties().get(name);
-        if (property instanceof PropertyBoolean) {
-            return ((PropertyBoolean) property).getFirstValue();
-        }
-        return null;
-    }
-
-    protected BigInteger getIntegerProperty(ObjectData object, String name) {
-        PropertyData<?> property = object.getProperties().getProperties().get(name);
-        if (property instanceof PropertyInteger) {
-            return ((PropertyInteger) property).getFirstValue();
-        }
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractServiceFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractServiceFactory.java
deleted file mode 100644
index 8a87651..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractServiceFactory.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.server;
-
-import java.io.File;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-
-public abstract class AbstractServiceFactory implements CmisServiceFactory {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-    }
-
-    @Override
-    public void destroy() {
-    }
-
-    @Override
-    public abstract CmisService getService(CallContext context);
-
-    /**
-     * Returns the Java temp directory.
-     */
-    @Override
-    public File getTempDirectory() {
-        String tempDir = System.getProperty("java.io.tmpdir");
-        return new File(tempDir);
-    }
-
-    /**
-     * Returns {@code false}, do not encrypt temporary files.
-     */
-    @Override
-    public boolean encryptTempFiles() {
-        return false;
-    }
-
-    /**
-     * Returns a threshold of 4 MiB.
-     */
-    @Override
-    public int getMemoryThreshold() {
-        return 4 * 1024 * 1024;
-    }
-
-    /**
-     * Returns a max size of 4 GiB.
-     */
-    @Override
-    public long getMaxContentSize() {
-        return (long) 4 * 1024 * 1024 * 1024;
-    }
-
-    /**
-     * Returns {@code null} to indicate that the default, temp files based
-     * implementation should be used.
-     */
-    @Override
-    public TempStoreOutputStream getTempFileOutputStream(String repositoryId) {
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/LinkInfoImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/LinkInfoImpl.java
deleted file mode 100644
index e25b963..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/LinkInfoImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.server;
-
-import org.apache.chemistry.opencmis.commons.server.LinkInfo;
-
-/**
- * Implementation of the {@link LinkInfo} interface.
- */
-public class LinkInfoImpl implements LinkInfo {
-
-    private String rel;
-    private String href;
-    private String type = null;
-    private String id = null;
-
-    public LinkInfoImpl() {
-    }
-
-    public LinkInfoImpl(String rel, String href) {
-        this.rel = rel;
-        this.href = href;
-    }
-
-    public LinkInfoImpl(String rel, String href, String type) {
-        this(rel, href);
-        this.type = type;
-    }
-
-    public LinkInfoImpl(String rel, String href, String type, String id) {
-        this(rel, href, type);
-        this.id = id;
-    }
-
-    public String getRel() {
-        return rel;
-    }
-
-    public void setRel(String rel) {
-        this.rel = rel;
-    }
-
-    public String getHref() {
-        return href;
-    }
-
-    public void setHref(String href) {
-        this.href = href;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/ObjectInfoImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/ObjectInfoImpl.java
deleted file mode 100644
index acfc43e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/ObjectInfoImpl.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.server;
-
-import java.io.Serializable;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.server.LinkInfo;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-
-/**
- * Implementation of the {@link ObjectInfo} interface.
- */
-public class ObjectInfoImpl implements ObjectInfo, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String atomId;
-    private String name;
-    private String createdBy;
-    private GregorianCalendar creationDate;
-    private GregorianCalendar lastModificationDate;
-    private String typeId;
-    private BaseTypeId baseTypeId;
-    private boolean isCurrentVersion = true;
-    private String versionSeriesId = null;
-    private String workingCopyId = null;
-    private String workingCopyOriginalId = null;
-    private boolean hasContent = true;
-    private String contentType = null;
-    private String fileName = null;
-    private List<RenditionInfo> renditionInfos = null;
-    private boolean supportsRelationships = false;
-    private boolean supportsPolicies = false;
-    private boolean hasAcl = false;
-    private boolean hasParent = true;
-    private boolean supportsDescendants = false;
-    private boolean supportsFolderTree = false;
-    private List<String> relationshipSourceIds = null;
-    private List<String> relationshipTargetIds = null;
-    private List<LinkInfo> additionalLinks = null;
-    private ObjectData object = null;
-
-    public ObjectInfoImpl() {
-    }
-
-    public ObjectInfoImpl(String id, BaseTypeId baseObjectTypeId) {
-        this.id = id;
-        baseTypeId = baseObjectTypeId;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getAtomId() {
-        return atomId;
-    }
-
-    public void setAtomId(String atomId) {
-        this.atomId = atomId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCreatedBy() {
-        return createdBy;
-    }
-
-    public void setCreatedBy(String createdBy) {
-        this.createdBy = createdBy;
-    }
-
-    public GregorianCalendar getCreationDate() {
-        return creationDate;
-    }
-
-    public void setCreationDate(GregorianCalendar creationDate) {
-        this.creationDate = creationDate;
-    }
-
-    public GregorianCalendar getLastModificationDate() {
-        return lastModificationDate;
-    }
-
-    public void setLastModificationDate(GregorianCalendar lastModificationDate) {
-        this.lastModificationDate = lastModificationDate;
-    }
-
-    public String getTypeId() {
-        return typeId;
-    }
-
-    public void setTypeId(String typeId) {
-        this.typeId = typeId;
-    }
-
-    public BaseTypeId getBaseType() {
-        return baseTypeId;
-    }
-
-    public void setBaseType(BaseTypeId baseObjectTypeId) {
-        this.baseTypeId = baseObjectTypeId;
-    }
-
-    public boolean isCurrentVersion() {
-        return isCurrentVersion;
-    }
-
-    public void setIsCurrentVersion(boolean currentVersion) {
-        this.isCurrentVersion = currentVersion;
-    }
-
-    public String getVersionSeriesId() {
-        return versionSeriesId;
-    }
-
-    public void setVersionSeriesId(String versionSeriesId) {
-        this.versionSeriesId = versionSeriesId;
-    }
-
-    public String getWorkingCopyId() {
-        return workingCopyId;
-    }
-
-    public void setWorkingCopyId(String workingCopyId) {
-        this.workingCopyId = workingCopyId;
-    }
-
-    public String getWorkingCopyOriginalId() {
-        return workingCopyOriginalId;
-    }
-
-    public void setWorkingCopyOriginalId(String workingCopyOriginalId) {
-        this.workingCopyOriginalId = workingCopyOriginalId;
-    }
-
-    public boolean hasContent() {
-        return hasContent;
-    }
-
-    public void setHasContent(boolean hasContent) {
-        this.hasContent = hasContent;
-    }
-
-    public String getContentType() {
-        return contentType;
-    }
-
-    public void setContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public List<RenditionInfo> getRenditionInfos() {
-        return renditionInfos;
-    }
-
-    public void setRenditionInfos(List<RenditionInfo> renditions) {
-        this.renditionInfos = renditions;
-    }
-
-    public boolean supportsRelationships() {
-        return supportsRelationships;
-    }
-
-    public void setSupportsRelationships(boolean supportsRelationships) {
-        this.supportsRelationships = supportsRelationships;
-    }
-
-    public boolean supportsPolicies() {
-        return supportsPolicies;
-    }
-
-    public void setSupportsPolicies(boolean supportsPolicies) {
-        this.supportsPolicies = supportsPolicies;
-    }
-
-    public boolean hasAcl() {
-        return hasAcl;
-    }
-
-    public void setHasAcl(boolean hasAcl) {
-        this.hasAcl = hasAcl;
-    }
-
-    public boolean hasParent() {
-        return hasParent;
-    }
-
-    public void setHasParent(boolean hasParent) {
-        this.hasParent = hasParent;
-    }
-
-    public boolean supportsDescendants() {
-        return supportsDescendants;
-    }
-
-    public void setSupportsDescendants(boolean supportsDescendants) {
-        this.supportsDescendants = supportsDescendants;
-    }
-
-    public boolean supportsFolderTree() {
-        return supportsFolderTree;
-    }
-
-    public void setSupportsFolderTree(boolean supportsFolderTree) {
-        this.supportsFolderTree = supportsFolderTree;
-    }
-
-    public List<String> getRelationshipSourceIds() {
-        return relationshipSourceIds;
-    }
-
-    public void setRelationshipSourceIds(List<String> relationshipSourceIds) {
-        this.relationshipSourceIds = relationshipSourceIds;
-    }
-
-    public List<String> getRelationshipTargetIds() {
-        return relationshipTargetIds;
-    }
-
-    public void setRelationshipTargetIds(List<String> relationshipTargetIds) {
-        this.relationshipTargetIds = relationshipTargetIds;
-    }
-
-    public List<LinkInfo> getAdditionalLinks() {
-        return additionalLinks;
-    }
-
-    public void setAdditionalLinks(List<LinkInfo> additionalLinks) {
-        this.additionalLinks = additionalLinks;
-    }
-
-    public ObjectData getObject() {
-        return object;
-    }
-
-    public void setObject(ObjectData object) {
-        this.object = object;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/RenditionInfoImpl.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/RenditionInfoImpl.java
deleted file mode 100644
index 3bf8334..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/RenditionInfoImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.server;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-
-/**
- * Implementation of the {@link RenditionInfo} interface.
- */
-public class RenditionInfoImpl implements RenditionInfo, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String contentType;
-    private String kind;
-    private String title;
-    private BigInteger length;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getContenType() {
-        return contentType;
-    }
-
-    public void setContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    public String getKind() {
-        return kind;
-    }
-
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public BigInteger getLength() {
-        return length;
-    }
-
-    public void setLength(BigInteger length) {
-        this.length = length;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractJreWssTube.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractJreWssTube.java
deleted file mode 100644
index ddf139b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractJreWssTube.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import javax.xml.namespace.QName;
-
-import com.sun.xml.internal.ws.api.pipe.Tube;
-import com.sun.xml.internal.ws.api.pipe.TubeCloner;
-import com.sun.xml.internal.ws.api.pipe.helper.AbstractFilterTubeImpl;
-
-/**
- * Abstract WS-Security tube for OpenCMIS.
- */
-public abstract class AbstractJreWssTube extends AbstractFilterTubeImpl {
-
-    protected static final String WSSE_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
-    protected static final String WSU_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
-    protected static final QName WSSE = new QName(WSSE_NAMESPACE, "Security");
-
-    public AbstractJreWssTube(Tube next) {
-        super(next);
-    }
-
-    protected AbstractJreWssTube(AbstractFilterTubeImpl that, TubeCloner cloner) {
-        super(that, cloner);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractWssTube.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractWssTube.java
deleted file mode 100644
index ca27ce8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/AbstractWssTube.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import javax.xml.namespace.QName;
-
-import com.sun.xml.ws.api.pipe.Tube;
-import com.sun.xml.ws.api.pipe.TubeCloner;
-import com.sun.xml.ws.api.pipe.helper.AbstractFilterTubeImpl;
-
-/**
- * Abstract WS-Security tube for OpenCMIS.
- */
-public abstract class AbstractWssTube extends AbstractFilterTubeImpl {
-
-    protected static final String WSSE_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
-    protected static final String WSU_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
-    protected static final QName WSSE = new QName(WSSE_NAMESPACE, "Security");
-
-    public AbstractWssTube(Tube next) {
-        super(next);
-    }
-
-    protected AbstractWssTube(AbstractFilterTubeImpl that, TubeCloner cloner) {
-        super(that, cloner);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubeAssembler.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubeAssembler.java
deleted file mode 100644
index 291526d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubeAssembler.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import org.apache.chemistry.opencmis.commons.impl.tube.client.JreWssMUTube;
-
-import com.sun.xml.internal.ws.api.pipe.ClientTubeAssemblerContext;
-import com.sun.xml.internal.ws.api.pipe.ServerTubeAssemblerContext;
-import com.sun.xml.internal.ws.api.pipe.Tube;
-import com.sun.xml.internal.ws.api.pipe.TubelineAssembler;
-
-/**
- * Assembler for OpenCMIS client and server tubelines.
- */
-public class OpenCMISJreTubeAssembler implements TubelineAssembler {
-
-    public Tube createClient(ClientTubeAssemblerContext context) {
-        Tube head = context.createTransportTube();
-        head = context.createSecurityTube(head);
-        head = context.createWsaTube(head);
-        head = new JreWssMUTube(context.getBinding(), head);
-
-        return context.createHandlerTube(head);
-    }
-
-    public Tube createServer(ServerTubeAssemblerContext context) {
-        Tube head = context.getTerminalTube();
-        // no JAX-WS JRE server support
-        head = context.createHandlerTube(head);
-        head = context.createMonitoringTube(head);
-        head = context.createServerMUTube(head);
-        head = context.createWsaTube(head);
-        head = context.createSecurityTube(head);
-
-        return head;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubelineAssemblerFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubelineAssemblerFactory.java
deleted file mode 100644
index a067e0a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISJreTubelineAssemblerFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import com.sun.xml.internal.ws.api.BindingID;
-import com.sun.xml.internal.ws.api.pipe.TubelineAssembler;
-import com.sun.xml.internal.ws.api.pipe.TubelineAssemblerFactory;
-
-/**
- * Assembler Factory for OpenCMIS client and server tubelines.
- */
-public class OpenCMISJreTubelineAssemblerFactory extends TubelineAssemblerFactory {
-
-    @Override
-    public TubelineAssembler doCreate(BindingID bindingID) {
-        return new OpenCMISJreTubeAssembler();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubeAssembler.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubeAssembler.java
deleted file mode 100644
index 9cb170b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubeAssembler.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import org.apache.chemistry.opencmis.commons.impl.tube.client.WssMUTube;
-import org.apache.chemistry.opencmis.commons.impl.tube.server.WssTube;
-
-import com.sun.xml.ws.api.pipe.ClientTubeAssemblerContext;
-import com.sun.xml.ws.api.pipe.ServerTubeAssemblerContext;
-import com.sun.xml.ws.api.pipe.Tube;
-import com.sun.xml.ws.api.pipe.TubelineAssembler;
-
-/**
- * Assembler for OpenCMIS client and server tubelines.
- */
-public class OpenCMISTubeAssembler implements TubelineAssembler {
-
-    public Tube createClient(ClientTubeAssemblerContext context) {
-        Tube head = context.createTransportTube();
-        head = context.createSecurityTube(head);
-        head = context.createWsaTube(head);
-        head = new WssMUTube(context.getBinding(), head);
-
-        return context.createHandlerTube(head);
-    }
-
-    public Tube createServer(ServerTubeAssemblerContext context) {
-        Tube head = context.getTerminalTube();
-        head = new WssTube(head);
-        head = context.createHandlerTube(head);
-        head = context.createMonitoringTube(head);
-        head = context.createServerMUTube(head);
-        head = context.createWsaTube(head);
-        head = context.createSecurityTube(head);
-
-        return head;
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubelineAssemblerFactory.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubelineAssemblerFactory.java
deleted file mode 100644
index becee7a..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/OpenCMISTubelineAssemblerFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube;
-
-import com.sun.xml.ws.api.BindingID;
-import com.sun.xml.ws.api.pipe.TubelineAssembler;
-import com.sun.xml.ws.api.pipe.TubelineAssemblerFactory;
-
-/**
- * Assembler Factory for OpenCMIS client and server tubelines.
- */
-public class OpenCMISTubelineAssemblerFactory extends TubelineAssemblerFactory {
-
-    @Override
-    public TubelineAssembler doCreate(BindingID bindingID) {
-        return new OpenCMISTubeAssembler();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/JreWssMUTube.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/JreWssMUTube.java
deleted file mode 100644
index aa19225..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/JreWssMUTube.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube.client;
-
-import java.lang.reflect.Method;
-
-import javax.xml.namespace.QName;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.tube.AbstractJreWssTube;
-
-import com.sun.xml.internal.ws.api.SOAPVersion;
-import com.sun.xml.internal.ws.api.WSBinding;
-import com.sun.xml.internal.ws.api.message.Header;
-import com.sun.xml.internal.ws.api.message.HeaderList;
-import com.sun.xml.internal.ws.api.message.Packet;
-import com.sun.xml.internal.ws.api.pipe.NextAction;
-import com.sun.xml.internal.ws.api.pipe.Tube;
-import com.sun.xml.internal.ws.api.pipe.TubeCloner;
-
-public class JreWssMUTube extends AbstractJreWssTube {
-
-    private final SOAPVersion soapVersion;
-
-    public JreWssMUTube(WSBinding binding, Tube next) {
-        super(next);
-        soapVersion = binding.getSOAPVersion();
-    }
-
-    protected JreWssMUTube(JreWssMUTube that, TubeCloner cloner) {
-        super(that, cloner);
-        soapVersion = that.soapVersion;
-    }
-
-    public JreWssMUTube copy(TubeCloner cloner) {
-        return new JreWssMUTube(this, cloner);
-    }
-
-    @Override
-    public NextAction processResponse(Packet response) {
-        if (response.getMessage() == null || !response.getMessage().hasHeaders()) {
-            return super.processResponse(response);
-        }
-
-        Object headersObject = response.getMessage().getHeaders();
-
-        if (headersObject instanceof HeaderList) {
-            HeaderList headers = (HeaderList) headersObject;
-
-            for (int i = 0; i < headers.size(); i++) {
-                if (!headers.isUnderstood(i)) {
-                    Header header = headers.get(i);
-                    if (!header.isIgnorable(soapVersion, soapVersion.implicitRoleSet)) {
-                        QName qName = new QName(header.getNamespaceURI(), header.getLocalPart());
-                        if (WSSE.equals(qName)) {
-                            checkSecurityHeader(header);
-                        } else {
-                            throw new CmisConnectionException("MustUnderstand header is not understood: " + qName);
-                        }
-                    }
-                }
-            }
-        } else {
-            try {
-                Method m = headersObject.getClass().getMethod("understood", QName.class);
-                m.invoke(headersObject, WSSE);
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Could not mark WSSE header as understood.", e);
-            }
-        }
-
-        return super.processResponse(response);
-    }
-
-    private void checkSecurityHeader(Header header) {
-        // TODO
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/WssMUTube.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/WssMUTube.java
deleted file mode 100644
index 74e0d25..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/client/WssMUTube.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube.client;
-
-import javax.xml.namespace.QName;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.tube.AbstractWssTube;
-
-import com.sun.xml.ws.api.SOAPVersion;
-import com.sun.xml.ws.api.WSBinding;
-import com.sun.xml.ws.api.message.Header;
-import com.sun.xml.ws.api.message.HeaderList;
-import com.sun.xml.ws.api.message.Packet;
-import com.sun.xml.ws.api.pipe.NextAction;
-import com.sun.xml.ws.api.pipe.Tube;
-import com.sun.xml.ws.api.pipe.TubeCloner;
-
-public class WssMUTube extends AbstractWssTube {
-
-    private final SOAPVersion soapVersion;
-
-    public WssMUTube(WSBinding binding, Tube next) {
-        super(next);
-        soapVersion = binding.getSOAPVersion();
-    }
-
-    protected WssMUTube(WssMUTube that, TubeCloner cloner) {
-        super(that, cloner);
-        soapVersion = that.soapVersion;
-    }
-
-    public WssMUTube copy(TubeCloner cloner) {
-        return new WssMUTube(this, cloner);
-    }
-
-    @Override
-    public NextAction processResponse(Packet response) {
-        if (response.getMessage() == null) {
-            return super.processResponse(response);
-        }
-
-        HeaderList headers = response.getMessage().getHeaders();
-
-        for (int i = 0; i < headers.size(); i++) {
-            if (!headers.isUnderstood(i)) {
-                Header header = headers.get(i);
-                if (!header.isIgnorable(soapVersion, soapVersion.implicitRoleSet)) {
-                    QName qName = new QName(header.getNamespaceURI(), header.getLocalPart());
-                    if (WSSE.equals(qName)) {
-                        checkSecurityHeader(header);
-                    } else {
-                        throw new CmisConnectionException("MustUnderstand header is not understood: " + qName);
-                    }
-                }
-            }
-        }
-
-        return super.processResponse(response);
-    }
-
-    private void checkSecurityHeader(Header header) {
-        // TODO
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/server/WssTube.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/server/WssTube.java
deleted file mode 100644
index 69c0e3b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/tube/server/WssTube.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.tube.server;
-
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.tube.AbstractWssTube;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import com.sun.xml.ws.api.message.HeaderList;
-import com.sun.xml.ws.api.message.Headers;
-import com.sun.xml.ws.api.message.Message;
-import com.sun.xml.ws.api.message.Packet;
-import com.sun.xml.ws.api.pipe.NextAction;
-import com.sun.xml.ws.api.pipe.Tube;
-import com.sun.xml.ws.api.pipe.TubeCloner;
-import com.sun.xml.ws.api.pipe.helper.AbstractFilterTubeImpl;
-
-public class WssTube extends AbstractWssTube {
-
-    public WssTube(Tube next) {
-        super(next);
-    }
-
-    protected WssTube(AbstractFilterTubeImpl that, TubeCloner cloner) {
-        super(that, cloner);
-    }
-
-    public WssTube copy(TubeCloner cloner) {
-        return new WssTube(this, cloner);
-    }
-
-    @Override
-    public NextAction processResponse(Packet packet) {
-        Message message = packet.getMessage();
-        if (message == null) {
-            return super.processResponse(packet);
-        }
-
-        try {
-            long created = System.currentTimeMillis();
-            long expires = created + 24 * 60 * 60 * 1000; // 24 hours
-
-            Document document = XMLUtils.newDomDocument();
-
-            Element wsseSecurityElement = document.createElementNS(WSSE_NAMESPACE, "Security");
-
-            Element wsuTimestampElement = document.createElementNS(WSU_NAMESPACE, "Timestamp");
-            wsseSecurityElement.appendChild(wsuTimestampElement);
-
-            Element tsCreatedElement = document.createElementNS(WSU_NAMESPACE, "Created");
-            tsCreatedElement.setTextContent(DateTimeHelper.formatXmlDateTime(created));
-            wsuTimestampElement.appendChild(tsCreatedElement);
-
-            Element tsExpiresElement = document.createElementNS(WSU_NAMESPACE, "Expires");
-            tsExpiresElement.setTextContent(DateTimeHelper.formatXmlDateTime(expires));
-            wsuTimestampElement.appendChild(tsExpiresElement);
-
-            HeaderList headers = message.getHeaders();
-            headers.add(Headers.create(wsseSecurityElement));
-        } catch (Exception e) {
-            throw new RuntimeException("Creating SOAP header failed!", e);
-        }
-
-        return super.processResponse(packet);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/NOTICE b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index d788eb7..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS Commons Implementation
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/mime.types b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/mime.types
deleted file mode 100644
index 24727c3..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/mime.types
+++ /dev/null
@@ -1,930 +0,0 @@
-application/andrew-inset ez
-application/annodex anx
-application/applixware aw
-application/atom+xml atom
-application/atomcat+xml atomcat
-application/atomserv+xml atomsrv
-application/atomsvc+xml atomsvc
-application/bbolin lin
-application/ccxml+xml ccxml
-application/cdmi-capability cdmia
-application/cdmi-container cdmic
-application/cdmi-domain cdmid
-application/cdmi-object cdmio
-application/cdmi-queue cdmiq
-application/cu-seeme cu
-application/davmount+xml davmount
-application/dicom dcm
-application/docbook+xml dbk
-application/dsptype tsp
-application/dssc+der dssc
-application/dssc+xml xdssc
-application/ecmascript ecma
-application/emma+xml emma
-application/envoy evy
-application/epub+zip epub
-application/exi exi
-application/font-tdpfr pfr
-application/font-woff woff
-application/fractals fif
-application/futuresplash spl
-application/gml+xml gml
-application/gpx+xml gpx
-application/gxf gxf
-application/hta hta
-application/hyperstudio stk
-application/inkml+xml ink inkml
-application/ipfix ipfix
-application/java-archive jar war ear 
-application/java-serialized-object ser
-application/java-vm class
-application/javascript js
-application/json json
-application/jsonml+json jsonml
-application/lost+xml lostxml
-application/m3g m3g
-application/mac-binhex40 hqx
-application/mads+xml mads
-application/marc mrc
-application/marcxml+xml mrcx
-application/mathematica ma nb mb
-application/mathml+xml mathml
-application/mbox mbox
-application/mediaservercontrol+xml mscml
-application/metalink+xml metalink
-application/metalink4+xml meta4
-application/mets+xml mets
-application/mods+xml mods
-application/mp21 m21 mp21
-application/mp4 mp4s
-application/msword doc dot
-application/mxf mxf
-application/octet-stream bin lrf mar so dist distz pkg bpk dump elc deploy
-application/oda oda
-application/oebps-package+xml opf
-application/ogg ogx
-application/olescript axs
-application/omdoc+xml omdoc
-application/onenote onetoc onetmp onetoc2 onepkg
-application/oxps oxps
-application/patch-ops-error+xml xer
-application/pdf pdf
-application/pgp-encrypted pgp
-application/pgp-keys key
-application/pgp-signature asc sig
-application/pics-rules prf
-application/pkcs10 p10
-application/pkcs7-mime p7m p7c
-application/pkcs7-signature p7s
-application/pkcs8 p8
-application/pkix-attr-cert ac
-application/pkix-pkipath pkipath
-application/pkixcmp pki
-application/pls+xml pls
-application/postscript ps ai eps epsf epsi eps3 eps2
-application/prs.cww cww
-application/pskc+xml pskcxml
-application/rdf+xml rdf
-application/reginfo+xml rif
-application/relax-ng-compact-syntax rnc
-application/resource-lists-diff+xml rld
-application/resource-lists+xml rl
-application/rls-services+xml rs
-application/rpki-ghostbusters gbr
-application/rpki-manifest mft
-application/rpki-roa roa
-application/rsd+xml rsd
-application/rss+xml rss
-application/rtf rtf
-application/sbml+xml sbml
-application/scvp-cv-request scq
-application/scvp-cv-response scs
-application/scvp-vp-request spq
-application/scvp-vp-response spp
-application/sdp sdp
-application/set-payment-initiation setpay
-application/set-registration-initiation setreg
-application/shf+xml shf
-application/sla stl
-application/smil smi smil
-application/sparql-query rq
-application/sparql-results+xml srx
-application/srgs gram
-application/srgs+xml grxml
-application/sru+xml sru
-application/ssdl+xml ssdl
-application/ssml+xml ssml
-application/tei+xml tei teicorpus
-application/thraud+xml tfi
-application/timestamped-data tsd
-application/vnd.3gpp.pic-bw-large plb
-application/vnd.3gpp.pic-bw-small psb
-application/vnd.3gpp.pic-bw-var pvb
-application/vnd.3gpp2.tcap tcap
-application/vnd.3m.post-it-notes pwn
-application/vnd.acucobol acu
-application/vnd.acucorp atc acutc
-application/vnd.adobe.air-application-installer-package+zip air
-application/vnd.adobe.formscentral.fcdt fcdt
-application/vnd.adobe.fxp fxp fxpl
-application/vnd.adobe.xdp+xml xdp
-application/vnd.adobe.xfdf xfdf
-application/vnd.ahead.space ahead
-application/vnd.airzip.filesecure.azf azf
-application/vnd.airzip.filesecure.azs azs
-application/vnd.amazon.ebook azw
-application/vnd.americandynamics.acc acc
-application/vnd.amiga.ami ami
-application/vnd.android.package-archive apk
-application/vnd.anser-web-certificate-issue-initiation cii
-application/vnd.anser-web-funds-transfer-initiation fti
-application/vnd.antix.game-component atx
-application/vnd.apple.installer+xml mpkg
-application/vnd.apple.keynote key
-application/vnd.apple.mpegurl m3u8
-application/vnd.apple.numbers numbers
-application/vnd.apple.pages pages
-application/vnd.arastra.swi swi
-application/vnd.aristanetworks.swi swi
-application/vnd.astraea-software.iota iota
-application/vnd.audiograph aep
-application/vnd.blueice.multipass mpm
-application/vnd.bmi bmi
-application/vnd.businessobjects rep
-application/vnd.chemdraw+xml cdxml
-application/vnd.chipnuts.karaoke-mmd mmd
-application/vnd.cinderella cdy
-application/vnd.claymore cla
-application/vnd.cloanto.rp9 rp9
-application/vnd.clonk.c4group c4g c4d c4f c4p c4u
-application/vnd.cluetrust.cartomobile-config c11amc
-application/vnd.cluetrust.cartomobile-config-pkg c11amz
-application/vnd.commonspace csp
-application/vnd.contact.cmsg cdbcmsg
-application/vnd.cosmocaller cmc
-application/vnd.crick.clicker clkx
-application/vnd.crick.clicker.keyboard clkk
-application/vnd.crick.clicker.palette clkp
-application/vnd.crick.clicker.template clkt
-application/vnd.crick.clicker.wordbank clkw
-application/vnd.criticaltools.wbs+xml wbs
-application/vnd.ctc-posml pml
-application/vnd.cups-ppd ppd
-application/vnd.curl.car car
-application/vnd.curl.pcurl pcurl
-application/vnd.dart dart
-application/vnd.data-vision.rdz rdz
-application/vnd.dece.data uvf uvvf uvd uvvd
-application/vnd.dece.ttml+xml uvt uvvt
-application/vnd.dece.unspecified uvx uvvx
-application/vnd.dece.zip uvz uvvz
-application/vnd.denovo.fcselayout-link fe_launch
-application/vnd.dna dna
-application/vnd.dolby.mlp mlp
-application/vnd.dpgraph dpg
-application/vnd.dreamfactory dfac
-application/vnd.ds-keypoint kpxx
-application/vnd.dvb.ait ait
-application/vnd.dvb.service svc
-application/vnd.dynageo geo
-application/vnd.ecowin.chart mag
-application/vnd.enliven nml
-application/vnd.epson.esf esf
-application/vnd.epson.msf msf
-application/vnd.epson.quickanime qam
-application/vnd.epson.salt slt
-application/vnd.epson.ssf ssf
-application/vnd.eszigno3+xml es3 et3
-application/vnd.ezpix-album ez2
-application/vnd.ezpix-package ez3
-application/vnd.fdf fdf
-application/vnd.fdsn.mseed mseed
-application/vnd.fdsn.seed seed dataless
-application/vnd.flographit gph
-application/vnd.fluxtime.clip ftc
-application/vnd.framemaker fm maker book frame
-application/vnd.frogans.fnc fnc
-application/vnd.frogans.ltf ltf
-application/vnd.fsc.weblaunch fsc
-application/vnd.fujitsu.oasys oas
-application/vnd.fujitsu.oasys2 oa2
-application/vnd.fujitsu.oasys3 oa3
-application/vnd.fujitsu.oasysgp fg5
-application/vnd.fujitsu.oasysprs bh2
-application/vnd.fujixerox.ddd ddd
-application/vnd.fujixerox.docuworks xdw
-application/vnd.fujixerox.docuworks.binder xbd
-application/vnd.fuzzysheet fzs
-application/vnd.genomatix.tuxedo txd
-application/vnd.geogebra.file ggb
-application/vnd.geogebra.tool ggt
-application/vnd.geometry-explorer gex gre
-application/vnd.geonext gxt
-application/vnd.geoplan g2w
-application/vnd.geospace g3w
-application/vnd.gmx gmx
-application/vnd.google-earth.kml+xml kml
-application/vnd.google-earth.kmz kmz
-application/vnd.grafeq gqf gqs
-application/vnd.groove-account gac
-application/vnd.groove-help ghf
-application/vnd.groove-identity-message gim
-application/vnd.groove-injector grv
-application/vnd.groove-tool-message gtm
-application/vnd.groove-tool-template tpl
-application/vnd.groove-vcard vcg
-application/vnd.hal+xml hal
-application/vnd.handheld-entertainment+xml zmm
-application/vnd.hbci hbci
-application/vnd.hhe.lesson-player les
-application/vnd.hp-hpgl hpgl
-application/vnd.hp-hpid hpid
-application/vnd.hp-hps hps
-application/vnd.hp-jlyt jlt
-application/vnd.hp-pcl pcl
-application/vnd.hp-pclxl pclxl
-application/vnd.hydrostatix.sof-data sfd-hdstx
-application/vnd.ibm.minipay mpy
-application/vnd.ibm.modcap afp listafp list3820
-application/vnd.ibm.rights-management irm
-application/vnd.ibm.secure-container sc
-application/vnd.iccprofile icc icm
-application/vnd.igloader igl
-application/vnd.immervision-ivp ivp
-application/vnd.immervision-ivu ivu
-application/vnd.insors.igm igm
-application/vnd.intercon.formnet xpw xpx
-application/vnd.intergeo i2g
-application/vnd.intu.qbo qbo
-application/vnd.intu.qfx qfx
-application/vnd.ipunplugged.rcprofile rcprofile
-application/vnd.irepository.package+xml irp
-application/vnd.is-xpr xpr
-application/vnd.isac.fcs fcs
-application/vnd.jam jam
-application/vnd.jcp.javame.midlet-rms rms
-application/vnd.jisp jisp
-application/vnd.joost.joda-archive joda
-application/vnd.kahootz ktz ktr
-application/vnd.kde.karbon karbon
-application/vnd.kde.kchart chrt
-application/vnd.kde.kformula kfo
-application/vnd.kde.kivio flw
-application/vnd.kde.kontour kon
-application/vnd.kde.kpresenter kpr kpt
-application/vnd.kde.kspread ksp
-application/vnd.kde.kword kwd kwt
-application/vnd.kenameaapp htke
-application/vnd.kidspiration kia
-application/vnd.kinar kne knp
-application/vnd.koan skp skd skt skm
-application/vnd.kodak-descriptor sse
-application/vnd.las.las+xml lasxml
-application/vnd.llamagraphics.life-balance.desktop lbd
-application/vnd.llamagraphics.life-balance.exchange+xml lbe
-application/vnd.lotus-1-2-3 123
-application/vnd.lotus-approach apr
-application/vnd.lotus-freelance pre
-application/vnd.lotus-notes nsf
-application/vnd.lotus-organizer org
-application/vnd.lotus-screencam scm
-application/vnd.lotus-wordpro lwp
-application/vnd.macports.portpkg portpkg
-application/vnd.mcd mcd
-application/vnd.medcalcdata mc1
-application/vnd.mediastation.cdkey cdkey
-application/vnd.mfer mwf
-application/vnd.mfmp mfm
-application/vnd.micrografx.flo flo
-application/vnd.micrografx.igx igx
-application/vnd.mif mif
-application/vnd.mobius.daf daf
-application/vnd.mobius.dis dis
-application/vnd.mobius.mbk mbk
-application/vnd.mobius.mqy mqy
-application/vnd.mobius.msl msl
-application/vnd.mobius.plc plc
-application/vnd.mobius.txf txf
-application/vnd.mophun.application mpn
-application/vnd.mophun.certificate mpc
-application/vnd.mozilla.xul+xml xul
-application/vnd.ms-artgalry cil
-application/vnd.ms-cab-compressed cab
-application/vnd.ms-excel xls xla xlc xlm xlt xlw
-application/vnd.ms-excel.addin.macroenabled.12 xlam
-application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb
-application/vnd.ms-excel.sheet.macroenabled.12 xlsm
-application/vnd.ms-excel.template.macroenabled.12 xltm
-application/vnd.ms-fontobject eot
-application/vnd.ms-htmlhelp chm
-application/vnd.ms-ims ims
-application/vnd.ms-lrm lrm
-application/vnd.ms-officetheme thmx
-application/vnd.ms-outlook msg
-application/vnd.ms-pki.seccat cat
-application/vnd.ms-pki.stl stl
-application/vnd.ms-pkicertstore sst
-application/vnd.ms-powerpoint ppt pps pot
-application/vnd.ms-powerpoint.addin.macroenabled.12 ppam
-application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm
-application/vnd.ms-powerpoint.slide.macroenabled.12 sldm
-application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm
-application/vnd.ms-powerpoint.template.macroenabled.12 potm
-application/vnd.ms-project mpp mpt
-application/vnd.ms-word.document.macroenabled.12 docm
-application/vnd.ms-word.template.macroenabled.12 dotm
-application/vnd.ms-works wps wdb wcm wks
-application/vnd.ms-wpl wpl
-application/vnd.ms-xpsdocument xps
-application/vnd.mseq mseq
-application/vnd.musician mus
-application/vnd.muvee.style msty
-application/vnd.mynfc taglet
-application/vnd.neurolanguage.nlu nlu
-application/vnd.nitf ntf nitf
-application/vnd.noblenet-directory nnd
-application/vnd.noblenet-sealer nns
-application/vnd.noblenet-web nnw
-application/vnd.nokia.n-gage.data ngdat
-application/vnd.nokia.n-gage.symbian.install n-gage
-application/vnd.nokia.radio-preset rpst
-application/vnd.nokia.radio-presets rpss
-application/vnd.novadigm.edm edm
-application/vnd.novadigm.edx edx
-application/vnd.novadigm.ext ext
-application/vnd.oasis.opendocument.chart odc
-application/vnd.oasis.opendocument.chart-template otc
-application/vnd.oasis.opendocument.database odb
-application/vnd.oasis.opendocument.formula odf
-application/vnd.oasis.opendocument.formula-template odft
-application/vnd.oasis.opendocument.graphics odg
-application/vnd.oasis.opendocument.graphics-template otg
-application/vnd.oasis.opendocument.image odi
-application/vnd.oasis.opendocument.image-template oti
-application/vnd.oasis.opendocument.presentation odp
-application/vnd.oasis.opendocument.presentation-template otp
-application/vnd.oasis.opendocument.spreadsheet ods
-application/vnd.oasis.opendocument.spreadsheet-template ots
-application/vnd.oasis.opendocument.text odt
-application/vnd.oasis.opendocument.text-master odm
-application/vnd.oasis.opendocument.text-template ott
-application/vnd.oasis.opendocument.text-web oth
-application/vnd.olpc-sugar xo
-application/vnd.oma.dd2+xml dd2
-application/vnd.openofficeorg.extension oxt
-application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
-application/vnd.openxmlformats-officedocument.presentationml.slide sldx
-application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
-application/vnd.openxmlformats-officedocument.presentationml.template potx
-application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
-application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
-application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
-application/vnd.openxmlformats-officedocument.wordprocessingml.template doct dotx
-application/vnd.osgeo.mapguide.package mgp
-application/vnd.osgi.dp dp
-application/vnd.osgi.subsystem esa
-application/vnd.palm pdb pqa oprc
-application/vnd.pawaafile paw
-application/vnd.pg.format str
-application/vnd.pg.osasli ei6
-application/vnd.picsel efif
-application/vnd.pmi.widget wg
-application/vnd.pocketlearn plf
-application/vnd.powerbuilder6 pbd
-application/vnd.previewsystems.box box
-application/vnd.proteus.magazine mgz
-application/vnd.publishare-delta-tree qps
-application/vnd.pvi.ptid1 ptid
-application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb
-application/vnd.realvnc.bed bed
-application/vnd.recordare.musicxml mxl
-application/vnd.recordare.musicxml+xml musicxml
-application/vnd.rig.cryptonote cryptonote
-application/vnd.rn-realmedia rm
-application/vnd.rn-realmedia-vbr rmvb
-application/vnd.route66.link66+xml link66
-application/vnd.sailingtracker.track st
-application/vnd.seemail see
-application/vnd.sema sema
-application/vnd.semd semd
-application/vnd.semf semf
-application/vnd.shana.informed.formdata ifm
-application/vnd.shana.informed.formtemplate itp
-application/vnd.shana.informed.interchange iif
-application/vnd.shana.informed.package ipk
-application/vnd.simtech-mindmapper twd twds
-application/vnd.smaf mmf
-application/vnd.smart.teacher teacher
-application/vnd.solent.sdkm+xml sdkm sdkd
-application/vnd.spotfire.dxp dxp
-application/vnd.spotfire.sfs sfs
-application/vnd.stardivision.calc sdc
-application/vnd.stardivision.chart sds
-application/vnd.stardivision.draw sda
-application/vnd.stardivision.impress sdd
-application/vnd.stardivision.math smf
-application/vnd.stardivision.writer sdw vor
-application/vnd.stardivision.writer-global sgl
-application/vnd.stepmania.package smzip
-application/vnd.stepmania.stepchart sm
-application/vnd.sun.xml.calc sxc
-application/vnd.sun.xml.calc.template stc
-application/vnd.sun.xml.draw sxd
-application/vnd.sun.xml.draw.template std
-application/vnd.sun.xml.impress sxi
-application/vnd.sun.xml.impress.template sti
-application/vnd.sun.xml.math sxm
-application/vnd.sun.xml.writer sxw
-application/vnd.sun.xml.writer.global sxg
-application/vnd.sun.xml.writer.template stw
-application/vnd.sus-calendar sus susp
-application/vnd.svd svd
-application/vnd.symbian.install sis sisx
-application/vnd.syncml.dm+wbxml bdm
-application/vnd.syncml.dm+xml xdm
-application/vnd.syncml+xml xsm
-application/vnd.tao.intent-module-archive tao
-application/vnd.tcpdump.pcap pcap cap dmp
-application/vnd.tmobile-livetv tmo
-application/vnd.trid.tpt tpt
-application/vnd.triscape.mxs mxs
-application/vnd.trueapp tra
-application/vnd.ufdl ufd ufdl
-application/vnd.uiq.theme utz
-application/vnd.umajin umj
-application/vnd.unity unityweb
-application/vnd.uoml+xml uoml
-application/vnd.vcx vcx
-application/vnd.visio vsd vst vss vsw
-application/vnd.visionary vis
-application/vnd.vsf vsf
-application/vnd.wap.wbxml wbxml
-application/vnd.wap.wmlc wmlc
-application/vnd.wap.wmlscriptc wmlsc
-application/vnd.webturbo wtb
-application/vnd.wolfram.player nbp
-application/vnd.wordperfect wpd
-application/vnd.wordperfect5.1 wp5
-application/vnd.wqd wqd
-application/vnd.wt.stf stf
-application/vnd.xara xar
-application/vnd.xfdl xfdl
-application/vnd.yamaha.hv-dic hvd
-application/vnd.yamaha.hv-script hvs
-application/vnd.yamaha.hv-voice hvp
-application/vnd.yamaha.openscoreformat osf
-application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg
-application/vnd.yamaha.smaf-audio saf
-application/vnd.yamaha.smaf-phrase spf
-application/vnd.yellowriver-custom-menu cmp
-application/vnd.zul zir zirz
-application/vnd.zzazz.deck+xml zaz
-application/voicexml+xml vxml
-application/widget wgt
-application/winhlp hlp
-application/wordperfect wpd
-application/wsdl+xml wsdl
-application/wspolicy+xml wspolicy
-application/x-123 wk
-application/x-7z-compressed 7z
-application/x-abiword abw
-application/x-ace-compressed ace
-application/x-apple-diskimage dmg
-application/x-authorware-bin aab x32 u32 vox
-application/x-authorware-map aam
-application/x-authorware-seg aas
-application/x-bcpio bcpio
-application/x-bittorrent torrent
-application/x-blorb blb blorb
-application/x-bzip bz
-application/x-bzip2 bz2 boz
-application/x-cbr cbr cba cbt cb7
-application/x-cbz cbz
-application/x-cdf cdf
-application/x-cdlink vcd
-application/x-cfs-compressed cfs
-application/x-chat chat
-application/x-chess-pgn pgn
-application/x-cocoa cco 
-application/x-compress z
-application/x-compressed tgz z
-application/x-comsol mph
-application/x-conference nsc
-application/x-cpio cpio
-application/x-debian-package deb udeb
-application/x-dgc-compressed dgc
-application/x-director dxr dcr fgd swa cct cxt cst dir w3d
-application/x-dms dms
-application/x-doom wad
-application/x-dtbncx+xml ncx
-application/x-dtbook+xml dtb
-application/x-dtbresource+xml res
-application/x-dvi dvi
-application/x-eva eva
-application/x-font gsf pcf
-application/x-font-bdf bdf
-application/x-font-linux-psf psf
-application/x-font-otf otf
-application/x-font-pcf pcf
-application/x-font-snf snf
-application/x-font-ttf ttf ttc
-application/x-font-type1 pfa pfb pfm afm
-application/x-freearc arc
-application/x-freemind mm
-application/x-futuresplash spl
-application/x-ganttproject gan
-application/x-gca-compressed gca
-application/x-glulx ulx
-application/x-gnumeric gnumeric
-application/x-go-sgf sgf
-application/x-gramps-xml gramps
-application/x-graphing-calculator gcf
-application/x-gtar gtar
-application/x-gtar-compressed taz
-application/x-gzip gz
-application/x-hdf hdf
-application/x-hwp hwp
-application/x-ica ica
-application/x-info info
-application/x-install-instructions install
-application/x-internet-signup isp
-application/x-iphone iii
-application/x-iso9660-image iso
-application/x-java-archive-diff jardiff
-application/x-java-jnlp-file jnlp 
-application/x-jmol jmz
-application/x-latex latex
-application/x-lyx lyx
-application/x-lzh-compressed lzh lha
-application/x-lzx lzx
-application/x-makeself run 
-application/x-md5 md5
-application/x-mie mie
-application/x-mif mif
-application/x-mobipocket-ebook prc mobi
-application/x-ms-application application
-application/x-ms-shortcut lnk
-application/x-ms-wmd wmd
-application/x-ms-wmz wmz
-application/x-ms-xbap xbap
-application/x-msaccess mdb
-application/x-msbinder obd
-application/x-mscardfile crd
-application/x-msclip clp
-application/x-msdownload dll bat exe com
-application/x-msi msi
-application/x-msmediaview mvb m14 m13 
-application/x-msmetafile wmf emf emz wmz 
-application/x-msmoney mny
-application/x-mspublisher pub
-application/x-msschedule scd
-application/x-msterminal trm
-application/x-mswrite wri
-application/x-netcdf nc cdf
-application/x-ns-proxy-autoconfig dat pac
-application/x-nwc nwc
-application/x-nzb nzb
-application/x-object o
-application/x-oz-application oza
-application/x-perfmon pma pmc pml pmr pmw
-application/x-pkcs12 pfx
-application/x-pkcs12v p12
-application/x-pkcs7-certificates p7b spc
-application/x-pkcs7-certreqresp p7r
-application/x-pkcs7-crl crl
-application/x-pkcs7-mime p7c p7m
-application/x-pkcs7-signature p7s
-application/x-producer-package dkp
-application/x-python-code pyc pyo
-application/x-qgis qgs shp shx
-application/x-quicktimeplayer qtl
-application/x-rar-compressed rar
-application/x-rdp rdp
-application/x-redhat-package-manager rpm 
-application/x-research-info-systems ris
-application/x-ruby rb
-application/x-scilab sce sci
-application/x-scilab-xcos xcos
-application/x-sh sh
-application/x-sha1 sha1
-application/x-shar shar
-application/x-shockwave-flash swf
-application/x-silverlight scr
-application/x-silverlight-app xap
-application/x-sql sql
-application/x-stuffit sit
-application/x-stuffitx sitx
-application/x-subrip srt
-application/x-sv4cpio sv4cpio
-application/x-sv4crc sv4crc
-application/x-t3vm-image t3
-application/x-tar tar
-application/x-tex tex
-application/x-tex-gf gf
-application/x-tex-pk pk
-application/x-tex-tfm tfm
-application/x-texinfo texinfo texi
-application/x-tgif obj
-application/x-troff-man man
-application/x-troff-me me
-application/x-troff-ms ms
-application/x-ustar ustar
-application/x-wais-source src
-application/x-wingz wz
-application/x-wpb-slc slc
-application/x-x509-ca-cert crt der
-application/x-xcf xcf
-application/x-xfig fig
-application/x-xliff+xml xlf
-application/x-xpinstall xpi
-application/x-xz xz
-application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8
-application/xaml+xml xaml
-application/xcap-diff+xml xdf
-application/xenc+xml xenc
-application/xhtml+xml xhtml xht
-application/xml xml
-application/xml-dtd dtd
-application/xop+xml xop
-application/xproc+xml xpl
-application/xslt+xml xslt
-application/xspf+xml xspf
-application/xv+xml mxml xhvml xvml xvm
-application/yang yang
-application/yin+xml yin
-application/ynd.ms-pkipko vpko
-application/zip zip
-audio/adpcm adp
-audio/amr amr
-audio/amr-wb awb
-audio/annodex axa
-audio/basic snd au
-audio/csound csd orc sco
-audio/flac flac
-audio/midi mid rmi kar midi
-audio/mp4 m4a m4b m4p m4r
-audio/mpeg mp3 m2a mpga mp2a mp2
-audio/ogg ogg oga spx
-audio/prs.sid sid
-audio/s3m s3m
-audio/silk sil
-audio/vnd.dece.audio uva uvva
-audio/vnd.digital-winds eol
-audio/vnd.dra dra
-audio/vnd.dts dts
-audio/vnd.dts.hd dtshd
-audio/vnd.lucent.voice lvp
-audio/vnd.ms-playready.media.pya pya
-audio/vnd.nuera.ecelp4800 ecelp4800
-audio/vnd.nuera.ecelp7470 ecelp7470
-audio/vnd.nuera.ecelp9600 ecelp9600
-audio/vnd.rip rip
-audio/webm weba
-audio/x-aac aac
-audio/x-aiff aif aifc aiff
-audio/x-caf caf
-audio/x-gsm gsm
-audio/x-matroska mka
-audio/x-mpegurl m3u
-audio/x-ms-wax wax
-audio/x-ms-wma wma
-audio/x-pn-realaudio-plugin rmp
-audio/x-realaudio ra
-audio/x-scpls pls
-audio/x-sd2 sd2
-audio/x-wav wav
-audio/xm xm
-chemical/x-alchemy alc
-chemical/x-cache cac cache
-chemical/x-cache-csf csf
-chemical/x-cactvs-binary cascii cbin ctab
-chemical/x-cdx cdx
-chemical/x-chem3d c3d
-chemical/x-cif cif
-chemical/x-cmdf cmdf
-chemical/x-cml cml
-chemical/x-compass cpa
-chemical/x-crossfire bsd
-chemical/x-csml csml
-chemical/x-ctx ctx
-chemical/x-cxf cef cxf
-chemical/x-embl-dl-nucleotide emb embl
-chemical/x-galactic-spc spc
-chemical/x-gamess-input gam gamin inp
-chemical/x-gaussian-checkpoint fch fchk
-chemical/x-gaussian-cube cub
-chemical/x-gaussian-input gau gjc gjf
-chemical/x-gaussian-log gal
-chemical/x-gcg8-sequence gcg
-chemical/x-genbank gen
-chemical/x-hin hin
-chemical/x-isostar ist istr
-chemical/x-jcamp-dx dx jdx
-chemical/x-kinemage kin
-chemical/x-macmolecule mcm
-chemical/x-macromodel-input mmd mmod
-chemical/x-mdl-molfile mol
-chemical/x-mdl-rdfile rd
-chemical/x-mdl-rxnfile rxn
-chemical/x-mdl-sdfile sd sdf
-chemical/x-mdl-tgf tgf
-chemical/x-mmcif mcif
-chemical/x-mol2 mol2
-chemical/x-molconn-Z b
-chemical/x-mopac-graph gpt
-chemical/x-mopac-input dat mop mopcrt mpc zmt
-chemical/x-mopac-out moo
-chemical/x-mopac-vib mvb
-chemical/x-ncbi-asn1 asn
-chemical/x-ncbi-asn1-ascii ent prt
-chemical/x-ncbi-asn1-binary aso val
-chemical/x-pdb ent pdb
-chemical/x-rosdal ros
-chemical/x-swissprot sw
-chemical/x-vamas-iso14976 vms
-chemical/x-vmd vmd
-chemical/x-xtel xtel
-chemical/x-xyz xyz
-image/bmp bmp
-image/cgm cgm
-image/cis-cod cod
-image/g3fax g3
-image/gif gif
-image/ief ief
-image/jpeg jpeg jpg jpe
-image/ktx ktx
-image/pcx pcx
-image/pipeg jfif
-image/png png
-image/prs.btif btif
-image/sgi sgi
-image/svg+xml svg svgz
-image/tiff tif tiff
-image/vnd.adobe.photoshop psd
-image/vnd.dece.graphic uvi uvvi uvg uvvg
-image/vnd.djvu djvu djv
-image/vnd.dvb.subtitle sub
-image/vnd.dwg dwg
-image/vnd.dxf dxf
-image/vnd.fastbidsheet fbs
-image/vnd.fpx fpx
-image/vnd.fst fst
-image/vnd.fujixerox.edmics-mmr mmr
-image/vnd.fujixerox.edmics-rlc rlc
-image/vnd.ms-modi mdi
-image/vnd.ms-photo wdp
-image/vnd.net-fpx npx
-image/vnd.wap.wbmp wbmp
-image/vnd.xiff xif
-image/webp webp
-image/x-3ds 3ds
-image/x-canon-cr2 cr2
-image/x-canon-crw crw
-image/x-cmu-raster ras
-image/x-cmx cmx
-image/x-coreldraw cdr
-image/x-coreldrawpattern pat
-image/x-coreldrawtemplate cdt
-image/x-corelphotopaint cpt
-image/x-epson-erf erf
-image/x-freehand fh fhc fh4 fh5 fh7
-image/x-icon ico
-image/x-jg art
-image/x-jng jng
-image/x-mrsid-image sid
-image/x-nikon-nef nef
-image/x-olympus-orf orf
-image/x-pict pic pct
-image/x-portable-anymap pnm
-image/x-portable-bitmap pbm
-image/x-portable-graymap pgm
-image/x-portable-pixmap ppm
-image/x-rgb rgb
-image/x-tga tga
-image/x-xbitmap xbm
-image/x-xpixmap xpm
-image/x-xwindowdump xwd
-message/rfc822 mhtml mhtv eml mime nws
-model/iges igs iges
-model/mesh msh mesh silo
-model/vnd.collada+xml dae
-model/vnd.dwf dwf
-model/vnd.gdl gdl
-model/vnd.gtw gtw
-model/vnd.mts mts
-model/vnd.vtu vtu
-model/x3d+binary x3db x3dbz
-model/x3d+vrml x3dv x3dvz
-model/x3d+xml x3d x3dz
-text/cache-manifest appcache
-text/calendar ics ifb
-text/css css
-text/csv csv
-text/h323 323
-text/html html htm stm
-text/iuls uls
-text/mathml mml 
-text/n3 n3
-text/plain txt bas in def text log conf list
-text/prs.lines.tag dsc
-text/richtext rtx
-text/scriptlet sct
-text/sgml sgml sgm
-text/tab-separated-values tsv
-text/texmacs tm ts
-text/troff t tr roff man me ms
-text/turtle ttl
-text/uri-list uri uris urls
-text/vcard vcard
-text/vnd.curl curl
-text/vnd.curl.dcurl dcurl
-text/vnd.curl.mcurl mcurl
-text/vnd.curl.scurl scurl
-text/vnd.dvb.subtitle sub
-text/vnd.fly fly
-text/vnd.fmi.flexstor flx
-text/vnd.graphviz gv
-text/vnd.in3d.3dml 3dml
-text/vnd.in3d.spot spot
-text/vnd.sun.j2me.app-descriptor jad
-text/vnd.wap.wml wml
-text/vnd.wap.wmlscript wmls
-text/webviewhtml htt
-text/x-asm s asm
-text/x-bibtex bib
-text/x-boo boo
-text/x-c c h dic
-text/x-c++hdr h++ hh hpp hxx
-text/x-c++src c++ cc cpp cxx
-text/x-component htc
-text/x-csh csh
-text/x-diff diff patch
-text/x-dsrc d
-text/x-fortran f for f77 f90
-text/x-haskell hs
-text/x-java-source java
-text/x-lilypond ly
-text/x-literate-haskell lhs
-text/x-moc moc
-text/x-nfo nfo
-text/x-opml opml
-text/x-pascal p pas
-text/x-pcs-gcd gcd
-text/x-perl pl pm
-text/x-psp psp
-text/x-python py
-text/x-scala scala
-text/x-setext etx
-text/x-sfv sfv
-text/x-tcl tcl tk
-text/x-uuencode uu
-text/x-vcalendar vcs
-text/x-vcard vcf
-video/3gpp 3gpp 3gp
-video/3gpp2 3g2
-video/annodex axv
-video/dl dl
-video/dv dif dv
-video/fli fli
-video/gl gl
-video/h261 h261
-video/h263 h263
-video/h264 h264
-video/jpeg jpgv
-video/jpm jpm jpgm
-video/mj2 mj2 mjp2
-video/mp4 mp4 mpg4
-video/mpeg mpeg mpa mp2 mpv2
-video/mpegv mpe mpg m1v m2v
-video/ogg ogv
-video/quicktime mov qt
-video/vnd.dece.hd uvh uvvh
-video/vnd.dece.mobile uvm uvvm
-video/vnd.dece.pd uvp uvvp
-video/vnd.dece.sd uvs uvvs
-video/vnd.dece.video uvv uvvv
-video/vnd.dvb.file dvb
-video/vnd.fvt fvt
-video/vnd.mpegurl mxu m4u
-video/vnd.ms-playready.media.pyv pyv
-video/vnd.uvvu.mp4 uvu uvvu
-video/vnd.vivo viv
-video/webm webm
-video/x-f4v f4v
-video/x-flv flv
-video/x-la-asf lsf lsx
-video/x-m4v m4v
-video/x-matroska mkv mk3d mks
-video/x-mng mng
-video/x-ms-asf asf asr asx
-video/x-ms-vob vob
-video/x-ms-wm wm
-video/x-ms-wmv wmv
-video/x-ms-wmx wmx
-video/x-ms-wvx wvx
-video/x-msvideo avi
-video/x-sgi-movie movie
-video/x-smv smv
-x-conference/x-cooltalk ice
-x-epoc/x-sisx-app sisx
-x-world/x-vrml vrml flr wrl wrz xaf xof
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.internal.ws.api.pipe.TubelineAssemblerFactory b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.internal.ws.api.pipe.TubelineAssemblerFactory
deleted file mode 100644
index 421c82d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.internal.ws.api.pipe.TubelineAssemblerFactory
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.chemistry.opencmis.commons.impl.tube.OpenCMISJreTubelineAssemblerFactory
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.ws.api.pipe.TubelineAssemblerFactory b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.ws.api.pipe.TubelineAssemblerFactory
deleted file mode 100644
index 2110b55..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/META-INF/services/com.sun.xml.ws.api.pipe.TubelineAssemblerFactory
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.chemistry.opencmis.commons.impl.tube.OpenCMISTubelineAssemblerFactory
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Core.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Core.xsd
deleted file mode 100644
index aa427b1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Core.xsd
+++ /dev/null
@@ -1,1268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-	<xs:attribute name="key" type="xs:string" />
-	<xs:attribute name="index" type="xs:integer" />
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is
-					not required to be set when used as a
-					default value. This is
-					required to be set when used for query result
-					set or returning
-					properties on an object.
-		</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition. If
-						this is a base type,
-						this is not present.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition"
-					type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" />
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous
-						access. This principal can then be passed to the
-						ACL services to
-						specify what permissions anonymous users should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be passed to
-						the
-						ACL services to
-						specify what permissions everyone should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is
-						sufficient to provide rights required
-						in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Messaging.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Messaging.xsd
deleted file mode 100644
index a6ad787..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMIS-Messaging.xsd
+++ /dev/null
@@ -1,2072 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0"
-	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	elementFormDefault="qualified">
-
-	<xs:import schemaLocation="CMIS-Core.xsd"
-		namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-
-	<!-- exceptions -->
-	<xs:complexType name="cmisFaultType">
-		<xs:sequence>
-			<xs:element name="type" type="cmism:enumServiceException" />
-			<xs:element name="code" type="xs:integer" />
-			<xs:element name="message" type="xs:string" />
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:element name="cmisFault" type="cmism:cmisFaultType" />
-	<xs:simpleType name="enumServiceException">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="constraint" />
-			<xs:enumeration value="nameConstraintViolation" />
-			<xs:enumeration value="contentAlreadyExists" />
-			<xs:enumeration value="filterNotValid" />
-			<xs:enumeration value="invalidArgument" />
-			<xs:enumeration value="notSupported" />
-			<xs:enumeration value="objectNotFound" />
-			<xs:enumeration value="permissionDenied" />
-			<xs:enumeration value="runtime" />
-			<xs:enumeration value="storage" />
-			<xs:enumeration value="streamNotSupported" />
-			<xs:enumeration value="updateConflict" />
-			<xs:enumeration value="versioning" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- extension -->
-	<xs:complexType name="cmisExtensionType">
-		<xs:sequence>
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<!-- types for WS -->
-	<xs:complexType name="cmisTypeContainer">
-		<xs:sequence>
-			<xs:element name="type" type="cmis:cmisTypeDefinitionType" 
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisTypeContainer"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisTypeDefinitionListType">
-		<xs:sequence>
-			<xs:element name="types" type="cmis:cmisTypeDefinitionType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderContainerType">
-		<xs:sequence>
-			<xs:element name="objectInFolder" type="cmism:cmisObjectInFolderType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisObjectInFolderContainerType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />	
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="pathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectParentsType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="relativePathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" /> 
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmism:cmisObjectInFolderType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisRepositoryEntryType">
-		<xs:sequence>
-			<xs:element name="repositoryId" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisContentStreamType">
-		<xs:sequence>
-			<xs:element name="length" type="xs:integer" minOccurs="0" />
-			<xs:element name="mimeType" type="xs:string" minOccurs="0" />
-			<xs:element name="filename" type="xs:string" minOccurs="0" />
-			<xs:element name="stream" type="xs:base64Binary"
-				xmime:expectedContentTypes="application/octet-stream" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLType">
-		<xs:sequence>
-			<xs:element name="ACL" type="cmis:cmisAccessControlListType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="exact" type="xs:boolean" 
-				minOccurs="0" maxOccurs="1"/>
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Repository Services] -->
-	
-	<!-- getRepositories Operation -->
-	<xs:element name="getRepositories">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoriesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositories" type="cmism:cmisRepositoryEntryType"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- getRepositoryInfo Operation -->
-	<xs:element name="getRepositoryInfo">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoryInfoResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryInfo" type="cmis:cmisRepositoryInfoType" 
-					minOccurs="1" maxOccurs="1"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeChildren Operation -->
-	<xs:element name="getTypeChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeDefinitionListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDescendants Operation -->
-	<xs:element name="getTypeDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeContainer"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDefinition Operation -->
-	<xs:element name="getTypeDefinition">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDefinitionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="0" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Navigation Services] -->
-	
-	<!-- getDescendants Operation -->
-	<xs:element name="getDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getDescendants Operation -->
-	<xs:element name="getFolderTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getChildren Operation -->
-	<xs:element name="getChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getFolderParent Operation -->
-	<xs:element name="getFolderParent">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderParentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectParents Operation-->
-	<xs:element name="getObjectParents">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelativePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectParentsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="parents" type="cmism:cmisObjectParentsType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getRenditions Operation -->
-	<xs:element name="getRenditions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRenditionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="renditions" type="cmis:cmisRenditionType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getCheckedoutDocs Operation -->
-	<xs:element name="getCheckedOutDocs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getCheckedOutDocsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Object Services] -->
-	
-	<!-- createDocument Operation -->
-	<xs:element name="createDocument">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createDocumentFromSource Operation -->
-	<xs:element name="createDocumentFromSource">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />					
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentFromSourceResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createFolder Operation -->
-	<xs:element name="createFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createRelationship Operation -->
-	<xs:element name="createRelationship">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createRelationshipResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createPolicy Operation -->
-	<xs:element name="createPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- getAllowableActions Operation -->
-	<xs:element name="getAllowableActions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllowableActionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getProperties Operation -->
-	<xs:element name="getProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObject Operation -->
-	<xs:element name="getObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectByPath Operation -->
-	<xs:element name="getObjectByPath">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="path" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectByPathResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentStream Operation -->
-	<xs:element name="getContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="streamId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="offset" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="length" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateProperties Operation -->
-	<xs:element name="updateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<!--
-					if objectId is present in the properties the value must match this
-					objectId
-				-->
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- moveObject Operation -->
-	<xs:element name="moveObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="targetFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="moveObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteObject Operation -->
-	<xs:element name="deleteObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteTree Operation -->
-	<xs:element name="deleteTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="unfileObjects" type="cmis:enumUnfileObject"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="continueOnFailure" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="failedToDelete">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="objectIds" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-							<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-								processContents="lax" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- setContentStream Operation -->
-	<xs:element name="setContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="overwriteFlag" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="setContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteContentStream Operation -->
-	<xs:element name="deleteContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-				
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Multi-filing Services]-->
-
-	<!-- addObjectToFolder Operation -->
-	<xs:element name="addObjectToFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="addObjectToFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removeObjectFromFolder Operation -->
-	<xs:element name="removeObjectFromFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removeObjectFromFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Discovery Services] -->
-	
-	<!-- query Operation -->
-	<xs:element name="query">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="statement" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="searchAllVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-			<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="queryResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentChanges operation -->
-	<xs:element name="getContentChanges">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeProperties" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentChangesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Versioning Services] -->
-
-	<!-- checkOut Operation -->
-	<xs:element name="checkOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="contentCopied" type="xs:boolean"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- cancelCheckOut Operation -->
-	<xs:element name="cancelCheckOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cancelCheckOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- checkIn Operation -->
-	<xs:element name="checkIn">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="checkinComment" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkInResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getPropertiesOfLatestVersion -->
-	<xs:element name="getPropertiesOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectOfLatestVersion Operation -->
-	<xs:element name="getObjectOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAllVersions Operation -->
-	<xs:element name="getAllVersions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllVersionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Relationship Services]-->
-
-	<!-- getRelationships Operation -->
-	<xs:element name="getObjectRelationships">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="includeSubRelationshipTypes" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="relationshipDirection" type="cmis:enumRelationshipDirection"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectRelationshipsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Policy Services]-->
-
-	<!-- applyPolicy Operation -->
-	<xs:element name="applyPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removePolicy Operation -->
-	<xs:element name="removePolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removePolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAppliedPolicies Operation -->
-	<xs:element name="getAppliedPolicies">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAppliedPoliciesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getACL Operation -->
-	<xs:element name="getACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="onlyBasicPermissions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>	
-	</xs:element>
-	
-	<!-- applyACL Operation -->
-	<xs:element name="applyACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="ACLPropagation" type="cmis:enumACLPropagation"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-</xs:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMISWS-Service.wsdl b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMISWS-Service.wsdl
deleted file mode 100644
index b749511..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/CMISWS-Service.wsdl
+++ /dev/null
@@ -1,1173 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<definitions xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmisw="http://docs.oasis-open.org/ns/cmis/ws/200908/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/"
-	xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" name="CMISWebServices">
-	<types>
-		<xsd:schema elementFormDefault="qualified"
-			targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/">
-			<xsd:import schemaLocation="CMIS-Core.xsd"
-				namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-			<xsd:import schemaLocation="CMIS-Messaging.xsd"
-				namespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/" />
-		</xsd:schema>
-	</types>
-
-	<message name="cmisException">
-		<part name="fault" element="cmism:cmisFault" />
-	</message>
-
-	<message name="getACLRequest">
-		<part name="parameters" element="cmism:getACL" />
-	</message>
-	<message name="getACLResponse">
-		<part name="parameters" element="cmism:getACLResponse" />
-	</message>
-
-	<message name="applyACLRequest">
-		<part name="parameters" element="cmism:applyACL" />
-	</message>
-	<message name="applyACLResponse">
-		<part name="parameters" element="cmism:applyACLResponse" />
-	</message>
-
-	<message name="queryRequest">
-		<part name="parameters" element="cmism:query" />
-	</message>
-	<message name="queryResponse">
-		<part name="parameters" element="cmism:queryResponse" />
-	</message>
-	<message name="getContentChangesRequest">
-		<part name="parameters" element="cmism:getContentChanges" />
-	</message>
-	<message name="getContentChangesResponse">
-		<part name="parameters" element="cmism:getContentChangesResponse" />
-	</message>
-
-	<message name="addObjectToFolderRequest">
-		<part name="parameters" element="cmism:addObjectToFolder" />
-	</message>
-	<message name="addObjectToFolderResponse">
-		<part name="parameters" element="cmism:addObjectToFolderResponse" />
-	</message>
-	<message name="removeObjectFromFolderRequest">
-		<part name="parameters" element="cmism:removeObjectFromFolder" />
-	</message>
-	<message name="removeObjectFromFolderResponse">
-		<part name="parameters" element="cmism:removeObjectFromFolderResponse" />
-	</message>
-
-	<message name="getDescendantsRequest">
-		<part name="parameters" element="cmism:getDescendants" />
-	</message>
-	<message name="getDescendantsResponse">
-		<part name="parameters" element="cmism:getDescendantsResponse" />
-	</message>
-	<message name="getChildrenRequest">
-		<part name="parameters" element="cmism:getChildren" />
-	</message>
-	<message name="getChildrenResponse">
-		<part name="parameters" element="cmism:getChildrenResponse" />
-	</message>
-	<message name="getFolderParentRequest">
-		<part name="parameters" element="cmism:getFolderParent" />
-	</message>
-	<message name="getFolderParentResponse">
-		<part name="parameters" element="cmism:getFolderParentResponse" />
-	</message>
-	<message name="getObjectParentsRequest">
-		<part name="parameters" element="cmism:getObjectParents" />
-	</message>
-	<message name="getObjectParentsResponse">
-		<part name="parameters" element="cmism:getObjectParentsResponse" />
-	</message>
-	<message name="getRenditionsRequest">
-		<part name="parameters" element="cmism:getRenditions" />
-	</message>
-	<message name="getRenditionsResponse">
-		<part name="parameters" element="cmism:getRenditionsResponse" />
-	</message>
-	<message name="getCheckedOutDocsRequest">
-		<part name="parameters" element="cmism:getCheckedOutDocs" />
-	</message>
-	<message name="getCheckedOutDocsResponse">
-		<part name="parameters" element="cmism:getCheckedOutDocsResponse" />
-	</message>
-
-	<message name="createDocumentRequest">
-		<part name="parameters" element="cmism:createDocument" />
-	</message>
-	<message name="createDocumentResponse">
-		<part name="parameters" element="cmism:createDocumentResponse" />
-	</message>
-	<message name="createDocumentFromSourceRequest">
-		<part name="parameters" element="cmism:createDocumentFromSource" />
-	</message>
-	<message name="createDocumentFromSourceResponse">
-		<part name="parameters" element="cmism:createDocumentFromSourceResponse" />
-	</message>
-	<message name="createFolderRequest">
-		<part name="parameters" element="cmism:createFolder" />
-	</message>
-	<message name="createFolderResponse">
-		<part name="parameters" element="cmism:createFolderResponse" />
-	</message>
-	<message name="createRelationshipRequest">
-		<part name="parameters" element="cmism:createRelationship" />
-	</message>
-	<message name="createRelationshipResponse">
-		<part name="parameters" element="cmism:createRelationshipResponse" />
-	</message>
-	<message name="createPolicyRequest">
-		<part name="parameters" element="cmism:createPolicy" />
-	</message>
-	<message name="createPolicyResponse">
-		<part name="parameters" element="cmism:createPolicyResponse" />
-	</message>
-	<message name="getAllowableActionsRequest">
-		<part name="parameters" element="cmism:getAllowableActions" />
-	</message>
-	<message name="getAllowableActionsResponse">
-		<part name="parameters" element="cmism:getAllowableActionsResponse" />
-	</message>
-	<message name="getObjectRequest">
-		<part name="parameters" element="cmism:getObject" />
-	</message>
-	<message name="getObjectResponse">
-		<part name="parameters" element="cmism:getObjectResponse" />
-	</message>
-	<message name="getPropertiesRequest">
-		<part name="parameters" element="cmism:getProperties" />
-	</message>
-	<message name="getPropertiesResponse">
-		<part name="parameters" element="cmism:getPropertiesResponse" />
-	</message>
-
-	<message name="getObjectByPathRequest">
-		<part name="parameters" element="cmism:getObjectByPath" />
-	</message>
-	<message name="getObjectByPathResponse">
-		<part name="parameters" element="cmism:getObjectByPathResponse" />
-	</message>
-
-	<message name="getContentStreamRequest">
-		<part name="parameters" element="cmism:getContentStream" />
-	</message>
-	<message name="getContentStreamResponse">
-		<part name="parameters" element="cmism:getContentStreamResponse" />
-	</message>
-	<message name="updatePropertiesRequest">
-		<part name="parameters" element="cmism:updateProperties" />
-	</message>
-	<message name="updatePropertiesResponse">
-		<part name="parameters" element="cmism:updatePropertiesResponse" />
-	</message>
-	<message name="moveObjectRequest">
-		<part name="parameters" element="cmism:moveObject" />
-	</message>
-	<message name="moveObjectResponse">
-		<part name="parameters" element="cmism:moveObjectResponse" />
-	</message>
-	<message name="deleteObjectRequest">
-		<part name="parameters" element="cmism:deleteObject" />
-	</message>
-	<message name="deleteObjectResponse">
-		<part name="parameters" element="cmism:deleteObjectResponse" />
-	</message>
-	<message name="deleteTreeRequest">
-		<part name="parameters" element="cmism:deleteTree" />
-	</message>
-	<message name="deleteTreeResponse">
-		<part name="parameters" element="cmism:deleteTreeResponse" />
-	</message>
-	<message name="setContentStreamRequest">
-		<part name="parameters" element="cmism:setContentStream" />
-	</message>
-	<message name="setContentStreamResponse">
-		<part name="parameters" element="cmism:setContentStreamResponse" />
-	</message>
-	<message name="deleteContentStreamRequest">
-		<part name="parameters" element="cmism:deleteContentStream" />
-	</message>
-	<message name="deleteContentStreamResponse">
-		<part name="parameters" element="cmism:deleteContentStreamResponse" />
-	</message>
-
-	<message name="applyPolicyRequest">
-		<part name="parameters" element="cmism:applyPolicy" />
-	</message>
-	<message name="applyPolicyResponse">
-		<part name="parameters" element="cmism:applyPolicyResponse" />
-	</message>
-	<message name="removePolicyRequest">
-		<part name="parameters" element="cmism:removePolicy" />
-	</message>
-	<message name="removePolicyResponse">
-		<part name="parameters" element="cmism:removePolicyResponse" />
-	</message>
-	<message name="getAppliedPoliciesRequest">
-		<part name="parameters" element="cmism:getAppliedPolicies" />
-	</message>
-	<message name="getAppliedPoliciesResponse">
-		<part name="parameters" element="cmism:getAppliedPoliciesResponse" />
-	</message>
-
-	<message name="getObjectRelationshipsRequest">
-		<part name="parameters" element="cmism:getObjectRelationships" />
-	</message>
-	<message name="getObjectRelationshipsResponse">
-		<part name="parameters" element="cmism:getObjectRelationshipsResponse" />
-	</message>
-
-	<message name="getRepositoriesRequest">
-		<part name="parameters" element="cmism:getRepositories" />
-	</message>
-	<message name="getRepositoriesResponse">
-		<part name="parameters" element="cmism:getRepositoriesResponse" />
-	</message>
-	<message name="getRepositoryInfoRequest">
-		<part name="parameters" element="cmism:getRepositoryInfo" />
-	</message>
-	<message name="getRepositoryInfoResponse">
-		<part name="parameters" element="cmism:getRepositoryInfoResponse" />
-	</message>
-	<message name="getTypeChildrenRequest">
-		<part name="parameters" element="cmism:getTypeChildren" />
-	</message>
-	<message name="getTypeChildrenResponse">
-		<part name="parameters" element="cmism:getTypeChildrenResponse" />
-	</message>
-	<message name="getTypeDescendantsRequest">
-		<part name="parameters" element="cmism:getTypeDescendants" />
-	</message>
-	<message name="getTypeDescendantsResponse">
-		<part name="parameters" element="cmism:getTypeDescendantsResponse" />
-	</message>
-	<message name="getTypeDefinitionRequest">
-		<part name="parameters" element="cmism:getTypeDefinition" />
-	</message>
-	<message name="getTypeDefinitionResponse">
-		<part name="parameters" element="cmism:getTypeDefinitionResponse" />
-	</message>
-
-	<message name="checkOutRequest">
-		<part name="parameters" element="cmism:checkOut" />
-	</message>
-	<message name="checkOutResponse">
-		<part name="parameters" element="cmism:checkOutResponse" />
-	</message>
-	<message name="cancelCheckOutRequest">
-		<part name="parameters" element="cmism:cancelCheckOut" />
-	</message>
-	<message name="cancelCheckOutResponse">
-		<part name="parameters" element="cmism:cancelCheckOutResponse" />
-	</message>
-	<message name="checkInRequest">
-		<part name="parameters" element="cmism:checkIn" />
-	</message>
-	<message name="checkInResponse">
-		<part name="parameters" element="cmism:checkInResponse" />
-	</message>
-	<message name="getObjectOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getObjectOfLatestVersion" />
-	</message>
-	<message name="getObjectOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getObjectOfLatestVersionResponse" />
-	</message>	
-	<message name="getPropertiesOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersion" />
-	</message>
-	<message name="getPropertiesOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersionResponse" />
-	</message>
-	<message name="getAllVersionsRequest">
-		<part name="parameters" element="cmism:getAllVersions" />
-	</message>
-	<message name="getAllVersionsResponse">
-		<part name="parameters" element="cmism:getAllVersionsResponse" />
-	</message>
-
-	<message name="getFolderTreeRequest">
-		<part name="parameters" element="cmism:getFolderTree" />
-	</message>
-	<message name="getFolderTreeResponse">
-		<part name="parameters" element="cmism:getFolderTreeResponse" />
-	</message>
-
-	<portType name="DiscoveryServicePort">
-		<operation name="query">
-			<input message="cmisw:queryRequest" />
-			<output message="cmisw:queryResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentChanges">
-			<input message="cmisw:getContentChangesRequest" />
-			<output message="cmisw:getContentChangesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="MultiFilingServicePort">
-		<operation name="addObjectToFolder">
-			<input message="cmisw:addObjectToFolderRequest" />
-			<output message="cmisw:addObjectToFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<input message="cmisw:removeObjectFromFolderRequest" />
-			<output message="cmisw:removeObjectFromFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="NavigationServicePort">
-		<operation name="getDescendants">
-			<input message="cmisw:getDescendantsRequest" />
-			<output message="cmisw:getDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getChildren">
-			<input message="cmisw:getChildrenRequest" />
-			<output message="cmisw:getChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderParent">
-			<input message="cmisw:getFolderParentRequest" />
-			<output message="cmisw:getFolderParentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderTree">
-			<input message="cmisw:getFolderTreeRequest" />
-			<output message="cmisw:getFolderTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectParents">
-			<input message="cmisw:getObjectParentsRequest" />
-			<output message="cmisw:getObjectParentsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<input message="cmisw:getCheckedOutDocsRequest" />
-			<output message="cmisw:getCheckedOutDocsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ObjectServicePort">
-		<operation name="createDocument">
-			<input message="cmisw:createDocumentRequest" />
-			<output message="cmisw:createDocumentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createDocumentFromSource">
-			<input message="cmisw:createDocumentFromSourceRequest" />
-			<output message="cmisw:createDocumentFromSourceResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createFolder">
-			<input message="cmisw:createFolderRequest" />
-			<output message="cmisw:createFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createRelationship">
-			<input message="cmisw:createRelationshipRequest" />
-			<output message="cmisw:createRelationshipResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createPolicy">
-			<input message="cmisw:createPolicyRequest" />
-			<output message="cmisw:createPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllowableActions">
-			<input message="cmisw:getAllowableActionsRequest" />
-			<output message="cmisw:getAllowableActionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObject">
-			<input message="cmisw:getObjectRequest" />
-			<output message="cmisw:getObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getProperties">
-			<input message="cmisw:getPropertiesRequest" />
-			<output message="cmisw:getPropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRenditions">
-			<input message="cmisw:getRenditionsRequest" />
-			<output message="cmisw:getRenditionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectByPath">
-			<input message="cmisw:getObjectByPathRequest" />
-			<output message="cmisw:getObjectByPathResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentStream">
-			<input message="cmisw:getContentStreamRequest" />
-			<output message="cmisw:getContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="updateProperties">
-			<input message="cmisw:updatePropertiesRequest" />
-			<output message="cmisw:updatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="moveObject">
-			<input message="cmisw:moveObjectRequest" />
-			<output message="cmisw:moveObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteObject">
-			<input message="cmisw:deleteObjectRequest" />
-			<output message="cmisw:deleteObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteTree">
-			<input message="cmisw:deleteTreeRequest" />
-			<output message="cmisw:deleteTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="setContentStream">
-			<input message="cmisw:setContentStreamRequest" />
-			<output message="cmisw:setContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteContentStream">
-			<input message="cmisw:deleteContentStreamRequest" />
-			<output message="cmisw:deleteContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="PolicyServicePort">
-		<operation name="applyPolicy">
-			<input message="cmisw:applyPolicyRequest" />
-			<output message="cmisw:applyPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removePolicy">
-			<input message="cmisw:removePolicyRequest" />
-			<output message="cmisw:removePolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAppliedPolicies">
-			<input message="cmisw:getAppliedPoliciesRequest" />
-			<output message="cmisw:getAppliedPoliciesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="RelationshipServicePort">
-		<operation name="getObjectRelationships">
-			<input message="cmisw:getObjectRelationshipsRequest" />
-			<output message="cmisw:getObjectRelationshipsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="RepositoryServicePort">
-		<operation name="getRepositories">
-			<input message="cmisw:getRepositoriesRequest" />
-			<output message="cmisw:getRepositoriesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRepositoryInfo">
-			<input message="cmisw:getRepositoryInfoRequest" />
-			<output message="cmisw:getRepositoryInfoResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeChildren">
-			<input message="cmisw:getTypeChildrenRequest" />
-			<output message="cmisw:getTypeChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDescendants">
-			<input message="cmisw:getTypeDescendantsRequest" />
-			<output message="cmisw:getTypeDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDefinition">
-			<input message="cmisw:getTypeDefinitionRequest" />
-			<output message="cmisw:getTypeDefinitionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="VersioningServicePort">
-		<operation name="checkOut">
-			<input message="cmisw:checkOutRequest" />
-			<output message="cmisw:checkOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="cancelCheckOut">
-			<input message="cmisw:cancelCheckOutRequest" />
-			<output message="cmisw:cancelCheckOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="checkIn">
-			<input message="cmisw:checkInRequest" />
-			<output message="cmisw:checkInResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<input message="cmisw:getObjectOfLatestVersionRequest" />
-			<output message="cmisw:getObjectOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<input message="cmisw:getPropertiesOfLatestVersionRequest" />
-			<output message="cmisw:getPropertiesOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllVersions">
-			<input message="cmisw:getAllVersionsRequest" />
-			<output message="cmisw:getAllVersionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ACLServicePort">
-		<operation name="getACL">
-			<input message="cmisw:getACLRequest" />
-			<output message="cmisw:getACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="applyACL">
-			<input message="cmisw:applyACLRequest" />
-			<output message="cmisw:applyACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-
-	<binding name="DiscoveryServicePortBinding" type="cmisw:DiscoveryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="query">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentChanges">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="MultiFilingServicePortBinding" type="cmisw:MultiFilingServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="addObjectToFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="NavigationServicePortBinding" type="cmisw:NavigationServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getDescendants">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getChildren">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderParent">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderTree">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectParents">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ObjectServicePortBinding" type="cmisw:ObjectServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="createDocument">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createDocumentFromSource">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createRelationship">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createPolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllowableActions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getProperties">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRenditions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectByPath">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateProperties">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="moveObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteTree">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="setContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="PolicyServicePortBinding" type="cmisw:PolicyServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="applyPolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removePolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAppliedPolicies">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RelationshipServicePortBinding" type="cmisw:RelationshipServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getObjectRelationships">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RepositoryServicePortBinding" type="cmisw:RepositoryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getRepositories">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRepositoryInfo">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeChildren">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDescendants">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDefinition">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="VersioningServicePortBinding" type="cmisw:VersioningServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="checkOut">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="cancelCheckOut">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="checkIn">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllVersions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ACLServicePortBinding" type="cmisw:ACLServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getACL">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="applyACL">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-
-
-	<service name="DiscoveryService">
-		<port name="DiscoveryServicePort" binding="cmisw:DiscoveryServicePortBinding">
-			<soap:address
-				location="http://cmis/services/DiscoveryService.DiscoveryServicePort" />
-		</port>
-	</service>
-	<service name="MultiFilingService">
-		<port name="MultiFilingServicePort" binding="cmisw:MultiFilingServicePortBinding">
-			<soap:address
-				location="http://cmis/services/MultiFilingService.MultiFilingServicePort" />
-		</port>
-	</service>
-	<service name="NavigationService">
-		<port name="NavigationServicePort" binding="cmisw:NavigationServicePortBinding">
-			<soap:address
-				location="http://cmis/services/NavigationService.NavigationServicePort" />
-		</port>
-	</service>
-	<service name="ObjectService">
-		<port name="ObjectServicePort" binding="cmisw:ObjectServicePortBinding">
-			<soap:address location="http://cmis/services/ObjectService.ObjectServicePort" />
-		</port>
-	</service>
-	<service name="PolicyService">
-		<port name="PolicyServicePort" binding="cmisw:PolicyServicePortBinding">
-			<soap:address location="http://cmis/services/PolicyService.PolicyServicePort" />
-		</port>
-	</service>
-	<service name="RelationshipService">
-		<port name="RelationshipServicePort" binding="cmisw:RelationshipServicePortBinding">
-			<soap:address
-				location="http://cmis/services/RelationshipService.RelationshipServicePort" />
-		</port>
-	</service>
-	<service name="RepositoryService">
-		<port name="RepositoryServicePort" binding="cmisw:RepositoryServicePortBinding">
-			<soap:address
-				location="http://cmis/services/RepositoryService.RepositoryServicePort" />
-		</port>
-	</service>
-	<service name="VersioningService">
-		<port name="VersioningServicePort" binding="cmisw:VersioningServicePortBinding">
-			<soap:address
-				location="http://cmis/services/VersioningService.VersioningServicePort" />
-		</port>
-	</service>
-	<service name="ACLService">
-		<port name="ACLServicePort" binding="cmisw:ACLServicePortBinding">
-			<soap:address location="http://cmis/services/ACLService.ACLServicePort" />
-		</port>
-	</service>
-
-</definitions>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/xml.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/xml.xsd
deleted file mode 100644
index 8c893fb..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis10/xml.xsd
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-	
-<xsd:schema 
-targetNamespace="http://www.w3.org/XML/1998/namespace" 
-xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
-xml:lang="en">
- <xsd:attribute name="lang">
-  <xsd:simpleType>
-   <xsd:union memberTypes="xsd:language">
-    <xsd:simpleType>    
-     <xsd:restriction base="xsd:string">
-      <xsd:enumeration value=""/>
-     </xsd:restriction>
-    </xsd:simpleType>
-   </xsd:union>
-  </xsd:simpleType>
- </xsd:attribute>
-
- <xsd:attribute name="space">
-  <xsd:simpleType>
-   <xsd:restriction base="xsd:NCName">
-    <xsd:enumeration value="default"/>
-    <xsd:enumeration value="preserve"/>
-   </xsd:restriction>
-  </xsd:simpleType>
- </xsd:attribute>
-
- <xsd:attribute name="base" type="xsd:anyURI">
-  <xsd:annotation>
-   <xsd:documentation>See http://www.w3.org/TR/xmlbase/ for
-                     information about this attribute.</xsd:documentation>
-  </xsd:annotation>
- </xsd:attribute>
- 
- <xsd:attribute name="id" type="xsd:ID">
-  <xsd:annotation>
-   <xsd:documentation>See http://www.w3.org/TR/xml-id/ for
-                     information about this attribute.</xsd:documentation>
-  </xsd:annotation>
- </xsd:attribute>
-
- <xsd:attributeGroup name="specialAttrs">
-  <xsd:attribute ref="xml:base"/>
-  <xsd:attribute ref="xml:lang"/>
-  <xsd:attribute ref="xml:space"/>
-  <xsd:attribute ref="xml:id"/>
- </xsd:attributeGroup>
-
-</xsd:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Core.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Core.xsd
deleted file mode 100644
index 44ad01f..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Core.xsd
+++ /dev/null
@@ -1,1396 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-	
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-			<xs:enumeration value="cmis:item" />
-			<xs:enumeration value="cmis:secondary" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:description" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:secondaryObjectTypeIds" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:isPrivateWorkingCopy" />			
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is not required to be set when used
-					as a default value. This is required to be set when used for 
-					query result set or returning properties on an object.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" type="xs:string" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateItem" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- bulkUpdateProperties -->
-	<xs:complexType name="cmisObjectIdAndChangeTokenType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="newId" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="changeToken" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisBulkUpdateType">
-		<xs:sequence>
-			<xs:element name="objectIdAndChangeToken" type="cmis:cmisObjectIdAndChangeTokenType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="addSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="removeSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-				
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition.
-						If this is a base type, this is MUST NOT be present.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-				
-			<!-- type mutability-->
-			<xs:element name="typeMutability" type="cmis:cmisTypeMutabilityCapabilitiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition" type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeItemDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeSecondaryDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>	
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" minOccurs="1"
-				maxOccurs="1"/>
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						anonymous users should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						everyone should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="extendedFeatures"
-				type="cmis:cmisExtensionFeatureType" maxOccurs="unbounded" minOccurs="0">
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityOrderBy" type="cmis:enumCapabilityOrderBy"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<xs:element name="capabilityCreatablePropertyTypes"
-				type="cmis:cmisCreatablePropertyTypesType" maxOccurs="1" minOccurs="0">
-			</xs:element>
-			<xs:element name="capabilityNewTypeSettableAttributes"
-				type="cmis:cmisNewTypeSettableAttributes" maxOccurs="1" minOccurs="0">
-			</xs:element>
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumCapabilityOrderBy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="common" />
-			<xs:enumeration value="custom" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is sufficient to 
-						provide rights required in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	
-	<!-- type mutability -->
-	<xs:complexType name="cmisTypeMutabilityCapabilitiesType"> 
-		<xs:sequence> 
-			<xs:element name="create" type="xs:boolean"/>
-			<xs:element name="update" type="xs:boolean"/>
-			<xs:element name="delete" type="xs:boolean"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence> 
-	</xs:complexType> 
-
-	<xs:complexType name="cmisCreatablePropertyTypesType">
-		<xs:sequence>
-			<xs:element name="canCreate" type="cmis:enumPropertyType"
-				minOccurs="0" maxOccurs="unbounded"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisNewTypeSettableAttributes">
-		<xs:sequence>
-			<xs:element name="id" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="displayName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="description" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="controllablePolicy" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- feature extensions -->
-	<xs:complexType name="cmisExtensionFeatureKeyValuePair">	
-		<xs:sequence>
-			<xs:element minOccurs="1" maxOccurs="1" name="key" type="xs:string" />
-			<xs:element minOccurs="1" maxOccurs="1" name="value" type="xs:string" />
-		</xs:sequence>
-	</xs:complexType> 
-
-	<xs:complexType name="cmisExtensionFeatureType">	
-		<xs:sequence>
-			<!-- id is the only mandatory field - typically will be a URN-->
-			<xs:element minOccurs="1" maxOccurs="1" name="id" type="xs:anyURI" />
-			<!-- optional url for a site describing the extension -->
-			<xs:element minOccurs="0" maxOccurs="1" name="url" type="xs:anyURI" />
-			<!-- optional short name for standard i.e. FooStandard -->
-			<xs:element minOccurs="0" maxOccurs="1" name="commonName" type="xs:string" />
-			<!-- optional version label-->
-			<xs:element minOccurs="0" maxOccurs="1" name="versionLabel" type="xs:string" />
-			<xs:element minOccurs="0" maxOccurs="1" name="description" type="xs:string" />
-			<xs:element name="featureData" type="cmis:cmisExtensionFeatureKeyValuePair" minOccurs="0" maxOccurs="unbounded" />
-			<xs:any processContents="lax" namespace="##other" minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType> 
-	
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Messaging.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Messaging.xsd
deleted file mode 100644
index 5e9c570..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMIS-Messaging.xsd
+++ /dev/null
@@ -1,2309 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0"
-	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	elementFormDefault="qualified">
-
-	<xs:import schemaLocation="CMIS-Core.xsd"
-		namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-
-	<!-- exceptions -->
-	<xs:complexType name="cmisFaultType">
-		<xs:sequence>
-			<xs:element name="type" type="cmism:enumServiceException" />
-			<xs:element name="code" type="xs:integer" />
-			<xs:element name="message" type="xs:string" />
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:element name="cmisFault" type="cmism:cmisFaultType" />
-	<xs:simpleType name="enumServiceException">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="constraint" />
-			<xs:enumeration value="nameConstraintViolation" />
-			<xs:enumeration value="contentAlreadyExists" />
-			<xs:enumeration value="filterNotValid" />
-			<xs:enumeration value="invalidArgument" />
-			<xs:enumeration value="notSupported" />
-			<xs:enumeration value="objectNotFound" />
-			<xs:enumeration value="permissionDenied" />
-			<xs:enumeration value="runtime" />
-			<xs:enumeration value="storage" />
-			<xs:enumeration value="streamNotSupported" />
-			<xs:enumeration value="updateConflict" />
-			<xs:enumeration value="versioning" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- extension -->
-	<xs:complexType name="cmisExtensionType">
-		<xs:sequence>
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<!-- types for WS -->
-	<xs:complexType name="cmisTypeContainer">
-		<xs:sequence>
-			<xs:element name="type" type="cmis:cmisTypeDefinitionType" 
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisTypeContainer"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisTypeDefinitionListType">
-		<xs:sequence>
-			<xs:element name="types" type="cmis:cmisTypeDefinitionType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderContainerType">
-		<xs:sequence>
-			<xs:element name="objectInFolder" type="cmism:cmisObjectInFolderType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisObjectInFolderContainerType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />	
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="pathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectParentsType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="relativePathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" /> 
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmism:cmisObjectInFolderType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisRepositoryEntryType">
-		<xs:sequence>
-			<xs:element name="repositoryId" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisContentStreamType">
-		<xs:sequence>
-			<xs:element name="length" type="xs:integer" minOccurs="0" />
-			<xs:element name="mimeType" type="xs:string" minOccurs="0" />
-			<xs:element name="filename" type="xs:string" minOccurs="0" />
-			<xs:element name="stream" type="xs:base64Binary"
-				xmime:expectedContentTypes="application/octet-stream" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLType">
-		<xs:sequence>
-			<xs:element name="ACL" type="cmis:cmisAccessControlListType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="exact" type="xs:boolean" 
-				minOccurs="0" maxOccurs="1"/>
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Repository Services] -->
-	
-	<!-- getRepositories Operation -->
-	<xs:element name="getRepositories">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoriesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositories" type="cmism:cmisRepositoryEntryType"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- getRepositoryInfo Operation -->
-	<xs:element name="getRepositoryInfo">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoryInfoResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryInfo" type="cmis:cmisRepositoryInfoType" 
-					minOccurs="1" maxOccurs="1"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeChildren Operation -->
-	<xs:element name="getTypeChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeDefinitionListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDescendants Operation -->
-	<xs:element name="getTypeDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeContainer"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDefinition Operation -->
-	<xs:element name="getTypeDefinition">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDefinitionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="0" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- createType Operation -->
-	<xs:element name="createType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateType Operation -->
-	<xs:element name="updateType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updateTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteType Operation -->
-	<xs:element name="deleteType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Navigation Services] -->
-	
-	<!-- getDescendants Operation -->
-	<xs:element name="getDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getDescendants Operation -->
-	<xs:element name="getFolderTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getChildren Operation -->
-	<xs:element name="getChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getFolderParent Operation -->
-	<xs:element name="getFolderParent">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderParentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectParents Operation-->
-	<xs:element name="getObjectParents">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelativePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectParentsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="parents" type="cmism:cmisObjectParentsType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getRenditions Operation -->
-	<xs:element name="getRenditions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRenditionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="renditions" type="cmis:cmisRenditionType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getCheckedoutDocs Operation -->
-	<xs:element name="getCheckedOutDocs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getCheckedOutDocsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Object Services] -->
-	
-	<!-- createDocument Operation -->
-	<xs:element name="createDocument">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createDocumentFromSource Operation -->
-	<xs:element name="createDocumentFromSource">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />					
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentFromSourceResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createFolder Operation -->
-	<xs:element name="createFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createRelationship Operation -->
-	<xs:element name="createRelationship">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createRelationshipResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createPolicy Operation -->
-	<xs:element name="createPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- createItem Operation -->
-	<xs:element name="createItem">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createItemResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	
-	<!-- getAllowableActions Operation -->
-	<xs:element name="getAllowableActions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllowableActionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getProperties Operation -->
-	<xs:element name="getProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObject Operation -->
-	<xs:element name="getObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectByPath Operation -->
-	<xs:element name="getObjectByPath">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="path" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectByPathResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentStream Operation -->
-	<xs:element name="getContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="streamId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="offset" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="length" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateProperties Operation -->
-	<xs:element name="updateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<!--
-					if objectId is present in the properties the value must match this
-					objectId
-				-->
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- bulkUpdateProperties Operation -->
-	<xs:element name="bulkUpdateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="bulkUpdateData" type="cmis:cmisBulkUpdateType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="bulkUpdatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectIdAndChangeToken" type="cmis:cmisObjectIdAndChangeTokenType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- moveObject Operation -->
-	<xs:element name="moveObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="targetFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="moveObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteObject Operation -->
-	<xs:element name="deleteObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteTree Operation -->
-	<xs:element name="deleteTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="unfileObjects" type="cmis:enumUnfileObject"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="continueOnFailure" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="failedToDelete">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="objectIds" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-							<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-								processContents="lax" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- setContentStream Operation -->
-	<xs:element name="setContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="overwriteFlag" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="setContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- appendContentStream Operation -->
-	<xs:element name="appendContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="isLastChunk" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="appendContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteContentStream Operation -->
-	<xs:element name="deleteContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-				
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Multi-filing Services]-->
-
-	<!-- addObjectToFolder Operation -->
-	<xs:element name="addObjectToFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="addObjectToFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removeObjectFromFolder Operation -->
-	<xs:element name="removeObjectFromFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removeObjectFromFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Discovery Services] -->
-	
-	<!-- query Operation -->
-	<xs:element name="query">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="statement" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="searchAllVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-			<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="queryResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentChanges operation -->
-	<xs:element name="getContentChanges">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeProperties" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentChangesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Versioning Services] -->
-
-	<!-- checkOut Operation -->
-	<xs:element name="checkOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="contentCopied" type="xs:boolean"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- cancelCheckOut Operation -->
-	<xs:element name="cancelCheckOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cancelCheckOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- checkIn Operation -->
-	<xs:element name="checkIn">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="checkinComment" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkInResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getPropertiesOfLatestVersion -->
-	<xs:element name="getPropertiesOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectOfLatestVersion Operation -->
-	<xs:element name="getObjectOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAllVersions Operation -->
-	<xs:element name="getAllVersions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllVersionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Relationship Services]-->
-
-	<!-- getRelationships Operation -->
-	<xs:element name="getObjectRelationships">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="includeSubRelationshipTypes" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="relationshipDirection" type="cmis:enumRelationshipDirection"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectRelationshipsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Policy Services]-->
-
-	<!-- applyPolicy Operation -->
-	<xs:element name="applyPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removePolicy Operation -->
-	<xs:element name="removePolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removePolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAppliedPolicies Operation -->
-	<xs:element name="getAppliedPolicies">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAppliedPoliciesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getACL Operation -->
-	<xs:element name="getACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="onlyBasicPermissions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>	
-	</xs:element>
-	
-	<!-- applyACL Operation -->
-	<xs:element name="applyACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="ACLPropagation" type="cmis:enumACLPropagation"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-</xs:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMISWS-Service.wsdl b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMISWS-Service.wsdl
deleted file mode 100644
index 06da79c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/CMISWS-Service.wsdl
+++ /dev/null
@@ -1,1311 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<definitions xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmisw="http://docs.oasis-open.org/ns/cmis/ws/200908/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/"
-	xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" name="CMISWebServices">
-	<types>
-		<xsd:schema elementFormDefault="qualified"
-			targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/">
-			<xsd:import schemaLocation="CMIS-Core.xsd"
-				namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-			<xsd:import schemaLocation="CMIS-Messaging.xsd"
-				namespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/" />
-		</xsd:schema>
-	</types>
-
-	<message name="cmisException">
-		<part name="fault" element="cmism:cmisFault" />
-	</message>
-
-	<message name="getACLRequest">
-		<part name="parameters" element="cmism:getACL" />
-	</message>
-	<message name="getACLResponse">
-		<part name="parameters" element="cmism:getACLResponse" />
-	</message>
-
-	<message name="applyACLRequest">
-		<part name="parameters" element="cmism:applyACL" />
-	</message>
-	<message name="applyACLResponse">
-		<part name="parameters" element="cmism:applyACLResponse" />
-	</message>
-
-	<message name="queryRequest">
-		<part name="parameters" element="cmism:query" />
-	</message>
-	<message name="queryResponse">
-		<part name="parameters" element="cmism:queryResponse" />
-	</message>
-	<message name="getContentChangesRequest">
-		<part name="parameters" element="cmism:getContentChanges" />
-	</message>
-	<message name="getContentChangesResponse">
-		<part name="parameters" element="cmism:getContentChangesResponse" />
-	</message>
-
-	<message name="addObjectToFolderRequest">
-		<part name="parameters" element="cmism:addObjectToFolder" />
-	</message>
-	<message name="addObjectToFolderResponse">
-		<part name="parameters" element="cmism:addObjectToFolderResponse" />
-	</message>
-	<message name="removeObjectFromFolderRequest">
-		<part name="parameters" element="cmism:removeObjectFromFolder" />
-	</message>
-	<message name="removeObjectFromFolderResponse">
-		<part name="parameters" element="cmism:removeObjectFromFolderResponse" />
-	</message>
-
-	<message name="getDescendantsRequest">
-		<part name="parameters" element="cmism:getDescendants" />
-	</message>
-	<message name="getDescendantsResponse">
-		<part name="parameters" element="cmism:getDescendantsResponse" />
-	</message>
-	<message name="getChildrenRequest">
-		<part name="parameters" element="cmism:getChildren" />
-	</message>
-	<message name="getChildrenResponse">
-		<part name="parameters" element="cmism:getChildrenResponse" />
-	</message>
-	<message name="getFolderParentRequest">
-		<part name="parameters" element="cmism:getFolderParent" />
-	</message>
-	<message name="getFolderParentResponse">
-		<part name="parameters" element="cmism:getFolderParentResponse" />
-	</message>
-	<message name="getObjectParentsRequest">
-		<part name="parameters" element="cmism:getObjectParents" />
-	</message>
-	<message name="getObjectParentsResponse">
-		<part name="parameters" element="cmism:getObjectParentsResponse" />
-	</message>
-	<message name="getRenditionsRequest">
-		<part name="parameters" element="cmism:getRenditions" />
-	</message>
-	<message name="getRenditionsResponse">
-		<part name="parameters" element="cmism:getRenditionsResponse" />
-	</message>
-	<message name="getCheckedOutDocsRequest">
-		<part name="parameters" element="cmism:getCheckedOutDocs" />
-	</message>
-	<message name="getCheckedOutDocsResponse">
-		<part name="parameters" element="cmism:getCheckedOutDocsResponse" />
-	</message>
-
-	<message name="createDocumentRequest">
-		<part name="parameters" element="cmism:createDocument" />
-	</message>
-	<message name="createDocumentResponse">
-		<part name="parameters" element="cmism:createDocumentResponse" />
-	</message>
-	<message name="createDocumentFromSourceRequest">
-		<part name="parameters" element="cmism:createDocumentFromSource" />
-	</message>
-	<message name="createDocumentFromSourceResponse">
-		<part name="parameters" element="cmism:createDocumentFromSourceResponse" />
-	</message>
-	<message name="createFolderRequest">
-		<part name="parameters" element="cmism:createFolder" />
-	</message>
-	<message name="createFolderResponse">
-		<part name="parameters" element="cmism:createFolderResponse" />
-	</message>
-	<message name="createRelationshipRequest">
-		<part name="parameters" element="cmism:createRelationship" />
-	</message>
-	<message name="createRelationshipResponse">
-		<part name="parameters" element="cmism:createRelationshipResponse" />
-	</message>
-	<message name="createPolicyRequest">
-		<part name="parameters" element="cmism:createPolicy" />
-	</message>
-	<message name="createPolicyResponse">
-		<part name="parameters" element="cmism:createPolicyResponse" />
-	</message>
-		<message name="createItemRequest">
-		<part name="parameters" element="cmism:createItem" />
-	</message>
-	<message name="createItemResponse">
-		<part name="parameters" element="cmism:createItemResponse" />
-	</message>
-	<message name="getAllowableActionsRequest">
-		<part name="parameters" element="cmism:getAllowableActions" />
-	</message>
-	<message name="getAllowableActionsResponse">
-		<part name="parameters" element="cmism:getAllowableActionsResponse" />
-	</message>
-	<message name="getObjectRequest">
-		<part name="parameters" element="cmism:getObject" />
-	</message>
-	<message name="getObjectResponse">
-		<part name="parameters" element="cmism:getObjectResponse" />
-	</message>
-	<message name="getPropertiesRequest">
-		<part name="parameters" element="cmism:getProperties" />
-	</message>
-	<message name="getPropertiesResponse">
-		<part name="parameters" element="cmism:getPropertiesResponse" />
-	</message>
-
-	<message name="getObjectByPathRequest">
-		<part name="parameters" element="cmism:getObjectByPath" />
-	</message>
-	<message name="getObjectByPathResponse">
-		<part name="parameters" element="cmism:getObjectByPathResponse" />
-	</message>
-
-	<message name="getContentStreamRequest">
-		<part name="parameters" element="cmism:getContentStream" />
-	</message>
-	<message name="getContentStreamResponse">
-		<part name="parameters" element="cmism:getContentStreamResponse" />
-	</message>
-	<message name="updatePropertiesRequest">
-		<part name="parameters" element="cmism:updateProperties" />
-	</message>
-	<message name="updatePropertiesResponse">
-		<part name="parameters" element="cmism:updatePropertiesResponse" />
-	</message>
-	<message name="bulkUpdatePropertiesRequest">
-		<part name="parameters" element="cmism:bulkUpdateProperties" />
-	</message>
-	<message name="bulkUpdatePropertiesResponse">
-		<part name="parameters" element="cmism:bulkUpdatePropertiesResponse" />
-	</message>
-	<message name="moveObjectRequest">
-		<part name="parameters" element="cmism:moveObject" />
-	</message>
-	<message name="moveObjectResponse">
-		<part name="parameters" element="cmism:moveObjectResponse" />
-	</message>
-	<message name="deleteObjectRequest">
-		<part name="parameters" element="cmism:deleteObject" />
-	</message>
-	<message name="deleteObjectResponse">
-		<part name="parameters" element="cmism:deleteObjectResponse" />
-	</message>
-	<message name="deleteTreeRequest">
-		<part name="parameters" element="cmism:deleteTree" />
-	</message>
-	<message name="deleteTreeResponse">
-		<part name="parameters" element="cmism:deleteTreeResponse" />
-	</message>
-	<message name="setContentStreamRequest">
-		<part name="parameters" element="cmism:setContentStream" />
-	</message>
-	<message name="setContentStreamResponse">
-		<part name="parameters" element="cmism:setContentStreamResponse" />
-	</message>
-	<message name="appendContentStreamRequest">
-		<part name="parameters" element="cmism:appendContentStream" />
-	</message>
-	<message name="appendContentStreamResponse">
-		<part name="parameters" element="cmism:appendContentStreamResponse" />
-	</message>
-	<message name="deleteContentStreamRequest">
-		<part name="parameters" element="cmism:deleteContentStream" />
-	</message>
-	<message name="deleteContentStreamResponse">
-		<part name="parameters" element="cmism:deleteContentStreamResponse" />
-	</message>
-
-	<message name="applyPolicyRequest">
-		<part name="parameters" element="cmism:applyPolicy" />
-	</message>
-	<message name="applyPolicyResponse">
-		<part name="parameters" element="cmism:applyPolicyResponse" />
-	</message>
-	<message name="removePolicyRequest">
-		<part name="parameters" element="cmism:removePolicy" />
-	</message>
-	<message name="removePolicyResponse">
-		<part name="parameters" element="cmism:removePolicyResponse" />
-	</message>
-	<message name="getAppliedPoliciesRequest">
-		<part name="parameters" element="cmism:getAppliedPolicies" />
-	</message>
-	<message name="getAppliedPoliciesResponse">
-		<part name="parameters" element="cmism:getAppliedPoliciesResponse" />
-	</message>
-
-	<message name="getObjectRelationshipsRequest">
-		<part name="parameters" element="cmism:getObjectRelationships" />
-	</message>
-	<message name="getObjectRelationshipsResponse">
-		<part name="parameters" element="cmism:getObjectRelationshipsResponse" />
-	</message>
-
-	<message name="getRepositoriesRequest">
-		<part name="parameters" element="cmism:getRepositories" />
-	</message>
-	<message name="getRepositoriesResponse">
-		<part name="parameters" element="cmism:getRepositoriesResponse" />
-	</message>
-	<message name="getRepositoryInfoRequest">
-		<part name="parameters" element="cmism:getRepositoryInfo" />
-	</message>
-	<message name="getRepositoryInfoResponse">
-		<part name="parameters" element="cmism:getRepositoryInfoResponse" />
-	</message>
-	<message name="getTypeChildrenRequest">
-		<part name="parameters" element="cmism:getTypeChildren" />
-	</message>
-	<message name="getTypeChildrenResponse">
-		<part name="parameters" element="cmism:getTypeChildrenResponse" />
-	</message>
-	<message name="getTypeDescendantsRequest">
-		<part name="parameters" element="cmism:getTypeDescendants" />
-	</message>
-	<message name="getTypeDescendantsResponse">
-		<part name="parameters" element="cmism:getTypeDescendantsResponse" />
-	</message>
-	<message name="getTypeDefinitionRequest">
-		<part name="parameters" element="cmism:getTypeDefinition" />
-	</message>
-	<message name="getTypeDefinitionResponse">
-		<part name="parameters" element="cmism:getTypeDefinitionResponse" />
-	</message>
-	<message name="createTypeRequest">
-		<part name="parameters" element="cmism:createType" />
-	</message>
-	<message name="createTypeResponse">
-		<part name="parameters" element="cmism:createTypeResponse" />
-	</message>
-	<message name="updateTypeRequest">
-		<part name="parameters" element="cmism:updateType" />
-	</message>
-	<message name="updateTypeResponse">
-		<part name="parameters" element="cmism:updateTypeResponse" />
-	</message>
-	<message name="deleteTypeRequest">
-		<part name="parameters" element="cmism:deleteType" />
-	</message>
-	<message name="deleteTypeResponse">
-		<part name="parameters" element="cmism:deleteTypeResponse" />
-	</message>
-
-	<message name="checkOutRequest">
-		<part name="parameters" element="cmism:checkOut" />
-	</message>
-	<message name="checkOutResponse">
-		<part name="parameters" element="cmism:checkOutResponse" />
-	</message>
-	<message name="cancelCheckOutRequest">
-		<part name="parameters" element="cmism:cancelCheckOut" />
-	</message>
-	<message name="cancelCheckOutResponse">
-		<part name="parameters" element="cmism:cancelCheckOutResponse" />
-	</message>
-	<message name="checkInRequest">
-		<part name="parameters" element="cmism:checkIn" />
-	</message>
-	<message name="checkInResponse">
-		<part name="parameters" element="cmism:checkInResponse" />
-	</message>
-	<message name="getObjectOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getObjectOfLatestVersion" />
-	</message>
-	<message name="getObjectOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getObjectOfLatestVersionResponse" />
-	</message>	
-	<message name="getPropertiesOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersion" />
-	</message>
-	<message name="getPropertiesOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersionResponse" />
-	</message>
-	<message name="getAllVersionsRequest">
-		<part name="parameters" element="cmism:getAllVersions" />
-	</message>
-	<message name="getAllVersionsResponse">
-		<part name="parameters" element="cmism:getAllVersionsResponse" />
-	</message>
-
-	<message name="getFolderTreeRequest">
-		<part name="parameters" element="cmism:getFolderTree" />
-	</message>
-	<message name="getFolderTreeResponse">
-		<part name="parameters" element="cmism:getFolderTreeResponse" />
-	</message>
-
-	<portType name="DiscoveryServicePort">
-		<operation name="query">
-			<input message="cmisw:queryRequest" />
-			<output message="cmisw:queryResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentChanges">
-			<input message="cmisw:getContentChangesRequest" />
-			<output message="cmisw:getContentChangesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="MultiFilingServicePort">
-		<operation name="addObjectToFolder">
-			<input message="cmisw:addObjectToFolderRequest" />
-			<output message="cmisw:addObjectToFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<input message="cmisw:removeObjectFromFolderRequest" />
-			<output message="cmisw:removeObjectFromFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="NavigationServicePort">
-		<operation name="getDescendants">
-			<input message="cmisw:getDescendantsRequest" />
-			<output message="cmisw:getDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getChildren">
-			<input message="cmisw:getChildrenRequest" />
-			<output message="cmisw:getChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderParent">
-			<input message="cmisw:getFolderParentRequest" />
-			<output message="cmisw:getFolderParentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderTree">
-			<input message="cmisw:getFolderTreeRequest" />
-			<output message="cmisw:getFolderTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectParents">
-			<input message="cmisw:getObjectParentsRequest" />
-			<output message="cmisw:getObjectParentsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<input message="cmisw:getCheckedOutDocsRequest" />
-			<output message="cmisw:getCheckedOutDocsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ObjectServicePort">
-		<operation name="createDocument">
-			<input message="cmisw:createDocumentRequest" />
-			<output message="cmisw:createDocumentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createDocumentFromSource">
-			<input message="cmisw:createDocumentFromSourceRequest" />
-			<output message="cmisw:createDocumentFromSourceResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createFolder">
-			<input message="cmisw:createFolderRequest" />
-			<output message="cmisw:createFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createRelationship">
-			<input message="cmisw:createRelationshipRequest" />
-			<output message="cmisw:createRelationshipResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createPolicy">
-			<input message="cmisw:createPolicyRequest" />
-			<output message="cmisw:createPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createItem">
-			<input message="cmisw:createItemRequest" />
-			<output message="cmisw:createItemResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllowableActions">
-			<input message="cmisw:getAllowableActionsRequest" />
-			<output message="cmisw:getAllowableActionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObject">
-			<input message="cmisw:getObjectRequest" />
-			<output message="cmisw:getObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getProperties">
-			<input message="cmisw:getPropertiesRequest" />
-			<output message="cmisw:getPropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRenditions">
-			<input message="cmisw:getRenditionsRequest" />
-			<output message="cmisw:getRenditionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectByPath">
-			<input message="cmisw:getObjectByPathRequest" />
-			<output message="cmisw:getObjectByPathResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentStream">
-			<input message="cmisw:getContentStreamRequest" />
-			<output message="cmisw:getContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="updateProperties">
-			<input message="cmisw:updatePropertiesRequest" />
-			<output message="cmisw:updatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="bulkUpdateProperties">
-			<input message="cmisw:bulkUpdatePropertiesRequest" />
-			<output message="cmisw:bulkUpdatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="moveObject">
-			<input message="cmisw:moveObjectRequest" />
-			<output message="cmisw:moveObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteObject">
-			<input message="cmisw:deleteObjectRequest" />
-			<output message="cmisw:deleteObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteTree">
-			<input message="cmisw:deleteTreeRequest" />
-			<output message="cmisw:deleteTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="setContentStream">
-			<input message="cmisw:setContentStreamRequest" />
-			<output message="cmisw:setContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="appendContentStream">
-			<input message="cmisw:appendContentStreamRequest" />
-			<output message="cmisw:appendContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteContentStream">
-			<input message="cmisw:deleteContentStreamRequest" />
-			<output message="cmisw:deleteContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="PolicyServicePort">
-		<operation name="applyPolicy">
-			<input message="cmisw:applyPolicyRequest" />
-			<output message="cmisw:applyPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removePolicy">
-			<input message="cmisw:removePolicyRequest" />
-			<output message="cmisw:removePolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAppliedPolicies">
-			<input message="cmisw:getAppliedPoliciesRequest" />
-			<output message="cmisw:getAppliedPoliciesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="RelationshipServicePort">
-		<operation name="getObjectRelationships">
-			<input message="cmisw:getObjectRelationshipsRequest" />
-			<output message="cmisw:getObjectRelationshipsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="RepositoryServicePort">
-		<operation name="getRepositories">
-			<input message="cmisw:getRepositoriesRequest" />
-			<output message="cmisw:getRepositoriesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRepositoryInfo">
-			<input message="cmisw:getRepositoryInfoRequest" />
-			<output message="cmisw:getRepositoryInfoResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeChildren">
-			<input message="cmisw:getTypeChildrenRequest" />
-			<output message="cmisw:getTypeChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDescendants">
-			<input message="cmisw:getTypeDescendantsRequest" />
-			<output message="cmisw:getTypeDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDefinition">
-			<input message="cmisw:getTypeDefinitionRequest" />
-			<output message="cmisw:getTypeDefinitionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="createType">
-			<input message="cmisw:createTypeRequest" />
-			<output message="cmisw:createTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="updateType">
-			<input message="cmisw:updateTypeRequest" />
-			<output message="cmisw:updateTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="deleteType">
-			<input message="cmisw:deleteTypeRequest" />
-			<output message="cmisw:deleteTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="VersioningServicePort">
-		<operation name="checkOut">
-			<input message="cmisw:checkOutRequest" />
-			<output message="cmisw:checkOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="cancelCheckOut">
-			<input message="cmisw:cancelCheckOutRequest" />
-			<output message="cmisw:cancelCheckOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="checkIn">
-			<input message="cmisw:checkInRequest" />
-			<output message="cmisw:checkInResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<input message="cmisw:getObjectOfLatestVersionRequest" />
-			<output message="cmisw:getObjectOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<input message="cmisw:getPropertiesOfLatestVersionRequest" />
-			<output message="cmisw:getPropertiesOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllVersions">
-			<input message="cmisw:getAllVersionsRequest" />
-			<output message="cmisw:getAllVersionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ACLServicePort">
-		<operation name="getACL">
-			<input message="cmisw:getACLRequest" />
-			<output message="cmisw:getACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="applyACL">
-			<input message="cmisw:applyACLRequest" />
-			<output message="cmisw:applyACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-
-	<binding name="DiscoveryServicePortBinding" type="cmisw:DiscoveryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="query">
-			<soap:operation soapAction="query" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentChanges">
-			<soap:operation soapAction="getContentChanges" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="MultiFilingServicePortBinding" type="cmisw:MultiFilingServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="addObjectToFolder">
-			<soap:operation soapAction="addObjectToFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<soap:operation soapAction="removeObjectFromFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="NavigationServicePortBinding" type="cmisw:NavigationServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getDescendants">
-			<soap:operation soapAction="getDescendants" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getChildren">
-			<soap:operation soapAction="getChildren" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderParent">
-			<soap:operation soapAction="getFolderParent" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderTree">
-			<soap:operation soapAction="getFolderTree" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectParents">
-			<soap:operation soapAction="getObjectParents" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<soap:operation soapAction="getCheckedOutDocs" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ObjectServicePortBinding" type="cmisw:ObjectServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="createDocument">
-			<soap:operation soapAction="createDocument" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createDocumentFromSource">
-			<soap:operation soapAction="createDocumentFromSource" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createFolder">
-			<soap:operation soapAction="createFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createRelationship">
-			<soap:operation soapAction="createRelationship" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createPolicy">
-			<soap:operation soapAction="createPolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createItem">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllowableActions">
-			<soap:operation soapAction="getAllowableActions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObject">
-			<soap:operation soapAction="getObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getProperties">
-			<soap:operation soapAction="getProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRenditions">
-			<soap:operation soapAction="getRenditions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectByPath">
-			<soap:operation soapAction="getObjectByPath" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentStream">
-			<soap:operation soapAction="getContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateProperties">
-			<soap:operation soapAction="updateProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="bulkUpdateProperties">
-			<soap:operation soapAction="bulkUpdateProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="moveObject">
-			<soap:operation soapAction="moveObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteObject">
-			<soap:operation soapAction="deleteObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteTree">
-			<soap:operation soapAction="deleteTree" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="setContentStream">
-			<soap:operation soapAction="setContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="appendContentStream">
-			<soap:operation soapAction="appendContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteContentStream">
-			<soap:operation soapAction="deleteContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="PolicyServicePortBinding" type="cmisw:PolicyServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="applyPolicy">
-			<soap:operation soapAction="applyPolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removePolicy">
-			<soap:operation soapAction="removePolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAppliedPolicies">
-			<soap:operation soapAction="getAppliedPolicies" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RelationshipServicePortBinding" type="cmisw:RelationshipServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getObjectRelationships">
-			<soap:operation soapAction="getObjectRelationships" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RepositoryServicePortBinding" type="cmisw:RepositoryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getRepositories">
-			<soap:operation soapAction="getRepositories" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRepositoryInfo">
-			<soap:operation soapAction="getRepositoryInfo" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeChildren">
-			<soap:operation soapAction="getTypeChildren" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDescendants">
-			<soap:operation soapAction="getTypeDescendants" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDefinition">
-			<soap:operation soapAction="getTypeDefinition" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createType">
-			<soap:operation soapAction="createType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateType">
-			<soap:operation soapAction="updateType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteType">
-			<soap:operation soapAction="deleteType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="VersioningServicePortBinding" type="cmisw:VersioningServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="checkOut">
-			<soap:operation soapAction="checkOut" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="cancelCheckOut">
-			<soap:operation soapAction="cancelCheckOut" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="checkIn">
-			<soap:operation soapAction="checkIn" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<soap:operation soapAction="getObjectOfLatestVersion" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<soap:operation soapAction="getPropertiesOfLatestVersion" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllVersions">
-			<soap:operation soapAction="getAllVersions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ACLServicePortBinding" type="cmisw:ACLServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getACL">
-			<soap:operation soapAction="getACL" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="applyACL">
-			<soap:operation soapAction="applyACL" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-
-
-	<service name="DiscoveryService">
-		<port name="DiscoveryServicePort" binding="cmisw:DiscoveryServicePortBinding">
-			<soap:address
-				location="http://cmis/services/DiscoveryService.DiscoveryServicePort" />
-		</port>
-	</service>
-	<service name="MultiFilingService">
-		<port name="MultiFilingServicePort" binding="cmisw:MultiFilingServicePortBinding">
-			<soap:address
-				location="http://cmis/services/MultiFilingService.MultiFilingServicePort" />
-		</port>
-	</service>
-	<service name="NavigationService">
-		<port name="NavigationServicePort" binding="cmisw:NavigationServicePortBinding">
-			<soap:address
-				location="http://cmis/services/NavigationService.NavigationServicePort" />
-		</port>
-	</service>
-	<service name="ObjectService">
-		<port name="ObjectServicePort" binding="cmisw:ObjectServicePortBinding">
-			<soap:address location="http://cmis/services/ObjectService.ObjectServicePort" />
-		</port>
-	</service>
-	<service name="PolicyService">
-		<port name="PolicyServicePort" binding="cmisw:PolicyServicePortBinding">
-			<soap:address location="http://cmis/services/PolicyService.PolicyServicePort" />
-		</port>
-	</service>
-	<service name="RelationshipService">
-		<port name="RelationshipServicePort" binding="cmisw:RelationshipServicePortBinding">
-			<soap:address
-				location="http://cmis/services/RelationshipService.RelationshipServicePort" />
-		</port>
-	</service>
-	<service name="RepositoryService">
-		<port name="RepositoryServicePort" binding="cmisw:RepositoryServicePortBinding">
-			<soap:address
-				location="http://cmis/services/RepositoryService.RepositoryServicePort" />
-		</port>
-	</service>
-	<service name="VersioningService">
-		<port name="VersioningServicePort" binding="cmisw:VersioningServicePortBinding">
-			<soap:address
-				location="http://cmis/services/VersioningService.VersioningServicePort" />
-		</port>
-	</service>
-	<service name="ACLService">
-		<port name="ACLServicePort" binding="cmisw:ACLServicePortBinding">
-			<soap:address location="http://cmis/services/ACLService.ACLServicePort" />
-		</port>
-	</service>
-
-</definitions>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/xml.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/xml.xsd
deleted file mode 100644
index f0edad9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/resources/wsdl/cmis11/xml.xsd
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xsd:schema 
-targetNamespace="http://www.w3.org/XML/1998/namespace" 
-xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
-xml:lang="en">
- <xsd:attribute name="lang">
-  <xsd:simpleType>
-   <xsd:union memberTypes="xsd:language">
-    <xsd:simpleType>    
-     <xsd:restriction base="xsd:string">
-      <xsd:enumeration value=""/>
-     </xsd:restriction>
-    </xsd:simpleType>
-   </xsd:union>
-  </xsd:simpleType>
- </xsd:attribute>
-
- <xsd:attribute name="space">
-  <xsd:simpleType>
-   <xsd:restriction base="xsd:NCName">
-    <xsd:enumeration value="default"/>
-    <xsd:enumeration value="preserve"/>
-   </xsd:restriction>
-  </xsd:simpleType>
- </xsd:attribute>
-
- <xsd:attribute name="base" type="xsd:anyURI">
-  <xsd:annotation>
-   <xsd:documentation>See http://www.w3.org/TR/xmlbase/ for
-                     information about this attribute.</xsd:documentation>
-  </xsd:annotation>
- </xsd:attribute>
- 
- <xsd:attribute name="id" type="xsd:ID">
-  <xsd:annotation>
-   <xsd:documentation>See http://www.w3.org/TR/xml-id/ for
-                     information about this attribute.</xsd:documentation>
-  </xsd:annotation>
- </xsd:attribute>
-
- <xsd:attributeGroup name="specialAttrs">
-  <xsd:attribute ref="xml:base"/>
-  <xsd:attribute ref="xml:lang"/>
-  <xsd:attribute ref="xml:space"/>
-  <xsd:attribute ref="xml:id"/>
- </xsd:attributeGroup>
-
-</xsd:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/log4j.properties b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/log4j.properties
deleted file mode 100644
index 91736c8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/log4j.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-#sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.opencmis.client.provider.spi=O
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/json/DateTimeTimezoneTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/json/DateTimeTimezoneTest.java
deleted file mode 100644
index c1c5e59..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/json/DateTimeTimezoneTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.json;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter.PropertyMode;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.junit.Test;
-
-public class DateTimeTimezoneTest {
-
-    private final static String TEST_PROP = "test:prop";
-    private final static String TIMEZONE = "GMT+01:23";
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testDateTimePropertyWrite() {
-        GregorianCalendar orgValue = new GregorianCalendar(TimeZone.getTimeZone(TIMEZONE));
-
-        PropertiesImpl props = new PropertiesImpl();
-        props.addProperty(new PropertyDateTimeImpl(TEST_PROP, orgValue));
-
-        // milliseconds
-
-        JSONObject json1 = JSONConverter.convert(props, "id", null, PropertyMode.OBJECT, false, DateTimeFormat.SIMPLE);
-
-        assertNotNull(json1);
-        assertNotNull(json1.get(TEST_PROP));
-
-        Map<String, Object> prop1 = (Map<String, Object>) json1.get(TEST_PROP);
-        assertNotNull(prop1.get(JSONConstants.JSON_PROPERTY_VALUE));
-        assertTrue(prop1.get(JSONConstants.JSON_PROPERTY_VALUE) instanceof List<?>);
-
-        List<?> values1 = (List<?>) prop1.get(JSONConstants.JSON_PROPERTY_VALUE);
-        assertEquals(1, values1.size());
-        assertTrue(values1.get(0) instanceof Number);
-
-        assertEquals(orgValue.getTimeInMillis(), ((Number) values1.get(0)).longValue());
-
-        // DateTime string
-
-        JSONObject json2 = JSONConverter
-                .convert(props, "id", null, PropertyMode.OBJECT, false, DateTimeFormat.EXTENDED);
-
-        assertNotNull(json2);
-        assertNotNull(json2.get(TEST_PROP));
-
-        Map<String, Object> prop2 = (Map<String, Object>) json2.get(TEST_PROP);
-        assertNotNull(prop2.get(JSONConstants.JSON_PROPERTY_VALUE));
-        assertTrue(prop2.get(JSONConstants.JSON_PROPERTY_VALUE) instanceof List<?>);
-
-        List<?> values2 = (List<?>) prop2.get(JSONConstants.JSON_PROPERTY_VALUE);
-        assertEquals(1, values2.size());
-        assertTrue(values2.get(0) instanceof String);
-
-        GregorianCalendar calValue = DateTimeHelper.parseXmlDateTime(values2.get(0).toString());
-        assertEquals(orgValue.getTimeInMillis(), calValue.getTimeInMillis());
-        assertTrue(orgValue.getTimeZone().hasSameRules(calValue.getTimeZone()));
-    }
-
-    @Test
-    public void testDateTimePropertyRead() {
-
-        GregorianCalendar orgValue = new GregorianCalendar(TimeZone.getTimeZone(TIMEZONE));
-
-        Map<String, Object> json = new HashMap<String, Object>();
-        Map<String, Object> propJson = new HashMap<String, Object>();
-
-        json.put(TEST_PROP, propJson);
-
-        // milliseconds
-
-        propJson.put(JSONConstants.JSON_PROPERTY_ID, TEST_PROP);
-        propJson.put(JSONConstants.JSON_PROPERTY_DATATYPE, PropertyType.DATETIME.value());
-        propJson.put(JSONConstants.JSON_PROPERTY_VALUE, orgValue.getTimeInMillis());
-
-        Properties props1 = JSONConverter.convertProperties(json, null);
-
-        assertNotNull(props1);
-        assertNotNull(props1.getProperties());
-        assertNotNull(props1.getProperties().get(TEST_PROP));
-        assertTrue(props1.getProperties().get(TEST_PROP) instanceof PropertyDateTime);
-
-        GregorianCalendar value1 = ((PropertyDateTime) props1.getProperties().get(TEST_PROP)).getFirstValue();
-
-        assertEquals(orgValue.getTimeInMillis(), value1.getTimeInMillis());
-        assertTrue(value1.getTimeZone().hasSameRules(TimeZone.getTimeZone("GMT")));
-
-        // DateTime string
-
-        propJson.put(JSONConstants.JSON_PROPERTY_ID, TEST_PROP);
-        propJson.put(JSONConstants.JSON_PROPERTY_DATATYPE, PropertyType.DATETIME.value());
-        propJson.put(JSONConstants.JSON_PROPERTY_VALUE, DateTimeHelper.formatXmlDateTime(orgValue));
-
-        Properties props2 = JSONConverter.convertProperties(json, null);
-
-        assertNotNull(props2);
-        assertNotNull(props2.getProperties());
-        assertNotNull(props2.getProperties().get(TEST_PROP));
-        assertTrue(props2.getProperties().get(TEST_PROP) instanceof PropertyDateTime);
-
-        GregorianCalendar value2 = ((PropertyDateTime) props2.getProperties().get(TEST_PROP)).getFirstValue();
-
-        assertEquals(orgValue.getTimeInMillis(), value2.getTimeInMillis());
-        assertTrue(value2.getTimeZone().hasSameRules(TimeZone.getTimeZone(TIMEZONE)));
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/Base64Test.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/Base64Test.java
deleted file mode 100644
index e413552..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/Base64Test.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.junit.Test;
-
-/**
- * Base64 tests. (Placeholder for more tests.)
- */
-public class Base64Test {
-
-    @Test
-    public void testSimpleBase64() throws Exception {
-        byte[] input = IOUtils.toUTF8Bytes("test");
-
-        assertEquals("dGVzdA==", Base64.encodeBytes(input, 0, input.length));
-        assertArrayEquals(input, Base64.decode("dGVzdA=="));
-        assertArrayEquals(input, Base64.decode(Base64.encodeBytes(input)));
-    }
-
-    @Test
-    public void testBase64Stream() throws Exception {
-        ByteArrayInputStream stream = new ByteArrayInputStream("dGVzdA==".getBytes("US-ASCII"));
-        InputStream base64stream = new Base64.InputStream(stream);
-
-        ByteArrayOutputStream output = new ByteArrayOutputStream();
-
-        IOUtils.copy(base64stream, output);
-
-        base64stream.close();
-
-        assertArrayEquals("test".getBytes("US-ASCII"), output.toByteArray());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/CollectionsHelperTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/CollectionsHelperTest.java
deleted file mode 100644
index 7faacde..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/CollectionsHelperTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.CollectionsHelper;
-import org.junit.Test;
-
-public class CollectionsHelperTest {
-
-    @Test
-    public void testHelpers() {
-        assertTrue(CollectionsHelper.isNullOrEmpty((List<String>) null));
-        assertTrue(CollectionsHelper.isNullOrEmpty((Map<String, String>) null));
-        assertFalse(CollectionsHelper.isNotEmpty((List<String>) null));
-        assertFalse(CollectionsHelper.isNotEmpty((Map<String, String>) null));
-
-        assertTrue(CollectionsHelper.isNullOrEmpty(Collections.emptyList()));
-        assertTrue(CollectionsHelper.isNullOrEmpty(Collections.emptyMap()));
-        assertFalse(CollectionsHelper.isNotEmpty(Collections.emptyList()));
-        assertFalse(CollectionsHelper.isNotEmpty(Collections.emptyMap()));
-
-        assertFalse(CollectionsHelper.isNullOrEmpty(Collections.singletonList("value")));
-        assertFalse(CollectionsHelper.isNullOrEmpty(Collections.singletonMap("key", "value")));
-        assertTrue(CollectionsHelper.isNotEmpty(Collections.singletonList("value")));
-        assertTrue(CollectionsHelper.isNotEmpty(Collections.singletonMap("key", "value")));
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
deleted file mode 100644
index 01db615..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamHashImpl;
-import org.junit.Test;
-
-public class ContentStreamHashTest {
-
-    @Test
-    public void testHash() throws Exception {
-        ContentStreamHashImpl hash1 = new ContentStreamHashImpl("{alg}0123456789abcdef");
-        ContentStreamHashImpl hash2 = new ContentStreamHashImpl("alg", "0123456789abcdef");
-
-        assertEquals("alg", hash1.getAlgorithm());
-        assertEquals("0123456789abcdef", hash1.getHash());
-
-        assertEquals(hash1.getPropertyValue(), hash2.getPropertyValue());
-        assertEquals(hash1.getAlgorithm(), hash2.getAlgorithm());
-        assertEquals(hash1.getHash(), hash2.getHash());
-    }
-
-    @Test
-    public void testHashCorrected() throws Exception {
-        ContentStreamHashImpl hash1 = new ContentStreamHashImpl("{alg} 01 23 45 67 89 AB CD EF ");
-        ContentStreamHashImpl hash2 = new ContentStreamHashImpl("ALG", "0123 4567 89ab cdef");
-        ContentStreamHashImpl hash3 = new ContentStreamHashImpl("aLg", new byte[] { (byte) 0x01, (byte) 0x23,
-                (byte) 0x45, (byte) 0x67, (byte) 0x89, (byte) 0xab, (byte) 0xcd, (byte) 0xef });
-
-        assertEquals("alg", hash1.getAlgorithm());
-        assertEquals("0123456789abcdef", hash1.getHash());
-
-        assertEquals(hash1.getAlgorithm(), hash2.getAlgorithm());
-        assertEquals(hash1.getHash(), hash2.getHash());
-
-        assertEquals(hash1.getAlgorithm(), hash3.getAlgorithm());
-        assertEquals(hash1.getHash(), hash3.getHash());
-
-        assertFalse(hash1.equals(hash2));
-        assertFalse(hash1.equals(hash2));
-        assertTrue(hash2.equals(hash3));
-    }
-
-    @Test
-    public void testHashStreamMD5() throws Exception {
-        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
-        ByteArrayInputStream stream = new ByteArrayInputStream(content);
-
-        ContentStreamHash hash = ContentStreamHashImpl.createContentStreamHashes(stream,
-                ContentStreamHashImpl.ALGORITHM_MD5).get(0);
-
-        assertEquals(ContentStreamHashImpl.ALGORITHM_MD5, hash.getAlgorithm());
-        assertEquals("ed076287532e86365e841e92bfc50d8c", hash.getHash());
-        assertEquals("{md5}ed076287532e86365e841e92bfc50d8c", hash.getPropertyValue());
-
-        stream.close();
-    }
-
-    @Test
-    public void testHashStreamSHA1() throws Exception {
-        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
-        ByteArrayInputStream stream = new ByteArrayInputStream(content);
-
-        ContentStreamHash hash = ContentStreamHashImpl.createContentStreamHashes(stream,
-                ContentStreamHashImpl.ALGORITHM_SHA1).get(0);
-
-        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA1, hash.getAlgorithm());
-        assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", hash.getHash());
-        assertEquals("{sha-1}2ef7bde608ce5404e97d5f042f95f89f1c232871", hash.getPropertyValue());
-
-        stream.close();
-    }
-
-    @Test
-    public void testHashStreamSHA256() throws Exception {
-        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
-        ByteArrayInputStream stream = new ByteArrayInputStream(content);
-
-        ContentStreamHash hash = ContentStreamHashImpl.createContentStreamHashes(stream,
-                ContentStreamHashImpl.ALGORITHM_SHA256).get(0);
-
-        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA256, hash.getAlgorithm());
-        assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", hash.getHash());
-        assertEquals("{sha-256}7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
-                hash.getPropertyValue());
-
-        stream.close();
-    }
-
-    @Test
-    public void testHashStreamSHA512() throws Exception {
-        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
-        ByteArrayInputStream stream = new ByteArrayInputStream(content);
-
-        ContentStreamHash hash = ContentStreamHashImpl.createContentStreamHashes(stream,
-                ContentStreamHashImpl.ALGORITHM_SHA512).get(0);
-
-        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA512, hash.getAlgorithm());
-        assertEquals(
-                "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
-                hash.getHash());
-        assertEquals(
-                "{sha-512}"
-                        + "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
-                hash.getPropertyValue());
-
-        stream.close();
-    }
-
-    @Test
-    public void testHashStreams() throws Exception {
-        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
-        ByteArrayInputStream stream = new ByteArrayInputStream(content);
-
-        List<ContentStreamHash> hashes = ContentStreamHashImpl.createContentStreamHashes(stream,
-                ContentStreamHashImpl.ALGORITHM_SHA1, ContentStreamHashImpl.ALGORITHM_SHA256,
-                ContentStreamHashImpl.ALGORITHM_SHA512);
-
-        assertNotNull(hashes);
-        assertEquals(3, hashes.size());
-
-        assertEquals("{sha-1}2ef7bde608ce5404e97d5f042f95f89f1c232871", hashes.get(0).getPropertyValue());
-        assertEquals("{sha-256}7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", hashes.get(1)
-                .getPropertyValue());
-        assertEquals(
-                "{sha-512}"
-                        + "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
-                hashes.get(2).getPropertyValue());
-
-        stream.close();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ConverterTest.java
deleted file mode 100644
index 80e1e6d..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ConverterTest.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.junit.Test;
-
-/**
- * Tests converter methods.
- */
-public class ConverterTest extends TestCase {
-
-    @Test
-    public void testRepositoryInfo() throws Exception {
-        // dry run
-        RepositoryInfoImpl obj1 = new RepositoryInfoImpl();
-        RepositoryInfo obj2 = WSConverter.convert(WSConverter.convert(obj1, CmisVersion.CMIS_1_1));
-
-        assertDataObjectsEquals("RepositoryInfo", obj1, obj2);
-
-        // values
-        obj1 = new RepositoryInfoImpl();
-        obj1.setChangesIncomplete(Boolean.TRUE);
-        obj1.setChangesOnType(Collections.singletonList(BaseTypeId.CMIS_DOCUMENT));
-        obj1.setCmisVersionSupported("1.0");
-        obj1.setLatestChangeLogToken("changeLogToken");
-        obj1.setPrincipalAnonymous("principalAnonymous");
-        obj1.setPrincipalAnyone("principalAnyone");
-        obj1.setProductName("productName");
-        obj1.setProductVersion("productVersion");
-        obj1.setDescription("description");
-        obj1.setId("id");
-        obj1.setName("name");
-        obj1.setRootFolder("rootFolderId");
-        obj1.setThinClientUri("thinClientUri");
-        obj1.setVendorName("vendorName");
-
-        RepositoryCapabilitiesImpl cap1 = new RepositoryCapabilitiesImpl();
-        cap1.setAllVersionsSearchable(Boolean.TRUE);
-        cap1.setCapabilityAcl(CapabilityAcl.DISCOVER);
-        cap1.setCapabilityChanges(CapabilityChanges.ALL);
-        cap1.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
-        cap1.setCapabilityJoin(CapabilityJoin.INNERANDOUTER);
-        cap1.setCapabilityQuery(CapabilityQuery.BOTHCOMBINED);
-        cap1.setCapabilityRendition(CapabilityRenditions.READ);
-        cap1.setIsPwcSearchable(Boolean.TRUE);
-        cap1.setIsPwcUpdatable(Boolean.TRUE);
-        cap1.setSupportsGetDescendants(Boolean.TRUE);
-        cap1.setSupportsGetFolderTree(Boolean.TRUE);
-        cap1.setSupportsMultifiling(Boolean.TRUE);
-        cap1.setSupportsUnfiling(Boolean.TRUE);
-        cap1.setSupportsVersionSpecificFiling(Boolean.TRUE);
-        obj1.setCapabilities(cap1);
-
-        AclCapabilitiesDataImpl acl1 = new AclCapabilitiesDataImpl();
-        acl1.setAclPropagation(AclPropagation.PROPAGATE);
-        List<PermissionDefinition> pddList = new ArrayList<PermissionDefinition>();
-        PermissionDefinitionDataImpl pdd1 = new PermissionDefinitionDataImpl();
-        pdd1.setId("test:perm1");
-        pdd1.setDescription("Permission1");
-        pddList.add(pdd1);
-        PermissionDefinitionDataImpl pdd2 = new PermissionDefinitionDataImpl();
-        pdd2.setId("test:perm2");
-        pdd2.setDescription("Permission2");
-        pddList.add(pdd2);
-        acl1.setPermissionDefinitionData(pddList);
-        Map<String, PermissionMapping> pmd = new LinkedHashMap<String, PermissionMapping>();
-        PermissionMappingDataImpl pmd1 = new PermissionMappingDataImpl();
-        pmd1.setKey(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER);
-        pmd1.setPermissions(Arrays.asList(new String[] { "p1", "p2" }));
-        pmd.put(pmd1.getKey(), pmd1);
-        PermissionMappingDataImpl pmd2 = new PermissionMappingDataImpl();
-        pmd2.setKey(PermissionMapping.CAN_DELETE_OBJECT);
-        pmd2.setPermissions(Arrays.asList(new String[] { "p3", "p4" }));
-        pmd.put(pmd2.getKey(), pmd2);
-        acl1.setPermissionMappingData(pmd);
-        obj1.setAclCapabilities(acl1);
-
-        obj2 = WSConverter.convert(WSConverter.convert(obj1, CmisVersion.CMIS_1_1));
-
-        assertDataObjectsEquals("RepositoryInfo", obj1, obj2);
-    }
-
-    @Test
-    public void testTypeDefinition() throws Exception {
-        // dry run
-        DocumentTypeDefinitionImpl obj1 = new DocumentTypeDefinitionImpl();
-        TypeDefinition obj2 = WSConverter.convert(WSConverter.convert(obj1));
-
-        assertDataObjectsEquals("TypeDefinition", obj1, obj2);
-
-        // simple values
-        obj1 = new DocumentTypeDefinitionImpl();
-        obj1.setBaseTypeId(BaseTypeId.CMIS_DOCUMENT);
-        obj1.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-        obj1.setDescription("description");
-        obj1.setDisplayName("displayName");
-        obj1.setId("id");
-        obj1.setIsControllableAcl(Boolean.TRUE);
-        obj1.setIsControllablePolicy(Boolean.TRUE);
-        obj1.setIsCreatable(Boolean.TRUE);
-        obj1.setIsFileable(Boolean.TRUE);
-        obj1.setIsIncludedInSupertypeQuery(Boolean.TRUE);
-        obj1.setIsQueryable(Boolean.TRUE);
-        obj1.setIsVersionable(Boolean.TRUE);
-        obj1.setLocalName("localName");
-        obj1.setLocalNamespace("localNamespace");
-        obj1.setParentTypeId("parentId");
-        obj1.setQueryName("queryName");
-
-        obj2 = WSConverter.convert(WSConverter.convert(obj1));
-
-        assertDataObjectsEquals("TypeDefinition", obj1, obj2);
-    }
-
-    @Test
-    public void testObject() throws Exception {
-        // dry run
-        ObjectDataImpl obj1 = new ObjectDataImpl();
-        ObjectData obj2 = WSConverter.convert(WSConverter.convert(obj1, CmisVersion.CMIS_1_1));
-
-        assertDataObjectsEquals("Object", obj1, obj2);
-    }
-
-    /**
-     * Asserts OpenCMIS data objects.
-     */
-    protected void assertDataObjectsEquals(String name, Object expected, Object actual) throws Exception {
-
-        if ((expected == null) && (actual == null)) {
-            return;
-        }
-
-        if ((expected == null) && (actual instanceof Collection<?>)) {
-            assertTrue(((Collection<?>) actual).isEmpty());
-            return;
-        } else if ((expected instanceof Collection<?>) && (actual == null)) {
-            assertTrue(((Collection<?>) expected).isEmpty());
-            return;
-        } else if ((expected == null) || (actual == null)) {
-            fail("Data object is null! name: " + name + " / expected: " + expected + " / actual: " + actual);
-        }
-
-        // handle simple types
-        if ((expected instanceof String) || (expected instanceof Boolean) || (expected instanceof BigInteger)
-                || (expected instanceof BigDecimal) || (expected instanceof Enum<?>)) {
-            assertEquals(expected, actual);
-
-            return;
-        } else if (expected instanceof List<?>) {
-            List<?> expectedList = (List<?>) expected;
-            List<?> actualList = (List<?>) actual;
-
-            assertEquals(expectedList.size(), actualList.size());
-
-            for (int i = 0; i < expectedList.size(); i++) {
-                assertDataObjectsEquals(name + "[" + i + "]", expectedList.get(i), actualList.get(i));
-            }
-
-            return;
-        } else if (expected instanceof Map<?, ?>) {
-            Map<?, ?> expectedMap = (Map<?, ?>) expected;
-            Map<?, ?> actualMap = (Map<?, ?>) actual;
-
-            assertEquals(expectedMap.size(), actualMap.size());
-
-            for (Map.Entry<?, ?> entry : expectedMap.entrySet()) {
-                assertTrue(actualMap.containsKey(entry.getKey()));
-                assertDataObjectsEquals(name + "[" + entry.getKey() + "]", entry.getValue(),
-                        actualMap.get(entry.getKey()));
-            }
-
-            return;
-        }
-
-        for (Method m : expected.getClass().getMethods()) {
-            if (!m.getName().startsWith("get") && !m.getName().startsWith("supports")) {
-                continue;
-            }
-
-            if (m.getName().equals("getClass")) {
-                continue;
-            }
-
-            if (m.getParameterTypes().length != 0) {
-                continue;
-            }
-
-            Object expectedValue = m.invoke(expected, new Object[0]);
-            Object actualValue = m.invoke(actual, new Object[0]);
-
-            assertDataObjectsEquals(name + "." + m.getName(), expectedValue, actualValue);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/DateTimeTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/DateTimeTest.java
deleted file mode 100644
index c4bc3a8..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/DateTimeTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.junit.Test;
-
-public class DateTimeTest {
-
-    @Test
-    public void testXmlDateTimeParser() {
-        GregorianCalendar cal1 = DateTimeHelper.parseXmlDateTime("2012-12-24T09:15:06.123Z");
-        assertEquals(2012, cal1.get(Calendar.YEAR));
-        assertEquals(11, cal1.get(Calendar.MONTH));
-        assertEquals(24, cal1.get(Calendar.DAY_OF_MONTH));
-        assertEquals(9, cal1.get(Calendar.HOUR_OF_DAY));
-        assertEquals(15, cal1.get(Calendar.MINUTE));
-        assertEquals(6, cal1.get(Calendar.SECOND));
-        assertEquals(123, cal1.get(Calendar.MILLISECOND));
-        assertEquals(0, cal1.getTimeZone().getRawOffset());
-
-        GregorianCalendar cal2 = DateTimeHelper.parseXmlDateTime("2013-02-04T23:45:55.9876543");
-        assertEquals(2013, cal2.get(Calendar.YEAR));
-        assertEquals(1, cal2.get(Calendar.MONTH));
-        assertEquals(4, cal2.get(Calendar.DAY_OF_MONTH));
-        assertEquals(23, cal2.get(Calendar.HOUR_OF_DAY));
-        assertEquals(45, cal2.get(Calendar.MINUTE));
-        assertEquals(55, cal2.get(Calendar.SECOND));
-        assertEquals(987, cal2.get(Calendar.MILLISECOND));
-        assertEquals(0, cal2.getTimeZone().getRawOffset());
-
-        GregorianCalendar cal3 = DateTimeHelper.parseXmlDateTime("2013-01-02T03:04:05.678+05:00");
-        assertEquals(2013, cal3.get(Calendar.YEAR));
-        assertEquals(0, cal3.get(Calendar.MONTH));
-        assertEquals(2, cal3.get(Calendar.DAY_OF_MONTH));
-        assertEquals(3, cal3.get(Calendar.HOUR_OF_DAY));
-        assertEquals(4, cal3.get(Calendar.MINUTE));
-        assertEquals(5, cal3.get(Calendar.SECOND));
-        assertEquals(678, cal3.get(Calendar.MILLISECOND));
-        assertEquals(5 * 60 * 60 * 1000, cal3.getTimeZone().getRawOffset());
-    }
-
-    @Test
-    public void testXmlDateTimeWriter() {
-        GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal1.set(2012, 11, 24, 9, 10, 11);
-        cal1.set(Calendar.MILLISECOND, 0);
-
-        assertEquals("2012-12-24T09:10:11Z", DateTimeHelper.formatXmlDateTime(cal1));
-
-        GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal2.set(2013, 0, 1, 2, 3, 4);
-        cal2.set(Calendar.MILLISECOND, 50);
-
-        assertEquals("2013-01-01T02:03:04.05Z", DateTimeHelper.formatXmlDateTime(cal2));
-
-        GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00"));
-        cal3.set(2012, 11, 24, 9, 10, 11);
-        cal3.set(Calendar.MILLISECOND, 0);
-
-        assertEquals("2012-12-24T09:10:11+05:00", DateTimeHelper.formatXmlDateTime(cal3));
-
-        GregorianCalendar cal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT-03:02"));
-        cal4.set(100, 8, 17, 18, 30, 7);
-        cal4.set(Calendar.MILLISECOND, 654);
-
-        assertEquals("0100-09-17T18:30:07.654-03:02", DateTimeHelper.formatXmlDateTime(cal4));
-
-        GregorianCalendar cal5 = new GregorianCalendar(TimeZone.getTimeZone("GMT+01:00"));
-        cal5.set(2012, 11, 24, 9, 10, 11);
-        cal5.set(Calendar.MILLISECOND, 0);
-
-        assertEquals("2012-12-24T08:10:11Z", DateTimeHelper.formatXmlDateTime(cal5.getTimeInMillis()));
-
-        GregorianCalendar cal6 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin"));
-        cal6.set(2013, 4, 6, 9, 10, 11);
-        cal6.set(Calendar.MILLISECOND, 0);
-
-        assertEquals("2013-05-06T09:10:11+02:00", DateTimeHelper.formatXmlDateTime(cal6));
-        
-        GregorianCalendar cal7 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin"));
-        cal7.set(2012, 11, 24, 9, 10, 11);
-        cal7.set(Calendar.MILLISECOND, 0);
-
-        assertEquals("2012-12-24T09:10:11+01:00", DateTimeHelper.formatXmlDateTime(cal7));
-    }
-
-    @Test
-    public void testXmlDateTimeWriterAndParser() {
-        GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal1.set(2012, 11, 24, 9, 10, 11);
-        cal1.set(Calendar.MILLISECOND, 0);
-
-        GregorianCalendar cal2 = DateTimeHelper.parseXmlDateTime(DateTimeHelper.formatXmlDateTime(cal1));
-
-        assertEquals(cal1, cal2);
-
-        GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00"));
-        cal3.set(2012, 11, 24, 9, 10, 11);
-        cal3.set(Calendar.MILLISECOND, 12);
-
-        GregorianCalendar cal4 = DateTimeHelper.parseXmlDateTime(DateTimeHelper.formatXmlDateTime(cal3));
-
-        assertEquals(cal3, cal4);
-    }
-
-    @Test
-    public void testInvalidXmlDateTime() {
-        // null is not a date
-        assertNull(DateTimeHelper.parseXmlDateTime(null));
-
-        // "" is not a date
-        assertNull(DateTimeHelper.parseXmlDateTime(""));
-
-        // wrong format
-        assertNull(DateTimeHelper.parseXmlDateTime("1111111111111111"));
-
-        // invalid year
-        assertNull(DateTimeHelper.parseXmlDateTime("111-11-11T11:11:11.111Z"));
-
-        // invalid month
-        assertNull(DateTimeHelper.parseXmlDateTime("1111-21-11T11:11:11.111Z"));
-
-        // invalid day
-        assertNull(DateTimeHelper.parseXmlDateTime("1111-11-51T11:11:11.111Z"));
-    }
-
-    @Test
-    public void testHttpDateTimeParser() {
-        GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal1.set(2012, 11, 24, 9, 10, 11);
-        cal1.set(Calendar.MILLISECOND, 0);
-
-        String dateStr1 = DateTimeHelper.formatHttpDateTime(cal1.getTime());
-        assertEquals("Mon, 24 Dec 2012 09:10:11 GMT", dateStr1);
-
-        Date date1 = DateTimeHelper.parseHttpDateTime(dateStr1);
-
-        assertEquals(cal1.getTime(), date1);
-
-        GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00"));
-        cal2.set(2013, 0, 1, 2, 3, 4);
-        cal2.set(Calendar.MILLISECOND, 0);
-
-        String dateStr2 = "  '" + DateTimeHelper.formatHttpDateTime(cal2.getTimeInMillis()) + "' ";
-        Date date2 = DateTimeHelper.parseHttpDateTime(dateStr2);
-
-        assertEquals(cal2.getTime(), date2);
-
-        GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00"));
-        cal3.set(2012, 11, 24, 9, 10, 11);
-        cal3.set(Calendar.MILLISECOND, 0);
-
-        String dateStr3 = DateTimeHelper.formatHttpDateTime(cal3);
-        Date date3 = DateTimeHelper.parseHttpDateTime(dateStr3);
-
-        assertEquals(cal3.getTime(), date3);
-
-        GregorianCalendar cal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal4.set(1994, 10, 6, 8, 49, 37);
-        cal4.set(Calendar.MILLISECOND, 0);
-
-        String dateStr4 = "Sunday, 06-Nov-94 08:49:37 GMT";
-
-        assertEquals(cal4.getTime(), DateTimeHelper.parseHttpDateTime(dateStr4));
-
-        GregorianCalendar cal5 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal5.set(1994, 10, 6, 8, 49, 37);
-        cal5.set(Calendar.MILLISECOND, 0);
-
-        String dateStr5 = "Sun Nov  6 08:49:37 1994";
-
-        assertEquals(cal5.getTime(), DateTimeHelper.parseHttpDateTime(dateStr5));
-
-        GregorianCalendar cal6 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal6.set(1994, 10, 16, 8, 49, 37);
-        cal6.set(Calendar.MILLISECOND, 0);
-
-        String dateStr6 = "Sun Nov 16 08:49:37 1994";
-
-        assertEquals(cal6.getTime(), DateTimeHelper.parseHttpDateTime(dateStr6));
-    }
-
-    @Test
-    public void testInvalidHttpDateTime() {
-        // null is not a date
-        assertNull(DateTimeHelper.parseHttpDateTime(null));
-
-        // "" is not a date
-        assertNull(DateTimeHelper.parseHttpDateTime(""));
-
-        // wrong format
-        assertNull(DateTimeHelper.parseHttpDateTime("1111111111111111"));
-
-        // invalid year
-        assertNull(DateTimeHelper.parseHttpDateTime("Mon, 24 Dec abcd 09:10:11 GMT"));
-
-        // invalid month
-        assertNull(DateTimeHelper.parseHttpDateTime("Mon, 24 abc 2012 09:10:11 GMT"));
-
-        // invalid day
-        assertNull(DateTimeHelper.parseHttpDateTime("Mon, xy Dec 2012 09:10:11 GMT"));
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/IOUtilsTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/IOUtilsTest.java
deleted file mode 100644
index e497bd5..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/IOUtilsTest.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.junit.Test;
-
-public class IOUtilsTest {
-
-    @Test
-    public void testUTF8() {
-        StringBuilder sb = new StringBuilder();
-        for (char c = ' '; c <= 0xfff; c++) {
-            sb.append(c);
-        }
-
-        assertEquals(sb.toString(), IOUtils.toUTF8String(IOUtils.toUTF8Bytes(sb.toString())));
-        assertNull(IOUtils.toUTF8Bytes(null));
-        assertNull(IOUtils.toUTF8String(null));
-    }
-
-    @Test
-    public void testEncoding() {
-        String url = "http://example.com/abc?key=äöü @!§$%&/";
-
-        assertEquals(url, IOUtils.decodeURL(IOUtils.encodeURL(url)));
-        assertNull(IOUtils.encodeURL(null));
-        assertNull(IOUtils.decodeURL(null));
-    }
-
-    @Test
-    public void testCheckForBytes() throws Exception {
-        assertFalse(IOUtils.checkForBytes(new ByteArrayInputStream(new byte[0])));
-        assertTrue(IOUtils.checkForBytes(new ByteArrayInputStream(IOUtils.toUTF8Bytes("Hello World!"))));
-
-        assertNull(IOUtils.checkForBytes(new ByteArrayInputStream(new byte[0]), 1024));
-        assertTrue(IOUtils.checkForBytes(new ByteArrayInputStream(IOUtils.toUTF8Bytes("Hello World!")), 1024) instanceof ByteArrayInputStream);
-
-        assertNull(IOUtils.checkForBytes(new ByteArrayInputStream(new byte[0]) {
-            @Override
-            public boolean markSupported() {
-
-                return false;
-            }
-        }, 1024));
-        assertTrue(IOUtils.checkForBytes(new ByteArrayInputStream(IOUtils.toUTF8Bytes("Hello World!")) {
-            @Override
-            public boolean markSupported() {
-                return false;
-            }
-        }, 1024) instanceof BufferedInputStream);
-    }
-
-    @Test
-    public void testConsumeAndClose() {
-        ByteArrayInputStream stream = new ByteArrayInputStream(IOUtils.toUTF8Bytes("test"));
-
-        IOUtils.consumeAndClose(stream);
-        assertEquals(0, stream.available());
-
-        ByteArrayInputStream stream2 = new ByteArrayInputStream(IOUtils.toUTF8Bytes("test"));
-        InputStreamReader reader = new InputStreamReader(stream2);
-
-        IOUtils.consumeAndClose(reader);
-        assertEquals(0, stream2.available());
-
-        try {
-            reader.read();
-            fail("Reader should be closed.");
-        } catch (IOException e) {
-            // expected
-        }
-
-        IOUtils.closeQuietly(reader);
-        IOUtils.closeQuietly((Closeable) null);
-        IOUtils.closeQuietly((ContentStream) null);
-    }
-
-    @Test
-    public void testCopy() throws Exception {
-        byte[] input = IOUtils.toUTF8Bytes("test");
-        ByteArrayInputStream in = new ByteArrayInputStream(input);
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        IOUtils.copy(in, out);
-
-        assertArrayEquals(input, out.toByteArray());
-
-        IOUtils.closeQuietly(in);
-        IOUtils.closeQuietly(out);
-    }
-
-    @Test
-    public void testFirstLine() throws IOException {
-        String content = "line 1\nline 2\nline 3";
-        InputStream stream = createStream(content);
-
-        assertEquals("line 1", IOUtils.readFirstLine(stream));
-    }
-
-    @Test
-    public void testAllLines() throws IOException {
-        String content = "line 1\nline 2\nline 3";
-        InputStream stream = createStream(content);
-
-        assertEquals("line 1\nline 2\nline 3\n", IOUtils.readAllLines(stream));
-    }
-
-    @Test
-    public void testAllLinesAndSkipHeader1() throws IOException {
-        String content = "#header\n\nline 1\nline 2";
-        InputStream stream = createStream(content);
-
-        assertEquals("line 1\nline 2\n", IOUtils.readAllLinesAndRemoveHeader(stream));
-    }
-
-    @Test
-    public void testAllLinesAndSkipHeader2() throws IOException {
-        String content = "/* header 1\n * header 2\n*/\n\nline 1\nline 2";
-        InputStream stream = createStream(content);
-
-        assertEquals("line 1\nline 2\n", IOUtils.readAllLinesAndRemoveHeader(stream));
-    }
-
-    @Test
-    public void testIgnoreComments() throws IOException {
-        String content = "#comment1\n\nline 1\n  # comment 2\nline 2\nline 3";
-        InputStream stream = createStream(content);
-
-        assertEquals("line 1\nline 2\nline 3\n", IOUtils.readAllLinesAndIgnoreComments(stream));
-    }
-
-    @Test
-    public void testAsList() throws IOException {
-        String content = "#comment1\n\nline 1\n  # comment 2\nline 2\nline 3";
-        InputStream stream = createStream(content);
-
-        List<String> list = IOUtils.readAllLinesAsList(stream);
-
-        assertNotNull(list);
-        assertEquals(3, list.size());
-        assertEquals("line 1", list.get(0));
-        assertEquals("line 2", list.get(1));
-        assertEquals("line 3", list.get(2));
-    }
-
-    @Test
-    public void testAsMap() throws IOException {
-        String content = "#comment1\nkey1\n  # comment 2\nkey2=value2\nkey3 = value3";
-        InputStream stream = createStream(content);
-
-        Map<String, String> map = IOUtils.readAllLinesAsMap(stream);
-
-        assertNotNull(map);
-        assertEquals(3, map.size());
-        assertEquals("", map.get("key1"));
-        assertEquals("value2", map.get("key2"));
-        assertEquals("value3", map.get("key3"));
-    }
-
-    private InputStream createStream(String content) {
-        return new ByteArrayInputStream(IOUtils.toUTF8Bytes(content));
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MimeHelperTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MimeHelperTest.java
deleted file mode 100644
index 4d71866..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MimeHelperTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Florent Guillaume
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.decodeContentDisposition;
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.decodeContentDispositionFilename;
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.encodeContentDisposition;
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.getBoundaryFromMultiPart;
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.getChallengesFromAuthenticateHeader;
-import static org.apache.chemistry.opencmis.commons.impl.MimeHelper.getCharsetFromContentType;
-import static org.junit.Assert.assertArrayEquals;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.junit.Test;
-
-public class MimeHelperTest extends TestCase {
-
-    @Test
-    public void testEncodeContentDisposition() {
-        assertEquals("inline; filename=foo.bar", encodeContentDisposition("inline", "foo.bar"));
-        assertEquals("attachment; filename=foo.bar", encodeContentDisposition(null, "foo.bar"));
-        assertEquals("attachment; filename*=UTF-8''caf%C3%A9.pdf", encodeContentDisposition(null, "caf\u00e9.pdf"));
-        assertEquals("attachment; filename*=UTF-8''%20%27%2A%25%20abc%20%C2%81%C2%82%0D%0A%09",
-                encodeContentDisposition(null, " '*% abc \u0081\u0082\r\n\t"));
-    }
-
-    @Test
-    public void testDecodeContentDisposition() {
-        Map<String, String> params = new HashMap<String, String>();
-        Map<String, String> expected = new HashMap<String, String>();
-
-        assertEquals("attachment", decodeContentDisposition("attachment; a=b; c=d", params));
-        expected.put("a", "b");
-        expected.put("c", "d");
-        assertEquals(expected, params);
-        params.clear();
-        expected.clear();
-
-        assertEquals("inline", decodeContentDisposition("  inline ; a = \"b b\" (this is a comment) ; c =d;", params));
-        expected.put("a", "b b");
-        expected.put("c", "d");
-        assertEquals(expected, params);
-        params.clear();
-        expected.clear();
-
-        assertEquals("inline",
-                decodeContentDisposition("inline; modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\"", params));
-        assertEquals(Collections.singletonMap("modification-date", "Wed, 12 Feb 1997 16:29:51 -0500"), params);
-        params.clear();
-    }
-
-    @Test
-    public void testDecodeContentDispositionFilename() {
-        assertNull(decodeContentDispositionFilename("attachment; a=b; c=d;"));
-        assertNull(decodeContentDispositionFilename("inline"));
-        assertNull(decodeContentDispositionFilename("inline; modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\""));
-        assertEquals("foo.bar", decodeContentDispositionFilename("attachment; filename=foo.bar"));
-        assertEquals("foo.bar", decodeContentDispositionFilename("attachment; filename = \"foo.bar\""));
-        assertEquals("foo.bar",
-                decodeContentDispositionFilename(" guess ; filename = (this is rfc822 a comment) \"foo.bar\""));
-        assertEquals("caf\u00e9.pdf", decodeContentDispositionFilename("foo; filename*=UTF-8''caf%C3%A9.pdf"));
-        assertEquals("caf\u00e9.pdf", decodeContentDispositionFilename("bar; filename*=ISO-8859-1''caf%E9.pdf"));
-        assertEquals("flask-docs.pdf",
-                decodeContentDispositionFilename("attachment; filename*=UTF-8''%66%6c%61%73%6b%2d%64%6f%63%73.pdf;"
-                        + " size=893099; creation-date=Mon, 12 Aug 2013 22:02:54 -0700;"
-                        + " modification-date=Mon, 12 Aug 2013 22:02:55 -0700;"));
-    }
-
-    @Test
-    public void testCharsetFromContentType() {
-        assertEquals("utf-8", getCharsetFromContentType("text/plain;charset=utf-8"));
-        assertEquals("utf-8", getCharsetFromContentType("text/plain;charset=\"utf-8\""));
-        assertEquals("utf-8", getCharsetFromContentType("text/plain  ;  charset    =    \"utf-8\"   "));
-    }
-
-    @Test
-    public void testBoundaryFromMultiPart() throws Exception {
-        byte boundary[] = "thisisaBoundary".getBytes(IOUtils.ISO_8859_1);
-
-        assertNull(getBoundaryFromMultiPart("multipart/form-data"));
-        assertArrayEquals(boundary, getBoundaryFromMultiPart("multipart/form-data;boundary="
-                + new String(boundary, IOUtils.ISO_8859_1)));
-    }
-
-    @Test
-    public void testAuthenticateHeaderParameters() {
-        Map<String, Map<String, String>> challenges = null;
-
-        challenges = getChallengesFromAuthenticateHeader(null);
-        assertNull(challenges);
-
-        challenges = getChallengesFromAuthenticateHeader("");
-        assertNull(challenges);
-
-        challenges = getChallengesFromAuthenticateHeader("Basic");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("basic"));
-        assertTrue(challenges.get("basic").isEmpty());
-
-        challenges = getChallengesFromAuthenticateHeader("Basic realm=\"example\"");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("basic"));
-        assertEquals("example", challenges.get("basic").get("realm"));
-
-        challenges = getChallengesFromAuthenticateHeader("Basic realm= \"example\" ");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("basic"));
-        assertEquals("example", challenges.get("basic").get("realm"));
-
-        challenges = getChallengesFromAuthenticateHeader("Basic realm=example");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("basic"));
-        assertEquals("example", challenges.get("basic").get("realm"));
-
-        challenges = getChallengesFromAuthenticateHeader("Basic realm=\"example\",charset=\"UTF-8\"");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("basic"));
-        assertEquals("example", challenges.get("basic").get("realm"));
-        assertEquals("UTF-8", challenges.get("basic").get("charset"));
-
-        challenges = getChallengesFromAuthenticateHeader("Bearer realm=\"example\", error=\"invalid_token\"");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("bearer"));
-        assertEquals("example", challenges.get("bearer").get("realm"));
-        assertEquals("invalid_token", challenges.get("bearer").get("error"));
-
-        challenges = getChallengesFromAuthenticateHeader("Bearer realm=\"example\", error=invalid_token");
-        assertNotNull(challenges);
-        assertEquals("example", challenges.get("bearer").get("realm"));
-        assertEquals("invalid_token", challenges.get("bearer").get("error"));
-
-        challenges = getChallengesFromAuthenticateHeader("Bearer realm=\"example\", error=\"invalid_token\", error_description=\"The access token expired\"");
-        assertNotNull(challenges);
-        assertEquals("example", challenges.get("bearer").get("realm"));
-        assertEquals("invalid_token", challenges.get("bearer").get("error"));
-        assertEquals("The access token expired", challenges.get("bearer").get("error_description"));
-
-        challenges = getChallengesFromAuthenticateHeader("Bearer realm=\"example\",error_description=\"It's expires, really!\", error=\"invalid_token\",");
-        assertNotNull(challenges);
-        assertEquals("example", challenges.get("bearer").get("realm"));
-        assertEquals("invalid_token", challenges.get("bearer").get("error"));
-        assertEquals("It's expires, really!", challenges.get("bearer").get("error_description"));
-
-        challenges = getChallengesFromAuthenticateHeader("Newauth realm=\"apps\", type=1, title=\"Login to \\\"apps\\\"\", Basic realm=\"simple\"");
-        assertNotNull(challenges);
-        assertEquals("apps", challenges.get("newauth").get("realm"));
-        assertEquals("1", challenges.get("newauth").get("type"));
-        assertEquals("Login to \"apps\"", challenges.get("newauth").get("title"));
-        assertEquals("simple", challenges.get("basic").get("realm"));
-
-        challenges = getChallengesFromAuthenticateHeader("a1, a2 ,a3 ,a4");
-        assertNotNull(challenges);
-        assertTrue(challenges.containsKey("a1"));
-        assertTrue(challenges.containsKey("a2"));
-        assertTrue(challenges.containsKey("a3"));
-        assertTrue(challenges.containsKey("a4"));
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MiscTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MiscTest.java
deleted file mode 100644
index 6631743..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/MiscTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Florian Mueller
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.junit.Test;
-
-/**
- * Tests miscellaneous details.
- */
-public class MiscTest extends TestCase {
-
-    @Test
-    public void testUrlBuilder() {
-        assertEquals("http://host/test", (new UrlBuilder("http://host/test")).toString());
-        assertEquals("http://host/test?query=value", (new UrlBuilder("http://host/test?query=value")).toString());
-        assertEquals("http://host/test", (new UrlBuilder("http://host/test?")).toString());
-    }
-
-    @Test
-    public void testUrlBuilderAddParameter() {
-        UrlBuilder urlBuilder;
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addParameter("query", "value");
-        assertEquals("http://host/test?query=value", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test?foo=bar");
-        urlBuilder.addParameter("query", "value");
-        assertEquals("http://host/test?foo=bar&query=value", urlBuilder.toString());
-
-        // special chars, space turns into plus
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addParameter("query", "caf\u00e9 cr\u00e8me");
-        assertEquals("http://host/test?query=caf%C3%A9+cr%C3%A8me", urlBuilder.toString());
-    }
-
-    @Test
-    public void testUrlBuilderAddPath() {
-        UrlBuilder urlBuilder;
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addParameter("query", "value");
-        assertEquals("http://host/test?query=value", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addPath("path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPath("path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addPath("/path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPath("/path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        // multi-segment path with special chars, space turns into %20
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPath("path/caf\u00e9 d@d");
-        assertEquals("http://host/test/path/caf%C3%A9%20d%40d", urlBuilder.toString());
-    }
-
-    @Test
-    public void testUrlBuilderAddPathSegment() {
-        UrlBuilder urlBuilder;
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addParameter("query", "value");
-        assertEquals("http://host/test?query=value", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addPathSegment("path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPathSegment("path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test");
-        urlBuilder.addPathSegment("/path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPathSegment("/path");
-        assertEquals("http://host/test/path", urlBuilder.toString());
-
-        // with special chars and slash, space turns into %20
-        urlBuilder = new UrlBuilder("http://host/test/");
-        urlBuilder.addPathSegment("path/caf\u00e9 d@d");
-        assertEquals("http://host/test/path%2Fcaf%C3%A9%20d%40d", urlBuilder.toString());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/UrlBuilderTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/UrlBuilderTest.java
deleted file mode 100644
index c841284..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/UrlBuilderTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.misc;
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.junit.Test;
-
-/**
- * UrlBuilder tests.
- */
-public class UrlBuilderTest {
-
-    @Test
-    public void testUrls() {
-        assertEquals("http://example.com", new UrlBuilder("http://example.com").toString());
-
-        // path
-        assertEquals("http://example.com/path", (new UrlBuilder("http://example.com")).addPath("path").toString());
-        assertEquals("http://example.com/path?param=value", (new UrlBuilder("http://example.com")).addPath("path")
-                .addParameter("param", "value").toString());
-        assertEquals("http://example.com/path?param=value",
-                (new UrlBuilder("http://example.com")).addParameter("param", "value").addPath("path").toString());
-        assertEquals("http://example.com/path", (new UrlBuilder("http://example.com")).addPath("/path").toString());
-        assertEquals("http://example.com/path", (new UrlBuilder("http://example.com/")).addPath("path").toString());
-        assertEquals("http://example.com/path", (new UrlBuilder("http://example.com/")).addPath("/path").toString());
-        assertEquals("http://example.com/path1/path2",
-                new UrlBuilder((new UrlBuilder("http://example.com")).addPath("path1").addPath("path2")).toString());
-        assertEquals("http://example.com", new UrlBuilder("http://example.com").addPath("").toString());
-        assertEquals("http://example.com", new UrlBuilder("http://example.com").addPath(null).toString());
-
-        // path segments
-        assertEquals("http://example.com/path1/path2", (new UrlBuilder("http://example.com")).addPath("path1/path2")
-                .toString());
-        assertEquals("http://example.com/path1%2Fpath2",
-                (new UrlBuilder("http://example.com")).addPathSegment("path1/path2").toString());
-
-        // parameters
-        assertEquals("http://example.com?param", (new UrlBuilder("http://example.com")).addParameter("param")
-                .toString());
-        assertEquals("http://example.com?param=value",
-                (new UrlBuilder("http://example.com")).addParameter("param", "value").toString());
-        assertEquals("http://example.com?x=y&param=value",
-                (new UrlBuilder("http://example.com?x=y")).addParameter("param", "value").toString());
-        assertEquals(
-                "http://example.com?param=both",
-                (new UrlBuilder("http://example.com")).addParameter("param",
-                        UrlBuilder.normalizeParameter(IncludeRelationships.BOTH)).toString());
-        assertEquals(
-                "http://example.com?param=latest",
-                (new UrlBuilder("http://example.com")).addParameter("param",
-                        UrlBuilder.normalizeParameter(ReturnVersion.LATEST)).toString());
-        assertEquals("http://example.com", (new UrlBuilder("http://example.com")).addParameter(null).toString());
-        assertEquals("http://example.com", (new UrlBuilder("http://example.com")).addParameter(null, "value")
-                .toString());
-        assertEquals("http://example.com", (new UrlBuilder("http://example.com")).addParameter("param", null)
-                .toString());
-        assertEquals("http://example.com?param=&param2=value2",
-                (new UrlBuilder("http://example.com")).addParameter("param", "").addParameter("param2", "value2")
-                        .toString());
-        assertEquals("http://example.com/path?param=value", (new UrlBuilder("http://example.com")).addPath("path")
-                .addParameter("param", "value").toString());
-
-        // other constructor
-        assertEquals("http://example.com/path?param=value", (new UrlBuilder("http", "example.com", 80, "path"))
-                .addParameter("param", "value").toString());
-        assertEquals("https://example.com/path?param=value", (new UrlBuilder("https", "example.com", 443, "path"))
-                .addParameter("param", "value").toString());
-        assertEquals("http://example.com:1234/path?param=value", (new UrlBuilder("http", "example.com", 1234, "path"))
-                .addParameter("param", "value").toString());
-    }
-
-    @Test
-    public void testInvalid() {
-        try {
-            new UrlBuilder((String) null);
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            new UrlBuilder((UrlBuilder) null);
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractConverterTest.java
deleted file mode 100644
index 442c6e4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractConverterTest.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.junit.Before;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Base test class for converter tests.
- */
-public abstract class AbstractConverterTest {
-
-    private final static Logger LOG = LoggerFactory.getLogger(AbstractConverterTest.class);
-
-    private final static long SEED = 1234567890;
-
-    protected Random rnd;
-
-    @Before
-    public void init() throws Exception {
-        rnd = new Random(SEED);
-    }
-
-    protected PropertyData<?> createPropertyData(PropertyType propertyType, int numValues) {
-        AbstractPropertyData<?> result = null;
-
-        switch (propertyType) {
-        case BOOLEAN:
-            result = new PropertyBooleanImpl();
-            if (numValues > 0) {
-                List<Boolean> values = new ArrayList<Boolean>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomBoolean());
-                }
-                ((PropertyBooleanImpl) result).setValues(values);
-            }
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeImpl();
-            if (numValues > 0) {
-                List<GregorianCalendar> values = new ArrayList<GregorianCalendar>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomDateTime());
-                }
-                ((PropertyDateTimeImpl) result).setValues(values);
-            }
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalImpl();
-            if (numValues > 0) {
-                List<BigDecimal> values = new ArrayList<BigDecimal>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomDecimal());
-                }
-                ((PropertyDecimalImpl) result).setValues(values);
-            }
-            break;
-        case HTML:
-            result = new PropertyHtmlImpl();
-            if (numValues > 0) {
-                List<String> values = new ArrayList<String>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomString());
-                }
-                ((PropertyHtmlImpl) result).setValues(values);
-            }
-            break;
-        case ID:
-            result = new PropertyIdImpl();
-            if (numValues > 0) {
-                List<String> values = new ArrayList<String>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomString());
-                }
-                ((PropertyIdImpl) result).setValues(values);
-            }
-            break;
-        case INTEGER:
-            result = new PropertyIntegerImpl();
-            if (numValues > 0) {
-                List<BigInteger> values = new ArrayList<BigInteger>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomInteger());
-                }
-                ((PropertyIntegerImpl) result).setValues(values);
-            }
-            break;
-        case STRING:
-            result = new PropertyStringImpl();
-            if (numValues > 0) {
-                List<String> values = new ArrayList<String>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomString());
-                }
-                ((PropertyStringImpl) result).setValues(values);
-            }
-            break;
-        case URI:
-            result = new PropertyUriImpl();
-            if (numValues > 0) {
-                List<String> values = new ArrayList<String>();
-                for (int i = 0; i < numValues; i++) {
-                    values.add(randomUri());
-                }
-                ((PropertyUriImpl) result).setValues(values);
-            }
-            break;
-        default:
-            assert false;
-        }
-
-        result.setId(randomString());
-        result.setDisplayName(randomString());
-        result.setLocalName(randomString());
-        result.setQueryName(randomString());
-
-        return result;
-    }
-
-    protected PropertyId createIdPropertyData(String id, String value) {
-        PropertyIdImpl result = new PropertyIdImpl();
-
-        result.setId(id);
-        result.setDisplayName(id);
-        result.setLocalName(id);
-        result.setQueryName(id);
-        result.setValue(value);
-
-        return result;
-    }
-
-    protected List<CmisExtensionElement> createExtensions(int depth) {
-        List<CmisExtensionElement> result = new ArrayList<CmisExtensionElement>();
-
-        String[] namespaces = new String[] { "http://ext1.com", "http://ext2.org", "http://ext3.net" };
-
-        for (int i = 0; i < randomInt(4) + 1; i++) {
-            String ns = namespaces[randomInt(namespaces.length)];
-
-            Map<String, String> attr = new HashMap<String, String>();
-            for (int j = 0; j < randomInt(3); j++) {
-                attr.put(randomTag(), randomString());
-            }
-
-            CmisExtensionElementImpl element;
-            if (randomBoolean() || depth < 1) {
-                element = new CmisExtensionElementImpl(ns, randomTag(), attr, randomString());
-            } else {
-                element = new CmisExtensionElementImpl(ns, randomTag(), attr, createExtensions(depth - 1));
-            }
-
-            result.add(element);
-        }
-
-        return result;
-    }
-
-    protected String randomString() {
-        StringBuilder sb = new StringBuilder();
-
-        int length = rnd.nextInt(21) + 3;
-        for (int i = 0; i < length; i++) {
-            sb.append((char) (rnd.nextInt(94) + 32));
-        }
-
-        return sb.toString();
-    }
-
-    protected String randomUri() {
-        StringBuilder sb = new StringBuilder("urn:test:");
-
-        int length = rnd.nextInt(21) + 3;
-        for (int i = 0; i < length; i++) {
-            sb.append((char) (rnd.nextInt(26) + 97));
-        }
-
-        return sb.toString();
-    }
-
-    protected Boolean randomBoolean() {
-        return Boolean.valueOf(rnd.nextBoolean());
-    }
-
-    protected BigInteger randomInteger() {
-        return BigInteger.valueOf(rnd.nextInt());
-    }
-
-    protected BigDecimal randomDecimal() {
-        return BigDecimal.valueOf(rnd.nextDouble() * rnd.nextInt());
-    }
-
-    protected GregorianCalendar randomDateTime() {
-        GregorianCalendar cal = new GregorianCalendar();
-        cal.setTimeZone(TimeZone.getTimeZone("GMT" + (rnd.nextBoolean() ? "+" : "-") + (rnd.nextInt(23) - 12) + ":00"));
-        cal.set(1583 + rnd.nextInt(8416), rnd.nextInt(12), rnd.nextInt(31) + 1, rnd.nextInt(23), rnd.nextInt(60),
-                rnd.nextInt(60));
-        cal.set(Calendar.MILLISECOND, 0);
-
-        return cal;
-    }
-
-    protected int randomInt(int n) {
-        return rnd.nextInt(n);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected <T extends Enum<?>> T randomEnum(Class<T> enumClass) {
-        T[] values = null;
-        try {
-            values = (T[]) enumClass.getMethod("values", new Class<?>[0]).invoke(null, new Object[0]);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        return values[rnd.nextInt(values.length)];
-    }
-
-    protected String randomTag() {
-        StringBuilder sb = new StringBuilder();
-
-        int length = rnd.nextInt(7) + 3;
-        for (int i = 0; i < length; i++) {
-            sb.append((char) (rnd.nextInt(26) + 'a'));
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Compares two data objects.
-     */
-    protected void assertDataObjectsEquals(String name, Object expected, Object actual, Set<String> ignoreMethods) {
-
-        LOG.debug(name + ": " + expected + " / " + actual);
-
-        if ((expected == null) && (actual == null)) {
-            return;
-        }
-
-        if ((expected == null) || (actual == null)) {
-            fail("Data object is null! name: " + name + " / expected: " + expected + " / actual: " + actual);
-        }
-
-        // handle simple types
-        if ((expected instanceof String) || (expected instanceof Boolean) || (expected instanceof BigInteger)
-                || (expected instanceof BigDecimal) || (expected instanceof Enum<?>)) {
-            assertEquals(name, expected, actual);
-
-            return;
-        } else if (expected instanceof GregorianCalendar) {
-            long expectedMillis = ((GregorianCalendar) expected).getTimeInMillis();
-            long actualMillis = ((GregorianCalendar) actual).getTimeInMillis();
-
-            assertEquals(name, expectedMillis, actualMillis);
-
-            return;
-        } else if (expected instanceof List<?>) {
-            List<?> expectedList = (List<?>) expected;
-            List<?> actualList = (List<?>) actual;
-
-            assertEquals(name + ".length", expectedList.size(), actualList.size());
-
-            for (int i = 0; i < expectedList.size(); i++) {
-                assertDataObjectsEquals(name + "[" + i + "]", expectedList.get(i), actualList.get(i), ignoreMethods);
-            }
-
-            return;
-        } else if (expected instanceof Map<?, ?>) {
-            Map<?, ?> expectedMap = (Map<?, ?>) expected;
-            Map<?, ?> actualMap = (Map<?, ?>) actual;
-
-            assertEquals(name + ".length", expectedMap.size(), actualMap.size());
-
-            for (Map.Entry<?, ?> entry : expectedMap.entrySet()) {
-                assertTrue(name + ".contains[" + entry.getKey() + "]", actualMap.containsKey(entry.getKey()));
-                assertDataObjectsEquals(name + "[" + entry.getKey() + "]", entry.getValue(),
-                        actualMap.get(entry.getKey()), ignoreMethods);
-            }
-
-            return;
-        } else if (expected instanceof Set<?>) {
-            Set<?> expectedSet = (Set<?>) expected;
-            Set<?> actualSet = (Set<?>) actual;
-
-            assertEquals(name + ".length", expectedSet.size(), actualSet.size());
-
-            for (Object item : expectedSet) {
-                assertTrue(name + ".contains[" + item + "]", actualSet.contains(item));
-            }
-
-            return;
-        }
-
-        for (Method m : expected.getClass().getMethods()) {
-            if (!m.getName().startsWith("get") && !m.getName().startsWith("is") && !m.getName().startsWith("supports")) {
-                continue;
-            }
-
-            if (ignoreMethods != null && ignoreMethods.contains(m.getName())) {
-                continue;
-            }
-
-            if (m.getName().equals("getClass")) {
-                continue;
-            }
-
-            if (m.getParameterTypes().length != 0) {
-                continue;
-            }
-
-            try {
-                Object expectedValue = m.invoke(expected, new Object[0]);
-                Object actualValue = m.invoke(actual, new Object[0]);
-
-                assertDataObjectsEquals(name + "." + m.getName(), expectedValue, actualValue, ignoreMethods);
-            } catch (Exception e) {
-                fail(e.toString());
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractXMLConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractXMLConverterTest.java
deleted file mode 100644
index 27cbf3c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AbstractXMLConverterTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.junit.Before;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractXMLConverterTest extends AbstractConverterTest {
-
-    protected final static String TEST_NAMESPACE = "http://chemistry.apache.org/test/schema";
-    protected final static String TEST_PREFIX = "test";
-
-    private final static Logger LOG = LoggerFactory.getLogger(AbstractXMLConverterTest.class);
-
-    protected final static String TEST_SCHEMA10 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" targetNamespace=\""
-            + TEST_NAMESPACE
-            + "\" xmlns:test=\""
-            + TEST_NAMESPACE
-            + "\" xmlns:cmis=\""
-            + XMLConstants.NAMESPACE_CMIS
-            + "\" version=\"1.0\">"
-            + "<xs:import namespace=\""
-            + XMLConstants.NAMESPACE_CMIS
-            + "\"/>"
-            + "<xs:complexType name=\"testType\">"
-            + "<xs:sequence>"
-            + "<xs:element name=\"repositoryInfo\" type=\"cmis:cmisRepositoryInfoType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"type\" type=\"cmis:cmisTypeDefinitionType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"object\" type=\"cmis:cmisObjectType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"query\" type=\"cmis:cmisQueryType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "</xs:sequence>" //
-            + "</xs:complexType>" //
-            + "<xs:element name=\"test\" type=\"test:testType\"/>" //
-            + "</xs:schema>";
-
-    protected final static String TEST_SCHEMA11 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" targetNamespace=\""
-            + TEST_NAMESPACE
-            + "\" xmlns:test=\""
-            + TEST_NAMESPACE
-            + "\" xmlns:cmis=\""
-            + XMLConstants.NAMESPACE_CMIS
-            + "\" version=\"1.0\">"
-            + "<xs:import namespace=\""
-            + XMLConstants.NAMESPACE_CMIS
-            + "\"/>"
-            + "<xs:complexType name=\"testType\">"
-            + "<xs:sequence>"
-            + "<xs:element name=\"repositoryInfo\" type=\"cmis:cmisRepositoryInfoType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"type\" type=\"cmis:cmisTypeDefinitionType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"object\" type=\"cmis:cmisObjectType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"query\" type=\"cmis:cmisQueryType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "<xs:element name=\"bulkUpdate\" type=\"cmis:cmisBulkUpdateType\" minOccurs=\"0\" maxOccurs=\"1\" />"
-            + "</xs:sequence>" //
-            + "</xs:complexType>" //
-            + "<xs:element name=\"test\" type=\"test:testType\"/>" //
-            + "</xs:schema>";
-
-    protected Schema schema10;
-    protected Schema schema11;
-
-    /**
-     * Sets up the schema.
-     */
-    @Before
-    public void init() throws Exception {
-        super.init();
-
-        SchemaFactory sf = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
-
-        InputStream schema10stream = AbstractXMLConverterTest.class.getResourceAsStream("/schema/cmis10/CMIS-core.xsd");
-        if (schema10stream != null) {
-            StreamSource core10 = new StreamSource(schema10stream);
-            StreamSource test10 = new StreamSource(new ByteArrayInputStream(IOUtils.toUTF8Bytes(TEST_SCHEMA10)));
-            schema10 = sf.newSchema(new Source[] { core10, test10 });
-        }
-
-        InputStream schema11stream = AbstractXMLConverterTest.class.getResourceAsStream("/schema/cmis11/CMIS-core.xsd");
-        if (schema11stream != null) {
-            StreamSource core11 = new StreamSource(schema11stream);
-            StreamSource test11 = new StreamSource(new ByteArrayInputStream(IOUtils.toUTF8Bytes(TEST_SCHEMA11)));
-            schema11 = sf.newSchema(new Source[] { core11, test11 });
-        }
-    }
-
-    /**
-     * Writes root tag of the test XML.
-     */
-    protected void writeRootTag(XMLStreamWriter writer) throws XMLStreamException {
-        writer.setPrefix(TEST_PREFIX, TEST_NAMESPACE);
-        writer.writeStartElement(TEST_NAMESPACE, TEST_PREFIX);
-        writer.writeNamespace(XMLConstants.PREFIX_XSI, XMLConstants.NAMESPACE_XSI);
-        writer.writeNamespace(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-        writer.writeNamespace(TEST_PREFIX, TEST_NAMESPACE);
-    }
-
-    /**
-     * Creates a test XML writer.
-     */
-    protected XMLStreamWriter createWriter(OutputStream out) throws XMLStreamException {
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-
-        XMLUtils.startXmlDocument(writer);
-        writeRootTag(writer);
-
-        return writer;
-    }
-
-    /**
-     * Closes the test XML writer.
-     */
-    protected void closeWriter(XMLStreamWriter writer) throws XMLStreamException {
-        XMLUtils.endXmlDocument(writer);
-        writer.close();
-    }
-
-    /**
-     * Creates a parser and moves it to the tag that should be tested.
-     */
-    protected XMLStreamReader createParser(byte[] xmlDocument) throws XMLStreamException {
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xmlDocument));
-        moveToTestTag(parser);
-
-        return parser;
-    }
-
-    /**
-     * Closes the parser.
-     */
-    protected void closeParser(XMLStreamReader parser) throws XMLStreamException {
-        parser.close();
-    }
-
-    /**
-     * Moves the parser to tag that should be tested.
-     */
-    protected void moveToTestTag(XMLStreamReader parser) throws XMLStreamException {
-        while (XMLUtils.findNextStartElemenet(parser)) {
-            if (parser.getName().getLocalPart().equals("test")) {
-                XMLUtils.next(parser);
-                XMLUtils.findNextStartElemenet(parser);
-                break;
-            }
-        }
-    }
-
-    /**
-     * Validates the given XML.
-     */
-    protected void validate(byte[] xmlDocument, CmisVersion cmisVersion) {
-        Validator validator = null;
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            if (schema10 != null) {
-                validator = schema10.newValidator();
-            } else {
-                LOG.warn("CMIS 1.0 schema not loaded. Cannot validate XML.");
-                return;
-            }
-        } else {
-            if (schema11 != null) {
-                validator = schema11.newValidator();
-            } else {
-                LOG.warn("CMIS 1.1 schema not loaded. Cannot validate XML.");
-                return;
-            }
-        }
-
-        Source source = new StreamSource(new ByteArrayInputStream(xmlDocument));
-
-        try {
-            validator.validate(source);
-        } catch (Exception e) {
-            try {
-                LOG.error("Schema validation failed:\n" + format(xmlDocument));
-                System.out.println(format(xmlDocument));
-            } catch (TransformerException e1) {
-            }
-            fail("Schema " + cmisVersion.value() + " validation failed: " + e);
-        }
-    }
-
-    /**
-     * Formats an XML document.
-     */
-    protected String format(byte[] xmlDocument) throws TransformerException {
-        TransformerFactory tf = TransformerFactory.newInstance();
-        tf.setAttribute("indent-number", Integer.valueOf(2));
-
-        Transformer transformer = tf.newTransformer();
-        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-
-        StreamResult result = new StreamResult(new StringWriter());
-        Source source = new StreamSource(new ByteArrayInputStream(xmlDocument));
-        transformer.transform(source, result);
-
-        return result.getWriter().toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AclConvertTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AclConvertTest.java
deleted file mode 100644
index 5f46e05..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AclConvertTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.junit.Test;
-
-public class AclConvertTest extends AbstractXMLConverterTest {
-
-    @Test
-    public void testAcl() throws Exception {
-
-        // run the test a few times with different values
-        for (int i = 0; i < 10; i++) {
-            AccessControlListImpl acl = new AccessControlListImpl();
-            List<Ace> aces = new ArrayList<Ace>();
-            for (int j = 0; j < randomInt(9) + 1; j++) {
-                AccessControlEntryImpl ace = new AccessControlEntryImpl();
-                List<String> permissions = new ArrayList<String>();
-                for (int k = 0; k < randomInt(4) + 1; k++) {
-                    permissions.add(randomString());
-                }
-                ace.setPermissions(permissions);
-                ace.setDirect(randomBoolean());
-                ace.setPrincipal(new AccessControlPrincipalDataImpl(randomString()));
-                aces.add(ace);
-            }
-            acl.setAces(aces);
-
-            assertAcl10(acl, true);
-            assertAcl11(acl, true);
-        }
-    }
-
-    protected void assertAcl10(Acl data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeAcl(writer, CmisVersion.CMIS_1_0, true, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        Acl result = XMLConverter.convertAcl(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ACL", data, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertAcl11(Acl data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeAcl(writer, CmisVersion.CMIS_1_1, true, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        Acl result = XMLConverter.convertAcl(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ACL", data, result, null);
-        assertNull(result.getExtensions());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AllowableActionsConvertTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AllowableActionsConvertTest.java
deleted file mode 100644
index cd096e9..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/AllowableActionsConvertTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.HashSet;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.junit.Test;
-
-public class AllowableActionsConvertTest extends AbstractXMLConverterTest {
-
-    @Test
-    public void testAllowableActions() throws Exception {
-
-        // run the test a few times with different values
-        for (int i = 0; i < 10; i++) {
-            AllowableActionsImpl allowableActions = new AllowableActionsImpl();
-            HashSet<Action> actions = new HashSet<Action>();
-            for (Action action : Action.values()) {
-                if (randomBoolean()) {
-                    actions.add(action);
-                }
-            }
-
-            assertAllowableActions10(allowableActions, true);
-            assertAllowableActions11(allowableActions, true);
-        }
-    }
-
-    protected void assertAllowableActions10(AllowableActions data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeAllowableActions(writer, CmisVersion.CMIS_1_0, true, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        AllowableActions result = XMLConverter.convertAllowableActions(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("AllowableActions", data, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertAllowableActions11(AllowableActions data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeAllowableActions(writer, CmisVersion.CMIS_1_1, true, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        AllowableActions result = XMLConverter.convertAllowableActions(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("AllowableActions", data, result, null);
-        assertNull(result.getExtensions());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/BulkUpdateConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/BulkUpdateConverterTest.java
deleted file mode 100644
index 689ce5e..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/BulkUpdateConverterTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectIdAndChangeTokenType;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.junit.Test;
-
-public class BulkUpdateConverterTest extends AbstractXMLConverterTest {
-
-    @Test
-    public void testBulkUpdate() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            BulkUpdateImpl bulkUpdate = new BulkUpdateImpl();
-
-            List<BulkUpdateObjectIdAndChangeToken> list = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-            for (int j = 0; j < randomInt(19) + 1; j++) {
-                BulkUpdateObjectIdAndChangeTokenImpl idAndToken = new BulkUpdateObjectIdAndChangeTokenImpl(
-                        randomString(), randomString());
-                list.add(idAndToken);
-            }
-            bulkUpdate.setObjectIdAndChangeToken(list);
-
-            PropertiesImpl properties = new PropertiesImpl();
-            for (int j = 0; j < randomInt(9) + 1; j++) {
-                properties.addProperty(createPropertyData(
-                        PropertyType.values()[randomInt(PropertyType.values().length)], randomInt(2)));
-            }
-            bulkUpdate.setProperties(properties);
-
-            List<String> addSecTypes = new ArrayList<String>();
-            for (int j = 0; j < randomInt(4) + 1; j++) {
-                addSecTypes.add(randomString());
-            }
-            bulkUpdate.setAddSecondaryTypeIds(addSecTypes);
-
-            List<String> removeSecTypes = new ArrayList<String>();
-            for (int j = 0; j < randomInt(4) + 1; j++) {
-                removeSecTypes.add(randomString());
-            }
-            bulkUpdate.setRemoveSecondaryTypeIds(removeSecTypes);
-
-            assertBulkUpdate11(bulkUpdate, true);
-        }
-    }
-
-    protected void assertBulkUpdate11(BulkUpdateImpl bulkUpdate, boolean validate) throws Exception {
-        assertXmlBulkUpdate11(bulkUpdate, validate);
-        assertWsBulkUpdate11(bulkUpdate);
-        assertJsonBulkUpdate11(bulkUpdate);
-    }
-
-    protected void assertXmlBulkUpdate11(BulkUpdateImpl bulkUpdate, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeBulkUpdate(writer, TEST_NAMESPACE, bulkUpdate);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        BulkUpdateImpl result = XMLConverter.convertBulkUpdate(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("BulkUpdate", bulkUpdate, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertWsBulkUpdate11(BulkUpdateImpl bulkUpdate) throws Exception {
-        CmisObjectIdAndChangeTokenType ws = WSConverter.convert(bulkUpdate.getObjectIdAndChangeToken().get(0));
-
-        BulkUpdateObjectIdAndChangeToken result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("BulkUpdate", bulkUpdate.getObjectIdAndChangeToken().get(0), result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertJsonBulkUpdate11(BulkUpdateImpl bulkUpdate) throws Exception {
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(bulkUpdate.getObjectIdAndChangeToken().get(0)).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        BulkUpdateObjectIdAndChangeToken result = JSONConverter.convertBulkUpdate((Map<String, Object>) json);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("BulkUpdate", bulkUpdate.getObjectIdAndChangeToken().get(0), result, null);
-        assertNull(result.getExtensions());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/ObjectConvertTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/ObjectConvertTest.java
deleted file mode 100644
index a2a6b1b..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/ObjectConvertTest.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.StringWriter;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderContainerType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.junit.Test;
-
-public class ObjectConvertTest extends AbstractXMLConverterTest {
-
-    @Test
-    public void testObjectData() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 10; i++) {
-            ObjectDataImpl data10 = createObjectData(true, CmisVersion.CMIS_1_0, true, true);
-            assertObjectData10(data10, true);
-
-            ObjectDataImpl data11 = createObjectData(true, CmisVersion.CMIS_1_1, true, true);
-            assertObjectData11(data11, true);
-
-            ObjectDataImpl data11j = createObjectData(true, CmisVersion.CMIS_1_1, true, false);
-            assertJsonObjectData11(data11j);
-        }
-    }
-
-    @Test
-    public void testChildren() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            List<ObjectData> list1 = new ArrayList<ObjectData>();
-            List<ObjectInFolderData> list2 = new ArrayList<ObjectInFolderData>();
-
-            for (int j = 0; j < randomInt(10) + 10; j++) {
-                ObjectData data = createObjectData(true, CmisVersion.CMIS_1_1, false, false);
-
-                list1.add(data);
-
-                ObjectInFolderDataImpl dataInFolder = new ObjectInFolderDataImpl(data);
-                dataInFolder.setPathSegment(randomString());
-                list2.add(dataInFolder);
-            }
-
-            ObjectListImpl children1 = new ObjectListImpl();
-            children1.setObjects(list1);
-
-            ObjectInFolderListImpl children2 = new ObjectInFolderListImpl();
-            children2.setObjects(list2);
-
-            if (randomBoolean()) {
-                children1.setNumItems(BigInteger.valueOf(list1.size()));
-                children1.setHasMoreItems(false);
-                children2.setNumItems(BigInteger.valueOf(list2.size()));
-                children2.setHasMoreItems(false);
-            } else {
-                children1.setNumItems(BigInteger.valueOf(list1.size() + 1 + randomInt(99)));
-                children1.setHasMoreItems(true);
-                children2.setNumItems(BigInteger.valueOf(list2.size() + 1 + randomInt(99)));
-                children2.setHasMoreItems(true);
-            }
-
-            assertObjectList(children1, children2);
-        }
-    }
-
-    @Test
-    public void testDescendants() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            ObjectInFolderContainer container = createObjectInFolderContainer(randomInt(7) + 2);
-            assertObjectContainer(container);
-        }
-    }
-
-    private ObjectInFolderContainer createObjectInFolderContainer(int level) {
-        ObjectInFolderContainerImpl result = new ObjectInFolderContainerImpl();
-
-        ObjectInFolderDataImpl dataInFolder = new ObjectInFolderDataImpl(createObjectData(true, CmisVersion.CMIS_1_1,
-                false, false));
-        dataInFolder.setPathSegment(randomString());
-        result.setObject(dataInFolder);
-
-        if (level > 0) {
-            List<ObjectInFolderContainer> children = new ArrayList<ObjectInFolderContainer>();
-            for (int i = 0; i < randomInt(3); i++) {
-                children.add(createObjectInFolderContainer(level - 1));
-            }
-
-            result.setChildren(children);
-        }
-
-        return result;
-    }
-
-    protected ObjectDataImpl createObjectData(boolean addRelationships, CmisVersion cmisVersion, boolean withChanges,
-            boolean withExtensions) {
-        ObjectDataImpl result = new ObjectDataImpl();
-
-        // properties
-        PropertiesImpl properties = new PropertiesImpl();
-        properties.addProperty(createIdPropertyData(PropertyIds.BASE_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value()));
-        properties.addProperty(createIdPropertyData(PropertyIds.OBJECT_ID, randomString()));
-        properties.addProperty(createIdPropertyData(PropertyIds.OBJECT_TYPE_ID, randomString()));
-        properties.addProperty(createPropertyData(PropertyType.BOOLEAN, 0));
-        properties.addProperty(createPropertyData(PropertyType.BOOLEAN, 1));
-        properties.addProperty(createPropertyData(PropertyType.BOOLEAN, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.DATETIME, 0));
-        properties.addProperty(createPropertyData(PropertyType.DATETIME, 1));
-        properties.addProperty(createPropertyData(PropertyType.DATETIME, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.DECIMAL, 0));
-        properties.addProperty(createPropertyData(PropertyType.DECIMAL, 1));
-        properties.addProperty(createPropertyData(PropertyType.DECIMAL, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.HTML, 0));
-        properties.addProperty(createPropertyData(PropertyType.HTML, 1));
-        properties.addProperty(createPropertyData(PropertyType.HTML, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.ID, 0));
-        properties.addProperty(createPropertyData(PropertyType.ID, 1));
-        properties.addProperty(createPropertyData(PropertyType.ID, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.INTEGER, 0));
-        properties.addProperty(createPropertyData(PropertyType.INTEGER, 1));
-        properties.addProperty(createPropertyData(PropertyType.INTEGER, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.STRING, 0));
-        properties.addProperty(createPropertyData(PropertyType.STRING, 1));
-        properties.addProperty(createPropertyData(PropertyType.STRING, randomInt(8) + 2));
-        properties.addProperty(createPropertyData(PropertyType.URI, 0));
-        properties.addProperty(createPropertyData(PropertyType.URI, 1));
-        properties.addProperty(createPropertyData(PropertyType.URI, randomInt(8) + 2));
-        if (withExtensions) {
-            properties.setExtensions(createExtensions(3));
-        }
-        result.setProperties(properties);
-
-        // allowable actions
-        AllowableActionsImpl allowableActions = new AllowableActionsImpl();
-        Set<Action> actions = new HashSet<Action>();
-        for (Action action : Action.values()) {
-            if (action == Action.CAN_CREATE_ITEM && cmisVersion == CmisVersion.CMIS_1_0) {
-                continue;
-            }
-            actions.add(action);
-        }
-        allowableActions.setAllowableActions(actions);
-        result.setAllowableActions(allowableActions);
-
-        // relationships
-        if (addRelationships) {
-            List<ObjectData> relationships = new ArrayList<ObjectData>();
-            for (int i = 0; i < randomInt(4) + 1; i++) {
-                relationships.add(createObjectData(false, cmisVersion, withChanges, withExtensions));
-            }
-            result.setRelationships(relationships);
-        }
-
-        // change event info
-        if (withChanges) {
-            ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-            changeEventInfo.setChangeTime(randomDateTime());
-            changeEventInfo.setChangeType(randomEnum(ChangeType.class));
-            result.setChangeEventInfo(changeEventInfo);
-        }
-
-        // ACL
-        AccessControlListImpl acl = new AccessControlListImpl();
-        List<Ace> aces = new ArrayList<Ace>();
-        for (int i = 0; i < randomInt(9) + 1; i++) {
-            AccessControlEntryImpl ace = new AccessControlEntryImpl();
-            List<String> permissions = new ArrayList<String>();
-            for (int j = 0; j < randomInt(4) + 1; j++) {
-                permissions.add(randomString());
-            }
-            ace.setPermissions(permissions);
-            ace.setDirect(randomBoolean());
-            ace.setPrincipal(new AccessControlPrincipalDataImpl(randomString()));
-            aces.add(ace);
-        }
-        acl.setAces(aces);
-        result.setAcl(acl);
-
-        result.setIsExactAcl(randomBoolean());
-
-        // policy ids
-        List<String> pIds = new ArrayList<String>();
-        for (int i = 0; i < randomInt(9) + 1; i++) {
-            pIds.add(randomString());
-        }
-        PolicyIdListImpl policyList = new PolicyIdListImpl();
-        policyList.setPolicyIds(pIds);
-        result.setPolicyIds(policyList);
-
-        // renditions
-        List<RenditionData> renditions = new ArrayList<RenditionData>();
-        for (int i = 0; i < randomInt(4) + 1; i++) {
-            RenditionDataImpl rendition = new RenditionDataImpl();
-            rendition.setKind(randomString());
-            rendition.setMimeType(randomString());
-            rendition.setRenditionDocumentId(randomString());
-            rendition.setStreamId(randomString());
-            rendition.setTitle(randomString());
-            rendition.setBigLength(randomInteger());
-            rendition.setBigHeight(randomInteger());
-            rendition.setBigWidth(randomInteger());
-
-            renditions.add(rendition);
-        }
-        result.setRenditions(renditions);
-
-        // extensions
-        if (withExtensions) {
-            result.setExtensions(createExtensions(5));
-        }
-
-        return result;
-    }
-
-    // --- asserts ---
-
-    protected void assertObjectData10(ObjectData data, boolean validate) throws Exception {
-        assertXmlObjectData10(data, validate);
-        assertWsObjectData10(data);
-    }
-
-    protected void assertXmlObjectData10(ObjectData data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeObject(writer, CmisVersion.CMIS_1_0, TEST_NAMESPACE, data);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        ObjectData result = XMLConverter.convertObject(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectData", data, result, null);
-        assertNotNull(result.getExtensions());
-    }
-
-    protected void assertWsObjectData10(ObjectData data) throws Exception {
-        CmisObjectType ws = WSConverter.convert(data, CmisVersion.CMIS_1_0);
-
-        ObjectData result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectData", data, result, null);
-        assertNotNull(result.getExtensions());
-    }
-
-    protected void assertObjectData11(ObjectData data, boolean validate) throws Exception {
-        assertXmlObjectData11(data, validate);
-        assertWsObjectData11(data);
-    }
-
-    protected void assertXmlObjectData11(ObjectData data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeObject(writer, CmisVersion.CMIS_1_1, TEST_NAMESPACE, data);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        ObjectData result = XMLConverter.convertObject(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectData", data, result, null);
-        assertNotNull(result.getExtensions());
-    }
-
-    protected void assertWsObjectData11(ObjectData data) throws Exception {
-        CmisObjectType ws = WSConverter.convert(data, CmisVersion.CMIS_1_1);
-
-        ObjectData result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectData", data, result, null);
-        assertNotNull(result.getExtensions());
-    }
-
-    protected void assertJsonObjectData11(ObjectData data) throws Exception {
-        TypeCache typeCache = null;
-
-        StringWriter sw = new StringWriter();
-
-        JSONObject jsonObject = JSONConverter.convert(data, typeCache, JSONConverter.PropertyMode.CHANGE, false,
-                DateTimeFormat.SIMPLE);
-        jsonObject.writeJSONString(sw);
-
-        // test toJSONString()
-        assertEquals(sw.toString(), jsonObject.toJSONString());
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        ObjectData result = JSONConverter.convertObject((Map<String, Object>) json, typeCache);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectData", data, result, null);
-    }
-
-    protected void assertObjectList(ObjectList children1, ObjectInFolderList children2) throws Exception {
-        assertWsObjectList(children1);
-        assertJsonObjectList(children1);
-        assertWsObjectInFolderList(children2);
-        assertJsonObjectInFolderList(children2);
-    }
-
-    protected void assertWsObjectList(ObjectList children) throws Exception {
-        CmisObjectListType ws = WSConverter.convert(children, CmisVersion.CMIS_1_1);
-
-        ObjectList result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectList", children, result, null);
-    }
-
-    protected void assertJsonObjectList(ObjectList children) throws Exception {
-        TypeCache typeCache = null;
-
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(children, typeCache, JSONConverter.PropertyMode.CHANGE, false, DateTimeFormat.SIMPLE)
-                .writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        ObjectList result = JSONConverter.convertObjectList((Map<String, Object>) json, typeCache, false);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectList", children, result, null);
-    }
-
-    protected void assertWsObjectInFolderList(ObjectInFolderList children) throws Exception {
-        CmisObjectInFolderListType ws = WSConverter.convert(children, CmisVersion.CMIS_1_1);
-
-        ObjectInFolderList result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectInFolderList", children, result, null);
-    }
-
-    protected void assertJsonObjectInFolderList(ObjectInFolderList children) throws Exception {
-        TypeCache typeCache = null;
-
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(children, typeCache, false, DateTimeFormat.SIMPLE).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        ObjectInFolderList result = JSONConverter.convertObjectInFolderList((Map<String, Object>) json, typeCache);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectInFolderList", children, result, null);
-    }
-
-    protected void assertObjectContainer(ObjectInFolderContainer container) throws Exception {
-        assertWsObjectContainer(container);
-        assertJsonObjectContainer(container);
-    }
-
-    protected void assertWsObjectContainer(ObjectInFolderContainer container) {
-        CmisObjectInFolderContainerType ws = WSConverter.convert(container, CmisVersion.CMIS_1_1);
-
-        ObjectInFolderContainer result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectContainer", container, result, null);
-    }
-
-    protected void assertJsonObjectContainer(ObjectInFolderContainer container) throws Exception {
-        TypeCache typeCache = null;
-
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(container, typeCache, false, DateTimeFormat.EXTENDED).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        ObjectInFolderContainer result = JSONConverter.convertDescendant((Map<String, Object>) json, typeCache);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("ObjectContainer", container, result, null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/QueryConvertTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/QueryConvertTest.java
deleted file mode 100644
index d258572..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/QueryConvertTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;
-import org.junit.Test;
-
-public class QueryConvertTest extends AbstractXMLConverterTest {
-
-    @Test
-    public void testQueryType() throws Exception {
-
-        // run the test a few times with different values
-        for (int i = 0; i < 10; i++) {
-            QueryTypeImpl query = new QueryTypeImpl();
-
-            query.setStatement(randomString());
-            query.setSearchAllVersions(randomBoolean());
-            query.setIncludeAllowableActions(randomBoolean());
-            query.setIncludeRelationships(randomEnum(IncludeRelationships.class));
-            query.setRenditionFilter(randomString());
-            query.setMaxItems(randomInteger());
-            query.setSkipCount(randomInteger());
-
-            assertQueryType10(query, true);
-            assertQueryType11(query, true);
-        }
-
-    }
-
-    protected void assertQueryType10(QueryTypeImpl data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeQuery(writer, CmisVersion.CMIS_1_0, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        QueryTypeImpl result = XMLConverter.convertQuery(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("QueryType", data, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertQueryType11(QueryTypeImpl data, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = XMLUtils.createWriter(out);
-        XMLUtils.startXmlDocument(writer);
-        XMLConverter.writeQuery(writer, CmisVersion.CMIS_1_1, data);
-        XMLUtils.endXmlDocument(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = XMLUtils.createParser(new ByteArrayInputStream(xml));
-        XMLUtils.findNextStartElemenet(parser);
-        QueryTypeImpl result = XMLConverter.convertQuery(parser);
-        parser.close();
-
-        assertNotNull(result);
-        assertDataObjectsEquals("QueryType", data, result, null);
-        assertNull(result.getExtensions());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/RepositoryInfoConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/RepositoryInfoConverterTest.java
deleted file mode 100644
index cf27440..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/RepositoryInfoConverterTest.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.junit.Test;
-
-public class RepositoryInfoConverterTest extends AbstractXMLConverterTest {
-
-    private static Set<String> cmis10ignoreMethods = new HashSet<String>();
-    static {
-        cmis10ignoreMethods.add("getOrderByCapability");
-        cmis10ignoreMethods.add("getCreatablePropertyTypes");
-        cmis10ignoreMethods.add("getNewTypeSettableAttributes");
-        cmis10ignoreMethods.add("getExtensionFeatures");
-    }
-
-    @Test
-    public void testRepositoryInfo() throws Exception {
-
-        // run the test a few times with different values
-        for (int i = 0; i < 10; i++) {
-            RepositoryInfoImpl repInfo = new RepositoryInfoImpl();
-
-            assertRepositoryInfo10(repInfo, false);
-
-            // values
-            repInfo = new RepositoryInfoImpl();
-            repInfo.setChangesIncomplete(randomBoolean());
-            repInfo.setChangesOnType(Collections.singletonList(BaseTypeId.CMIS_DOCUMENT));
-            repInfo.setCmisVersionSupported("1.0");
-            repInfo.setLatestChangeLogToken(randomString());
-            repInfo.setPrincipalAnonymous(randomString());
-            repInfo.setPrincipalAnyone(randomString());
-            repInfo.setProductName(randomString());
-            repInfo.setProductVersion(randomString());
-            repInfo.setDescription(randomString());
-            repInfo.setId(randomString());
-            repInfo.setName(randomString());
-            repInfo.setRootFolder(randomString());
-            repInfo.setThinClientUri(randomUri());
-            repInfo.setVendorName(randomString());
-
-            RepositoryCapabilitiesImpl cap1 = new RepositoryCapabilitiesImpl();
-            cap1.setAllVersionsSearchable(randomBoolean());
-            cap1.setCapabilityAcl(randomEnum(CapabilityAcl.class));
-            cap1.setCapabilityChanges(CapabilityChanges.ALL);
-            cap1.setCapabilityContentStreamUpdates(randomEnum(CapabilityContentStreamUpdates.class));
-            cap1.setCapabilityJoin(randomEnum(CapabilityJoin.class));
-            cap1.setCapabilityQuery(randomEnum(CapabilityQuery.class));
-            cap1.setCapabilityRendition(randomEnum(CapabilityRenditions.class));
-            cap1.setIsPwcSearchable(randomBoolean());
-            cap1.setIsPwcUpdatable(randomBoolean());
-            cap1.setSupportsGetDescendants(randomBoolean());
-            cap1.setSupportsGetFolderTree(randomBoolean());
-            cap1.setSupportsMultifiling(randomBoolean());
-            cap1.setCapabilityOrderBy(randomEnum(CapabilityOrderBy.class));
-            cap1.setSupportsUnfiling(randomBoolean());
-            cap1.setSupportsVersionSpecificFiling(randomBoolean());
-
-            CreatablePropertyTypesImpl cpt = new CreatablePropertyTypesImpl();
-            Set<PropertyType> pt = new HashSet<PropertyType>();
-            pt.add(PropertyType.BOOLEAN);
-            pt.add(PropertyType.ID);
-            pt.add(PropertyType.INTEGER);
-            pt.add(PropertyType.DATETIME);
-            pt.add(PropertyType.DECIMAL);
-            pt.add(PropertyType.HTML);
-            pt.add(PropertyType.STRING);
-            pt.add(PropertyType.URI);
-            cpt.setCanCreate(pt);
-            cap1.setCreatablePropertyTypes(cpt);
-
-            NewTypeSettableAttributesImpl newTypeSettableAttributes = new NewTypeSettableAttributesImpl();
-            newTypeSettableAttributes.setCanSetId(randomBoolean());
-            newTypeSettableAttributes.setCanSetLocalName(randomBoolean());
-            newTypeSettableAttributes.setCanSetLocalNamespace(randomBoolean());
-            newTypeSettableAttributes.setCanSetDisplayName(randomBoolean());
-            newTypeSettableAttributes.setCanSetQueryName(randomBoolean());
-            newTypeSettableAttributes.setCanSetDescription(randomBoolean());
-            newTypeSettableAttributes.setCanSetCreatable(randomBoolean());
-            newTypeSettableAttributes.setCanSetFileable(randomBoolean());
-            newTypeSettableAttributes.setCanSetQueryable(randomBoolean());
-            newTypeSettableAttributes.setCanSetFulltextIndexed(randomBoolean());
-            newTypeSettableAttributes.setCanSetIncludedInSupertypeQuery(randomBoolean());
-            newTypeSettableAttributes.setCanSetControllablePolicy(randomBoolean());
-            newTypeSettableAttributes.setCanSetControllableAcl(randomBoolean());
-            cap1.setNewTypeSettableAttributes(newTypeSettableAttributes);
-
-            repInfo.setCapabilities(cap1);
-
-            AclCapabilitiesDataImpl acl1 = new AclCapabilitiesDataImpl();
-            acl1.setSupportedPermissions(randomEnum(SupportedPermissions.class));
-            acl1.setAclPropagation(randomEnum(AclPropagation.class));
-            List<PermissionDefinition> pddList = new ArrayList<PermissionDefinition>();
-            PermissionDefinitionDataImpl pdd1 = new PermissionDefinitionDataImpl();
-            pdd1.setId(randomString());
-            pdd1.setDescription(randomString());
-            pddList.add(pdd1);
-            PermissionDefinitionDataImpl pdd2 = new PermissionDefinitionDataImpl();
-            pdd2.setId(randomString());
-            pdd2.setDescription(randomString());
-            pddList.add(pdd2);
-            acl1.setPermissionDefinitionData(pddList);
-            Map<String, PermissionMapping> pmd = new LinkedHashMap<String, PermissionMapping>();
-            PermissionMappingDataImpl pmd1 = new PermissionMappingDataImpl();
-            pmd1.setKey(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER);
-            pmd1.setPermissions(Arrays.asList(new String[] { randomString(), randomString() }));
-            pmd.put(pmd1.getKey(), pmd1);
-            PermissionMappingDataImpl pmd2 = new PermissionMappingDataImpl();
-            pmd2.setKey(PermissionMapping.CAN_DELETE_OBJECT);
-            pmd2.setPermissions(Arrays.asList(new String[] { randomString(), randomString() }));
-            pmd.put(pmd2.getKey(), pmd2);
-            acl1.setPermissionMappingData(pmd);
-            repInfo.setAclCapabilities(acl1);
-
-            List<ExtensionFeature> extensionFeatures = new ArrayList<ExtensionFeature>();
-
-            ExtensionFeatureImpl ef1 = new ExtensionFeatureImpl();
-            ef1.setId(randomUri());
-            ef1.setCommonName(randomString());
-            ef1.setDescription(randomString());
-            ef1.setUrl(randomUri());
-            ef1.setVersionLabel(randomString());
-            Map<String, String> efd1 = new HashMap<String, String>();
-            efd1.put(randomString(), randomString());
-            efd1.put(randomString(), randomString());
-            ef1.setFeatureData(efd1);
-            extensionFeatures.add(ef1);
-
-            ExtensionFeatureImpl ef2 = new ExtensionFeatureImpl();
-            ef2.setId(randomUri());
-            ef2.setCommonName(randomString());
-            ef2.setDescription(randomString());
-            ef2.setUrl(randomUri());
-            ef2.setVersionLabel(randomString());
-            Map<String, String> efd2 = new HashMap<String, String>();
-            efd2.put(randomString(), randomString());
-            efd2.put(randomString(), randomString());
-            ef2.setFeatureData(efd2);
-            extensionFeatures.add(ef2);
-
-            repInfo.setExtensionFeature(extensionFeatures);
-
-            assertRepositoryInfo10(repInfo, true);
-            assertRepositoryInfo11(repInfo, true);
-        }
-    }
-
-    protected void assertRepositoryInfo10(RepositoryInfo repInfo, boolean validate) throws Exception {
-        assertXmlRepositoryInfo10(repInfo, validate);
-        assertWsRepositoryInfo10(repInfo);
-    }
-
-    protected void assertXmlRepositoryInfo10(RepositoryInfo repInfo, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeRepositoryInfo(writer, CmisVersion.CMIS_1_0, TEST_NAMESPACE, repInfo);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        RepositoryInfo result = XMLConverter.convertRepositoryInfo(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("RepositoryInfo", repInfo, result, cmis10ignoreMethods);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertWsRepositoryInfo10(RepositoryInfo repInfo) throws Exception {
-        CmisRepositoryInfoType ws = WSConverter.convert(repInfo, CmisVersion.CMIS_1_0);
-
-        RepositoryInfo result = WSConverter.convert(ws);
-
-        // remove CMIS 1.1 features
-        RepositoryInfoImpl repInfo2 = new RepositoryInfoImpl(repInfo);
-        repInfo2.setExtensionFeature(null);
-        if (repInfo.getCapabilities() != null) {
-            RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl(repInfo.getCapabilities());
-            capabilities.setCapabilityOrderBy(null);
-            capabilities.setCreatablePropertyTypes(null);
-            capabilities.setNewTypeSettableAttributes(null);
-            repInfo2.setCapabilities(capabilities);
-        }
-
-        assertNotNull(result);
-        assertDataObjectsEquals("RepositoryInfo", repInfo2, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertRepositoryInfo11(RepositoryInfo repInfo, boolean validate) throws Exception {
-        assertXmlRepositoryInfo11(repInfo, validate);
-        assertWsRepositoryInfo11(repInfo);
-        assertJsonRepositoryInfo11(repInfo);
-    }
-
-    protected void assertXmlRepositoryInfo11(RepositoryInfo repInfo, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeRepositoryInfo(writer, CmisVersion.CMIS_1_1, TEST_NAMESPACE, repInfo);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        RepositoryInfo result = XMLConverter.convertRepositoryInfo(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("RepositoryInfo", repInfo, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertWsRepositoryInfo11(RepositoryInfo repInfo) throws Exception {
-        CmisRepositoryInfoType ws = WSConverter.convert(repInfo, CmisVersion.CMIS_1_1);
-
-        RepositoryInfo result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("RepositoryInfo", repInfo, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertJsonRepositoryInfo11(RepositoryInfo repInfo) throws Exception {
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(repInfo, null, null, false).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        RepositoryInfo result = JSONConverter.convertRepositoryInfo((Map<String, Object>) json);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("RepositoryInfo", repInfo, result, null);
-        assertNull(result.getExtensions());
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/TypeDefinitionConverterTest.java b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/TypeDefinitionConverterTest.java
deleted file mode 100644
index 753f01c..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/xml/TypeDefinitionConverterTest.java
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.commons.impl.xml;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
-import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeContainer;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.junit.Test;
-
-public class TypeDefinitionConverterTest extends AbstractXMLConverterTest {
-
-    private static Set<String> cmis10ignoreMethods = new HashSet<String>();
-    static {
-        cmis10ignoreMethods.add("getTypeMutability");
-    }
-
-    @Test
-    public void testDocumentTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
-            typeDef.setIsVersionable(randomBoolean());
-            typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition10(typeDef, true);
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testFolderTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            FolderTypeDefinitionImpl typeDef = new FolderTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_FOLDER);
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition10(typeDef, true);
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testRelationshipTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            RelationshipTypeDefinitionImpl typeDef = new RelationshipTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_RELATIONSHIP);
-            typeDef.setAllowedSourceTypes(Arrays.asList(randomString(), randomString(), randomString()));
-            typeDef.setAllowedTargetTypes(Arrays.asList(randomString(), randomString(), randomString(), randomString()));
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition10(typeDef, true);
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testPolicyTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            PolicyTypeDefinitionImpl typeDef = new PolicyTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_POLICY);
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition10(typeDef, true);
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testItemTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            ItemTypeDefinitionImpl typeDef = new ItemTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_ITEM);
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testSecondaryTypeDefinition() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            SecondaryTypeDefinitionImpl typeDef = new SecondaryTypeDefinitionImpl();
-            fillTypeDefintion(typeDef, BaseTypeId.CMIS_SECONDARY);
-
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-            typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-            assertTypeDefinition11(typeDef, true);
-        }
-    }
-
-    @Test
-    public void testTypeDefinitionList() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            List<TypeDefinition> list = new ArrayList<TypeDefinition>();
-
-            for (int j = 0; j < randomInt(5); j++) {
-                DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
-                fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
-                typeDef.setIsVersionable(randomBoolean());
-                typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
-
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-                typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-                list.add(typeDef);
-            }
-
-            // type definition list
-            TypeDefinitionListImpl typeDefList = new TypeDefinitionListImpl();
-            typeDefList.setList(list);
-            if (randomBoolean()) {
-                typeDefList.setNumItems(BigInteger.valueOf(list.size()));
-                typeDefList.setHasMoreItems(false);
-            } else {
-                typeDefList.setNumItems(BigInteger.valueOf(list.size() + 1 + randomInt(99)));
-                typeDefList.setHasMoreItems(true);
-            }
-
-            assertTypeDefinitionList(typeDefList);
-        }
-    }
-
-    @Test
-    public void testTypeDefinitionContainer() throws Exception {
-        // run the test a few times with different values
-        for (int i = 0; i < 5; i++) {
-            TypeDefinitionContainer typeDefContainter = createTypeDefinitionContainer(randomInt(7) + 2);
-            assertTypeDefinitionContainer(typeDefContainter);
-        }
-    }
-
-    private TypeDefinitionContainer createTypeDefinitionContainer(int level) {
-        DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
-        fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
-        typeDef.setIsVersionable(randomBoolean());
-        typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
-
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
-        typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
-
-        TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
-        result.setTypeDefinition(typeDef);
-
-        if (level > 0) {
-            List<TypeDefinitionContainer> children = new ArrayList<TypeDefinitionContainer>();
-            for (int i = 0; i < randomInt(3); i++) {
-                children.add(createTypeDefinitionContainer(level - 1));
-            }
-
-            result.setChildren(children);
-        }
-
-        return result;
-    }
-
-    protected void fillTypeDefintion(AbstractTypeDefinition typeDef, BaseTypeId baseTypeId) {
-        typeDef.setBaseTypeId(baseTypeId);
-        typeDef.setDescription(randomString());
-        typeDef.setDisplayName(randomString());
-        typeDef.setId(randomString());
-        typeDef.setIsControllableAcl(randomBoolean());
-        typeDef.setIsControllablePolicy(randomBoolean());
-        typeDef.setIsCreatable(randomBoolean());
-        typeDef.setIsFileable(randomBoolean());
-        typeDef.setIsIncludedInSupertypeQuery(randomBoolean());
-        typeDef.setIsFulltextIndexed(randomBoolean());
-        typeDef.setIsQueryable(randomBoolean());
-        typeDef.setLocalName(randomString());
-        typeDef.setLocalNamespace(randomUri());
-        typeDef.setParentTypeId(randomString());
-        typeDef.setQueryName(randomString());
-
-        TypeMutabilityImpl tm = new TypeMutabilityImpl();
-        tm.setCanCreate(randomBoolean());
-        tm.setCanDelete(randomBoolean());
-        tm.setCanUpdate(randomBoolean());
-        typeDef.setTypeMutability(tm);
-    }
-
-    protected AbstractPropertyDefinition<?> createPropertyDefintion(PropertyType propertyType) {
-        AbstractPropertyDefinition<?> result = null;
-        Cardinality cardinality = randomEnum(Cardinality.class);
-
-        switch (propertyType) {
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            ((PropertyBooleanDefinitionImpl) result).setDefaultValue(Arrays.asList(randomBoolean()));
-            ((PropertyBooleanDefinitionImpl) result).setChoices(createChoiceList(Boolean.class, cardinality));
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            ((PropertyDateTimeDefinitionImpl) result).setDefaultValue(Arrays.asList(randomDateTime()));
-            ((PropertyDateTimeDefinitionImpl) result)
-                    .setChoices(createChoiceList(GregorianCalendar.class, cardinality));
-            ((PropertyDateTimeDefinitionImpl) result).setDateTimeResolution(randomEnum(DateTimeResolution.class));
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            ((PropertyDecimalDefinitionImpl) result).setDefaultValue(Arrays.asList(randomDecimal()));
-            ((PropertyDecimalDefinitionImpl) result).setChoices(createChoiceList(BigDecimal.class, cardinality));
-            ((PropertyDecimalDefinitionImpl) result).setMaxValue(randomDecimal());
-            ((PropertyDecimalDefinitionImpl) result).setMinValue(randomDecimal());
-            ((PropertyDecimalDefinitionImpl) result).setPrecision(randomEnum(DecimalPrecision.class));
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            ((PropertyHtmlDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
-            ((PropertyHtmlDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            ((PropertyIdDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
-            ((PropertyIdDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            ((PropertyIntegerDefinitionImpl) result).setDefaultValue(Arrays.asList(randomInteger()));
-            ((PropertyIntegerDefinitionImpl) result).setChoices(createChoiceList(BigInteger.class, cardinality));
-            ((PropertyIntegerDefinitionImpl) result).setMaxValue(randomInteger());
-            ((PropertyIntegerDefinitionImpl) result).setMinValue(randomInteger());
-            break;
-        case STRING:
-            result = new PropertyStringDefinitionImpl();
-            ((PropertyStringDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
-            ((PropertyStringDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
-            ((PropertyStringDefinitionImpl) result).setMaxLength(randomInteger());
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            ((PropertyUriDefinitionImpl) result).setDefaultValue(Arrays.asList(randomUri()));
-            ((PropertyUriDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
-            break;
-        default:
-            return null;
-        }
-
-        result.setId(randomString());
-        result.setDescription(randomString());
-        result.setDisplayName(randomString());
-        result.setPropertyType(propertyType);
-        result.setLocalName(randomString());
-        result.setLocalNamespace(randomUri());
-        result.setCardinality(cardinality);
-        result.setUpdatability(randomEnum(Updatability.class));
-        result.setIsQueryable(randomBoolean());
-        result.setQueryName(randomString());
-        result.setIsInherited(randomBoolean());
-        result.setIsRequired(randomBoolean());
-        result.setIsOrderable(randomBoolean());
-
-        return result;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected <T> List<Choice<T>> createChoiceList(Class<T> clazz, Cardinality cardinality) {
-        List<Choice<T>> result = new ArrayList<Choice<T>>();
-
-        for (int i = 0; i < randomInt(10); i++) {
-            ChoiceImpl<T> choice = new ChoiceImpl<T>();
-            choice.setDisplayName(randomString());
-
-            List<T> values = new ArrayList<T>();
-            choice.setValue(values);
-
-            int valueCount = (cardinality == Cardinality.SINGLE ? 1 : randomInt(5));
-            for (int j = 0; j < valueCount; j++) {
-                if (clazz == Boolean.class) {
-                    values.add((T) randomBoolean());
-                } else if (clazz == String.class) {
-                    values.add((T) randomUri());
-                } else if (clazz == BigInteger.class) {
-                    values.add((T) randomInteger());
-                } else if (clazz == BigDecimal.class) {
-                    values.add((T) randomDecimal());
-                } else if (clazz == GregorianCalendar.class) {
-                    values.add((T) randomDateTime());
-                } else {
-                    assert false;
-                }
-            }
-
-            result.add(choice);
-        }
-
-        return result;
-    }
-
-    // --- asserts ---
-
-    protected void assertTypeDefinition10(TypeDefinition typeDef, boolean validate) throws Exception {
-        assertXmlTypeDefinition10(typeDef, validate);
-        assertWsTypeDefinition10(typeDef);
-    }
-
-    protected void assertXmlTypeDefinition10(TypeDefinition typeDef, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeTypeDefinition(writer, CmisVersion.CMIS_1_0, TEST_NAMESPACE, typeDef);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_0);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        TypeDefinition result = XMLConverter.convertTypeDefinition(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinition", typeDef, result, cmis10ignoreMethods);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertWsTypeDefinition10(TypeDefinition typeDef) throws Exception {
-        CmisTypeDefinitionType ws = WSConverter.convert(typeDef);
-
-        TypeDefinition result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertTypeDefinition11(TypeDefinition typeDef, boolean validate) throws Exception {
-        assertXmlTypeDefinition11(typeDef, validate);
-        assertWsTypeDefinition11(typeDef);
-        assertJsonTypeDefinition11(typeDef);
-    }
-
-    protected void assertXmlTypeDefinition11(TypeDefinition typeDef, boolean validate) throws Exception {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        XMLStreamWriter writer = createWriter(out);
-        XMLConverter.writeTypeDefinition(writer, CmisVersion.CMIS_1_1, TEST_NAMESPACE, typeDef);
-        closeWriter(writer);
-
-        byte[] xml = out.toByteArray();
-
-        if (validate) {
-            validate(xml, CmisVersion.CMIS_1_1);
-        }
-
-        XMLStreamReader parser = createParser(xml);
-        TypeDefinition result = XMLConverter.convertTypeDefinition(parser);
-        closeParser(parser);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertWsTypeDefinition11(TypeDefinition typeDef) throws Exception {
-        CmisTypeDefinitionType ws = WSConverter.convert(typeDef);
-
-        TypeDefinition result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertJsonTypeDefinition11(TypeDefinition typeDef) throws Exception {
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(typeDef, DateTimeFormat.SIMPLE).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        TypeDefinition result = JSONConverter.convertTypeDefinition((Map<String, Object>) json);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
-        assertWsTypeDefinitionList(typeDefList);
-        assertJsonTypeDefinitionList(typeDefList);
-    }
-
-    protected void assertWsTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
-        CmisTypeDefinitionListType ws = WSConverter.convert(typeDefList);
-
-        TypeDefinitionList result = WSConverter.convert(ws);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinitionList", typeDefList, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertJsonTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(typeDefList, DateTimeFormat.SIMPLE).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-        @SuppressWarnings("unchecked")
-        TypeDefinitionList result = JSONConverter.convertTypeChildren((Map<String, Object>) json);
-
-        assertNotNull(result);
-        assertDataObjectsEquals("TypeDefinitionList", typeDefList, result, null);
-        assertNull(result.getExtensions());
-    }
-
-    protected void assertTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
-        assertWsTypeDefinitionContainer(typeDefContainer);
-        assertJsonTypeDefinitionContainer(typeDefContainer);
-    }
-
-    protected void assertWsTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
-        List<CmisTypeContainer> target = new ArrayList<CmisTypeContainer>();
-        WSConverter.convertTypeContainerList(Collections.singletonList(typeDefContainer), target);
-
-        assertEquals(1, target.size());
-
-        List<TypeDefinitionContainer> result = WSConverter.convertTypeContainerList(target);
-
-        assertNotNull(result);
-        assertEquals(1, result.size());
-        assertDataObjectsEquals("TypeDefinitionContainer", typeDefContainer, result.get(0), null);
-    }
-
-    protected void assertJsonTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
-        StringWriter sw = new StringWriter();
-
-        JSONConverter.convert(typeDefContainer, DateTimeFormat.SIMPLE).writeJSONString(sw);
-
-        Object json = (new JSONParser()).parse(sw.toString());
-        assertTrue(json instanceof Map<?, ?>);
-
-        List<TypeDefinitionContainer> result = JSONConverter.convertTypeDescendants(Collections.singletonList(json));
-
-        assertNotNull(result);
-        assertEquals(1, result.size());
-        assertDataObjectsEquals("TypeDefinitionContainer", typeDefContainer, result.get(0), null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis10/CMIS-Core.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis10/CMIS-Core.xsd
deleted file mode 100644
index aa427b1..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis10/CMIS-Core.xsd
+++ /dev/null
@@ -1,1268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-	<xs:attribute name="key" type="xs:string" />
-	<xs:attribute name="index" type="xs:integer" />
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is
-					not required to be set when used as a
-					default value. This is
-					required to be set when used for query result
-					set or returning
-					properties on an object.
-		</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition. If
-						this is a base type,
-						this is not present.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition"
-					type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" />
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous
-						access. This principal can then be passed to the
-						ACL services to
-						specify what permissions anonymous users should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be passed to
-						the
-						ACL services to
-						specify what permissions everyone should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is
-						sufficient to provide rights required
-						in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis11/CMIS-Core.xsd b/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis11/CMIS-Core.xsd
deleted file mode 100644
index cfa46b4..0000000
--- a/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/resources/schema/cmis11/CMIS-Core.xsd
+++ /dev/null
@@ -1,1385 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-	<!--
-		CMIS 1.1 Core Schema
-	-->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-			<xs:enumeration value="cmis:item" />
-			<xs:enumeration value="cmis:secondary" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:description" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:secondaryObjectTypeIds" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:isPrivateWorkingCopy" />			
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is not required to be set when used
-					as a default value. This is required to be set when used for 
-					query result set or returning properties on an object.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" type="xs:string" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateItem" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- bulkUpdateProperties -->
-	<xs:complexType name="cmisObjectIdAndChangeTokenType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="newId" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="changeToken" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisBulkUpdateType">
-		<xs:sequence>
-			<xs:element name="objectIdAndChangeToken" type="cmis:cmisObjectIdAndChangeTokenType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="addSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="removeSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-				
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition.
-						If this is a base type, this is MUST NOT be present.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-				
-			<!-- type mutability-->
-			<xs:element name="typeMutability" type="cmis:cmisTypeMutabilityCapabilitiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition" type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeItemDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeSecondaryDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>	
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" minOccurs="1"
-				maxOccurs="1"/>
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						anonymous users should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						everyone should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="extendedFeatures"
-				type="cmis:cmisExtensionFeatureType" maxOccurs="unbounded" minOccurs="0">
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityOrderBy" type="cmis:enumCapabilityOrderBy"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<xs:element name="capabilityCreatablePropertyTypes"
-				type="cmis:cmisCreatablePropertyTypesType" maxOccurs="1" minOccurs="0">
-			</xs:element>
-			<xs:element name="capabilityNewTypeSettableAttributes"
-				type="cmis:cmisNewTypeSettableAttributes" maxOccurs="1" minOccurs="0">
-			</xs:element>
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumCapabilityOrderBy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="common" />
-			<xs:enumeration value="custom" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is sufficient to 
-						provide rights required in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	
-	<!-- type mutability -->
-	<xs:complexType name="cmisTypeMutabilityCapabilitiesType"> 
-		<xs:sequence> 
-			<xs:element name="create" type="xs:boolean"/>
-			<xs:element name="update" type="xs:boolean"/>
-			<xs:element name="delete" type="xs:boolean"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence> 
-	</xs:complexType> 
-
-	<xs:complexType name="cmisCreatablePropertyTypesType">
-		<xs:sequence>
-			<xs:element name="canCreate" type="cmis:enumPropertyType"
-				minOccurs="0" maxOccurs="unbounded"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisNewTypeSettableAttributes">
-		<xs:sequence>
-			<xs:element name="id" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="displayName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="description" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="controllablePolicy" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- feature extensions -->
-	<xs:complexType name="cmisExtensionFeatureKeyValuePair">	
-		<xs:sequence>
-			<xs:element minOccurs="1" maxOccurs="1" name="key" type="xs:string" />
-			<xs:element minOccurs="1" maxOccurs="1" name="value" type="xs:string" />
-		</xs:sequence>
-	</xs:complexType> 
-
-	<xs:complexType name="cmisExtensionFeatureType">	
-		<xs:sequence>
-			<!-- id is the only mandatory field - typically will be a URN-->
-			<xs:element minOccurs="1" maxOccurs="1" name="id" type="xs:anyURI" />
-			<!-- optional url for a site describing the extension -->
-			<xs:element minOccurs="0" maxOccurs="1" name="url" type="xs:anyURI" />
-			<!-- optional short name for standard i.e. FooStandard -->
-			<xs:element minOccurs="0" maxOccurs="1" name="commonName" type="xs:string" />
-			<!-- optional version label-->
-			<xs:element minOccurs="0" maxOccurs="1" name="versionLabel" type="xs:string" />
-			<xs:element minOccurs="0" maxOccurs="1" name="description" type="xs:string" />
-			<xs:element name="featureData" type="cmis:cmisExtensionFeatureKeyValuePair" minOccurs="0" maxOccurs="unbounded" />
-			<xs:any processContents="lax" namespace="##other" minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType> 
-	
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-dist/pom.xml b/trunk/chemistry-opencmis-dist/pom.xml
deleted file mode 100644
index d07f791..0000000
--- a/trunk/chemistry-opencmis-dist/pom.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <parent>
-        <artifactId>chemistry-opencmis</artifactId>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <version>0.13.0</version>
-        <relativePath>../</relativePath>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>chemistry-opencmis-dist</artifactId>
-    <name>OpenCMIS Assemblies Distribution</name>
-    <packaging>pom</packaging>
-
-    <properties>
-        <parentBasedir>../</parentBasedir>
-    </properties>
-
-    <!-- These dependencies are used to be added in the assambly -->
-    <dependencies>
-
-        <!-- Used for client-assembly.xml -->
-
-        <dependency>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-client-api</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <!-- Used for server-assembly.xml -->
-
-        <dependency>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <!-- Used for server-webapps-assembly.xml -->
-
-        <dependency>
-            <artifactId>chemistry-opencmis-test-browser-app</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-server-fileshare</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-
-        <dependency>
-            <artifactId>chemistry-opencmis-server-inmemory</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
- 
-         <dependency>
-            <artifactId>chemistry-opencmis-osgi-client</artifactId>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <version>${project.version}</version>
-        </dependency>
-
-    </dependencies>
-
-    <profiles>
-        <!--
-            Extending the default -Papache-release profile used *only*
-            during releases
-        -->
-        <profile>
-            <id>apache-release</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>package-assemblies</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <inherited>false</inherited>
-                                <configuration>
-                                    <attach>true</attach>
-                                    <descriptors>
-                                        <descriptor>
-                                            src/main/assembly/server-webapps-assembly.xml
-                                        </descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/trunk/chemistry-opencmis-dist/release-scripts/deploy-dist.sh b/trunk/chemistry-opencmis-dist/release-scripts/deploy-dist.sh
deleted file mode 100755
index 589be19..0000000
--- a/trunk/chemistry-opencmis-dist/release-scripts/deploy-dist.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-# Uploads wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER} chemistry commodity packages for apache.org/dist release vote
-
-# Version to release
-VERSION=$1
-# Example of relative folder chemistry-013/org/apache/chemistry/opencmis
-STAGING_FOLDER=$2
-STAGING_REPO=https://repository.apache.org/content/repositories
-
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis/${VERSION}/chemistry-opencmis-${VERSION}-source-release.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis/${VERSION}/chemistry-opencmis-${VERSION}-source-release.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis/${VERSION}/chemistry-opencmis-${VERSION}-source-release.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis/${VERSION}/chemistry-opencmis-${VERSION}-source-release.zip.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-android-client/${VERSION}/chemistry-opencmis-android-client-${VERSION}-pack.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-android-client/${VERSION}/chemistry-opencmis-android-client-${VERSION}-pack.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-android-client/${VERSION}/chemistry-opencmis-android-client-${VERSION}-pack.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-android-client/${VERSION}/chemistry-opencmis-android-client-${VERSION}-pack.zip.sha1
-
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-bridge/${VERSION}/chemistry-opencmis-bridge-${VERSION}.war
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-bridge/${VERSION}/chemistry-opencmis-bridge-${VERSION}.war.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-bridge/${VERSION}/chemistry-opencmis-bridge-${VERSION}.war.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-bridge/${VERSION}/chemistry-opencmis-bridge-${VERSION}.war.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-client-impl/${VERSION}/chemistry-opencmis-client-impl-${VERSION}-with-dependencies.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-client-impl/${VERSION}/chemistry-opencmis-client-impl-${VERSION}-with-dependencies.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-client-impl/${VERSION}/chemistry-opencmis-client-impl-${VERSION}-with-dependencies.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-client-impl/${VERSION}/chemistry-opencmis-client-impl-${VERSION}-with-dependencies.zip.sha1
-
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-docs.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-docs.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-docs.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-docs.zip.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-server-webapps.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-server-webapps.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-server-webapps.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-dist/${VERSION}/chemistry-opencmis-dist-${VERSION}-server-webapps.zip.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-osgi-client/${VERSION}/chemistry-opencmis-osgi-client-${VERSION}.jar
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-osgi-client/${VERSION}/chemistry-opencmis-osgi-client-${VERSION}.jar.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-osgi-client/${VERSION}/chemistry-opencmis-osgi-client-${VERSION}.jar.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-osgi-client/${VERSION}/chemistry-opencmis-osgi-client-${VERSION}.jar.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-server-bindings-war/${VERSION}/chemistry-opencmis-server-bindings-war-${VERSION}.war
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-server-bindings-war/${VERSION}/chemistry-opencmis-server-bindings-war-${VERSION}.war.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-server-bindings-war/${VERSION}/chemistry-opencmis-server-bindings-war-${VERSION}.war.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-server-bindings-war/${VERSION}/chemistry-opencmis-server-bindings-war-${VERSION}.war.sha1
-
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-workbench/${VERSION}/chemistry-opencmis-workbench-${VERSION}-full.zip
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-workbench/${VERSION}/chemistry-opencmis-workbench-${VERSION}-full.zip.asc
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-workbench/${VERSION}/chemistry-opencmis-workbench-${VERSION}-full.zip.md5
- wget --no-check-certificate ${STAGING_REPO}/${STAGING_FOLDER}/chemistry-opencmis-workbench/${VERSION}/chemistry-opencmis-workbench-${VERSION}-full.zip.sha1
-
diff --git a/trunk/chemistry-opencmis-dist/release-scripts/publish-release.sh b/trunk/chemistry-opencmis-dist/release-scripts/publish-release.sh
deleted file mode 100755
index 2b97ec6..0000000
--- a/trunk/chemistry-opencmis-dist/release-scripts/publish-release.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-#Publishes dist artifacts and stages CMS site to production
-
-# Version to release
-VERSION=$1
-TARGET_DIST_DIR=/www/www.apache.org/dist/chemistry/opencmis/${VERSION}
-
-# Deploys dist packages
-echo "Deploying dist packages"
-mkdir ${TARGET_DIST_DIR} 
-cp ~/public_html/chemistry/opencmis/${VERSION}/dist/* ${TARGET_DIST_DIR}
-
-echo "Publishing site with CMS"
-publish.pl chemistry ${USER}
-
-echo "Release pushed"
-
diff --git a/trunk/chemistry-opencmis-dist/src/main/assembly/server-webapps-assembly.xml b/trunk/chemistry-opencmis-dist/src/main/assembly/server-webapps-assembly.xml
deleted file mode 100644
index bd60b42..0000000
--- a/trunk/chemistry-opencmis-dist/src/main/assembly/server-webapps-assembly.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-    <!--
-        Licensed to the Apache Software Foundation (ASF) under one or
-        more contributor license agreements. See the NOTICE file
-        distributed with this work for additional information regarding
-        copyright ownership. The ASF licenses this file to you under the
-        Apache License, Version 2.0 (the "License"); you may not use
-        this file except in compliance with the License. You may obtain
-        a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions
-        and limitations under the License.
-    -->
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>server-webapps</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <dependencySets>
-        <dependencySet>
-            <useTransitiveDependencies>true</useTransitiveDependencies>
-            <useProjectArtifact>true</useProjectArtifact>
-            <includes>
-                <include>org.apache.chemistry.opencmis:chemistry-opencmis-test-browser-app</include>
-                <include>org.apache.chemistry.opencmis:chemistry-opencmis-server-fileshare</include>
-                <include>org.apache.chemistry.opencmis:chemistry-opencmis-server-inmemory</include>
-                <include>org.apache.chemistry.opencmis:chemistry-opencmis-osgi-server</include>
-            </includes>
-            <outputDirectory></outputDirectory>
-            <unpack>false</unpack>
-        </dependencySet>
-    </dependencySets>
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>DEPENDENCIES</exclude>
-                <exclude>NOTICE</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/src/main/resources</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>DEPENDENCIES</include>
-                <include>NOTICE</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-dist/src/main/resources/DEPENDENCIES b/trunk/chemistry-opencmis-dist/src/main/resources/DEPENDENCIES
deleted file mode 100644
index 37ca3d4..0000000
--- a/trunk/chemistry-opencmis-dist/src/main/resources/DEPENDENCIES
+++ /dev/null
@@ -1,4 +0,0 @@
-Chemistry OpenCMIS distribution package
-
-For a complete description of dependencies used by JARs/WARs contained in this package, 
-please refer to the META-INF/DEPENDENCIES file contained in each OpenCMIS artifact 
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-dist/src/main/resources/NOTICE b/trunk/chemistry-opencmis-dist/src/main/resources/NOTICE
deleted file mode 100644
index 6b2fb49..0000000
--- a/trunk/chemistry-opencmis-dist/src/main/resources/NOTICE
+++ /dev/null
@@ -1,20 +0,0 @@
-Chemistry OpenCMIS distribution package
-
-For a complete listing of License Notices for 3rd party libraries shipped by JARs/WARs contained in this package,
-please refer to the META-INF/NOTICE file contained in each OpenCMIS artifact.
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/pom.xml b/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/pom.xml
deleted file mode 100644
index 9a894a3..0000000
--- a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-osgi-client</artifactId>
-    <name>OpenCMIS OSGi Client Wrapper</name>
-
-    <packaging>bundle</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Embed-Dependency>
-                            *;scope=compile,runtime;inline=false
-                        </Embed-Dependency>
-                        <Embed-Transitive>false</Embed-Transitive>
-                        <Embed-Directory>lib</Embed-Directory>
-                        <Import-Package>
-                            org.slf4j;resolution:=optional,
-                            org.slf4j.impl;resolution:=optional,
-                            com.sun.xml.ws.*;version="[2.1.7,3.0)";resolution:=optional,
-                            com.sun.xml.internal.*;resolution:=optional,
-                            org.apache.cxf.*;resolution:=optional,
-                            org.apache.http.*;resolution:=optional,
-                            org.apache.axis2.*;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <_exportcontents>
-                            org.apache.chemistry.opencmis.client;version=${project.version},
-                            org.apache.chemistry.opencmis.client.api.*;version=${project.version},
-                            org.apache.chemistry.opencmis.client.bindings;version=${project.version},
-                            org.apache.chemistry.opencmis.client.bindings.spi.*;version=${project.version},
-                            org.apache.chemistry.opencmis.commons.impl.*;version=${project.version};-noimport:=true,
-                            org.apache.chemistry.opencmis.commons.*;version=${project.version};-noimport:=true,
-                            com.sun.xml.ws.*;version="[2.1.7,3.0)";resolution:=optional
-                        </_exportcontents>
-                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                        <Bundle-Activator>org.apache.chemistry.opencmis.client.osgi.Activator</Bundle-Activator>
-                        <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/LICENSE b/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/LICENSE
deleted file mode 100644
index 302c45d..0000000
--- a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/LICENSE
+++ /dev/null
@@ -1,646 +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.
-
-=======================================================================
-- XML Resolver library
-  License: Apache 2  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-=======================================================================
-- Woodstox (http://woodstox.codehaus.org)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-This copy of Woodstox XML processor is licensed under the
-Apache (Software) License, version 2.0 ("the License").
-See the License for details about distribution rights, and the
-specific rights regarding derivate works.
-
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/
-
-A copy is also included with both the the downloadable source code package
-and jar that contains class bytecodes, as file "ASL 2.0". In both cases,
-that file should be located next to this file: in source distribution
-the location should be "release-notes/asl"; and in jar "META-INF/"
-
-
-=======================================================================
-- Stax2 API (http://woodstox.codehaus.org/StAX2)
-  License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)
-
-
-Copyright (c) 2004-2010, Woodstox Project (http://woodstox.codehaus.org/)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-3. Neither the name of the Woodstox XML Processor nor the names
-   of its contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- Streaming API for XML (http://stax.codehaus.org)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- StAX-Ex Project (https://stax-ex.dev.java.net/stax-ex)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- Sun JAXB Reference Implementation Runtime (https://jaxb.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- Sun SAAJ Standard Implementation (https://saaj.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- XML Stream Buffer Project (https://xmlstreambuffer.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JAX-WS (JSR-224) Reference Implementation (https://jax-ws.dev.java.net//) 
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JavaBeans(TM) Activation Framework Specification (http://www.oracle.com/technetwork/java/jaf11-139815.html)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- Java Architecture for XML Binding (https://jaxb.dev.java.net/)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- SAAJ API (https://saaj.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JAX-WS (JSR-224) API (https://jax-ws.dev.java.net/) 
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- mimepull (https://mimepull.dev.java.net)
-  License: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0  (http://www.opensource.org/licenses/cddl1.php)
-  License: GPLv2 with classpath exception  (http://www.gnu.org/software/classpath/license.html)
-
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      1. Definitions.
-            1.1. "Contributor" means each individual or entity that
-            creates or contributes to the creation of Modifications.
-            1.2. "Contributor Version" means the combination of the
-            Original Software, prior Modifications used by a
-            Contributor (if any), and the Modifications made by that
-            particular Contributor.
-            1.3. "Covered Software" means (a) the Original Software, or
-            (b) Modifications, or (c) the combination of files
-            containing Original Software with files containing
-            Modifications, in each case including portions thereof.
-            1.4. "Executable" means the Covered Software in any form
-            other than Source Code. 
-            1.5. "Initial Developer" means the individual or entity
-            that first makes Original Software available under this
-            License. 
-            1.6. "Larger Work" means a work which combines Covered
-            Software or portions thereof with code not governed by the
-            terms of this License.
-            1.7. "License" means this document.
-            1.8. "Licensable" means having the right to grant, to the
-            maximum extent possible, whether at the time of the initial
-            grant or subsequently acquired, any and all of the rights
-            conveyed herein.
-            1.9. "Modifications" means the Source Code and Executable
-            form of any of the following: 
-                  A. Any file that results from an addition to,
-                  deletion from or modification of the contents of a
-                  file containing Original Software or previous
-                  Modifications; 
-                  B. Any new file that contains any part of the
-                  Original Software or previous Modification; or 
-                  C. Any new file that is contributed or otherwise made
-                  available under the terms of this License.
-            1.10. "Original Software" means the Source Code and
-            Executable form of computer software code that is
-            originally released under this License. 
-            1.11. "Patent Claims" means any patent claim(s), now owned
-            or hereafter acquired, including without limitation,
-            method, process, and apparatus claims, in any patent
-            Licensable by grantor. 
-            1.12. "Source Code" means (a) the common form of computer
-            software code in which modifications are made and (b)
-            associated documentation included in or with such code.
-            1.13. "You" (or "Your") means an individual or a legal
-            entity exercising rights under, and complying with all of
-            the terms of, this License. For legal entities, "You"
-            includes any entity which controls, is controlled by, or is
-            under common control with You. For purposes of this
-            definition, "control" means (a) the power, direct or
-            indirect, to cause the direction or management of such
-            entity, whether by contract or otherwise, or (b) ownership
-            of more than fifty percent (50%) of the outstanding shares
-            or beneficial ownership of such entity.
-      2. License Grants. 
-            2.1. The Initial Developer Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, the
-            Initial Developer hereby grants You a world-wide,
-            royalty-free, non-exclusive license: 
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Initial Developer,
-                  to use, reproduce, modify, display, perform,
-                  sublicense and distribute the Original Software (or
-                  portions thereof), with or without Modifications,
-                  and/or as part of a Larger Work; and 
-                  (b) under Patent Claims infringed by the making,
-                  using or selling of Original Software, to make, have
-                  made, use, practice, sell, and offer for sale, and/or
-                  otherwise dispose of the Original Software (or
-                  portions thereof). 
-                  (c) The licenses granted in Sections 2.1(a) and (b)
-                  are effective on the date Initial Developer first
-                  distributes or otherwise makes the Original Software
-                  available to a third party under the terms of this
-                  License. 
-                  (d) Notwithstanding Section 2.1(b) above, no patent
-                  license is granted: (1) for code that You delete from
-                  the Original Software, or (2) for infringements
-                  caused by: (i) the modification of the Original
-                  Software, or (ii) the combination of the Original
-                  Software with other software or devices. 
-            2.2. Contributor Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, each
-            Contributor hereby grants You a world-wide, royalty-free,
-            non-exclusive license:
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Contributor to
-                  use, reproduce, modify, display, perform, sublicense
-                  and distribute the Modifications created by such
-                  Contributor (or portions thereof), either on an
-                  unmodified basis, with other Modifications, as
-                  Covered Software and/or as part of a Larger Work; and
-                  (b) under Patent Claims infringed by the making,
-                  using, or selling of Modifications made by that
-                  Contributor either alone and/or in combination with
-                  its Contributor Version (or portions of such
-                  combination), to make, use, sell, offer for sale,
-                  have made, and/or otherwise dispose of: (1)
-                  Modifications made by that Contributor (or portions
-                  thereof); and (2) the combination of Modifications
-                  made by that Contributor with its Contributor Version
-                  (or portions of such combination). 
-                  (c) The licenses granted in Sections 2.2(a) and
-                  2.2(b) are effective on the date Contributor first
-                  distributes or otherwise makes the Modifications
-                  available to a third party. 
-                  (d) Notwithstanding Section 2.2(b) above, no patent
-                  license is granted: (1) for any code that Contributor
-                  has deleted from the Contributor Version; (2) for
-                  infringements caused by: (i) third party
-                  modifications of Contributor Version, or (ii) the
-                  combination of Modifications made by that Contributor
-                  with other software (except as part of the
-                  Contributor Version) or other devices; or (3) under
-                  Patent Claims infringed by Covered Software in the
-                  absence of Modifications made by that Contributor. 
-      3. Distribution Obligations.
-            3.1. Availability of Source Code.
-            Any Covered Software that You distribute or otherwise make
-            available in Executable form must also be made available in
-            Source Code form and that Source Code form must be
-            distributed only under the terms of this License. You must
-            include a copy of this License with every copy of the
-            Source Code form of the Covered Software You distribute or
-            otherwise make available. You must inform recipients of any
-            such Covered Software in Executable form as to how they can
-            obtain such Covered Software in Source Code form in a
-            reasonable manner on or through a medium customarily used
-            for software exchange.
-            3.2. Modifications.
-            The Modifications that You create or to which You
-            contribute are governed by the terms of this License. You
-            represent that You believe Your Modifications are Your
-            original creation(s) and/or You have sufficient rights to
-            grant the rights conveyed by this License.
-            3.3. Required Notices.
-            You must include a notice in each of Your Modifications
-            that identifies You as the Contributor of the Modification.
-            You may not remove or alter any copyright, patent or
-            trademark notices contained within the Covered Software, or
-            any notices of licensing or any descriptive text giving
-            attribution to any Contributor or the Initial Developer.
-            3.4. Application of Additional Terms.
-            You may not offer or impose any terms on any Covered
-            Software in Source Code form that alters or restricts the
-            applicable version of this License or the recipients'
-            rights hereunder. You may choose to offer, and to charge a
-            fee for, warranty, support, indemnity or liability
-            obligations to one or more recipients of Covered Software.
-            However, you may do so only on Your own behalf, and not on
-            behalf of the Initial Developer or any Contributor. You
-            must make it absolutely clear that any such warranty,
-            support, indemnity or liability obligation is offered by
-            You alone, and You hereby agree to indemnify the Initial
-            Developer and every Contributor for any liability incurred
-            by the Initial Developer or such Contributor as a result of
-            warranty, support, indemnity or liability terms You offer.
-            3.5. Distribution of Executable Versions.
-            You may distribute the Executable form of the Covered
-            Software under the terms of this License or under the terms
-            of a license of Your choice, which may contain terms
-            different from this License, provided that You are in
-            compliance with the terms of this License and that the
-            license for the Executable form does not attempt to limit
-            or alter the recipient's rights in the Source Code form
-            from the rights set forth in this License. If You
-            distribute the Covered Software in Executable form under a
-            different license, You must make it absolutely clear that
-            any terms which differ from this License are offered by You
-            alone, not by the Initial Developer or Contributor. You
-            hereby agree to indemnify the Initial Developer and every
-            Contributor for any liability incurred by the Initial
-            Developer or such Contributor as a result of any such terms
-            You offer.
-            3.6. Larger Works.
-            You may create a Larger Work by combining Covered Software
-            with other code not governed by the terms of this License
-            and distribute the Larger Work as a single product. In such
-            a case, You must make sure the requirements of this License
-            are fulfilled for the Covered Software. 
-      4. Versions of the License. 
-            4.1. New Versions.
-            Sun Microsystems, Inc. is the initial license steward and
-            may publish revised and/or new versions of this License
-            from time to time. Each version will be given a
-            distinguishing version number. Except as provided in
-            Section 4.3, no one other than the license steward has the
-            right to modify this License. 
-            4.2. Effect of New Versions.
-            You may always continue to use, distribute or otherwise
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. If the Initial Developer includes a
-            notice in the Original Software prohibiting it from being
-            distributed or otherwise made available under any
-            subsequent version of the License, You must distribute and
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. Otherwise, You may also choose to
-            use, distribute or otherwise make the Covered Software
-            available under the terms of any subsequent version of the
-            License published by the license steward. 
-            4.3. Modified Versions.
-            When You are an Initial Developer and You want to create a
-            new license for Your Original Software, You may create and
-            use a modified version of this License if You: (a) rename
-            the license and remove any references to the name of the
-            license steward (except to note that the license differs
-            from this License); and (b) otherwise make it clear that
-            the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
-      BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-      INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
-      SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
-      PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
-      PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
-      COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
-      INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
-      ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
-      WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-      ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
-      DISCLAIMER. 
-      6. TERMINATION. 
-            6.1. This License and the rights granted hereunder will
-            terminate automatically if You fail to comply with terms
-            herein and fail to cure such breach within 30 days of
-            becoming aware of the breach. Provisions which, by their
-            nature, must remain in effect beyond the termination of
-            this License shall survive.
-            6.2. If You assert a patent infringement claim (excluding
-            declaratory judgment actions) against Initial Developer or
-            a Contributor (the Initial Developer or Contributor against
-            whom You assert such claim is referred to as "Participant")
-            alleging that the Participant Software (meaning the
-            Contributor Version where the Participant is a Contributor
-            or the Original Software where the Participant is the
-            Initial Developer) directly or indirectly infringes any
-            patent, then any and all rights granted directly or
-            indirectly to You by such Participant, the Initial
-            Developer (if the Initial Developer is not the Participant)
-            and all Contributors under Sections 2.1 and/or 2.2 of this
-            License shall, upon 60 days notice from Participant
-            terminate prospectively and automatically at the expiration
-            of such 60 day notice period, unless if within such 60 day
-            period You withdraw Your claim with respect to the
-            Participant Software against such Participant either
-            unilaterally or pursuant to a written agreement with
-            Participant.
-            6.3. In the event of termination under Sections 6.1 or 6.2
-            above, all end user licenses that have been validly granted
-            by You or any distributor hereunder prior to termination
-            (excluding licenses granted to You by any distributor)
-            shall survive termination.
-      7. LIMITATION OF LIABILITY.
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-      INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-      COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
-      LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
-      CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
-      LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
-      STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
-      INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
-      APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
-      NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
-      CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
-      APPLY TO YOU.
-      8. U.S. GOVERNMENT END USERS.
-      The Covered Software is a "commercial item," as that term is
-      defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
-      computer software" (as that term is defined at 48 C.F.R. ¤
-      252.227-7014(a)(1)) and "commercial computer software
-      documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
-      1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
-      through 227.7202-4 (June 1995), all U.S. Government End Users
-      acquire Covered Software with only those rights set forth herein.
-      This U.S. Government Rights clause is in lieu of, and supersedes,
-      any other FAR, DFAR, or other clause or provision that addresses
-      Government rights in computer software under this License.
-      9. MISCELLANEOUS.
-      This License represents the complete agreement concerning subject
-      matter hereof. If any provision of this License is held to be
-      unenforceable, such provision shall be reformed only to the
-      extent necessary to make it enforceable. This License shall be
-      governed by the law of the jurisdiction specified in a notice
-      contained within the Original Software (except to the extent
-      applicable law, if any, provides otherwise), excluding such
-      jurisdiction's conflict-of-law provisions. Any litigation
-      relating to this License shall be subject to the jurisdiction of
-      the courts located in the jurisdiction and venue specified in a
-      notice contained within the Original Software, with the losing
-      party responsible for costs, including, without limitation, court
-      costs and reasonable attorneys' fees and expenses. The
-      application of the United Nations Convention on Contracts for the
-      International Sale of Goods is expressly excluded. Any law or
-      regulation which provides that the language of a contract shall
-      be construed against the drafter shall not apply to this License.
-      You agree that You alone are responsible for compliance with the
-      United States export administration regulations (and the export
-      control laws and regulation of any other countries) when You use,
-      distribute or otherwise make available any Covered Software.
-      10. RESPONSIBILITY FOR CLAIMS.
-      As between Initial Developer and the Contributors, each party is
-      responsible for claims and damages arising, directly or
-      indirectly, out of its utilization of rights under this License
-      and You agree to work with Initial Developer and Contributors to
-      distribute such responsibility on an equitable basis. Nothing
-      herein is intended or shall be deemed to constitute any admission
-      of liability.
-
-
-=======================================================================
-- SLF4J API Module (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/NOTICE b/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index 0931d68..0000000
--- a/trunk/chemistry-opencmis-osgi/chemistry-opencmis-osgi-client/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS OSGi Client Wrapper
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/pom.xml b/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/pom.xml
deleted file mode 100644
index 3b015fe..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>LATEST</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <!-- Project Information -->
-
-    <groupId>org.apache.chemistry.opencmis</groupId>
-    <artifactId>chemistry-opencmis-gettingstarted</artifactId>
-    <name>Apache Chemistry OpenCMIS Getting Started Example</name>
-    <packaging>jar</packaging>
-
-    <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-    </organization>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <version>1.1.1</version>
-                <executions>
-                    <execution>
-                    <phase>test</phase>
-                    <goals>
-                        <goal>java</goal>
-                    </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <mainClass>org.apache.chemistry.opencmis.doc.GettingStarted</mainClass>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>LATEST</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/src/main/java/org/apache/chemistry/opencmis/doc/GettingStarted.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/src/main/java/org/apache/chemistry/opencmis/doc/GettingStarted.java
deleted file mode 100644
index 3d72466..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-getting-started/src/main/java/org/apache/chemistry/opencmis/doc/GettingStarted.java
+++ /dev/null
@@ -1,1028 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.doc;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.DocumentType;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.RelationshipType;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-
-public class GettingStarted {
-    public static void main(String args[]) {
-
-        System.out.println("Getting Started...");
-        System.out.println("------------------");
-
-        // Create a SessionFactory and set up the SessionParameter map
-        SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
-        Map<String, String> parameter = new HashMap<String, String>();
-
-        // user credentials - using the standard admin/admin
-
-        parameter.put(SessionParameter.USER, "admin");
-        parameter.put(SessionParameter.PASSWORD, "admin");
-
-        // connection settings - we're connecting to a public cmis repo,
-        // using the AtomPUB binding, but there are other options here,
-        // or you can substitute your own URL
-        parameter.put(SessionParameter.ATOMPUB_URL, 
-        "http://repo.opencmis.org/inmemory/atom/");
-        // "http://cmis.alfresco.com/cmisatom");
-        // "http://cmis.alfresco.com/service/cmis");
-        // "http://localhost:8080/alfresco/service/api/cmis");
-        parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
-
-        System.out.println("Accessing ATOMPUB_URL: " + parameter.get(SessionParameter.ATOMPUB_URL)
-                + " userid: " + parameter.get(SessionParameter.USER) + " password: "
-                + parameter.get(SessionParameter.PASSWORD));
-
-        // find all the repositories at this URL - there should only be one.
-        List<Repository> repositories = new ArrayList<Repository>();
-        repositories = sessionFactory.getRepositories(parameter);
-        for (Repository r : repositories) {
-            System.out.println("Found repository: " + r.getName());
-        }
-
-        // create session with the first (and only) repository
-        Repository repository = repositories.get(0);
-        parameter.put(SessionParameter.REPOSITORY_ID, repository.getId());
-        Session session = sessionFactory.createSession(parameter);
-
-        System.out.println("Got a connection to repository: " + repository.getName()
-                + ", with id: " + repository.getId());
-
-        // // An example of creating a session with a known repository id.
-        // parameter.put(SessionParameter.REPOSITORY_ID, "A1");
-        // Session session = sessionFactory.createSession(parameter);
-
-        // Remove anything that was created by a previous run of this program
-        cleanup(session);
-
-        // Get everything in the root folder and print the names of the objects
-        Folder root = session.getRootFolder();
-        ItemIterable<CmisObject> children = root.getChildren();
-        System.out.println("Found the following objects in the root folder:-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName() + " which is of type " + o.getType().getDisplayName());
-        }
-
-        System.out.println("\nFile and Folders...");
-        System.out.println("-------------------");
-
-        // Add a new folder to the root folder
-        System.out.println("Creating 'ADGNewFolder' in the root folder");
-        Map<String, String> newFolderProps = new HashMap<String, String>();
-        newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-        newFolderProps.put(PropertyIds.NAME, "ADGNewFolder");
-        Folder newFolder = root.createFolder(newFolderProps);
-
-        // Did it work?
-        children = root.getChildren();
-        System.out.println("Now finding the following objects in the root folder:-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName());
-        }
-
-        // Create a simple text document in the new folder
-        // First, create the content stream
-        final String textFileName = "test.txt";
-        System.out.println("creating a simple text document, " + textFileName);
-        String mimetype = "text/plain; charset=UTF-8";
-        String content = "This is some test content.";
-        String filename = textFileName;
-
-        byte[] buf = null;
-        try {
-            buf = content.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        ByteArrayInputStream input = new ByteArrayInputStream(buf);
-        ContentStream contentStream = session.getObjectFactory().createContentStream(filename,
-                buf.length, mimetype, input);
-
-        // Create the Document Object
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        properties.put(PropertyIds.NAME, filename);
-        ObjectId id = newFolder.createDocument(properties, contentStream, VersioningState.NONE);
-
-        // Did it work?
-        // Get the contents of the document by id
-        Document doc = (Document) session.getObject(id);
-        try {
-            content = getContentAsString(doc.getContentStream());
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        // Get the contents of the document by path
-        String path = newFolder.getPath() + "/" + textFileName;
-        System.out.println("Getting object by path " + path);
-        doc = (Document) session.getObjectByPath(path);
-        try {
-            content = getContentAsString(doc.getContentStream());
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("Contents of " + doc.getName() + " are: " + content);
-
-        // Create Document Object with no content stream
-        System.out.println("creating a document  called testNoContent with no ContentStream");
-        properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        properties.put(PropertyIds.NAME, "testNoContent");
-        newFolder.createDocument(properties, null, VersioningState.NONE);
-
-        // Create a new document and then update its name
-        final String textFileName2 = "test2.txt";
-        System.out.println("creating a simple text document, " + textFileName2);
-        mimetype = "text/plain; charset=UTF-8";
-        content = "This is some test content for our second document.";
-        filename = textFileName2;
-
-        buf = null;
-        try {
-            buf = content.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        input = new ByteArrayInputStream(buf);
-        contentStream = session.getObjectFactory().createContentStream(filename, buf.length,
-                mimetype, input);
-        properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        properties.put(PropertyIds.NAME, filename);
-        ObjectId id2 = newFolder.createDocument(properties, contentStream, VersioningState.NONE);
-
-        Document doc2 = (Document) session.getObject(id2);
-        System.out.println("renaming " + doc2.getName() + " to test3.txt");
-        properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, "test3.txt");
-        id2 = doc2.updateProperties(properties);
-        System.out.println("renamed to " + doc2.getName());
-
-        // Update the content stream
-        if (!session.getRepositoryInfo().getCapabilities().getContentStreamUpdatesCapability()
-                .equals(CapabilityContentStreamUpdates.ANYTIME)) {
-            System.out.println("update without checkout not supported in this repository");
-        } else {
-            System.out.println("updating content stream");
-            content = "This is some updated test content for our renamed second document.";
-            buf = null;
-            try {
-                buf = content.getBytes("UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-            }
-            input = new ByteArrayInputStream(buf);
-            contentStream = session.getObjectFactory().createContentStream("test3.txt", buf.length,
-                    mimetype, input);
-            properties = new HashMap<String, Object>();
-            properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-            properties.put(PropertyIds.NAME, "test3.txt");
-            doc2.setContentStream(contentStream, true);
-
-            // did it work?
-            try {
-                content = getContentAsString(doc2.getContentStream());
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            System.out.println("Contents of " + doc2.getName() + " are: " + content);
-        }
-
-        // Force and handle a CmisInvalidArgumentException exception
-        System.out.println("\nExceptions...");
-        System.out.println("-------------");
-        System.out.println("Forcing and handling a CmisInvalidArgumentException");
-        try {
-            doc2.setContentStream(null, false);
-        } catch (CmisInvalidArgumentException e1) {
-            System.out.println("caught an " + e1.getClass().getName() + " exception with message "
-                    + e1.getMessage());
-        }
-
-        // delete a document
-        System.out.println("\nMore files and folders...");
-        System.out.println("-------------------------");
-        children = newFolder.getChildren();
-        System.out.println("Now finding the following objects in our folder:-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName());
-        }
-        System.out.println("Deleting document " + doc2.getName());
-        doc2.delete(true);
-        System.out.println("Now finding the following objects in our folder:-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName());
-        }
-
-        // Create a new folder tree, and delete it
-        System.out.println("Creating 'ADGFolder1' in the root folder");
-        newFolderProps = new HashMap<String, String>();
-        newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder1");
-        Folder folder1 = root.createFolder(newFolderProps);
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder11");
-        Folder folder11 = folder1.createFolder(newFolderProps);
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder12");
-        Folder folder12 = folder1.createFolder(newFolderProps);
-        System.out.println("delete the 'ADGFolder1' tree");
-        folder1.deleteTree(true, UnfileObject.DELETE, true);
-
-        // Create a folder tree to navigate through
-        System.out.println("Creating folder tree for navigation");
-        newFolderProps = new HashMap<String, String>();
-        HashMap<String, String> newFileProps = new HashMap<String, String>();
-
-        newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder1");
-        folder1 = root.createFolder(newFolderProps);
-
-        newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        newFileProps.put(PropertyIds.NAME, "ADGFile1f1");
-        folder1.createDocument(newFileProps, contentStream, VersioningState.NONE);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder11");
-        folder11 = folder1.createFolder(newFolderProps);
-
-        newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        newFileProps.put(PropertyIds.NAME, "ADGFile11f1");
-        folder11.createDocument(newFileProps, contentStream, VersioningState.NONE);
-
-        newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        newFileProps.put(PropertyIds.NAME, "ADGFile11f2");
-        folder11.createDocument(newFileProps, contentStream, VersioningState.NONE);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder111");
-        folder11.createFolder(newFolderProps);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder112");
-        folder11.createFolder(newFolderProps);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder12");
-        folder12 = folder1.createFolder(newFolderProps);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder121");
-        Folder folder121 = folder12.createFolder(newFolderProps);
-
-        newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-        newFileProps.put(PropertyIds.NAME, "ADGFile121f1");
-        folder121.createDocument(newFileProps, contentStream, VersioningState.NONE);
-
-        newFolderProps.put(PropertyIds.NAME, "ADGFolder122");
-        folder12.createFolder(newFolderProps);
-
-        // Navigating the object tree
-        System.out.println("\nNavigating the object tree...");
-        System.out.println("-----------------------------");
-
-        // Get the children of folder1
-        children = folder1.getChildren();
-        System.out.println("Children of " + folder1.getName() + ":-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName());
-        }
-
-        // Get the descendants of folder1
-        if (!session.getRepositoryInfo().getCapabilities().isGetDescendantsSupported()) {
-            System.out.println("getDescendants not supported in this repository");
-        } else {
-            System.out.println("Descendants of " + folder1.getName() + ":-");
-            for (Tree<FileableCmisObject> t : folder1.getDescendants(-1)) {
-                printTree(t);
-            }
-        }
-
-        // Get the foldertree of folder1
-        if (!session.getRepositoryInfo().getCapabilities().isGetFolderTreeSupported()) {
-            System.out.println("getFolderTree not supported in this repository");
-        } else {
-            System.out.println("Foldertree for " + folder1.getName() + ":-");
-            for (Tree<FileableCmisObject> t : folder1.getFolderTree(-1)) {
-                printFolderTree(t);
-            }
-        }
-
-        // Paging
-        System.out.println("\nPaging...");
-        System.out.println("--------");
-        System.out.println("Creating folders for paging example");
-        newFolderProps = new HashMap<String, String>();
-        newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-        newFolderProps.put(PropertyIds.NAME, "ADGFolderPaging");
-        Folder folderPaging = root.createFolder(newFolderProps);
-        createFolders(folderPaging, 10);
-
-        System.out.println("Getting page of length 3 from item 5");
-        OperationContext operationContext = new OperationContextImpl();
-        operationContext.setMaxItemsPerPage(3);
-        ItemIterable<CmisObject> children1 = folderPaging.getChildren(operationContext);
-        int count = 0;
-        for (CmisObject child : children1.skipTo(5).getPage()) {
-            System.out.println("object " + count + " in page of " + children1.getPageNumItems()
-                    + " is " + child.getName());
-            count++;
-        }
-
-        System.out.println("Getting complete result set in pages of 3");
-        operationContext = new OperationContextImpl();
-        operationContext.setMaxItemsPerPage(3);
-        children1 = folderPaging.getChildren(operationContext);
-        int pageNumber = 0;
-        boolean finished = false;
-        count= 0;
-        while (!finished) {
-            ItemIterable<CmisObject> currentPage = children1.skipTo(count).getPage();
-            System.out.println("page " + pageNumber + " has " + currentPage.getPageNumItems() + " items");
-            for (CmisObject item : currentPage) {
-                System.out.println("object " + count +  " is " + item.getName());
-                count++;
-            }
-            pageNumber++;
-            if (!currentPage.getHasMoreItems())
-                finished = true;
-        }
-
-        // Types
-        System.out.println("\nTypes...");
-        System.out.println("--------");
-        // Look at the type definition
-        System.out.println("Getting type definition for doc");
-        ObjectType objectType = session.getTypeDefinition(doc.getType().getId());
-        System.out.println("doc is of type " + objectType.getDisplayName());
-        System.out.println("isBaseType() returns " + (objectType.isBaseType() ? "true" : "false"));
-        ObjectType baseType = objectType.getBaseType();
-        if (baseType == null) {
-            System.out.println("getBaseType() returns null");
-        } else {
-            System.out.println("getBaseType() returns " + baseType.getDisplayName());
-        }
-        ObjectType parentType = objectType.getParentType();
-        if (parentType == null) {
-            System.out.println("getParentType() returns null");
-        } else {
-            System.out.println("getParentType() returns " + parentType.getDisplayName());
-        }
-        System.out.println("Listing child types of " + objectType.getDisplayName());
-        for (ObjectType o : objectType.getChildren()) {
-            System.out.println("\t" + o.getDisplayName());
-        }
-        System.out.println("Getting immediate descendant types of " + objectType.getDisplayName());
-        for (Tree<ObjectType> o : objectType.getDescendants(1)) {
-            System.out.println("\t" + o.getItem().getDisplayName());
-        }
-
-        System.out.println("\nProperties...");
-        System.out.println("-------------");
-        // Look at all the properties of the document
-        System.out.println(doc.getName() + " properties start");
-        List<Property<?>> props = doc.getProperties();
-        for (Property<?> p : props) {
-            System.out.println(p.getDefinition().getDisplayName() + "=" + p.getValuesAsString());
-        }
-        System.out.println(doc.getName() + " properties end");
-
-        // Get some document properties explicitly
-        System.out.println("VersionLabel property on " + doc.getName() + " is "
-                + doc.getVersionLabel());
-        // System.out.println("Is this the latest version of " + doc.getName() +
-        // " ?:  "
-        // + (doc.isLatestVersion() ? "yes" : "no"));
-
-        // get a property by id
-        System.out.println("get property by property id");
-        Property<?> someProperty = props.get(0);
-        System.out.println(someProperty.getDisplayName() + " property on " + doc.getName()
-                + " (by getPropertValue()) is " + doc.getPropertyValue(someProperty.getId()));
-
-        // get a property by query name
-        System.out.println("get property by query name");
-        if (session.getRepositoryInfo().getCapabilities().getQueryCapability()
-                .equals(CapabilityQuery.METADATAONLY)) {
-            System.out.println("Full search not supported");
-        } else {
-            String query = "SELECT * FROM cmis:document WHERE cmis:name = 'test.txt'";
-            ItemIterable<QueryResult> queryResult = session.query(query, false);
-            for (QueryResult item : queryResult) {
-                System.out.println("property cmis:createdBy on test.txt is "
-                        + item.getPropertyByQueryName("cmis:createdBy").getFirstValue());
-            }
-        }
-
-        GregorianCalendar calendar = doc.getCreationDate();
-        String DATE_FORMAT = "yyyyMMdd";
-        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
-        System.out.println("Creation date of " + doc.getName() + " is  "
-                + sdf.format(calendar.getTime()));
-
-        System.out.println("\nQuery...");
-        System.out.println("--------");
-        // Query 1 - need full query capability for this
-        if (session.getRepositoryInfo().getCapabilities().getQueryCapability()
-                .equals(CapabilityQuery.METADATAONLY)) {
-            System.out.println("Full search not supported");
-        } else {
-            String query = "SELECT * FROM cmis:document WHERE cmis:name LIKE 'test%'";
-            ItemIterable<QueryResult> q = session.query(query, false);
-
-            // Did it work?
-            System.out.println("***results from query " + query);
-
-            int i = 1;
-            for (QueryResult qr : q) {
-                System.out.println("--------------------------------------------\n" + i + " , "
-                        + qr.getPropertyByQueryName("cmis:objectTypeId").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:name").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:createdBy").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:objectId").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamFileName").getFirstValue()
-                        + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamMimeType").getFirstValue()
-                        + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamLength").getFirstValue());
-                i++;
-            }
-
-            // Query 2
-            query = "SELECT * FROM cmis:document WHERE cmis:name LIKE 'test%.txt' AND CONTAINS('test')";
-            q = session.query(query, false);
-
-            System.out.println("***results from query " + query);
-
-            i = 1;
-            for (QueryResult qr : q) {
-                System.out.println("--------------------------------------------\n" + i + " , "
-                        + qr.getPropertyByQueryName("cmis:objectTypeId").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:name").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:createdBy").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:objectId").getFirstValue() + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamFileName").getFirstValue()
-                        + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamMimeType").getFirstValue()
-                        + " , "
-                        + qr.getPropertyByQueryName("cmis:contentStreamLength").getFirstValue());
-                i++;
-            }
-        }
-
-        // Advanced use of types
-        System.out.println("\nAdvanced use of types...");
-        System.out.println("-------------------------");
-        System.out.println("Finding an existing document of an advanced type");
-        if (session.getRepositoryInfo().getCapabilities().getQueryCapability()
-                .equals(CapabilityQuery.METADATAONLY)) {
-            System.out.println("Full search not supported");
-        } else {
-            String query = "SELECT * FROM ia:calendarEvent";
-            ItemIterable<QueryResult> queryResult = session.query(query, false);
-            for (QueryResult item : queryResult) {
-                System.out.println("Found "
-                        + item.getPropertyByQueryName("cmis:name").getFirstValue() + " of type "
-                        + item.getPropertyByQueryName("cmis:objectTypeId").getFirstValue());
-                System.out.println("property ia:descriptionEvent is "
-                        + item.getPropertyByQueryName("ia:descriptionEvent").getFirstValue());
-                System.out.println("property ia:toDate is "
-                        + item.getPropertyByQueryName("ia:toDate").getFirstValue());
-                System.out.println("property ia:fromDate is "
-                        + item.getPropertyByQueryName("ia:fromDate").getFirstValue());
-            }
-        }
-
-        // Capabilities
-        System.out.println("\nCapabilities...");
-        System.out.println("---------------");
-        // Check what capabilities our repository supports
-        System.out.println("Printing repository capabilities...");
-        final RepositoryInfo repInfo = session.getRepositoryInfo();
-        RepositoryCapabilities cap = repInfo.getCapabilities();
-        System.out.println("\nNavigation Capabilities");
-        System.out.println("-----------------------");
-        System.out.println("Get descendants supported: "
-                + (cap.isGetDescendantsSupported() ? "true" : "false"));
-        System.out.println("Get folder tree supported: "
-                + (cap.isGetFolderTreeSupported() ? "true" : "false"));
-        System.out.println("\nObject Capabilities");
-        System.out.println("-----------------------");
-        System.out.println("Content Stream: " + cap.getContentStreamUpdatesCapability().value());
-        System.out.println("Changes: " + cap.getChangesCapability().value());
-        System.out.println("Renditions: " + cap.getRenditionsCapability().value());
-        System.out.println("\nFiling Capabilities");
-        System.out.println("-----------------------");
-        System.out.println("Multifiling supported: "
-                + (cap.isMultifilingSupported() ? "true" : "false"));
-        System.out.println("Unfiling supported: " + (cap.isUnfilingSupported() ? "true" : "false"));
-        System.out.println("Version specific filing supported: "
-                + (cap.isVersionSpecificFilingSupported() ? "true" : "false"));
-        System.out.println("\nVersioning Capabilities");
-        System.out.println("-----------------------");
-        System.out
-                .println("PWC searchable: " + (cap.isPwcSearchableSupported() ? "true" : "false"));
-        System.out.println("PWC Updatable: " + (cap.isPwcUpdatableSupported() ? "true" : "false"));
-        System.out.println("All versions searchable: "
-                + (cap.isAllVersionsSearchableSupported() ? "true" : "false"));
-        System.out.println("\nQuery Capabilities");
-        System.out.println("-----------------------");
-        System.out.println("Query: " + cap.getQueryCapability().value());
-        System.out.println("Join: " + cap.getJoinCapability().value());
-        System.out.println("\nACL Capabilities");
-        System.out.println("-----------------------");
-        System.out.println("ACL: " + cap.getAclCapability().value());
-        System.out.println("End of  repository capabilities");
-
-        System.out.println("\nAllowable actions...");
-        System.out.println("--------------------");
-        // find the current allowable actions for the test.txt document
-        System.out.println("Getting the current allowable actions for the " + doc.getName()
-                + " document object...");
-        for (Action a : doc.getAllowableActions().getAllowableActions()) {
-            System.out.println("\t" + a.value());
-        }
-
-        // find out if we can currently check out test.txt
-        if (doc.getAllowableActions().getAllowableActions().contains(Action.CAN_CHECK_OUT)) {
-            System.out.println("can check out " + doc.getName());
-        } else {
-            System.out.println("can not check out " + doc.getName());
-        }
-
-        System.out.println("\nMultifiling and Unfiling...");
-        System.out.println("---------------------------");
-        // Try out multifiling if it is supported
-        System.out.println("Trying out multifiling");
-        Folder newFolder2 = null;
-        if (!(cap.isMultifilingSupported())) {
-            System.out.println("Multifiling not supported by this repository");
-        } else {
-            // Add a new folder to the root folder
-            System.out.println("Creating 'ADGNewFolder 2' in the root folder");
-            newFolderProps = new HashMap<String, String>();
-            newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-            newFolderProps.put(PropertyIds.NAME, "ADGNewFolder 2");
-            newFolder2 = root.createFolder(newFolderProps, null, null, null,
-                    session.getDefaultContext());
-            System.out.println("Adding " + textFileName + "to 'ADGNewFolder 2' in the root folder");
-            doc.addToFolder(newFolder2, true);
-
-            // Did it work?
-            children = newFolder.getChildren();
-            System.out.println("Now finding the following objects in the 'ADGNewFolder' folder:-");
-            for (CmisObject o : children) {
-                System.out.println(o.getName());
-            }
-            children = newFolder2.getChildren();
-            System.out
-                    .println("Now finding the following objects in the 'ADGNewFolder 2' folder:-");
-            for (CmisObject o : children) {
-                System.out.println(o.getName());
-            }
-        }
-
-        // Try out unfiling if it is supported
-        System.out.println("Trying out unfiling");
-        if (!(cap.isUnfilingSupported())) {
-            System.out.println("Unfiling not supported by this repository");
-        } else {
-            // remove our document from both folders
-            System.out.println("removing: " + doc.getName() + " from 'ADGNewFolder':-");
-            doc.removeFromFolder(newFolder);
-            System.out.println("removing: " + doc.getName() + " from 'ADGNewFolder 2':-");
-            doc.removeFromFolder(newFolder2);
-            // Did it work?
-            Document docTest = (Document) session.getObject(id);
-            if (docTest != null) {
-                System.out.println(docTest.getName() + " still exists");
-            }
-
-        }
-
-        System.out.println("\nRelationships...");
-        System.out.println("-----------------");
-
-        // Check if the repo supports relationships
-        ObjectType relationshipType = null;
-        try {
-            relationshipType = session.getTypeDefinition("cmis:relationship");
-        } catch (CmisObjectNotFoundException e) {
-            relationshipType = null;
-        }
-
-        if (relationshipType == null) {
-            System.out.println("Repository does not support cmis:relationship objects");
-        } else {
-            ObjectType cmiscustomRelationshipType = null;
-            try {
-                cmiscustomRelationshipType = session.getTypeDefinition("R:cmiscustom:assoc");
-            } catch (CmisObjectNotFoundException e) {
-                cmiscustomRelationshipType = null;
-            }
-            if (cmiscustomRelationshipType == null) {
-                System.out.println("Repository does not support R:cmiscustom:assoc objects");
-            } else {
-
-                System.out.println("Creating folders for relationships example");
-
-                newFolderProps = new HashMap<String, String>();
-                newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-                newFolderProps.put(PropertyIds.NAME, "ADGFolderAssociations");
-                Folder folderAssociations = root.createFolder(newFolderProps);
-
-                newFileProps = new HashMap<String, String>();
-                newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "D:cmiscustom:document");
-                newFileProps.put(PropertyIds.NAME, "ADGFileSource");
-                Document sourceDoc = folderAssociations.createDocument(newFileProps, null,
-                        VersioningState.MAJOR);
-                newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-                newFileProps.put(PropertyIds.NAME, "ADGFileTarget");
-                Document targetDoc = folderAssociations.createDocument(newFileProps, null,
-                        VersioningState.MAJOR);
-
-                Map<String, String> relProps = new HashMap<String, String>();
-                relProps.put("cmis:sourceId", sourceDoc.getId());
-                relProps.put("cmis:targetId", targetDoc.getId());
-                relProps.put("cmis:objectTypeId", "R:cmiscustom:assoc");
-                session.createRelationship(relProps, null, null, null);
-                System.out.println("created relationship");
-
-                operationContext = new OperationContextImpl();
-                operationContext.setIncludeRelationships(IncludeRelationships.BOTH);
-                ObjectType typeDefinition = session.getTypeDefinition("R:cmiscustom:assoc");
-                RelationshipDirection direction = RelationshipDirection.EITHER;
-                ItemIterable<Relationship> relationships = session.getRelationships(sourceDoc,
-                        true, direction, typeDefinition, operationContext);
-                int relationshipCount = 0;
-                for (Relationship relationship : relationships) {
-                    relationshipCount++;
-                    System.out.println("found relationship " + relationshipCount);
-
-                    // Look at allowable source and target type
-                    RelationshipType relType = (RelationshipType) relationship.getType();
-
-                    System.out.println(relType.getDisplayName()
-                            + " has the following allowed source types:");
-                    for (ObjectType objectType1 : relType.getAllowedSourceTypes()) {
-                        System.out.println("\t" + objectType1.getDisplayName() + " with QueryName "
-                                + objectType1.getQueryName());
-                    }
-
-                    System.out.println(relType.getDisplayName()
-                            + " has the following allowed target types:");
-                    for (ObjectType objectType1 : relType.getAllowedTargetTypes()) {
-                        System.out.println("\t" + objectType1.getDisplayName() + " with QueryName "
-                                + objectType1.getQueryName());
-                    }
-                }
-
-            }
-        }
-
-        System.out.println("\tAccess Control...");
-        System.out.println("-----------------");
-
-        // Check if the repo supports ACLs
-        if (!session.getRepositoryInfo().getCapabilities().getAclCapability()
-                .equals(CapabilityAcl.MANAGE)) {
-            System.out.println("Repository does not allow ACL management");
-        } else {
-            System.out.println("Repository allows ACL management");
-
-            System.out.println("Creating folders for permissions example");
-
-            newFolderProps = new HashMap<String, String>();
-            newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-            newFolderProps.put(PropertyIds.NAME, "ADGFolderPermissions");
-            Folder folderAssociations = session.getRootFolder().createFolder(newFolderProps);
-
-            newFileProps = new HashMap<String, String>();
-            contentStream = new ContentStreamImpl("permissions.txt", null, "plain/text",
-                    new ByteArrayInputStream("some content".getBytes()));
-            newFileProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
-            newFileProps.put(PropertyIds.NAME, "ADGFilePermissions");
-            Document testDoc = folderAssociations.createDocument(newFileProps, contentStream,
-                    VersioningState.MAJOR);
-
-            operationContext = new OperationContextImpl();
-            operationContext.setIncludeAcls(true);
-            testDoc = (Document) session.getObject(testDoc, operationContext);
-
-            System.out.println("ACL before adding an ace...");
-            for (Ace ace : testDoc.getAcl().getAces()) {
-                System.out.println("Found ace: " + ace.getPrincipalId() + " toString "
-                        + ace.toString());
-            }
-
-            List<String> permissions = new ArrayList<String>();
-            permissions.add("cmis:write");
-            String principal = "admin";
-            Ace aceIn = session.getObjectFactory().createAce(principal, permissions);
-            List<Ace> aceListIn = new ArrayList<Ace>();
-            aceListIn.add(aceIn);
-            testDoc.addAcl(aceListIn, AclPropagation.REPOSITORYDETERMINED);
-            testDoc = (Document) session.getObject(testDoc, operationContext);
-
-            System.out.println("ACL after adding an ace...");
-            for (Ace ace : testDoc.getAcl().getAces()) {
-                System.out.println("Found ace: " + ace.getPrincipalId() + " toString "
-                        + ace.toString());
-            }
-
-            System.out.println("getting ACL capabilities");
-            AclCapabilities aclCapabilities = session.getRepositoryInfo().getAclCapabilities();
-
-            System.out.println("Propogation for this repository is "
-                    + aclCapabilities.getAclPropagation().toString());
-
-            System.out.println("permissions for this repository are: ");
-            for (PermissionDefinition definition : aclCapabilities.getPermissions()) {
-                System.out.println(definition.toString());
-            }
-
-            System.out.println("\npermission mappings for this repository are: ");
-            Map<String, PermissionMapping> repoMapping = aclCapabilities.getPermissionMapping();
-            for (String key : repoMapping.keySet()) {
-                System.out.println(key + " maps to " + repoMapping.get(key).getPermissions());
-            }
-        }
-
-        // Versioning
-        System.out.println("\nVersioning...");
-        System.out.println("-------------");
-        // Check whether a document is versionable
-        boolean versionable = false;
-        if (((DocumentType) (doc.getType())).isVersionable()) {
-            System.out.println(doc.getName() + " is versionable");
-            versionable = true;
-        } else {
-            System.out.println(doc.getName() + " is NOT versionable");
-        }
-
-        // check out the latest version of test.txt, make some changes to the
-        // PWC, and
-        // check in the new version
-        if (versionable) {
-            Document pwc = (Document) session.getObject(doc.checkOut());
-            try {
-                content = getContentAsString(pwc.getContentStream());
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            String updatedContents = content + "\nLine added in new version";
-
-            try {
-                buf = updatedContents.getBytes("UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-            }
-            contentStream = session.getObjectFactory().createContentStream(
-                    doc.getContentStream().getFileName(), buf.length,
-                    doc.getContentStream().getMimeType(), new ByteArrayInputStream(buf));
-
-            // Check in the pwc
-            try {
-                pwc.checkIn(false, null, contentStream, "minor version");
-            } catch (Exception e) {
-                e.printStackTrace();
-                System.out.println("checkin failed, trying to cancel the checkout");
-                pwc.cancelCheckOut();
-            }
-
-            System.out.println("Document version history");
-            {
-                List<Document> versions = doc.getAllVersions();
-                for (Document version : versions) {
-                    System.out.println("\tname: " + version.getName());
-                    System.out.println("\tversion label: " + version.getVersionLabel());
-                    System.out.println("\tversion series id: " + version.getVersionSeriesId());
-                    System.out.println("\tchecked out by: "
-                            + version.getVersionSeriesCheckedOutBy());
-                    System.out.println("\tchecked out id: "
-                            + version.getVersionSeriesCheckedOutId());
-                    System.out.println("\tmajor version: " + version.isMajorVersion());
-                    System.out.println("\tlatest version: " + version.isLatestVersion());
-                    System.out.println("\tlatest major version: " + version.isLatestMajorVersion());
-                    System.out.println("\tcheckin comment: " + version.getCheckinComment());
-                    System.out.println("\tcontent length: " + version.getContentStreamLength()
-                            + "\n");
-                }
-            }
-        }
-
-        System.out.println("\nRenditions...");
-        System.out.println("-------------");
-
-        // Renditions - find all objects and check for renditions
-        if (session.getRepositoryInfo().getCapabilities().getRenditionsCapability()
-                .equals(CapabilityRenditions.NONE)) {
-            System.out.println("Repository does not support renditions");
-        } else {
-            System.out
-                    .println("Finding first object in repository with thumbnail renditions - start");
-            Folder node = root;
-            Stack<Folder> stack = new Stack<Folder>();
-            while (node != null) {
-                children = node.getChildren();
-                for (CmisObject o : children) {
-                    if ((o.getType().isBaseType() && o.getType().getId().equals("cmis:folder"))
-                            || o.getBaseType().getId().equals("cmis:folder")) {
-                        stack.push((Folder) o);
-                    } else {
-                        operationContext = session.createOperationContext();
-                        operationContext.setRenditionFilterString("cmis:thumbnail");
-                        CmisObject oo = session.getObject(o.getId(), operationContext);
-                        List<Rendition> rl = oo.getRenditions();
-                        if (!rl.isEmpty()) {
-                            System.out.println("found  " + o.getName() + " of type "
-                                    + o.getType().getDisplayName() + "that has renditions...");
-                            for (Rendition rendition : rl) {
-                                System.out.print("kind: " + rendition.getKind());
-                                System.out.print("\tmimetype: " + rendition.getMimeType());
-                                System.out.print("\twidth: " + rendition.getWidth());
-                                System.out.print("\theight: " + rendition.getHeight());
-                                System.out.println("\tstream id: " + rendition.getStreamId());
-                            }
-                            break; // Just show the first object with
-                                   // renditions. Remove this
-                                   // Break to show them all
-
-                        }
-                    }
-                }
-                if (stack.isEmpty()) {
-                    node = null;
-                } else {
-                    node = (Folder) stack.pop();
-                }
-            }
-            System.out
-                    .println("Finding first object in repository with thumbnail renditions - end");
-        }
-
-        System.out.println("Getting Started...end of");
-    }
-
-    /**
-     * 
-     * @param folder
-     */
-    private static void printTree(Tree<FileableCmisObject> tree) {
-        System.out.println("Descendant " + tree.getItem().getName());
-        for (Tree<FileableCmisObject> t : tree.getChildren()) {
-            printTree(t);
-        }
-    }
-
-    /**
-     * 
-     * @param folder
-     */
-    private static void printFolderTree(Tree<FileableCmisObject> tree) {
-        System.out.println("Folder " + tree.getItem().getName());
-        for (Tree<FileableCmisObject> t : tree.getChildren()) {
-            printFolderTree(t);
-        }
-    }
-
-    /**
-     * Cleans up any objects we created in a previous run of this program on the
-     * supplied session
-     * 
-     * @param s
-     *            an active cmis session
-     */
-    private static void cleanup(Session s) {
-        System.out.println("Starting cleaning up repository");
-        String[] folders = { "ADGNewFolder", "ADGNewFolder 2", "ADGFolder1", "ADGFolderPaging",
-                "ADGFolderAssociations", "ADGFolderPermissions" };
-        for (int i = 0; i < folders.length; i++) {
-            String path = "/" + folders[i];
-
-            System.out.println("finding and deleting folder tree " + path);
-            CmisObject o = null;
-            try {
-                o = s.getObjectByPath(path);
-            } catch (CmisObjectNotFoundException e) {
-                // ignore
-            }
-            if (o != null) {
-                try {
-                    ((Folder) o).deleteTree(true, UnfileObject.DELETE, true);
-                } catch (Exception e) {
-                    // Ignore any failures
-                }
-            }
-        }
-
-        System.out.println("Finished cleaning up repository");
-
-    }
-
-    /**
-     * Helper method to get the contents of a stream
-     * 
-     * @param stream
-     * @return
-     * @throws IOException
-     */
-    private static String getContentAsString(ContentStream stream) throws IOException {
-        InputStream in2 = stream.getStream();
-        StringBuffer sbuf = null;
-        sbuf = new StringBuffer(in2.available());
-        int count;
-        byte[] buf2 = new byte[100];
-        while ((count = in2.read(buf2)) != -1) {
-            for (int i = 0; i < count; i++) {
-                sbuf.append((char) buf2[i]);
-            }
-        }
-        in2.close();
-        return sbuf.toString();
-    }
-
-    /**
-     * Creates size folders under root with names ADGFolder0, ADGFolder1,...,
-     * 
-     * @param root
-     *            - parent folder
-     * @param size
-     *            - number of folders to create
-     */
-    private static void createFolders(Folder root, int size) {
-        HashMap<String, String> newFolderProps = new HashMap<String, String>();
-
-        newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
-
-        for (int i = 0; i < size; i++) {
-            newFolderProps.put(PropertyIds.NAME, "ADGFolder" + i);
-            root.createFolder(newFolderProps);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/pom.xml b/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/pom.xml
deleted file mode 100644
index c976f8d..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/pom.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); you 
- may not use this file except in compliance with the License. You may obtain 
- a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
- required by applicable law or agreed to in writing, software distributed 
- under the License is distributed on an "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>LATEST</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <!-- Project Information -->
-
-    <groupId>org.apache.chemistry.opencmis</groupId>
-    <artifactId>chemistry-opencmis-hello</artifactId>
-    <name>Apache Chemistry OpenCMIS Hello World Example</name>
-    <packaging>jar</packaging>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <version>1.1.1</version>
-                <executions>
-                    <execution>
-                    <phase>test</phase>
-                    <goals>
-                        <goal>java</goal>
-                    </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <mainClass>org.apache.chemistry.opencmis.doc.Hello</mainClass>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>LATEST</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/Hello.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/Hello.java
deleted file mode 100644
index 667d4c0..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/Hello.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.doc;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-
-public class Hello {
-    public static void main(String args[]) {
-        
-        System.out.println(Hello.class.getName() + " started");
-
-        // Create a SessionFactory and set up the SessionParameter map
-        SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
-        Map<String, String> parameter = new HashMap<String, String>();
-
-        // connection settings - we are connecting to a public cmis repo,
-        // using the AtomPUB binding
-        parameter.put(SessionParameter.ATOMPUB_URL, " http://repo.opencmis.org/inmemory/atom/");
-        parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
-
-        // find all the repositories at this URL - there should only be one.
-        List<Repository> repositories = new ArrayList<Repository>();
-        repositories = sessionFactory.getRepositories(parameter);
-        for (Repository r : repositories) {
-            System.out.println("Found repository: " + r.getName());
-        }
-
-        // create session with the first (and only) repository
-        Repository repository = repositories.get(0);
-        parameter.put(SessionParameter.REPOSITORY_ID, repository.getId());
-        Session session = sessionFactory.createSession(parameter);
-
-        System.out.println("Got a connection to repository: " + repository.getName() + ", with id: "
-                + repository.getId());
-
-        // Get everything in the root folder and print the names of the objects
-        Folder root = session.getRootFolder();
-        ItemIterable<CmisObject> children = root.getChildren();
-        System.out.println("Found the following objects in the root folder:-");
-        for (CmisObject o : children) {
-            System.out.println(o.getName());
-        }
-        
-        System.out.println(Hello.class.getName() + " ended");
-    }
-}
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/QueryTest.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/QueryTest.java
deleted file mode 100644
index 4359b84..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-hello/src/main/java/org/apache/chemistry/opencmis/doc/QueryTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.doc;

-

-import java.io.ByteArrayInputStream;

-import java.io.InputStream;

-import java.math.BigInteger;

-import java.util.ArrayList;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import org.apache.chemistry.opencmis.client.api.Document;

-import org.apache.chemistry.opencmis.client.api.Folder;

-import org.apache.chemistry.opencmis.client.api.ItemIterable;

-import org.apache.chemistry.opencmis.client.api.QueryResult;

-import org.apache.chemistry.opencmis.client.api.Repository;

-import org.apache.chemistry.opencmis.client.api.Session;

-import org.apache.chemistry.opencmis.client.api.SessionFactory;

-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.SessionParameter;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.enums.BindingType;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;

-

-public class QueryTest {

-    private static final String CMIS_ENDPOINT_TEST_SERVER = "http://localhost:8080/inmemory/atom";

-    private Session session;

-    

-    private void getCmisClientSession(){

-        // default factory implementation

-        SessionFactory factory = SessionFactoryImpl.newInstance();

-        Map<String, String> parameters = new HashMap<String, String>();

-        // user credentials

-        parameters.put(SessionParameter.USER, "dummyuser");

-        parameters.put(SessionParameter.PASSWORD, "dummysecret");

-        // connection settings

-        parameters.put(SessionParameter.ATOMPUB_URL, 

-                CMIS_ENDPOINT_TEST_SERVER );

-        parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB 

-                .value());

-        // create session

-        session =  factory.getRepositories(parameters).get(0).createSession();

-    }

-

-    public void createTestArea()

-            throws Exception

-            {

-

-        //creating a new folder

-        Folder root = session.getRootFolder();

-        Map<String, Object> folderProperties = new HashMap<String, Object>();

-        folderProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");

-        folderProperties.put(PropertyIds.NAME, "testdata");

-

-        Folder newFolder = root.createFolder(folderProperties);

-        //create a new content in the folder

-        String name = "testdata1.txt";

-        // properties

-        // (minimal set: name and object type id)

-        Map<String, Object> contentProperties = new HashMap<String, Object>();

-        contentProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");

-        contentProperties.put(PropertyIds.NAME, name);

-

-        // content

-        byte[] content = "CMIS Testdata One".getBytes();

-        InputStream stream = new ByteArrayInputStream(content);

-        ContentStream contentStream = new ContentStreamImpl(name, new BigInteger(content), "text/plain", stream);

-

-        // create a major version

-        Document newContent1 =  newFolder.createDocument(contentProperties, contentStream, null);

-        System.out.println("Document created: " + newContent1.getId());

-    }

-

-    private void doQuery() {

-        ItemIterable<QueryResult> results = session.query("SELECT * FROM cmis:folder WHERE cmis:name='testdata'", false);

-        for (QueryResult result : results) {

-            String id = result.getPropertyValueById(PropertyIds.OBJECT_ID);

-            System.out.println("doQuery() found id: " + id);

-        }

-    }

-    

-    public static void main(String args[]) {

-        QueryTest o = new QueryTest();

-        try {

-            o.getCmisClientSession();

-            o.createTestArea();

-            o.doQuery();

-        } catch (Exception e) {

-            e.printStackTrace();

-        }

-    }

-    

-    public static void xmain(String args[]) {

-        

-        System.out.println(Hello.class.getName() + " started");

-

-        // Create a SessionFactory and set up the SessionParameter map

-        SessionFactory sessionFactory = SessionFactoryImpl.newInstance();

-        Map<String, String> parameter = new HashMap<String, String>();

-

-        // connection settings - we're connecting to a public cmis repo,

-        // using the AtomPUB binding

-        parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:8080/inmemory/atom/");

-        parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());

-

-        // find all the repositories at this URL - there should only be one.

-        List<Repository> repositories = new ArrayList<Repository>();

-        repositories = sessionFactory.getRepositories(parameter);

-        for (Repository r : repositories) {

-            System.out.println("Found repository: " + r.getName());

-        }

-

-        // create session with the first (and only) repository

-        Repository repository = repositories.get(0);

-        parameter.put(SessionParameter.REPOSITORY_ID, repository.getId());

-        Session session = sessionFactory.createSession(parameter);

-

-        System.out.println("Got a connection to repository: " + repository.getName() + ", with id: "

-                + repository.getId());

-

-//        // Get everything in the root folder and print the names of the objects

-//        Folder root = session.getRootFolder();

-//        ItemIterable<CmisObject> children = root.getChildren();

-//        System.out.println("Found the following objects in the root folder:-");

-//        for (CmisObject o : children) {

-//            System.out.println(o.getName());

-//        }

-//        

-        System.out.println(QueryTest.class.getName() + " ended");

-    }

-}

diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/pom.xml b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/pom.xml
deleted file mode 100644
index 74431f9..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); you 
- may not use this file except in compliance with the License. You may obtain 
- a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
- required by applicable law or agreed to in writing, software distributed 
- under the License is distributed on an "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <!-- Project Information -->
-
-    <artifactId>chemistry-opencmis-queryparser-example</artifactId>
-    <name>Apache Chemistry OpenCMIS Query Parser Example</name>
-    
-    <packaging>jar</packaging>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-    
-    <build>
-        <plugins>
-
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt
deleted file mode 100644
index fe78cfb..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-Readme.txt chemistry-opencmis-queryparser-example
-=================================================
-
-This project is an example how to build a query parser using the OpenCMIS query framework.
-
-The example is standalone program that makes use of the AntLR based query parser. It 
-parses a CMIS query string and creates after traversing the syntax tree a new statement in
-CMIS query language. While this sounds pretty useless this sample still has value:
- - it is not dependent on any query language of a backend (like a database) or a 
-   specific database scheme.
- - it can be easily adapted to generate output in different format (SQL, XML, JSON)
- - it separates classes that can be reused from those that are specific to the output
-   language
- - it provides unit tests that can be adapted to other target languages.
-
-The sample provides code for the full cycle to parse and process a query. The entry point
-is a static main() method so that it runs standalone without any server. Usually this code
-will be called from the CMIS Discovery service in a real CMIS server.
-
-The code consists of the following classes:
-
-ExampleQueryProcessor.java:
-This is the main class. It takes a query and parses it. It traverses the generated tree
-and finally builds the output.
-
-ExampleQueryWalker.java:
-A walker that traverses the syntax tree and generates the CMISQL output. For each node in
-the tree callback functions are provided processing a specific token.
-
-ExampleTypeManager.java:
-An OpenCMIS parser processes the query and does certain checks for validity. To do this
-it needs information about the available types and properties in the backend. This 
-information is provided by the interface TypeManager. This class implements a minimal 
-type system to get a running sample. It has only one type implemented: cmis:document
-(note that this is not allowed for a real server according to the CMIS spec).
-
-ExtendedAbstractPredicateWalker.java
-This class extends the predefined walker from the server support package. It provides
-more fine grained control and more hooks to plugin while traversing the tree. This part
-is independent of the generated output and therefore separated in its own class. It may
-be reused for other projects.
-
-ExampleQueryProcessorTest.java
-A Junit test that feeds the parser with CMISQL queries and compares the generated output
-against an expected result. While the tests are specific to the output language the basic
-principles and design of the unit test can be done in the same way for other parsers.
-
-
-
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java
deleted file mode 100644
index 4aa2821..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.query.example;
-
-import java.util.List;
-import java.util.Map;
-
-import org.antlr.runtime.RecognitionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.query.CmisSelector;
-import org.apache.chemistry.opencmis.server.support.query.FunctionReference;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-
-/**
- * Main entry point for the parser example. It takes a CMISQL query as input,
- * parses it and generates again CMISQL as output when traversing the tree.
- * Runs standalone without a server. Usually this code would be called from
- * the CMIS Discovery Service in a CMIS server implementation.
- *
- */
-public class ExampleQueryProcessor {
-    
-    public static void main(String[] args) {
-        String query = "SELECT cmis:name AS name, cmis:objectTypeId, SCORE() FROM cmis:document WHERE cmis:name LIKE 'My%'";
-        ExampleQueryProcessor processor = new ExampleQueryProcessor();
-        System.out.println("Original CMISQL query: " + query);
-        String response = processor.parseQuery(query);
-        System.out.println("Generated CMISQL query: " +  response);
-    }
-    
-    public String parseQuery(String queryString) {
-        StringBuffer generatedResponse = new StringBuffer();
-        
-        // Instantiate a walker traversing the WHERE clause and generating the output string
-        ExampleQueryWalker walker = new ExampleQueryWalker();
-
-        // create type definitions, for this example we just create cmis:document
-        TypeManager typeManager = ExampleTypeManager.getInstance();
-
-        // create the parser helper class with type manager and walker
-        QueryUtilStrict queryUtil= new QueryUtilStrict(queryString, typeManager, walker);
-        try {
-            // parse the statement, then traverse it using out query walker
-            queryUtil.processStatement();
-            
-            QueryObject qo = queryUtil.getQueryObject();
-            
-            // The SELECT and FROM part is handled in the QueryObject, we just need to retrieve
-            // the results, and generte the SELECT string
-            String selFromPart = getSelectFromString(qo);
-            generatedResponse.append(selFromPart);
-            
-            // get the generated string from our query walker and append it
-            String whereClause = walker.getResult();
-            generatedResponse.append(whereClause);
-            
-            // The ORDER BY part is handled in the QueryObject, we just need to retrieve
-            // the results, and generte the ORDER BY string
-            generatedResponse.append(getOrderBy(qo));
-            
-            // Finally we have the full statement and return is as result
-            return generatedResponse.toString();
-            
-        } catch (RecognitionException e) {
-            String message = "Syntax error in query: " + queryUtil.getErrorMessage(e);
-            System.out.println(message);
-            throw new CmisInvalidArgumentException(message, e);
-        }
-    }
-
-    private String getSelectFromString(QueryObject qo) {
-        StringBuffer result = new StringBuffer();
-        result.append("SELECT");
-        List<CmisSelector> sels = qo.getSelectReferences();
-        boolean first = true;
-        for (CmisSelector sel : sels) {
-            if (first) {
-                first = false;
-                result.append(" ");
-            } else 
-                result.append(", ");
-
-            appendSelector(result, sel);                
-        }
-        
-        result.append(" FROM");
-        Map<String, String> froms = qo.getTypes();
-        first = true;
-        for(String from : froms.keySet()) {
-            if (first) {
-                first = false;
-                result.append(" ");
-            } else 
-                result.append(", ");
-            result.append(from);
-        }
-        result.append(" ");
-        return result.toString();
-    }
-
-    private void appendSelector(StringBuffer result, CmisSelector sel) {
-        result.append(sel.getName());
-        if (sel instanceof FunctionReference)
-            result.append("()");
-        
-        if (null != sel.getAliasName()) {
-            result.append(" AS ");
-            result.append(sel.getAliasName());
-        }
-    }
-    
-    private String getOrderBy(QueryObject qo) {
-        List<SortSpec> orderBys = qo.getOrderBys();
-        if (null == orderBys || orderBys.size() == 0) 
-            return "";
-        
-        StringBuffer result = new StringBuffer();
-        result.append(" ORDER BY");
-        boolean first = true;
-        for (SortSpec sp : orderBys) {
-            if (first) {
-                first = false;
-                result.append(" ");
-            } else 
-                result.append(", ");
-
-            CmisSelector sel = sp.getSelector();
-            appendSelector(result, sel);
-            if (!sp.ascending)
-                result.append(" DESC");
-        }
-        return result.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryWalker.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryWalker.java
deleted file mode 100644
index d57e260..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryWalker.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.query.example;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.server.support.query.StringUtil;
-import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
-
-/**
- * A class extending the {@link ExtendedAbstractPredicateWalker} class and generating
- * CMISQL strings as output while traversing the trees. On each hit of a certain
- * node or token the corresponding output of CMISQL is appended to a string
- * buffer.
- */
-public class ExampleQueryWalker extends ExtendedAbstractPredicateWalker {
-
-    private StringBuffer result = new StringBuffer();
-    
-    public String getResult() {
-        return result.toString();
-    }
-
-    @Override
-    public Boolean walkPredicate(Tree whereNode) {
-        if (null != whereNode) {
-            onStartProcessing(whereNode);
-            super.walkPredicate(whereNode);
-            onStopProcessing();
-        }
-        return null; // unused
-    }
-
-    @Override
-    public Boolean walkNot(Tree opNode, Tree node) {
-        onNot(opNode, node);
-        super.walkPredicate(node);
-        onPostNot(opNode, node);
-        return false;
-    }
-
-    @Override
-    public Boolean walkAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreAnd(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onAnd(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostAnd(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkOr(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreOr(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onOr(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostOr(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostEquals(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkNotEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreNotEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onNotEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostNotEquals(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkGreaterThan(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreGreaterThan(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onGreaterThan(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostGreaterThan(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkGreaterOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreGreaterOrEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onGreaterOrEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostGreaterOrEquals(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkLessThan(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreLessThan(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onLessThan(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostLessThan(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkLessOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        onPreLessOrEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(leftNode);
-        onLessOrEquals(opNode, leftNode, rightNode);
-        super.walkPredicate(rightNode);
-        onPostLessOrEquals(opNode, leftNode, rightNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkIn(Tree opNode, Tree colNode, Tree listNode) {
-        onPreIn(opNode, colNode, listNode);
-        super.walkPredicate(colNode);
-        onIn(opNode, colNode, listNode);
-        super.walkPredicate(listNode);
-        onPostIn(opNode, colNode, listNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkNotIn(Tree opNode, Tree colNode, Tree listNode) {
-        onPreNotIn(opNode, colNode, listNode);
-        super.walkPredicate(colNode);
-        onNotIn(opNode, colNode, listNode);
-        super.walkPredicate(listNode);
-        onPostNotIn(opNode, colNode, listNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkInAny(Tree opNode, Tree colNode, Tree listNode) {
-        onPreInAny(opNode, colNode, listNode);
-        super.walkPredicate(colNode);
-        onInAny(opNode, colNode, listNode);
-        super.walkPredicate(listNode);
-        onPostInAny(opNode, colNode, listNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkNotInAny(Tree opNode, Tree colNode, Tree listNode) {
-        onPreNotInAny(opNode, colNode, listNode);
-        super.walkPredicate(colNode);
-        onNotInAny(opNode, colNode, listNode);
-        super.walkPredicate(listNode);
-        onPostNotInAny(opNode, colNode, listNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkEqAny(Tree opNode, Tree literalNode, Tree colNode) {
-        onPreEqAny(opNode, literalNode, colNode);
-        super.walkPredicate(literalNode);
-        onEqAny(opNode, literalNode, colNode);
-        super.walkPredicate(colNode);
-        onPostEqAny(opNode, literalNode, colNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkIsNull(Tree opNode, Tree colNode) {
-        onIsNull(opNode, colNode);
-        super.walkPredicate(colNode);
-        onPostIsNull(opNode, colNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkIsNotNull(Tree opNode, Tree colNode) {
-        onIsNotNull(opNode, colNode);
-        super.walkPredicate(colNode);
-        onPostIsNotNull(opNode, colNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkLike(Tree opNode, Tree colNode, Tree stringNode) {
-        onPreIsLike(opNode, colNode, stringNode);
-        super.walkPredicate(colNode);
-        onIsLike(opNode, colNode, stringNode);
-        super.walkPredicate(stringNode);
-        onPostIsLike(opNode, colNode, stringNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkNotLike(Tree opNode, Tree colNode, Tree stringNode) {
-        onPreIsNotLike(opNode, colNode, stringNode);
-        super.walkPredicate(colNode);
-        onIsNotLike(opNode, colNode, stringNode);
-        super.walkPredicate(stringNode);
-        onPostIsNotLike(opNode, colNode, stringNode);
-        return false;
-    }
-
-    @Override
-    public Boolean walkContains(Tree opNode, Tree typeNode, Tree textSearchNode) {
-
-        onPreContains(opNode, typeNode, textSearchNode);
-        if (opNode.getChildCount() > 1) {
-            super.walkPredicate(typeNode);
-            onBetweenContains(opNode, typeNode, textSearchNode);
-        } else
-            result.append("'");
-        super.walkSearchExpr(textSearchNode);
-        onContains(opNode, typeNode, textSearchNode);
-        return false;                
-    }
-
-    @Override
-    public Boolean walkInFolder(Tree opNode, Tree typeNode, Tree paramNode) {
-        if (opNode.getChildCount() == 1) {
-            onInFolder(opNode, paramNode, null);
-            super.walkPredicate(paramNode);
-            onPostInFolder(opNode, paramNode, null);
-        } else {
-            onInFolder(opNode, typeNode, paramNode);
-            super.walkPredicate(typeNode);
-            onBetweenInFolder(opNode, typeNode, paramNode);
-            super.walkPredicate(paramNode);
-            onPostInFolder(opNode, typeNode, paramNode);
-        }
-        return false;
-    }
-
-    @Override
-    public Boolean walkInTree(Tree opNode, Tree typeNode, Tree paramNode) {
-        if (opNode.getChildCount() == 1) {
-            onInTree(opNode, paramNode, null);
-            super.walkPredicate(paramNode);
-            onPostInTree(opNode, paramNode, null);
-        } else {
-            onInTree(opNode, typeNode, paramNode);
-            super.walkPredicate(typeNode);
-            onBetweenInTree(opNode, typeNode, paramNode);
-            super.walkPredicate(paramNode);
-            onPostInTree(opNode, typeNode, paramNode);
-        }
-        return false;
-    }
-
-    @Override
-    public Object walkCol(Tree node) {
-        onColNode(node);
-        return null;
-    }
-
-    @Override
-    public Object walkId(Tree node) {
-        return onId(node);
-    }
-    
-    @Override
-    public Boolean walkScore(Tree node) {
-        onScore(node);
-        return false;
-    }
-    
-    @Override
-    protected Boolean walkTextAnd(Tree node) {
-        List<Tree> children = getChildrenAsList(node);
-        onPreTextAnd(node, children);
-        int i=0;
-        for (Tree child : children) {
-            walkSearchExpr(child);
-            onTextAnd(node, children, i++);
-        }
-        onPostTextAnd(node, children);
-        return false;
-    }
-    
-    @Override
-    protected Boolean walkTextOr(Tree node) {
-        List<Tree> children = getChildrenAsList(node);
-        onPreTextOr(node, children);
-        int j=0;
-        for (Tree child : children) {
-            walkSearchExpr(child);
-            onTextOr(node, children, j++);
-        }
-        onPostTextOr(node, children);
-        return false;
-    }
-    
-    @Override
-    protected Boolean walkTextMinus(Tree node) {
-        onTextMinus(node, node.getChild(0));
-        walkSearchExpr(node.getChild(0));
-        onPostTextMinus(node, node.getChild(0));
-        return false;
-    }
-    
-    @Override
-    protected Boolean walkTextWord(Tree node) {
-        onTextWord(onTextLiteral(node));
-        return false;
-    }
-    
-    @Override
-    protected Boolean walkTextPhrase(Tree node) {
-        onTextPhrase(onTextLiteral(node));
-        return false;
-    }
-    
-    @Override
-    public Object walkBoolean(Tree node) {
-        Object obj = super.walkNumber(node);
-        result.append(obj);
-        return obj;
-    }
-
-    @Override
-    public Object walkNumber(Tree node) {
-        Object obj = super.walkNumber(node);
-        result.append(obj);
-        return obj;
-    }
-
-    @Override
-    public Object walkString(Tree node) {
-        String val =  "'" + super.walkString(node) + "'";
-        result.append(val);
-        return val;
-    }
-
-    @Override
-    public Object walkTimestamp(Tree node) {
-        String s = (String) super.walkTimestamp(node);
-        result.append(s);
-        return s;
-    }
-
-    @Override
-    public Object walkList(Tree node) {
-        result.append("(");
-        int n = node.getChildCount();
-        boolean first = true;
-        List<Object> res = new ArrayList<Object>(n);
-        for (int i = 0; i < n; i++) {
-            Object o = node.getChild(i);
-            if (first)
-                first = false;
-            else
-                result.append(", ");
-            result.append(o.toString());
-        }
-        
-        result.append(")");
-
-        return res;
-    }
-    
-    private void endSubExpr() {
-        result.append(")");        
-    }
-
-    private void startSubExpr() {
-        result.append("(");        
-    }
-
-    @Override
-    protected void onStartProcessing(Tree whereNode) {
-        result.append("WHERE ");        
-    }
-
-    @Override
-    protected void onStopProcessing() {
-    }
-
-    @Override
-    protected void onPreEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-        startSubExpr();
-    }
-    
-    @Override
-    protected void onEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-        result.append(" = ");
-    }
-
-    @Override
-    protected void onPostEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-        endSubExpr();
-    }
-
-    @Override
-    protected void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {
-        result.append(" <> ");
-    }
-
-    @Override
-    protected void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {
-        result.append(" > ");
-    }
-
-    @Override
-    protected void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {
-        result.append(" >= ");
-    }
-
-    @Override
-    protected void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {
-        result.append(" < ");
-    }
-
-    @Override
-    protected void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {
-        result.append(" <= ");
-    }
-
-    @Override
-    protected void onNot(Tree opNode, Tree leftNode) {
-        result.append("NOT (");
-    }
-
-    @Override
-    protected void onPostNot(Tree opNode, Tree leftNode) {
-        endSubExpr();
-    }
-
-    @Override
-    protected void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-        startSubExpr();
-    }
-    
-    @Override
-    protected void onAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-        result.append(" AND ");
-    }
-    
-    @Override
-    protected void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-        endSubExpr();
-    }
-
-    @Override
-    protected void onPreOr(Tree opNode, Tree leftNode, Tree rightNode) {
-        startSubExpr();
-    }
-    
-    @Override
-    protected void onOr(Tree opNode, Tree leftNode, Tree rightNode) {
-        result.append(" OR ");
-    }
-
-    @Override
-    protected void onPostOr(Tree opNode, Tree leftNode, Tree rightNode) {
-        endSubExpr();
-    }
-    
-    @Override
-    protected void onIn(Tree node, Tree colNode, Tree listNode) {
-        result.append(" IN ");
-    }
-
-    @Override
-    protected void onNotIn(Tree node, Tree colNode, Tree listNode) {
-        result.append(" NOT IN ");
-    }
-
-    @Override
-    protected void onPreInAny(Tree node, Tree colNode, Tree listNode) {
-        result.append("ANY ");
-    }
-    
-    @Override
-    protected void onInAny(Tree node, Tree colNode, Tree listNode) {
-        result.append(" IN ");
-    }
-
-    @Override
-    protected void onPreNotInAny(Tree node, Tree colNode, Tree listNode) {
-        result.append("ANY ");
-    }
-
-    @Override
-    protected void onNotInAny(Tree node, Tree colNode, Tree listNode) {
-        result.append(" NOT IN ");
-    }
-
-    @Override
-    protected void onEqAny(Tree node, Tree literalNode, Tree colNode) {
-        result.append(" = ANY ");
-    }
-
-    @Override
-    protected void onIsNull(Tree nullNode, Tree colNode) {
-    }
-
-    @Override
-    protected void onPostIsNull(Tree nullNode, Tree colNode) {
-        result.append(" IS NULL");
-    }
-
-    @Override
-    protected void onIsNotNull(Tree notNullNode, Tree colNode) {
-    }
-
-    @Override
-    protected void onPostIsNotNull(Tree notNullNode, Tree colNode) {
-        result.append(" IS NOT NULL");
-    }
-    
-    @Override
-    protected void onPreIsLike(Tree node, Tree colNode, Tree stringNode) {
-        startSubExpr();
-    }
-
-    @Override
-    protected void onIsLike(Tree node, Tree colNode, Tree stringNode) {
-        result.append(" LIKE ");
-    }
-
-    @Override
-    protected void onPostIsLike(Tree node, Tree colNode, Tree stringNode) {
-        endSubExpr();
-    }
-
-    @Override
-    protected void onIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-        result.append(" NOT LIKE ");
-    }
-
-    @Override
-    protected void onInFolder(Tree node, Tree colNode, Tree paramNode) {
-        result.append("IN_FOLDER(");
-    }
-    
-    protected void onBetweenInFolder(Tree node, Tree colNode, Tree paramNode) {
-        result.append(", ");
-    }
-
-    @Override
-    protected void onPostInFolder(Tree node, Tree colNode, Tree paramNode) {
-        result.append(")");
-    }
-
-    @Override
-    protected void onInTree(Tree node, Tree colNode, Tree paramNode) {
-        result.append("IN_TREE(");
-    }
-
-    @Override
-    protected void onBetweenInTree(Tree node, Tree colNode, Tree paramNode) {
-        result.append(", ");
-    }
-    
-    @Override
-    protected void onPostInTree(Tree node, Tree colNode, Tree paramNode) {
-        result.append(")");
-    }
-    
-    @Override
-    protected void onScore(Tree node) {
-        result.append("SCORE()");
-    }
-
-    @Override
-    protected void onColNode(Tree node) {
-        result.append(node.getChild(0).getText());
-    }
-
-    @Override
-    protected void onPreContains(Tree node, Tree typeNode, Tree searchExprNode) {
-        result.append("CONTAINS(");
-    }
-    
-    @Override
-    protected void onBetweenContains(Tree node, Tree typeNode, Tree searchExprNode) {
-        result.append(", '");
-    }
-   
-    @Override
-    protected void onContains(Tree node, Tree typeNode, Tree searchExprNode) {
-        result.append("')");
-    }
-
-    @Override
-    protected void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index) {
-        if (index < conjunctionNodes.size()-1)
-            result.append(" ");        
-    }
-
-    @Override
-    protected void onTextOr(Tree node, List<Tree> termNodes, int index) {
-        if (index < termNodes.size()-1)
-            result.append(" OR ");        
-    }
-
-    @Override
-    protected void onTextMinus(Tree node, Tree notNode) {
-        result.append("-");        
-    }
-
-    @Override
-    protected void onTextWord(String word) {
-        result.append(word);        
-    }
-
-    @Override
-    protected void onTextPhrase(String phrase) {
-       result.append("\\'" + phrase + "\\'");
-    } 
-
-    private String onId(Tree node) {
-        String id = node.getText();
-        result.append(id);
-        return id;
-    }
-    
-    private List<Tree> getChildrenAsList(Tree node) {
-        List<Tree> res = new ArrayList<Tree>(node.getChildCount());
-        for (int i=0; i<node.getChildCount(); i++) {
-            Tree childNnode =  node.getChild(i);
-            res.add(childNnode);
-        }
-        return res;
-    }
-    
-    protected String onTextLiteral(Tree node) {
-        int type = node.getType();
-        String text = node.getText();
-        switch (type) {
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-            return StringUtil.unescape(text.substring(1, text.length()-1), null);
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            return StringUtil.unescape(text, null);
-        default:
-            throw new RuntimeException("Unknown text literal. " + node);
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleTypeManager.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleTypeManager.java
deleted file mode 100644
index 07f8c96..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleTypeManager.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.query.example;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * This class implements a minmimal type system for the example parser
- * consisting of a single type cmis:document. An implementation of the
- * interface TypeManager must be provided to use the parser framework.
- * 
- * @see org.apache.chemistry.opencmis.server.support.TypeManager
- */
-public class ExampleTypeManager implements TypeManager {
-    
-    private static ExampleTypeManager INSTANCE = new ExampleTypeManager();
-    
-    DocumentTypeDefinition cmisDocumentType;
-    TypeDefinitionContainerImpl cmisDocumentTypeContainer;
-    
-    public static TypeManager getInstance() {
-        return INSTANCE;
-    }
-    
-    private ExampleTypeManager() {
-        cmisDocumentType = createDocumentTypeDefinition();
-        cmisDocumentTypeContainer = new TypeDefinitionContainerImpl(cmisDocumentType);
-
-    }
-    
-    public TypeDefinitionContainer getTypeById(String typeId) {
-        if (BaseTypeId.CMIS_DOCUMENT.value().equals(typeId))
-            return cmisDocumentTypeContainer;
-        else
-            return null;
-    }
-
-    public TypeDefinition getTypeByQueryName(String typeQueryName) {
-        if (BaseTypeId.CMIS_DOCUMENT.value().equals(typeQueryName))
-            return cmisDocumentTypeContainer.getTypeDefinition();
-        else
-            return null;
-    }
-
-    public Collection<TypeDefinitionContainer> getTypeDefinitionList() {
-        TypeDefinitionContainer tdc = cmisDocumentTypeContainer;
-        return Collections.singletonList(tdc);        
-    }
-
-    public List<TypeDefinitionContainer> getRootTypes() {
-        TypeDefinitionContainer tdc = cmisDocumentTypeContainer;
-        return Collections.singletonList(tdc);        
-    }
-
-    public String getPropertyIdForQueryName(TypeDefinition typeDefinition, String propQueryName) {
-        for (PropertyDefinition<?> pd : typeDefinition.getPropertyDefinitions().values()) {
-            if (pd.getQueryName().equals(propQueryName)) {
-                return pd.getId();
-            }
-        }
-        return null;
-    }
-
-    private static DocumentTypeDefinition createDocumentTypeDefinition() {
-        
-        DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
-        typeDef.setBaseTypeId(BaseTypeId.CMIS_DOCUMENT);
-        typeDef.setId(BaseTypeId.CMIS_DOCUMENT.value());
-        typeDef.setDisplayName("CMIS Document");
-        // create some suitable defaults for convenience
-        typeDef.setDescription("Description of CMIS Document Type");
-        typeDef.setLocalName(typeDef.getDisplayName());
-        typeDef.setLocalNamespace("local");
-        typeDef.setQueryName(typeDef.getId());
-        typeDef.setIsControllableAcl(true);
-        typeDef.setIsControllablePolicy(false);
-        typeDef.setIsCreatable(true);
-        typeDef.setIsFileable(true);
-        typeDef.setIsFulltextIndexed(false);
-        typeDef.setIsIncludedInSupertypeQuery(true);
-        typeDef.setIsQueryable(true);
-
-        TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
-        typeMutability.setCanCreate(true);
-        typeMutability.setCanDelete(false);
-        typeMutability.setCanUpdate(false);
-        typeDef.setTypeMutability (typeMutability);
-
-
-        // document specifics:
-        typeDef.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-        typeDef.setIsVersionable(false);
-        
-        Map<String, PropertyDefinition<?>> props = new HashMap<String, PropertyDefinition<?>>();
-        setBasicDocumentPropertyDefinitions(props);
-        typeDef.setPropertyDefinitions(props); // set initial empty set of properties
-
-        return typeDef;
-    }
-
-
-    private static void setBasicDocumentPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-        
-        setBasicPropertyDefinitions(propertyDefinitions);
-        PropertyBooleanDefinitionImpl propB = createBooleanDefinition(PropertyIds.IS_IMMUTABLE,
-                "Immutable", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = createBooleanDefinition(PropertyIds.IS_LATEST_VERSION,
-                "Is Latest Version", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = createBooleanDefinition(PropertyIds.IS_MAJOR_VERSION,
-                "Is Major Version", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = createBooleanDefinition(PropertyIds.IS_LATEST_MAJOR_VERSION,
-                "Is Latest Major Version", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        PropertyStringDefinitionImpl propS = createStringDefinition(PropertyIds.VERSION_LABEL,
-                "Version Label", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIdDefinitionImpl propId = createIdDefinition(PropertyIds.VERSION_SERIES_ID,
-                "Version Series Id", Updatability.READONLY);
-        propId.setIsQueryable(false);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propB = createBooleanDefinition(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                "Checked Out", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propS = createStringDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                "Checked Out By", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = createIdDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                "Checked Out Id", Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propS = createStringDefinition(PropertyIds.CHECKIN_COMMENT,
-                "Checkin Comment", Updatability.READONLY);
-        // read-only, because
-        // not set as property
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIntegerDefinitionImpl propI = createIntegerDefinition(
-                PropertyIds.CONTENT_STREAM_LENGTH, "Content Length", Updatability.READONLY);
-        propertyDefinitions.put(propI.getId(), propI);
-
-        propS = createStringDefinition(PropertyIds.CONTENT_STREAM_MIME_TYPE,
-                "Mime Type", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propS = createStringDefinition(PropertyIds.CONTENT_STREAM_FILE_NAME,
-                "File Name", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = createIdDefinition(PropertyIds.CONTENT_STREAM_ID, "Stream Id", Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        // CMIS 1.1:
-        propB = createBooleanDefinition(PropertyIds.IS_PRIVATE_WORKING_COPY, "Private Working Copy", 
-                Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propertyDefinitions.put(propS.getId(), propS);
-    }
-    
-    static void setBasicPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        PropertyStringDefinitionImpl propS = createStringDefinition(PropertyIds.NAME,
-                "Name", Updatability.READWRITE);
-        propS.setIsRequired(true);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIdDefinitionImpl propId = createIdDefinition(PropertyIds.OBJECT_ID,
-                "Object Id", Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = createIdDefinition(PropertyIds.OBJECT_TYPE_ID, "Type-Id", Updatability.ONCREATE);
-        propId.setIsRequired(true);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = createIdDefinition(PropertyIds.BASE_TYPE_ID, "Base-Type-Id", Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propS = createStringDefinition(PropertyIds.CREATED_BY, "Created By", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyDateTimeDefinitionImpl propD = createDateTimeDefinition(
-                PropertyIds.CREATION_DATE, "Creation Date", Updatability.READONLY);
-        propertyDefinitions.put(propD.getId(), propD);
-
-        propS = createStringDefinition(PropertyIds.LAST_MODIFIED_BY,
-                "Modified By", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propD = createDateTimeDefinition(PropertyIds.LAST_MODIFICATION_DATE,
-                "Modification Date", Updatability.READONLY);
-        propertyDefinitions.put(propD.getId(), propD);
-
-        propS = createStringDefinition(PropertyIds.CHANGE_TOKEN, "Change Token", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        // CMIS 1.1:
-        propS = createStringDefinition(PropertyIds.DESCRIPTION, "Description", Updatability.READWRITE);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = createIdMultiDefinition(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, "Secondary Type Ids",
-                Updatability.READWRITE);
-        propertyDefinitions.put(propId.getId(), propId);
-    }
-
-    private static void createStandardDefinition(AbstractPropertyDefinition<?> prop, String id, PropertyType propType,
-            String displayName, Cardinality card, Updatability upd) {
-
-            prop.setId(id);
-        if (displayName == null) {
-            prop.setDisplayName("Sample " + prop.getId() + " boolean property");
-        } else {
-            prop.setDisplayName(displayName);
-        }
-        prop.setDescription("This is a " + prop.getDisplayName() + " property.");
-        prop.setLocalName(id);
-        prop.setLocalNamespace("local");
-        prop.setQueryName(id);
-        prop.setIsInherited(false);
-        prop.setCardinality(card);
-        prop.setIsOpenChoice(false);
-        prop.setIsQueryable(true);
-        prop.setIsRequired(false);
-        prop.setIsOrderable(true);
-        prop.setPropertyType(propType);
-        prop.setUpdatability(upd);
-    }
-
-    private static PropertyBooleanDefinitionImpl createBooleanDefinition(String id, String displayName, Updatability upd) {
-        PropertyBooleanDefinitionImpl prop = new PropertyBooleanDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.BOOLEAN, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    private static PropertyDateTimeDefinitionImpl createDateTimeDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyDateTimeDefinitionImpl prop = new PropertyDateTimeDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.DATETIME, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    private static PropertyIdDefinitionImpl createIdDefinition(String id, String displayName, Updatability upd) {
-        PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyIdDefinitionImpl createIdMultiDefinition(String id, String displayName, Updatability upd) {
-        PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyIntegerDefinitionImpl createIntegerDefinition(String id, String displayName, Updatability upd) {
-        PropertyIntegerDefinitionImpl prop = new PropertyIntegerDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.INTEGER, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    private static PropertyStringDefinitionImpl createStringDefinition(String id, String displayName, Updatability upd) {
-        PropertyStringDefinitionImpl prop = new PropertyStringDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.STRING, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExtendedAbstractPredicateWalker.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExtendedAbstractPredicateWalker.java
deleted file mode 100644
index 4f5649e..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExtendedAbstractPredicateWalker.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.query.example;
-
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.server.support.query.AbstractPredicateWalker;
-
-/**
- * An extended walker approach with more fine grained control and more callback
- * hooks. This class is independent of the target output.
- *
- */
-public abstract class ExtendedAbstractPredicateWalker extends AbstractPredicateWalker {
-
-    protected abstract void onStartProcessing(Tree whereNode);
-    protected abstract void onStopProcessing();
-
-    // Compare operators
-    protected void onPreEquals(Tree eqNode, Tree leftNode, Tree rightNode) {        
-    }
-    protected abstract void onEquals(Tree eqNode, Tree leftNode, Tree rightNode);
-    protected void onPostEquals(Tree eqNode, Tree leftNode, Tree rightNode) {        
-    }
-
-    protected void onPreNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {        
-    }
-    protected abstract void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode);
-    protected void onPostNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {        
-    }
- 
-    protected void onPreGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {        
-    }
-    protected abstract void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);
-    protected void onPostGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {        
-    }
-
-    protected void onPreGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {        
-    }
-    protected abstract void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);
-    protected void onPostGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {        
-    }
-
-    protected void onPreLessThan(Tree ltNode, Tree leftNode, Tree rightNode)  {        
-    }
-    protected abstract void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode);
-    protected void onPostLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {        
-    }
-
-    protected void onPreLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {        
-    }
-    protected abstract void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);
-    protected void onPostLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {        
-    }
-
-    // Boolean operators
-    protected abstract void onNot(Tree opNode, Tree leftNode);
-    protected void onPostNot(Tree opNode, Tree leftNode) {
-    }
-    protected void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-    protected abstract void onAnd(Tree opNode, Tree leftNode, Tree rightNode);
-    protected void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-    protected void onPreOr(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-    protected abstract void onOr(Tree opNode, Tree leftNode, Tree rightNode);
-    protected void onPostOr(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-
-    // Multi-value:
-    protected void onPreIn(Tree node, Tree colNode, Tree listNode) {        
-    }
-    protected abstract void onIn(Tree node, Tree colNode, Tree listNode);
-    protected void onPostIn(Tree node, Tree colNode, Tree listNode) {        
-    }
-
-    protected void onPreNotIn(Tree node, Tree colNode, Tree listNode) {        
-    }
-    protected abstract void onNotIn(Tree node, Tree colNode, Tree listNode);
-    protected void onPostNotIn(Tree node, Tree colNode, Tree listNode) {        
-    }
-
-    protected void onPreInAny(Tree node, Tree colNode, Tree listNode) {        
-    }
-    protected abstract void onInAny(Tree node, Tree colNode, Tree listNode);
-    protected void onPostInAny(Tree node, Tree colNode, Tree listNode) {        
-    }
-
-    protected void onPreNotInAny(Tree node, Tree colNode, Tree listNode) {        
-    }
-    protected abstract void onNotInAny(Tree node, Tree literalNode, Tree colNode);
-    protected void onPostNotInAny(Tree node, Tree colNode, Tree listNode) {        
-    }
-    
-    protected void onPreEqAny(Tree node, Tree literalNode, Tree colNode) {
-    }
-    protected abstract void onEqAny(Tree node, Tree literalNode, Tree colNode);
-    protected void onPostEqAny(Tree node, Tree literalNode, Tree colNode) {        
-    }
-
-    // Null comparisons:
-    protected abstract void onIsNull(Tree nullNode, Tree colNode);
-    protected void onPostIsNull(Tree nullNode, Tree colNode) {
-    }
-
-    protected abstract void onIsNotNull(Tree notNullNode, Tree colNode);
-    protected void onPostIsNotNull(Tree notNullNode, Tree colNode) {
-    }
-    
-    // String matching:
-    protected void onPreIsLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-    protected abstract void onIsLike(Tree node, Tree colNode, Tree stringNode);
-    protected void onPostIsLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected void onPreIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-    protected abstract void onIsNotLike(Tree node, Tree colNode, Tree stringNode);
-    protected void onPostIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected abstract void onInFolder(Tree node, Tree colNode, Tree paramNode);
-    protected void onBetweenInFolder(Tree node, Tree colNode, Tree paramNode) {
-    }
-    protected void onPostInFolder(Tree node, Tree colNode, Tree paramNode) {
-    }
-
-    protected abstract void onInTree(Tree node, Tree colNode, Tree paramNode);
-    protected void onBetweenInTree(Tree node, Tree colNode, Tree paramNode) {
-    }
-    protected void onPostInTree(Tree node, Tree colNode, Tree paramNode) {
-    }
-    
-    protected abstract void onScore(Tree node);
-    protected abstract void onColNode(Tree node);
-    
-    protected void onPreTextAnd(Tree node, List<Tree> conjunctionNodes) {
-    }
-    protected abstract void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index);
-    protected void onPostTextAnd(Tree node, List<Tree> conjunctionNodes) {
-    }
-    protected void onPreTextOr(Tree node, List<Tree> termNodes) {
-    }
-    protected abstract void onTextOr(Tree node, List<Tree> termNodes, int index);
-    protected void onPostTextOr(Tree node, List<Tree> termNodes) {
-    }
-    protected abstract void onTextMinus(Tree node, Tree notNode);
-    protected void onPostTextMinus(Tree node, Tree notNode) {        
-    }
-    protected abstract void onTextWord(String word);
-    protected abstract void onTextPhrase(String phrase);
-    
-    protected void onPreContains(Tree node, Tree typeNode, Tree searchExprNode) {        
-    }
-    
-    protected abstract void onContains(Tree node, Tree typeNode, Tree searchExprNode);
-    
-    protected void onBetweenContains(Tree node, Tree typeNode, Tree searchExprNode) {        
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java b/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java
deleted file mode 100644
index 04d017f..0000000
--- a/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.query.example;
-
-import static org.junit.Assert.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit test for the sample parser. Calls the main entry point and compares output
- * against the expected result.
- *
- */
-public class ExampleQueryProcessorTest {
-    
-    private ExampleQueryProcessor queryProcessor;
-    private String queryPrefix = "SELECT cmis:name, cmis:objectId FROM cmis:document WHERE ";
-    private String expectedPrefix = "SELECT cmis:name, cmis:objectId FROM cmis:document WHERE ";
-    
-    @Before
-    public void setUp() {
-        queryProcessor = new ExampleQueryProcessor();
-    }
-    
-    @Test 
-    public void testEquals() {
-        String queryString = queryPrefix + "cmis:name = 'MyDocument'";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "(cmis:name = 'MyDocument')";
-        assertEquals(expected, response);
-        
-        queryString = queryPrefix + "SCORE() = 100";
-        response = queryProcessor.parseQuery(queryString);
-        expected = expectedPrefix + "(SCORE() = 100)";
-        assertEquals(expected, response);
-    }
-    
-    @Test
-    public void testNotEquals() {
-        String queryString = queryPrefix + "cmis:name <> 'MyDocument'";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:name <> 'MyDocument'";
-        assertEquals(expected, response);        
-    }
-    
-    @Test
-    public void testLessThan() {
-        String queryString = queryPrefix + "cmis:contentStreamLength < 1048576";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:contentStreamLength < 1048576";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testGreaterThan() {
-        String queryString = queryPrefix + "cmis:contentStreamLength > 1048576";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:contentStreamLength > 1048576";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testLessOrEquals() {
-        String queryString = queryPrefix + "cmis:contentStreamLength <= 1048576";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:contentStreamLength <= 1048576";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testGreaterOrEquals() {
-        String queryString = queryPrefix + "cmis:contentStreamLength >= 1048576";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:contentStreamLength >= 1048576";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testIn() {
-        String queryString = queryPrefix + "cmis:name IN ('MyDocument', 'YourDocument')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:name IN ('MyDocument', 'YourDocument')";
-        assertEquals(expected, response);        
-    }
-    
-    @Test
-    public void testNotIn() {
-        String queryString = queryPrefix + "cmis:name NOT IN ('MyDocument', 'YourDocument')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:name NOT IN ('MyDocument', 'YourDocument')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testAnyIn() {
-        String queryString = queryPrefix + "ANY cmis:secondaryObjectTypeIds IN ('MySecondaryType', 'YourSecondaryType')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "ANY cmis:secondaryObjectTypeIds IN ('MySecondaryType', 'YourSecondaryType')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testAnyNotIn() {
-        String queryString = queryPrefix + "ANY cmis:secondaryObjectTypeIds NOT IN ('MySecondaryType', 'YourSecondaryType')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "ANY cmis:secondaryObjectTypeIds NOT IN ('MySecondaryType', 'YourSecondaryType')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testEqAny() {
-        String queryString = queryPrefix + "'MySecondaryType' = ANY cmis:secondaryObjectTypeIds";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "'MySecondaryType' = ANY cmis:secondaryObjectTypeIds";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testIsNull() {
-        String queryString = queryPrefix + "cmis:description IS NULL";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:description IS NULL";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testIsNotNull() {
-        String queryString = queryPrefix + "cmis:description IS NOT NULL";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:description IS NOT NULL";
-        assertEquals(expected, response);        
-    }
-    
-    @Test 
-    public void testLike() {
-        String queryString = "SELECT cmis:name AS name, cmis:objectTypeId, SCORE() FROM cmis:document WHERE cmis:name LIKE 'My%'";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = "SELECT cmis:name AS name, cmis:objectTypeId, SCORE() FROM cmis:document WHERE (cmis:name LIKE 'My%')";
-        assertEquals(expected, response);
-    }
-
-    @Test
-    public void testNotLike() {
-        String queryString = queryPrefix + "cmis:name NOT LIKE 'My%'";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "cmis:name NOT LIKE 'My%'";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testInFolder() {
-        String queryString = queryPrefix + "IN_FOLDER('100')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "IN_FOLDER('100')";
-        assertEquals(expected, response);        
-
-        queryString = queryPrefix + "IN_FOLDER(cmis:document, '100')";
-        response = queryProcessor.parseQuery(queryString);
-        expected = expectedPrefix + "IN_FOLDER(cmis:document, '100')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testInTree() {
-        String queryString = queryPrefix + "IN_TREE('100')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "IN_TREE('100')";
-        assertEquals(expected, response);        
-
-        queryString = queryPrefix + "IN_TREE(cmis:document, '100')";
-        response = queryProcessor.parseQuery(queryString);
-        expected = expectedPrefix + "IN_TREE(cmis:document, '100')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testAnd() {
-        String queryString = queryPrefix + "cmis:name NOT LIKE 'My*' AND cmis:description IS NULL";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "(cmis:name NOT LIKE 'My*' AND cmis:description IS NULL)";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testOr() {
-        String queryString = queryPrefix + "cmis:name NOT LIKE 'My*' OR cmis:description IS NULL";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "(cmis:name NOT LIKE 'My*' OR cmis:description IS NULL)";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testNot() {
-        String queryString = queryPrefix + "NOT IN_FOLDER('100')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "NOT (IN_FOLDER('100'))";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testContains() {
-        String queryString = queryPrefix + "CONTAINS('Foo')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('Foo')";
-        assertEquals(expected, response);
-        
-        queryString = queryPrefix + "CONTAINS(cmis:document, 'Foo')";
-        response = queryProcessor.parseQuery(queryString);
-        expected = expectedPrefix + "CONTAINS(cmis:document, 'Foo')";
-        assertEquals(expected, response);
-    }
-
-    @Test
-    public void testTextAnd() {
-        String queryString = queryPrefix + "CONTAINS('abc def')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('abc def')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testTextOr() {
-        String queryString = queryPrefix + "CONTAINS('abc OR def')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('abc OR def')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testTextMinus() {
-        String queryString = queryPrefix + "CONTAINS('abc -def')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('abc -def')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testPhrase() {
-        String queryString = queryPrefix + "CONTAINS('\\'abc\\'')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('\\'abc\\'')";
-        assertEquals(expected, response);        
-    }
-
-    @Test
-    public void testWord() {
-        String queryString = queryPrefix + "CONTAINS('Foo')";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "CONTAINS('Foo')";
-        assertEquals(expected, response);        
-    }
-
-    @Test 
-    public void testOrderBy() {
-        String queryString = queryPrefix + "cmis:name = 'MyDocument' ORDER BY cmis:objectId";
-        String response = queryProcessor.parseQuery(queryString);
-        String expected = expectedPrefix + "(cmis:name = 'MyDocument') ORDER BY cmis:objectId";
-        assertEquals(expected, response);
-        
-        queryString = queryPrefix + "cmis:name = 'MyDocument' ORDER BY cmis:name ASC, cmis:objectId DESC";
-        response = queryProcessor.parseQuery(queryString);
-        expected = expectedPrefix + "(cmis:name = 'MyDocument') ORDER BY cmis:name, cmis:objectId DESC";
-        assertEquals(expected, response);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/pom.xml
deleted file mode 100644
index fa513df..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-archetype</artifactId>
-    <name>OpenCMIS Server Archetype</name>
-    <packaging>maven-archetype</packaging>
-    <description>OpenCMIS Server Framework archetype</description>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-        <opencmisVersion>${project.version}</opencmisVersion>
-    </properties>
-
-    <build>   
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>archetype-resources/pom.xml</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>false</filtering>
-                <excludes>
-                    <exclude>archetype-resources/pom.xml</exclude>
-                </excludes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>2.2</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>integration-test</id>
-                        <goals>
-                            <goal>integration-test</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <version>2.6</version>
-                    <configuration>
-                         <escapeString>\</escapeString>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index f7fc98b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
-        specific language governing permissions and limitations under the License.
-    -->
-
-<archetype-descriptor name="OpenCMIS Server Framework">
-
-    <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/main/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/webapp</directory>
-            <includes>
-                 <include>**/*.properties</include>
-                 <include>**/*.xml</include>
-                 <include>**/*.wsdl</include>
-                 <include>**/*.jsp</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-    <requiredProperties>
-        <requiredProperty key="projectPrefix"/>
-    </requiredProperties>
-
-</archetype-descriptor>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 6417aad..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>\${groupId}</groupId>
-    <artifactId>\${artifactId}</artifactId>
-    <version>\${version}</version>
-    <packaging>war</packaging>
-
-    <properties>
-        <opencmis.version>${opencmisVersion}</opencmis.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <name>Your OpenCMIS Server</name>
-
-    <build>
-        <plugins>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.0</version>
-                <configuration>
-                    <target>1.6</target>
-                    <source>1.6</source>
-                    <encoding>UTF-8</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.3</version>
-                <configuration>
-                    <overlays>
-                        <overlay></overlay>
-                        <overlay>
-                            <groupId>org.apache.chemistry.opencmis</groupId>
-                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-                            <excludes>
-                                <!-- exclude everything you don't need -->
-                                <exclude>index.html</exclude> <!-- default index page -->
-                                <exclude>css/**</exclude> <!-- CSS for the default index page -->
-                                <exclude>images/**</exclude> <!-- images for the default index page -->
-                                <exclude>web/**</exclude> <!-- sample JavaScript application -->
-                                <exclude>WEB-INF/classes/sample-repository.properties</exclude> <!-- sample server properties file -->
-                                <exclude>WEB-INF/token/**</exclude> <!-- sample Browser Binding token implementation -->
-                            </excludes>
-                            <includes>
-                                <include>**</include>
-                                <include>META-INF/THIRD-PARTY-LICENSES</include>
-                            </includes>
-                        </overlay>
-                    </overlays>
-                    <archive>
-                        <manifestEntries>
-                            <DisableIBMJAXWSEngine>true</DisableIBMJAXWSEngine>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-eclipse-plugin</artifactId>
-                <version>2.9</version>
-                <configuration>
-                    <wtpversion>2.0</wtpversion>
-                    <wtpContextName>\${artifactId}</wtpContextName>
-                    <downloadSources>true</downloadSources>
-                    <downloadJavadocs>true</downloadJavadocs>
-                    <linkedResources>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/sun-jaxws.xml</name>
-                            <type>1</type>
-                            <location>PROJECT_LOC/target/\${project.build.finalName}/WEB-INF/sun-jaxws.xml</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/web.xml</name>
-                            <type>1</type>
-                            <location>PROJECT_LOC/target/\${project.build.finalName}/WEB-INF/web.xml</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/cmis10</name>
-                            <type>2</type>
-                            <location>PROJECT_LOC/target/\${project.build.finalName}/WEB-INF/cmis10</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/cmis11</name>
-                            <type>2</type>
-                            <location>PROJECT_LOC/target/\${project.build.finalName}/WEB-INF/cmis11</location>
-                        </linkedResource>
-                    </linkedResources>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <version>\${opencmis.version}</version>
-            <type>war</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>\${opencmis.version}</version>
-        </dependency>
-        <!-- Uncomment for CORS support 
-        <dependency>
-            <groupId>com.thetransactioncompany</groupId>
-            <artifactId>cors-filter</artifactId>
-            <version>2.1.2</version>
-        </dependency>
-        -->
-        <dependency><!-- for development only -->
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-            <version>\${opencmis.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency><!-- for development only -->
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisService.java
deleted file mode 100644
index 6c8f69d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisService.java
+++ /dev/null
@@ -1,132 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package ${package};
-
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
-
-/**
- * CMIS Service Implementation.
- */
-public class ${projectPrefix}CmisService extends AbstractCmisService implements CallContextAwareCmisService {
-
-    private CallContext context;
-
-    // --- Call Context ---
-
-    /**
-     * Sets the call context.
-     * 
-     * This method should only be called by the service factory.
-     */
-    public void setCallContext(CallContext context) {
-        this.context = context;
-    }
-
-    /**
-     * Gets the call context.
-     */
-    public CallContext getCallContext() {
-        return context;
-    }
-
-    // --- CMIS Operations ---
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        // very basic repository info set up
-        RepositoryInfoImpl repositoryInfo = new RepositoryInfoImpl();
-
-        repositoryInfo.setId("repository1");
-        repositoryInfo.setName("${projectPrefix}");
-        repositoryInfo.setDescription("This is my first repository!");
-
-        repositoryInfo.setCmisVersionSupported("1.0");
-
-        repositoryInfo.setProductName("My Document Management System");
-        repositoryInfo.setProductVersion("0.1");
-        repositoryInfo.setVendorName("My Company");
-
-        repositoryInfo.setRootFolder("1234567890");
-
-        repositoryInfo.setThinClientUri("");
-
-        RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl();
-        capabilities.setCapabilityAcl(CapabilityAcl.NONE);
-        capabilities.setAllVersionsSearchable(false);
-        capabilities.setCapabilityJoin(CapabilityJoin.NONE);
-        capabilities.setSupportsMultifiling(false);
-        capabilities.setSupportsUnfiling(false);
-        capabilities.setSupportsVersionSpecificFiling(false);
-        capabilities.setIsPwcSearchable(false);
-        capabilities.setIsPwcUpdatable(false);
-        capabilities.setCapabilityQuery(CapabilityQuery.NONE);
-        capabilities.setCapabilityChanges(CapabilityChanges.NONE);
-        capabilities.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
-        capabilities.setSupportsGetDescendants(true);
-        capabilities.setSupportsGetFolderTree(true);
-        capabilities.setCapabilityRendition(CapabilityRenditions.NONE);
-
-        return Collections.singletonList((RepositoryInfo) repositoryInfo);
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // TODO implement
-        return null;
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        // TODO implement
-        return null;
-    }
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        // TODO implement
-        return null;
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        // TODO implement
-        return null;
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        // TODO implement
-        return null;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceFactory.java
deleted file mode 100644
index b3ae341..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package ${package};
-
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.ConformanceCmisServiceWrapper;
-
-/**
- * CMIS Service Factory.
- */
-public class ${projectPrefix}CmisServiceFactory extends AbstractServiceFactory {
-
-    /** Default maxItems value for getTypeChildren()}. */
-    private static final BigInteger DEFAULT_MAX_ITEMS_TYPES = BigInteger.valueOf(1000);
-
-    /** Default depth value for getTypeDescendants(). */
-    private static final BigInteger DEFAULT_DEPTH_TYPES = BigInteger.valueOf(-1);
-
-    /**
-     * Default maxItems value for getChildren() and other methods returning
-     * lists of objects.
-     */
-    private static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(100000);
-
-    /** Default depth value for getDescendants(). */
-    private static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(10);
-
-    @Override
-    public void init(Map<String, String> parameters) {
-    }
-
-    @Override
-    public void destroy() {
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        // authentication can go here
-        String user = context.getUsername();
-        String password = context.getPassword();
-
-        // if the authentication fails, throw a CmisPermissionDeniedException
-
-        // create a new service object
-        // (can also be pooled or stored in a ThreadLocal)
-        ${projectPrefix}CmisService service = new ${projectPrefix}CmisService();
-
-        // add the conformance CMIS service wrapper
-        // (The wrapper catches invalid CMIS requests and sets default values
-        // for parameters that have not been provided by the client.)
-        ConformanceCmisServiceWrapper wrapperService = 
-                new ConformanceCmisServiceWrapper(service, DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES, 
-                        DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
-
-        // hand over the call context to the service object
-        wrapperService.setCallContext(context);
-
-        return wrapperService;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index d2a6da6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1 +0,0 @@
-class=${package}.${projectPrefix}CmisServiceFactory
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/index.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/index.jsp
deleted file mode 100644
index 882903b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/main/resources/archetype-resources/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,82 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-  <link rel="stylesheet" type="text/css" href="css/opencmis.css">
-  <title>${artifactId} Server</title>
-  <style type="text/css">
-  <!--
-  body {
-    font-family: Verdana, arial, sans-serif;
-    color: black;
-    font-size: 12px;
-  }
-
-  h1 {
-    font-size: 24px;
-    line-height: normal;
-    font-weight: bold;
-    background-color: #f0f0f0;
-    color: #003366;
-    border-bottom: 1px solid #3c78b5;
-    padding: 2px;
-    margin: 4px 0px 4px 0px;
-  }
-
-  h2 {
-    font-size: 18px;
-    line-height: normal;
-    font-weight: bold;
-    background-color: #f0f0f0;
-    border-bottom: 1px solid #3c78b5;
-    padding: 2px;
-    margin: 4px 0px 4px 0px;
-  }
-
-  hr {
-    color: 3c78b5;
-    height: 1;
-  }
-  -->
-  </style>
-</head>
-<body>
-
-<h1>${artifactId} Server</h1>
-
-<p style="font-weight: bold">Your server is up and running.</p>
-<p>The ${artifactId} server is a CMIS server based on Apache Chemistry OpenCMIS.</p>
-<p>You need a CMIS client to access this server. Download the <a href="http://chemistry.apache.org/java/developing/tools/dev-tools-workbench.html">CMIS Workbench</a>.</p>
-
-<h2>Access Information</h2>
-
-<h3>CMIS 1.1</h3>
-
-<p>Web Services Binding: <a href="services11/cmis?wsdl">WSDL</a></p>
-<p>AtomPub Binding: <a href="atom11">Service Document</a></p>
-<p>Browser Binding: <a href="browser">Service Document</a></p>
-
-<h3>CMIS 1.0</h3>
-
-<p>Web Services Binding: <a href="services/cmis?wsdl">WSDL</a></p>
-<p>AtomPub Binding: <a href="atom">Service Document</a></p>
-
-<h3>Authentication</h3>
-
-<p>No authentication required.</p>
-
-
-<h2>More Information</h2>
-
-<p><a href="http://chemistry.apache.org">Apache Chemistry web site</a></p>
-<p><a href="http://www.oasis-open.org/committees/cmis">CMIS Technical Committees at OASIS</a></p>
-
-<hr/>
-This software is powered by <a href="http://chemistry.apache.org/">Apache Chemistry</a>.
-<br/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/archetype.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/archetype.properties
deleted file mode 100644
index d3054f6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/archetype.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-groupId=org.test.cmis
-artifactId=test-cmis-server
-version=1.0-SNAPSHOT
-package=org.test.cmis.server
-projectPrefix=Test
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/goal.txt b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/goal.txt
deleted file mode 100644
index 3f97023..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-archetype/src/test/resources/projects/server/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/pom.xml
deleted file mode 100644
index 95d1568..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-    <name>OpenCMIS Server Implementation WAR packaging</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!-- Uncomment for CORS support 
-        <dependency>
-            <groupId>com.thetransactioncompany</groupId>
-            <artifactId>cors-filter</artifactId>
-            <version>2.1.2</version>
-        </dependency>
-        -->
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/NOTICE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/NOTICE
deleted file mode 100644
index 393944f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS Server Implementation
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/THIRD-PARTY-LICENSES b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/THIRD-PARTY-LICENSES
deleted file mode 100644
index 07fe7d8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/META-INF/THIRD-PARTY-LICENSES
+++ /dev/null
@@ -1,483 +0,0 @@
-=======================================================================
-- Apache Commons Lang (http://commons.apache.org/lang/)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-- Apache Chemistry OpenCMIS (http://chemistry.apache.org/)
-  License: Apache 2  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-- XML Resolver library
-  License: Apache 2  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-=======================================================================
-- Woodstox (http://woodstox.codehaus.org)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-This copy of Woodstox XML processor is licensed under the
-Apache (Software) License, version 2.0 ("the License").
-See the License for details about distribution rights, and the
-specific rights regarding derivate works.
-
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/
-
-A copy is also included with both the the downloadable source code package
-and jar that contains class bytecodes, as file "ASL 2.0". In both cases,
-that file should be located next to this file: in source distribution
-the location should be "release-notes/asl"; and in jar "META-INF/"
-
-
-=======================================================================
-- Stax2 API (http://woodstox.codehaus.org/StAX2)
-  License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)
-
-
-Copyright (c) 2004-2010, Woodstox Project (http://woodstox.codehaus.org/)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-3. Neither the name of the Woodstox XML Processor nor the names
-   of its contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- antlr (http://www.antlr.org/antlr) antlr:antlr:jar:2.7.7:compile
-  License: BSD License  (http://www.antlr.org/license.html)
-- antlr-runtime (http://www.antlr.org/antlr-runtime) org.antlr:antlr-runtime:jar:3.5:compile
-  License: BSD licence  (http://antlr.org/license.html)
-- stringtemplate (http://www.stringtemplate.org/stringtemplate) org.antlr:stringtemplate:jar:3.2.1:compile
-  License: BSD licence  (http://antlr.org/license.html)
-
-
-Copyright (c) 2010 Terence Parr
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-3. Neither the name of the Woodstox XML Processor nor the names
-   of its contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- Streaming API for XML (http://stax.codehaus.org)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- StAX-Ex Project (https://stax-ex.dev.java.net/stax-ex)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- Sun JAXB Reference Implementation Runtime (https://jaxb.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- Sun SAAJ Standard Implementation (https://saaj.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- XML Stream Buffer Project (https://xmlstreambuffer.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JAX-WS (JSR-224) Reference Implementation (https://jax-ws.dev.java.net//) 
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JavaBeans(TM) Activation Framework Specification (http://www.oracle.com/technetwork/java/jaf11-139815.html)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- Java Architecture for XML Binding (https://jaxb.dev.java.net/)
-  License: Common Development And Distribution License (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)
-- SAAJ API (https://saaj.dev.java.net/)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- JAX-WS (JSR-224) API (https://jax-ws.dev.java.net/) 
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-- mimepull (https://mimepull.dev.java.net)
-  License: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0  (http://www.opensource.org/licenses/cddl1.php)
-  License: GPLv2 with classpath exception  (http://www.gnu.org/software/classpath/license.html)
-
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      1. Definitions.
-            1.1. "Contributor" means each individual or entity that
-            creates or contributes to the creation of Modifications.
-            1.2. "Contributor Version" means the combination of the
-            Original Software, prior Modifications used by a
-            Contributor (if any), and the Modifications made by that
-            particular Contributor.
-            1.3. "Covered Software" means (a) the Original Software, or
-            (b) Modifications, or (c) the combination of files
-            containing Original Software with files containing
-            Modifications, in each case including portions thereof.
-            1.4. "Executable" means the Covered Software in any form
-            other than Source Code. 
-            1.5. "Initial Developer" means the individual or entity
-            that first makes Original Software available under this
-            License. 
-            1.6. "Larger Work" means a work which combines Covered
-            Software or portions thereof with code not governed by the
-            terms of this License.
-            1.7. "License" means this document.
-            1.8. "Licensable" means having the right to grant, to the
-            maximum extent possible, whether at the time of the initial
-            grant or subsequently acquired, any and all of the rights
-            conveyed herein.
-            1.9. "Modifications" means the Source Code and Executable
-            form of any of the following: 
-                  A. Any file that results from an addition to,
-                  deletion from or modification of the contents of a
-                  file containing Original Software or previous
-                  Modifications; 
-                  B. Any new file that contains any part of the
-                  Original Software or previous Modification; or 
-                  C. Any new file that is contributed or otherwise made
-                  available under the terms of this License.
-            1.10. "Original Software" means the Source Code and
-            Executable form of computer software code that is
-            originally released under this License. 
-            1.11. "Patent Claims" means any patent claim(s), now owned
-            or hereafter acquired, including without limitation,
-            method, process, and apparatus claims, in any patent
-            Licensable by grantor. 
-            1.12. "Source Code" means (a) the common form of computer
-            software code in which modifications are made and (b)
-            associated documentation included in or with such code.
-            1.13. "You" (or "Your") means an individual or a legal
-            entity exercising rights under, and complying with all of
-            the terms of, this License. For legal entities, "You"
-            includes any entity which controls, is controlled by, or is
-            under common control with You. For purposes of this
-            definition, "control" means (a) the power, direct or
-            indirect, to cause the direction or management of such
-            entity, whether by contract or otherwise, or (b) ownership
-            of more than fifty percent (50%) of the outstanding shares
-            or beneficial ownership of such entity.
-      2. License Grants. 
-            2.1. The Initial Developer Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, the
-            Initial Developer hereby grants You a world-wide,
-            royalty-free, non-exclusive license: 
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Initial Developer,
-                  to use, reproduce, modify, display, perform,
-                  sublicense and distribute the Original Software (or
-                  portions thereof), with or without Modifications,
-                  and/or as part of a Larger Work; and 
-                  (b) under Patent Claims infringed by the making,
-                  using or selling of Original Software, to make, have
-                  made, use, practice, sell, and offer for sale, and/or
-                  otherwise dispose of the Original Software (or
-                  portions thereof). 
-                  (c) The licenses granted in Sections 2.1(a) and (b)
-                  are effective on the date Initial Developer first
-                  distributes or otherwise makes the Original Software
-                  available to a third party under the terms of this
-                  License. 
-                  (d) Notwithstanding Section 2.1(b) above, no patent
-                  license is granted: (1) for code that You delete from
-                  the Original Software, or (2) for infringements
-                  caused by: (i) the modification of the Original
-                  Software, or (ii) the combination of the Original
-                  Software with other software or devices. 
-            2.2. Contributor Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, each
-            Contributor hereby grants You a world-wide, royalty-free,
-            non-exclusive license:
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Contributor to
-                  use, reproduce, modify, display, perform, sublicense
-                  and distribute the Modifications created by such
-                  Contributor (or portions thereof), either on an
-                  unmodified basis, with other Modifications, as
-                  Covered Software and/or as part of a Larger Work; and
-                  (b) under Patent Claims infringed by the making,
-                  using, or selling of Modifications made by that
-                  Contributor either alone and/or in combination with
-                  its Contributor Version (or portions of such
-                  combination), to make, use, sell, offer for sale,
-                  have made, and/or otherwise dispose of: (1)
-                  Modifications made by that Contributor (or portions
-                  thereof); and (2) the combination of Modifications
-                  made by that Contributor with its Contributor Version
-                  (or portions of such combination). 
-                  (c) The licenses granted in Sections 2.2(a) and
-                  2.2(b) are effective on the date Contributor first
-                  distributes or otherwise makes the Modifications
-                  available to a third party. 
-                  (d) Notwithstanding Section 2.2(b) above, no patent
-                  license is granted: (1) for any code that Contributor
-                  has deleted from the Contributor Version; (2) for
-                  infringements caused by: (i) third party
-                  modifications of Contributor Version, or (ii) the
-                  combination of Modifications made by that Contributor
-                  with other software (except as part of the
-                  Contributor Version) or other devices; or (3) under
-                  Patent Claims infringed by Covered Software in the
-                  absence of Modifications made by that Contributor. 
-      3. Distribution Obligations.
-            3.1. Availability of Source Code.
-            Any Covered Software that You distribute or otherwise make
-            available in Executable form must also be made available in
-            Source Code form and that Source Code form must be
-            distributed only under the terms of this License. You must
-            include a copy of this License with every copy of the
-            Source Code form of the Covered Software You distribute or
-            otherwise make available. You must inform recipients of any
-            such Covered Software in Executable form as to how they can
-            obtain such Covered Software in Source Code form in a
-            reasonable manner on or through a medium customarily used
-            for software exchange.
-            3.2. Modifications.
-            The Modifications that You create or to which You
-            contribute are governed by the terms of this License. You
-            represent that You believe Your Modifications are Your
-            original creation(s) and/or You have sufficient rights to
-            grant the rights conveyed by this License.
-            3.3. Required Notices.
-            You must include a notice in each of Your Modifications
-            that identifies You as the Contributor of the Modification.
-            You may not remove or alter any copyright, patent or
-            trademark notices contained within the Covered Software, or
-            any notices of licensing or any descriptive text giving
-            attribution to any Contributor or the Initial Developer.
-            3.4. Application of Additional Terms.
-            You may not offer or impose any terms on any Covered
-            Software in Source Code form that alters or restricts the
-            applicable version of this License or the recipients'
-            rights hereunder. You may choose to offer, and to charge a
-            fee for, warranty, support, indemnity or liability
-            obligations to one or more recipients of Covered Software.
-            However, you may do so only on Your own behalf, and not on
-            behalf of the Initial Developer or any Contributor. You
-            must make it absolutely clear that any such warranty,
-            support, indemnity or liability obligation is offered by
-            You alone, and You hereby agree to indemnify the Initial
-            Developer and every Contributor for any liability incurred
-            by the Initial Developer or such Contributor as a result of
-            warranty, support, indemnity or liability terms You offer.
-            3.5. Distribution of Executable Versions.
-            You may distribute the Executable form of the Covered
-            Software under the terms of this License or under the terms
-            of a license of Your choice, which may contain terms
-            different from this License, provided that You are in
-            compliance with the terms of this License and that the
-            license for the Executable form does not attempt to limit
-            or alter the recipient's rights in the Source Code form
-            from the rights set forth in this License. If You
-            distribute the Covered Software in Executable form under a
-            different license, You must make it absolutely clear that
-            any terms which differ from this License are offered by You
-            alone, not by the Initial Developer or Contributor. You
-            hereby agree to indemnify the Initial Developer and every
-            Contributor for any liability incurred by the Initial
-            Developer or such Contributor as a result of any such terms
-            You offer.
-            3.6. Larger Works.
-            You may create a Larger Work by combining Covered Software
-            with other code not governed by the terms of this License
-            and distribute the Larger Work as a single product. In such
-            a case, You must make sure the requirements of this License
-            are fulfilled for the Covered Software. 
-      4. Versions of the License. 
-            4.1. New Versions.
-            Sun Microsystems, Inc. is the initial license steward and
-            may publish revised and/or new versions of this License
-            from time to time. Each version will be given a
-            distinguishing version number. Except as provided in
-            Section 4.3, no one other than the license steward has the
-            right to modify this License. 
-            4.2. Effect of New Versions.
-            You may always continue to use, distribute or otherwise
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. If the Initial Developer includes a
-            notice in the Original Software prohibiting it from being
-            distributed or otherwise made available under any
-            subsequent version of the License, You must distribute and
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. Otherwise, You may also choose to
-            use, distribute or otherwise make the Covered Software
-            available under the terms of any subsequent version of the
-            License published by the license steward. 
-            4.3. Modified Versions.
-            When You are an Initial Developer and You want to create a
-            new license for Your Original Software, You may create and
-            use a modified version of this License if You: (a) rename
-            the license and remove any references to the name of the
-            license steward (except to note that the license differs
-            from this License); and (b) otherwise make it clear that
-            the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
-      BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-      INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
-      SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
-      PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
-      PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
-      COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
-      INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
-      ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
-      WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-      ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
-      DISCLAIMER. 
-      6. TERMINATION. 
-            6.1. This License and the rights granted hereunder will
-            terminate automatically if You fail to comply with terms
-            herein and fail to cure such breach within 30 days of
-            becoming aware of the breach. Provisions which, by their
-            nature, must remain in effect beyond the termination of
-            this License shall survive.
-            6.2. If You assert a patent infringement claim (excluding
-            declaratory judgment actions) against Initial Developer or
-            a Contributor (the Initial Developer or Contributor against
-            whom You assert such claim is referred to as "Participant")
-            alleging that the Participant Software (meaning the
-            Contributor Version where the Participant is a Contributor
-            or the Original Software where the Participant is the
-            Initial Developer) directly or indirectly infringes any
-            patent, then any and all rights granted directly or
-            indirectly to You by such Participant, the Initial
-            Developer (if the Initial Developer is not the Participant)
-            and all Contributors under Sections 2.1 and/or 2.2 of this
-            License shall, upon 60 days notice from Participant
-            terminate prospectively and automatically at the expiration
-            of such 60 day notice period, unless if within such 60 day
-            period You withdraw Your claim with respect to the
-            Participant Software against such Participant either
-            unilaterally or pursuant to a written agreement with
-            Participant.
-            6.3. In the event of termination under Sections 6.1 or 6.2
-            above, all end user licenses that have been validly granted
-            by You or any distributor hereunder prior to termination
-            (excluding licenses granted to You by any distributor)
-            shall survive termination.
-      7. LIMITATION OF LIABILITY.
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-      INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-      COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
-      LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
-      CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
-      LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
-      STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
-      INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
-      APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
-      NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
-      CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
-      APPLY TO YOU.
-      8. U.S. GOVERNMENT END USERS.
-      The Covered Software is a "commercial item," as that term is
-      defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
-      computer software" (as that term is defined at 48 C.F.R. ¤
-      252.227-7014(a)(1)) and "commercial computer software
-      documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
-      1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
-      through 227.7202-4 (June 1995), all U.S. Government End Users
-      acquire Covered Software with only those rights set forth herein.
-      This U.S. Government Rights clause is in lieu of, and supersedes,
-      any other FAR, DFAR, or other clause or provision that addresses
-      Government rights in computer software under this License.
-      9. MISCELLANEOUS.
-      This License represents the complete agreement concerning subject
-      matter hereof. If any provision of this License is held to be
-      unenforceable, such provision shall be reformed only to the
-      extent necessary to make it enforceable. This License shall be
-      governed by the law of the jurisdiction specified in a notice
-      contained within the Original Software (except to the extent
-      applicable law, if any, provides otherwise), excluding such
-      jurisdiction's conflict-of-law provisions. Any litigation
-      relating to this License shall be subject to the jurisdiction of
-      the courts located in the jurisdiction and venue specified in a
-      notice contained within the Original Software, with the losing
-      party responsible for costs, including, without limitation, court
-      costs and reasonable attorneys' fees and expenses. The
-      application of the United Nations Convention on Contracts for the
-      International Sale of Goods is expressly excluded. Any law or
-      regulation which provides that the language of a contract shall
-      be construed against the drafter shall not apply to this License.
-      You agree that You alone are responsible for compliance with the
-      United States export administration regulations (and the export
-      control laws and regulation of any other countries) when You use,
-      distribute or otherwise make available any Covered Software.
-      10. RESPONSIBILITY FOR CLAIMS.
-      As between Initial Developer and the Contributors, each party is
-      responsible for claims and damages arising, directly or
-      indirectly, out of its utilization of rights under this License
-      and You agree to work with Initial Developer and Contributors to
-      distribute such responsibility on an equitable basis. Nothing
-      herein is intended or shall be deemed to constitute any admission
-      of liability.
-
-=======================================================================
-- SLF4J API Module (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/classes/sample-repository.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/classes/sample-repository.properties
deleted file mode 100644
index 954d715..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/classes/sample-repository.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class=org.apache.chemistry.opencmis.server.impl.dummy.DummyServicesFactory
-
-repository.id=dummy-rep
-repository.name=Dummy Repository
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Core.xsd.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Core.xsd.template
deleted file mode 100644
index aa427b1..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Core.xsd.template
+++ /dev/null
@@ -1,1268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-	<xs:attribute name="key" type="xs:string" />
-	<xs:attribute name="index" type="xs:integer" />
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is
-					not required to be set when used as a
-					default value. This is
-					required to be set when used for query result
-					set or returning
-					properties on an object.
-		</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition. If
-						this is a base type,
-						this is not present.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition"
-					type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" />
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous
-						access. This principal can then be passed to the
-						ACL services to
-						specify what permissions anonymous users should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be passed to
-						the
-						ACL services to
-						specify what permissions everyone should
-						have
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is
-						sufficient to provide rights required
-						in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Messaging.xsd.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Messaging.xsd.template
deleted file mode 100644
index b889164..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMIS-Messaging.xsd.template
+++ /dev/null
@@ -1,2072 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0"
-	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	elementFormDefault="qualified">
-
-	<xs:import schemaLocation="<%cmiscore%>"
-		namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-
-	<!-- exceptions -->
-	<xs:complexType name="cmisFaultType">
-		<xs:sequence>
-			<xs:element name="type" type="cmism:enumServiceException" />
-			<xs:element name="code" type="xs:integer" />
-			<xs:element name="message" type="xs:string" />
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:element name="cmisFault" type="cmism:cmisFaultType" />
-	<xs:simpleType name="enumServiceException">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="constraint" />
-			<xs:enumeration value="nameConstraintViolation" />
-			<xs:enumeration value="contentAlreadyExists" />
-			<xs:enumeration value="filterNotValid" />
-			<xs:enumeration value="invalidArgument" />
-			<xs:enumeration value="notSupported" />
-			<xs:enumeration value="objectNotFound" />
-			<xs:enumeration value="permissionDenied" />
-			<xs:enumeration value="runtime" />
-			<xs:enumeration value="storage" />
-			<xs:enumeration value="streamNotSupported" />
-			<xs:enumeration value="updateConflict" />
-			<xs:enumeration value="versioning" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- extension -->
-	<xs:complexType name="cmisExtensionType">
-		<xs:sequence>
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<!-- types for WS -->
-	<xs:complexType name="cmisTypeContainer">
-		<xs:sequence>
-			<xs:element name="type" type="cmis:cmisTypeDefinitionType" 
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisTypeContainer"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisTypeDefinitionListType">
-		<xs:sequence>
-			<xs:element name="types" type="cmis:cmisTypeDefinitionType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderContainerType">
-		<xs:sequence>
-			<xs:element name="objectInFolder" type="cmism:cmisObjectInFolderType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisObjectInFolderContainerType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />	
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="pathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectParentsType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="relativePathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" /> 
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmism:cmisObjectInFolderType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisRepositoryEntryType">
-		<xs:sequence>
-			<xs:element name="repositoryId" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisContentStreamType">
-		<xs:sequence>
-			<xs:element name="length" type="xs:integer" minOccurs="0" />
-			<xs:element name="mimeType" type="xs:string" minOccurs="0" />
-			<xs:element name="filename" type="xs:string" minOccurs="0" />
-			<xs:element name="stream" type="xs:base64Binary"
-				xmime:expectedContentTypes="application/octet-stream" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLType">
-		<xs:sequence>
-			<xs:element name="ACL" type="cmis:cmisAccessControlListType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="exact" type="xs:boolean" 
-				minOccurs="0" maxOccurs="1"/>
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Repository Services] -->
-	
-	<!-- getRepositories Operation -->
-	<xs:element name="getRepositories">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoriesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositories" type="cmism:cmisRepositoryEntryType"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- getRepositoryInfo Operation -->
-	<xs:element name="getRepositoryInfo">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoryInfoResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryInfo" type="cmis:cmisRepositoryInfoType" 
-					minOccurs="1" maxOccurs="1"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeChildren Operation -->
-	<xs:element name="getTypeChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeDefinitionListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDescendants Operation -->
-	<xs:element name="getTypeDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeContainer"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDefinition Operation -->
-	<xs:element name="getTypeDefinition">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDefinitionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="0" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Navigation Services] -->
-	
-	<!-- getDescendants Operation -->
-	<xs:element name="getDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getDescendants Operation -->
-	<xs:element name="getFolderTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getChildren Operation -->
-	<xs:element name="getChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getFolderParent Operation -->
-	<xs:element name="getFolderParent">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderParentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectParents Operation-->
-	<xs:element name="getObjectParents">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelativePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectParentsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="parents" type="cmism:cmisObjectParentsType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getRenditions Operation -->
-	<xs:element name="getRenditions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRenditionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="renditions" type="cmis:cmisRenditionType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getCheckedoutDocs Operation -->
-	<xs:element name="getCheckedOutDocs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getCheckedOutDocsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Object Services] -->
-	
-	<!-- createDocument Operation -->
-	<xs:element name="createDocument">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createDocumentFromSource Operation -->
-	<xs:element name="createDocumentFromSource">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />					
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentFromSourceResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createFolder Operation -->
-	<xs:element name="createFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createRelationship Operation -->
-	<xs:element name="createRelationship">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createRelationshipResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createPolicy Operation -->
-	<xs:element name="createPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- getAllowableActions Operation -->
-	<xs:element name="getAllowableActions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllowableActionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getProperties Operation -->
-	<xs:element name="getProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObject Operation -->
-	<xs:element name="getObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectByPath Operation -->
-	<xs:element name="getObjectByPath">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="path" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectByPathResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentStream Operation -->
-	<xs:element name="getContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="streamId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="offset" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="length" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateProperties Operation -->
-	<xs:element name="updateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<!--
-					if objectId is present in the properties the value must match this
-					objectId
-				-->
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- moveObject Operation -->
-	<xs:element name="moveObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="targetFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="moveObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteObject Operation -->
-	<xs:element name="deleteObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteTree Operation -->
-	<xs:element name="deleteTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="unfileObjects" type="cmis:enumUnfileObject"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="continueOnFailure" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="failedToDelete">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="objectIds" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-							<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-								processContents="lax" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- setContentStream Operation -->
-	<xs:element name="setContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="overwriteFlag" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="setContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteContentStream Operation -->
-	<xs:element name="deleteContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-				
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Multi-filing Services]-->
-
-	<!-- addObjectToFolder Operation -->
-	<xs:element name="addObjectToFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="addObjectToFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removeObjectFromFolder Operation -->
-	<xs:element name="removeObjectFromFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removeObjectFromFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Discovery Services] -->
-	
-	<!-- query Operation -->
-	<xs:element name="query">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="statement" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="searchAllVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-			<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="queryResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentChanges operation -->
-	<xs:element name="getContentChanges">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeProperties" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentChangesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Versioning Services] -->
-
-	<!-- checkOut Operation -->
-	<xs:element name="checkOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="contentCopied" type="xs:boolean"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- cancelCheckOut Operation -->
-	<xs:element name="cancelCheckOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cancelCheckOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- checkIn Operation -->
-	<xs:element name="checkIn">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="checkinComment" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkInResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getPropertiesOfLatestVersion -->
-	<xs:element name="getPropertiesOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectOfLatestVersion Operation -->
-	<xs:element name="getObjectOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAllVersions Operation -->
-	<xs:element name="getAllVersions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllVersionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Relationship Services]-->
-
-	<!-- getRelationships Operation -->
-	<xs:element name="getObjectRelationships">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="includeSubRelationshipTypes" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="relationshipDirection" type="cmis:enumRelationshipDirection"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectRelationshipsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Policy Services]-->
-
-	<!-- applyPolicy Operation -->
-	<xs:element name="applyPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removePolicy Operation -->
-	<xs:element name="removePolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removePolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAppliedPolicies Operation -->
-	<xs:element name="getAppliedPolicies">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAppliedPoliciesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getACL Operation -->
-	<xs:element name="getACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="onlyBasicPermissions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>	
-	</xs:element>
-	
-	<!-- applyACL Operation -->
-	<xs:element name="applyACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="ACLPropagation" type="cmis:enumACLPropagation"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-</xs:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMISWS-Service.wsdl.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMISWS-Service.wsdl.template
deleted file mode 100644
index 913cdf0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10/CMISWS-Service.wsdl.template
+++ /dev/null
@@ -1,1173 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<definitions xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmisw="http://docs.oasis-open.org/ns/cmis/ws/200908/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/"
-	xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" name="CMISWebServices">
-	<types>
-		<xsd:schema elementFormDefault="qualified"
-			targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/">
-			<xsd:import schemaLocation="<%cmiscore%>"
-				namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-			<xsd:import schemaLocation="<%cmismsg%>"
-				namespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/" />
-		</xsd:schema>
-	</types>
-
-	<message name="cmisException">
-		<part name="fault" element="cmism:cmisFault" />
-	</message>
-
-	<message name="getACLRequest">
-		<part name="parameters" element="cmism:getACL" />
-	</message>
-	<message name="getACLResponse">
-		<part name="parameters" element="cmism:getACLResponse" />
-	</message>
-
-	<message name="applyACLRequest">
-		<part name="parameters" element="cmism:applyACL" />
-	</message>
-	<message name="applyACLResponse">
-		<part name="parameters" element="cmism:applyACLResponse" />
-	</message>
-
-	<message name="queryRequest">
-		<part name="parameters" element="cmism:query" />
-	</message>
-	<message name="queryResponse">
-		<part name="parameters" element="cmism:queryResponse" />
-	</message>
-	<message name="getContentChangesRequest">
-		<part name="parameters" element="cmism:getContentChanges" />
-	</message>
-	<message name="getContentChangesResponse">
-		<part name="parameters" element="cmism:getContentChangesResponse" />
-	</message>
-
-	<message name="addObjectToFolderRequest">
-		<part name="parameters" element="cmism:addObjectToFolder" />
-	</message>
-	<message name="addObjectToFolderResponse">
-		<part name="parameters" element="cmism:addObjectToFolderResponse" />
-	</message>
-	<message name="removeObjectFromFolderRequest">
-		<part name="parameters" element="cmism:removeObjectFromFolder" />
-	</message>
-	<message name="removeObjectFromFolderResponse">
-		<part name="parameters" element="cmism:removeObjectFromFolderResponse" />
-	</message>
-
-	<message name="getDescendantsRequest">
-		<part name="parameters" element="cmism:getDescendants" />
-	</message>
-	<message name="getDescendantsResponse">
-		<part name="parameters" element="cmism:getDescendantsResponse" />
-	</message>
-	<message name="getChildrenRequest">
-		<part name="parameters" element="cmism:getChildren" />
-	</message>
-	<message name="getChildrenResponse">
-		<part name="parameters" element="cmism:getChildrenResponse" />
-	</message>
-	<message name="getFolderParentRequest">
-		<part name="parameters" element="cmism:getFolderParent" />
-	</message>
-	<message name="getFolderParentResponse">
-		<part name="parameters" element="cmism:getFolderParentResponse" />
-	</message>
-	<message name="getObjectParentsRequest">
-		<part name="parameters" element="cmism:getObjectParents" />
-	</message>
-	<message name="getObjectParentsResponse">
-		<part name="parameters" element="cmism:getObjectParentsResponse" />
-	</message>
-	<message name="getRenditionsRequest">
-		<part name="parameters" element="cmism:getRenditions" />
-	</message>
-	<message name="getRenditionsResponse">
-		<part name="parameters" element="cmism:getRenditionsResponse" />
-	</message>
-	<message name="getCheckedOutDocsRequest">
-		<part name="parameters" element="cmism:getCheckedOutDocs" />
-	</message>
-	<message name="getCheckedOutDocsResponse">
-		<part name="parameters" element="cmism:getCheckedOutDocsResponse" />
-	</message>
-
-	<message name="createDocumentRequest">
-		<part name="parameters" element="cmism:createDocument" />
-	</message>
-	<message name="createDocumentResponse">
-		<part name="parameters" element="cmism:createDocumentResponse" />
-	</message>
-	<message name="createDocumentFromSourceRequest">
-		<part name="parameters" element="cmism:createDocumentFromSource" />
-	</message>
-	<message name="createDocumentFromSourceResponse">
-		<part name="parameters" element="cmism:createDocumentFromSourceResponse" />
-	</message>
-	<message name="createFolderRequest">
-		<part name="parameters" element="cmism:createFolder" />
-	</message>
-	<message name="createFolderResponse">
-		<part name="parameters" element="cmism:createFolderResponse" />
-	</message>
-	<message name="createRelationshipRequest">
-		<part name="parameters" element="cmism:createRelationship" />
-	</message>
-	<message name="createRelationshipResponse">
-		<part name="parameters" element="cmism:createRelationshipResponse" />
-	</message>
-	<message name="createPolicyRequest">
-		<part name="parameters" element="cmism:createPolicy" />
-	</message>
-	<message name="createPolicyResponse">
-		<part name="parameters" element="cmism:createPolicyResponse" />
-	</message>
-	<message name="getAllowableActionsRequest">
-		<part name="parameters" element="cmism:getAllowableActions" />
-	</message>
-	<message name="getAllowableActionsResponse">
-		<part name="parameters" element="cmism:getAllowableActionsResponse" />
-	</message>
-	<message name="getObjectRequest">
-		<part name="parameters" element="cmism:getObject" />
-	</message>
-	<message name="getObjectResponse">
-		<part name="parameters" element="cmism:getObjectResponse" />
-	</message>
-	<message name="getPropertiesRequest">
-		<part name="parameters" element="cmism:getProperties" />
-	</message>
-	<message name="getPropertiesResponse">
-		<part name="parameters" element="cmism:getPropertiesResponse" />
-	</message>
-
-	<message name="getObjectByPathRequest">
-		<part name="parameters" element="cmism:getObjectByPath" />
-	</message>
-	<message name="getObjectByPathResponse">
-		<part name="parameters" element="cmism:getObjectByPathResponse" />
-	</message>
-
-	<message name="getContentStreamRequest">
-		<part name="parameters" element="cmism:getContentStream" />
-	</message>
-	<message name="getContentStreamResponse">
-		<part name="parameters" element="cmism:getContentStreamResponse" />
-	</message>
-	<message name="updatePropertiesRequest">
-		<part name="parameters" element="cmism:updateProperties" />
-	</message>
-	<message name="updatePropertiesResponse">
-		<part name="parameters" element="cmism:updatePropertiesResponse" />
-	</message>
-	<message name="moveObjectRequest">
-		<part name="parameters" element="cmism:moveObject" />
-	</message>
-	<message name="moveObjectResponse">
-		<part name="parameters" element="cmism:moveObjectResponse" />
-	</message>
-	<message name="deleteObjectRequest">
-		<part name="parameters" element="cmism:deleteObject" />
-	</message>
-	<message name="deleteObjectResponse">
-		<part name="parameters" element="cmism:deleteObjectResponse" />
-	</message>
-	<message name="deleteTreeRequest">
-		<part name="parameters" element="cmism:deleteTree" />
-	</message>
-	<message name="deleteTreeResponse">
-		<part name="parameters" element="cmism:deleteTreeResponse" />
-	</message>
-	<message name="setContentStreamRequest">
-		<part name="parameters" element="cmism:setContentStream" />
-	</message>
-	<message name="setContentStreamResponse">
-		<part name="parameters" element="cmism:setContentStreamResponse" />
-	</message>
-	<message name="deleteContentStreamRequest">
-		<part name="parameters" element="cmism:deleteContentStream" />
-	</message>
-	<message name="deleteContentStreamResponse">
-		<part name="parameters" element="cmism:deleteContentStreamResponse" />
-	</message>
-
-	<message name="applyPolicyRequest">
-		<part name="parameters" element="cmism:applyPolicy" />
-	</message>
-	<message name="applyPolicyResponse">
-		<part name="parameters" element="cmism:applyPolicyResponse" />
-	</message>
-	<message name="removePolicyRequest">
-		<part name="parameters" element="cmism:removePolicy" />
-	</message>
-	<message name="removePolicyResponse">
-		<part name="parameters" element="cmism:removePolicyResponse" />
-	</message>
-	<message name="getAppliedPoliciesRequest">
-		<part name="parameters" element="cmism:getAppliedPolicies" />
-	</message>
-	<message name="getAppliedPoliciesResponse">
-		<part name="parameters" element="cmism:getAppliedPoliciesResponse" />
-	</message>
-
-	<message name="getObjectRelationshipsRequest">
-		<part name="parameters" element="cmism:getObjectRelationships" />
-	</message>
-	<message name="getObjectRelationshipsResponse">
-		<part name="parameters" element="cmism:getObjectRelationshipsResponse" />
-	</message>
-
-	<message name="getRepositoriesRequest">
-		<part name="parameters" element="cmism:getRepositories" />
-	</message>
-	<message name="getRepositoriesResponse">
-		<part name="parameters" element="cmism:getRepositoriesResponse" />
-	</message>
-	<message name="getRepositoryInfoRequest">
-		<part name="parameters" element="cmism:getRepositoryInfo" />
-	</message>
-	<message name="getRepositoryInfoResponse">
-		<part name="parameters" element="cmism:getRepositoryInfoResponse" />
-	</message>
-	<message name="getTypeChildrenRequest">
-		<part name="parameters" element="cmism:getTypeChildren" />
-	</message>
-	<message name="getTypeChildrenResponse">
-		<part name="parameters" element="cmism:getTypeChildrenResponse" />
-	</message>
-	<message name="getTypeDescendantsRequest">
-		<part name="parameters" element="cmism:getTypeDescendants" />
-	</message>
-	<message name="getTypeDescendantsResponse">
-		<part name="parameters" element="cmism:getTypeDescendantsResponse" />
-	</message>
-	<message name="getTypeDefinitionRequest">
-		<part name="parameters" element="cmism:getTypeDefinition" />
-	</message>
-	<message name="getTypeDefinitionResponse">
-		<part name="parameters" element="cmism:getTypeDefinitionResponse" />
-	</message>
-
-	<message name="checkOutRequest">
-		<part name="parameters" element="cmism:checkOut" />
-	</message>
-	<message name="checkOutResponse">
-		<part name="parameters" element="cmism:checkOutResponse" />
-	</message>
-	<message name="cancelCheckOutRequest">
-		<part name="parameters" element="cmism:cancelCheckOut" />
-	</message>
-	<message name="cancelCheckOutResponse">
-		<part name="parameters" element="cmism:cancelCheckOutResponse" />
-	</message>
-	<message name="checkInRequest">
-		<part name="parameters" element="cmism:checkIn" />
-	</message>
-	<message name="checkInResponse">
-		<part name="parameters" element="cmism:checkInResponse" />
-	</message>
-	<message name="getObjectOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getObjectOfLatestVersion" />
-	</message>
-	<message name="getObjectOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getObjectOfLatestVersionResponse" />
-	</message>	
-	<message name="getPropertiesOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersion" />
-	</message>
-	<message name="getPropertiesOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersionResponse" />
-	</message>
-	<message name="getAllVersionsRequest">
-		<part name="parameters" element="cmism:getAllVersions" />
-	</message>
-	<message name="getAllVersionsResponse">
-		<part name="parameters" element="cmism:getAllVersionsResponse" />
-	</message>
-
-	<message name="getFolderTreeRequest">
-		<part name="parameters" element="cmism:getFolderTree" />
-	</message>
-	<message name="getFolderTreeResponse">
-		<part name="parameters" element="cmism:getFolderTreeResponse" />
-	</message>
-
-	<portType name="DiscoveryServicePort">
-		<operation name="query">
-			<input message="cmisw:queryRequest" />
-			<output message="cmisw:queryResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentChanges">
-			<input message="cmisw:getContentChangesRequest" />
-			<output message="cmisw:getContentChangesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="MultiFilingServicePort">
-		<operation name="addObjectToFolder">
-			<input message="cmisw:addObjectToFolderRequest" />
-			<output message="cmisw:addObjectToFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<input message="cmisw:removeObjectFromFolderRequest" />
-			<output message="cmisw:removeObjectFromFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="NavigationServicePort">
-		<operation name="getDescendants">
-			<input message="cmisw:getDescendantsRequest" />
-			<output message="cmisw:getDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getChildren">
-			<input message="cmisw:getChildrenRequest" />
-			<output message="cmisw:getChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderParent">
-			<input message="cmisw:getFolderParentRequest" />
-			<output message="cmisw:getFolderParentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderTree">
-			<input message="cmisw:getFolderTreeRequest" />
-			<output message="cmisw:getFolderTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectParents">
-			<input message="cmisw:getObjectParentsRequest" />
-			<output message="cmisw:getObjectParentsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<input message="cmisw:getCheckedOutDocsRequest" />
-			<output message="cmisw:getCheckedOutDocsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ObjectServicePort">
-		<operation name="createDocument">
-			<input message="cmisw:createDocumentRequest" />
-			<output message="cmisw:createDocumentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createDocumentFromSource">
-			<input message="cmisw:createDocumentFromSourceRequest" />
-			<output message="cmisw:createDocumentFromSourceResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createFolder">
-			<input message="cmisw:createFolderRequest" />
-			<output message="cmisw:createFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createRelationship">
-			<input message="cmisw:createRelationshipRequest" />
-			<output message="cmisw:createRelationshipResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createPolicy">
-			<input message="cmisw:createPolicyRequest" />
-			<output message="cmisw:createPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllowableActions">
-			<input message="cmisw:getAllowableActionsRequest" />
-			<output message="cmisw:getAllowableActionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObject">
-			<input message="cmisw:getObjectRequest" />
-			<output message="cmisw:getObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getProperties">
-			<input message="cmisw:getPropertiesRequest" />
-			<output message="cmisw:getPropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRenditions">
-			<input message="cmisw:getRenditionsRequest" />
-			<output message="cmisw:getRenditionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectByPath">
-			<input message="cmisw:getObjectByPathRequest" />
-			<output message="cmisw:getObjectByPathResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentStream">
-			<input message="cmisw:getContentStreamRequest" />
-			<output message="cmisw:getContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="updateProperties">
-			<input message="cmisw:updatePropertiesRequest" />
-			<output message="cmisw:updatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="moveObject">
-			<input message="cmisw:moveObjectRequest" />
-			<output message="cmisw:moveObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteObject">
-			<input message="cmisw:deleteObjectRequest" />
-			<output message="cmisw:deleteObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteTree">
-			<input message="cmisw:deleteTreeRequest" />
-			<output message="cmisw:deleteTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="setContentStream">
-			<input message="cmisw:setContentStreamRequest" />
-			<output message="cmisw:setContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteContentStream">
-			<input message="cmisw:deleteContentStreamRequest" />
-			<output message="cmisw:deleteContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="PolicyServicePort">
-		<operation name="applyPolicy">
-			<input message="cmisw:applyPolicyRequest" />
-			<output message="cmisw:applyPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removePolicy">
-			<input message="cmisw:removePolicyRequest" />
-			<output message="cmisw:removePolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAppliedPolicies">
-			<input message="cmisw:getAppliedPoliciesRequest" />
-			<output message="cmisw:getAppliedPoliciesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="RelationshipServicePort">
-		<operation name="getObjectRelationships">
-			<input message="cmisw:getObjectRelationshipsRequest" />
-			<output message="cmisw:getObjectRelationshipsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="RepositoryServicePort">
-		<operation name="getRepositories">
-			<input message="cmisw:getRepositoriesRequest" />
-			<output message="cmisw:getRepositoriesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRepositoryInfo">
-			<input message="cmisw:getRepositoryInfoRequest" />
-			<output message="cmisw:getRepositoryInfoResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeChildren">
-			<input message="cmisw:getTypeChildrenRequest" />
-			<output message="cmisw:getTypeChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDescendants">
-			<input message="cmisw:getTypeDescendantsRequest" />
-			<output message="cmisw:getTypeDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDefinition">
-			<input message="cmisw:getTypeDefinitionRequest" />
-			<output message="cmisw:getTypeDefinitionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="VersioningServicePort">
-		<operation name="checkOut">
-			<input message="cmisw:checkOutRequest" />
-			<output message="cmisw:checkOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="cancelCheckOut">
-			<input message="cmisw:cancelCheckOutRequest" />
-			<output message="cmisw:cancelCheckOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="checkIn">
-			<input message="cmisw:checkInRequest" />
-			<output message="cmisw:checkInResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<input message="cmisw:getObjectOfLatestVersionRequest" />
-			<output message="cmisw:getObjectOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<input message="cmisw:getPropertiesOfLatestVersionRequest" />
-			<output message="cmisw:getPropertiesOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllVersions">
-			<input message="cmisw:getAllVersionsRequest" />
-			<output message="cmisw:getAllVersionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ACLServicePort">
-		<operation name="getACL">
-			<input message="cmisw:getACLRequest" />
-			<output message="cmisw:getACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="applyACL">
-			<input message="cmisw:applyACLRequest" />
-			<output message="cmisw:applyACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-
-	<binding name="DiscoveryServicePortBinding" type="cmisw:DiscoveryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="query">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentChanges">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="MultiFilingServicePortBinding" type="cmisw:MultiFilingServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="addObjectToFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="NavigationServicePortBinding" type="cmisw:NavigationServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getDescendants">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getChildren">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderParent">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderTree">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectParents">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ObjectServicePortBinding" type="cmisw:ObjectServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="createDocument">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createDocumentFromSource">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createFolder">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createRelationship">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createPolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllowableActions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getProperties">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRenditions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectByPath">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateProperties">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="moveObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteObject">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteTree">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="setContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteContentStream">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="PolicyServicePortBinding" type="cmisw:PolicyServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="applyPolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removePolicy">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAppliedPolicies">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RelationshipServicePortBinding" type="cmisw:RelationshipServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getObjectRelationships">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RepositoryServicePortBinding" type="cmisw:RepositoryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getRepositories">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRepositoryInfo">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeChildren">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDescendants">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDefinition">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="VersioningServicePortBinding" type="cmisw:VersioningServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="checkOut">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="cancelCheckOut">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="checkIn">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllVersions">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ACLServicePortBinding" type="cmisw:ACLServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getACL">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="applyACL">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-
-
-	<service name="DiscoveryService">
-		<port name="DiscoveryServicePort" binding="cmisw:DiscoveryServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/DiscoveryService" />
-		</port>
-	</service>
-	<service name="MultiFilingService">
-		<port name="MultiFilingServicePort" binding="cmisw:MultiFilingServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/MultiFilingService" />
-		</port>
-	</service>
-	<service name="NavigationService">
-		<port name="NavigationServicePort" binding="cmisw:NavigationServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/NavigationService" />
-		</port>
-	</service>
-	<service name="ObjectService">
-		<port name="ObjectServicePort" binding="cmisw:ObjectServicePortBinding">
-			<soap:address location="<%cmisbase%>/ObjectService" />
-		</port>
-	</service>
-	<service name="PolicyService">
-		<port name="PolicyServicePort" binding="cmisw:PolicyServicePortBinding">
-			<soap:address location="<%cmisbase%>/PolicyService" />
-		</port>
-	</service>
-	<service name="RelationshipService">
-		<port name="RelationshipServicePort" binding="cmisw:RelationshipServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/RelationshipService" />
-		</port>
-	</service>
-	<service name="RepositoryService">
-		<port name="RepositoryServicePort" binding="cmisw:RepositoryServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/RepositoryService" />
-		</port>
-	</service>
-	<service name="VersioningService">
-		<port name="VersioningServicePort" binding="cmisw:VersioningServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/VersioningService" />
-		</port>
-	</service>
-	<service name="ACLService">
-		<port name="ACLServicePort" binding="cmisw:ACLServicePortBinding">
-			<soap:address location="<%cmisbase%>/ACLService" />
-		</port>
-	</service>
-
-</definitions>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Core.xsd.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Core.xsd.template
deleted file mode 100644
index 44ad01f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Core.xsd.template
+++ /dev/null
@@ -1,1396 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-	
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" version="1.0">
-
-	<!--  enums -->
-	<xs:simpleType name="enumDecimalPrecision">
-		<xs:restriction base="xs:integer">
-			<xs:enumeration value="32" />
-			<xs:enumeration value="64" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumContentStreamAllowed">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="notallowed" />
-			<xs:enumeration value="allowed" />
-			<xs:enumeration value="required" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCardinality">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="single" />
-			<xs:enumeration value="multi" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUpdatability">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="readonly" />
-			<xs:enumeration value="readwrite" />
-			<xs:enumeration value="whencheckedout" />
-			<xs:enumeration value="oncreate" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumDateTimeResolution">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="year" />
-			<xs:enumeration value="date" />
-			<xs:enumeration value="time" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumPropertyType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="boolean" />
-			<xs:enumeration value="id" />
-			<xs:enumeration value="integer" />
-			<xs:enumeration value="datetime" />
-			<xs:enumeration value="decimal" />
-			<xs:enumeration value="html" />
-			<xs:enumeration value="string" />
-			<xs:enumeration value="uri" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumBaseObjectTypeIds">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:document" />
-			<xs:enumeration value="cmis:folder" />
-			<xs:enumeration value="cmis:relationship" />
-			<xs:enumeration value="cmis:policy" />
-			<xs:enumeration value="cmis:item" />
-			<xs:enumeration value="cmis:secondary" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityQuery">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="metadataonly" />
-			<xs:enumeration value="fulltextonly" />
-			<xs:enumeration value="bothseparate" />
-			<xs:enumeration value="bothcombined" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityJoin">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="inneronly" />
-			<xs:enumeration value="innerandouter" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumCapabilityContentStreamUpdates">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="anytime" />
-			<xs:enumeration value="pwconly" />
-			<xs:enumeration value="none" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumVersioningState">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="checkedout" />
-			<xs:enumeration value="minor" />
-			<xs:enumeration value="major" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumUnfileObject">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="unfile" />
-			<xs:enumeration value="deletesinglefiled" />
-			<xs:enumeration value="delete" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumRelationshipDirection">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="either" />
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="enumIncludeRelationships">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="source" />
-			<xs:enumeration value="target" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!--  properties in CMIS -->
-	<xs:simpleType name="enumPropertiesBase">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:name" />
-			<xs:enumeration value="cmis:description" />
-			<xs:enumeration value="cmis:objectId" />
-			<xs:enumeration value="cmis:objectTypeId" />
-			<xs:enumeration value="cmis:baseTypeId" />
-			<xs:enumeration value="cmis:secondaryObjectTypeIds" />
-			<xs:enumeration value="cmis:createdBy" />
-			<xs:enumeration value="cmis:creationDate" />
-			<xs:enumeration value="cmis:lastModifiedBy" />
-			<xs:enumeration value="cmis:lastModificationDate" />
-			<xs:enumeration value="cmis:changeToken" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesDocument">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:isImmutable" />
-			<xs:enumeration value="cmis:isLatestVersion" />
-			<xs:enumeration value="cmis:isMajorVersion" />
-			<xs:enumeration value="cmis:isLatestMajorVersion" />
-			<xs:enumeration value="cmis:isPrivateWorkingCopy" />			
-			<xs:enumeration value="cmis:versionLabel" />
-			<xs:enumeration value="cmis:versionSeriesId" />
-			<xs:enumeration value="cmis:isVersionSeriesCheckedOut" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutBy" />
-			<xs:enumeration value="cmis:versionSeriesCheckedOutId" />
-			<xs:enumeration value="cmis:checkinComment" />
-			<xs:enumeration value="cmis:contentStreamLength" />
-			<xs:enumeration value="cmis:contentStreamMimeType" />
-			<xs:enumeration value="cmis:contentStreamFileName" />
-			<xs:enumeration value="cmis:contentStreamId" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesFolder">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:parentId" />
-			<xs:enumeration value="cmis:allowedChildObjectTypeIds" />
-			<xs:enumeration value="cmis:path" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumPropertiesRelationship">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:sourceId" />
-			<xs:enumeration value="cmis:targetId" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumPropertiesPolicy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:policyText" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:attributeGroup name="cmisUndefinedAttribute">
-		<xs:anyAttribute namespace="##other" processContents="lax" />
-	</xs:attributeGroup>
-
-	<!--  main cmis object -->
-	<xs:complexType name="cmisObjectType">
-		<xs:sequence>
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="relationship" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  if change log -->
-			<xs:element name="changeEventInfo" type="cmis:cmisChangeEventType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  ACL -->
-			<xs:element name="acl" type="cmis:cmisAccessControlListType"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="exactACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!-- Applied Policy IDs -->
-			<xs:element name="policyIds" type="cmis:cmisListOfIdsType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!--  Rendition -->
-			<xs:element name="rendition" type="cmis:cmisRenditionType"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<!--  extensions -->
-			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
-				namespace="##other" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- property bag -->
-
-	<xs:complexType name="cmisPropertiesType">
-		<xs:sequence>
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="property" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBoolean" type="cmis:cmisPropertyBoolean"
-					nillable="true" />
-				<xs:element name="propertyId" type="cmis:cmisPropertyId"
-					nillable="true" />
-				<xs:element name="propertyInteger" type="cmis:cmisPropertyInteger"
-					nillable="true" />
-				<xs:element name="propertyDateTime" type="cmis:cmisPropertyDateTime"
-					nillable="true" />
-				<xs:element name="propertyDecimal" type="cmis:cmisPropertyDecimal"
-					nillable="true" />
-				<xs:element name="propertyHtml" type="cmis:cmisPropertyHtml"
-					nillable="true" />
-				<xs:element name="propertyString" type="cmis:cmisPropertyString"
-					nillable="true" />
-				<xs:element name="propertyUri" type="cmis:cmisPropertyUri"
-					nillable="true" />
-			</xs:choice>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- start the prop definitions -->
-	<xs:complexType name="cmisProperty">
-		<xs:attribute name="propertyDefinitionId" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the property definition id for this
-					property instance. This is not required to be set when used
-					as a default value. This is required to be set when used for 
-					query result set or returning properties on an object.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="localName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the localname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="displayName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the displayname as defined by the property
-					definition.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attribute name="queryName" type="xs:string" use="optional">
-			<xs:annotation>
-				<xs:documentation>
-					This is the queryName. This must be specified if
-					this is the result of a query. If aliases are used, the alias is to
-					be specified here instead of the queryName.
-				</xs:documentation>
-			</xs:annotation>
-		</xs:attribute>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPropertyString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisPropertyUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisProperty">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:any processContents="lax" namespace="##other" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- cmis choice -->
-	<xs:complexType name="cmisChoice">
-		<xs:attribute name="displayName" type="xs:string" use="required" />
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceBoolean">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:boolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceId">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceInteger">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:integer" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDateTime">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:dateTime" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceDecimal">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:decimal" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceHtml">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-	<xs:complexType name="cmisChoiceString">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:string" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisChoiceUri">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisChoice">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="value"
-						type="xs:anyURI" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!--  allowable actions -->
-	<xs:complexType name="cmisAllowableActionsType">
-		<xs:sequence>
-			<xs:element name="canDeleteObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canUpdateProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetProperties" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectRelationships" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetObjectParents" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetFolderParent" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetDescendants" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canMoveObject" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCancelCheckOut" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCheckIn" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canSetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canAddObjectToFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemoveObjectFromFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetContentStream" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canApplyPolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetAppliedPolicies" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canRemovePolicy" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canGetChildren" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateDocument" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateFolder" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateRelationship" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canCreateItem" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="canDeleteTree" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- renditions -->
-			<xs:element name="canGetRenditions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- ACL -->
-			<xs:element name="canGetACL" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="canApplyACL" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<xs:complexType name="cmisListOfIdsType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- bulkUpdateProperties -->
-	<xs:complexType name="cmisObjectIdAndChangeTokenType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="newId" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="changeToken" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisBulkUpdateType">
-		<xs:sequence>
-			<xs:element name="objectIdAndChangeToken" type="cmis:cmisObjectIdAndChangeTokenType"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="properties" type="cmis:cmisPropertiesType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="addSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="removeSecondaryTypeIds" type="xs:string"
-				minOccurs="0" maxOccurs="unbounded" />
-				
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- Property Attributes -->
-	<xs:complexType name="cmisPropertyDefinitionType">
-		<xs:sequence>
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="propertyType" type="cmis:enumPropertyType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="cardinality" type="cmis:enumCardinality"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="updatability" type="cmis:enumUpdatability"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- flags -->
-			<xs:element name="inherited" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="required" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="orderable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-
-			<xs:element name="openChoice" type="xs:boolean" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!--  type specific definitions -->
-	<xs:complexType name="cmisPropertyBooleanDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyBoolean" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceBoolean" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIdDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyId" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceId" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyIntegerDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyInteger" />
-					<xs:element name="maxValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:integer" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceInteger" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDateTimeDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDateTime" />
-					<xs:element minOccurs="0" maxOccurs="1" name="resolution"
-						type="cmis:enumDateTimeResolution" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDateTime" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyDecimalDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyDecimal" />
-					<xs:element name="maxValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="minValue" type="xs:decimal" minOccurs="0"
-						maxOccurs="1" />
-					<xs:element name="precision" type="cmis:enumDecimalPrecision"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceDecimal" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyHtmlDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyHtml" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceHtml" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyStringDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyString" />
-					<xs:element name="maxLength" type="xs:integer"
-						minOccurs="0" maxOccurs="1" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceString" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisPropertyUriDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisPropertyDefinitionType">
-				<xs:sequence>
-					<xs:element minOccurs="0" maxOccurs="1" name="defaultValue"
-						type="cmis:cmisPropertyUri" />
-					<xs:element minOccurs="0" maxOccurs="unbounded" name="choice"
-						type="cmis:cmisChoiceUri" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-
-
-	<!-- type definition -->
-	<xs:complexType name="cmisTypeDefinitionType">
-		<xs:sequence>
-			<!--  primary identifying attribute -->
-			<xs:element name="id" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:anyURI"
-				minOccurs="1" maxOccurs="1" nillable="true" />
-			<xs:element name="displayName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="queryName" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-
-			<!--  base type -->
-			<xs:element name="baseId" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="1" maxOccurs="1" />
-
-			<!-- parent -->
-			<xs:element name="parentId" type="xs:string" minOccurs="0"
-				maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						This is the id for the parent type definition.
-						If this is a base type, this is MUST NOT be present.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<!-- flags -->
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" default="true" />
-
-			<!-- controllable -->
-			<xs:element name="controllablePolicy" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-				
-			<!-- type mutability-->
-			<xs:element name="typeMutability" type="cmis:cmisTypeMutabilityCapabilitiesType"
-				minOccurs="0" maxOccurs="1" />
-
-			<!-- property definitions -->
-			<xs:choice minOccurs="0" maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:appinfo>
-						<jaxb:property name="propertyDefinition" />
-					</xs:appinfo>
-				</xs:annotation>
-				<xs:element name="propertyBooleanDefinition" type="cmis:cmisPropertyBooleanDefinitionType" />
-				<xs:element name="propertyDateTimeDefinition" type="cmis:cmisPropertyDateTimeDefinitionType" />
-				<xs:element name="propertyDecimalDefinition" type="cmis:cmisPropertyDecimalDefinitionType" />
-				<xs:element name="propertyIdDefinition" type="cmis:cmisPropertyIdDefinitionType" />
-				<xs:element name="propertyIntegerDefinition" type="cmis:cmisPropertyIntegerDefinitionType" />
-				<xs:element name="propertyHtmlDefinition" type="cmis:cmisPropertyHtmlDefinitionType" />
-				<xs:element name="propertyStringDefinition" type="cmis:cmisPropertyStringDefinitionType" />
-				<xs:element name="propertyUriDefinition" type="cmis:cmisPropertyUriDefinitionType" />
-			</xs:choice>
-
-			<!-- extension -->
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-	<!-- type specific typedefs -->
-	<xs:complexType name="cmisTypeDocumentDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="versionable" type="xs:boolean"
-						minOccurs="1" maxOccurs="1" />
-					<xs:element name="contentStreamAllowed" type="cmis:enumContentStreamAllowed"
-						minOccurs="1" maxOccurs="1" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeFolderDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeRelationshipDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-					<xs:element name="allowedSourceTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-					<xs:element name="allowedTargetTypes" type="xs:string"
-						minOccurs="0" maxOccurs="unbounded" />
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypePolicyDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeItemDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="cmisTypeSecondaryDefinitionType">
-		<xs:complexContent>
-			<xs:extension base="cmis:cmisTypeDefinitionType">
-				<xs:sequence>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>	
-
-	<!--  query -->
-	<xs:complexType name="cmisQueryType">
-		<xs:sequence>
-			<xs:element name="statement" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="searchAllVersions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="includeAllowableActions" type="xs:boolean"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="renditionFilter" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-
-			<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-
-			<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-
-
-	<!--  repository info -->
-	<xs:complexType name="cmisRepositoryInfoType">
-		<xs:sequence minOccurs="1">
-			<xs:element name="repositoryId" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="repositoryDescription" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="vendorName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="productVersion" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="rootFolderId" type="xs:string" minOccurs="1"
-				maxOccurs="1"/>
-			<xs:element name="latestChangeLogToken" type="xs:string"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="capabilities" type="cmis:cmisRepositoryCapabilitiesType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="aclCapability" type="cmis:cmisACLCapabilityType"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="cmisVersionSupported" type="xs:string"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="thinClientURI" type="xs:anyURI"
-				minOccurs="0" maxOccurs="1" />
-			<xs:element name="changesIncomplete" type="xs:boolean"
-				maxOccurs="1" minOccurs="0" />
-			<xs:element name="changesOnType" type="cmis:enumBaseObjectTypeIds"
-				minOccurs="0" maxOccurs="unbounded" />
-
-			<xs:element name="principalAnonymous" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for anonymous access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						anonymous users should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="principalAnyone" type="xs:string"
-				minOccurs="0" maxOccurs="1">
-				<xs:annotation>
-					<xs:documentation>
-						If set, this field holds the principal who is
-						used for everyone's access. This principal can then be 
-						passed to the ACL services to specify what permissions
-						everyone should have.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-
-			<xs:element name="extendedFeatures"
-				type="cmis:cmisExtensionFeatureType" maxOccurs="unbounded" minOccurs="0">
-			</xs:element>
-
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisRepositoryCapabilitiesType">
-		<xs:sequence>
-			<xs:element name="capabilityACL" type="cmis:enumCapabilityACL"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityChanges" type="cmis:enumCapabilityChanges" />
-
-			<xs:element name="capabilityContentStreamUpdatability"
-				type="cmis:enumCapabilityContentStreamUpdates" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="capabilityGetDescendants" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityGetFolderTree" type="xs:boolean"
-				maxOccurs="1" minOccurs="1" />
-			<xs:element name="capabilityOrderBy" type="cmis:enumCapabilityOrderBy"
-				maxOccurs="1" minOccurs="1" />
-
-			<xs:element name="capabilityMultifiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCSearchable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityPWCUpdatable" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityQuery" type="cmis:enumCapabilityQuery"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityRenditions" type="cmis:enumCapabilityRendition"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityUnfiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="capabilityJoin" type="cmis:enumCapabilityJoin"
-				minOccurs="1" maxOccurs="1" />
-
-			<xs:element name="capabilityCreatablePropertyTypes"
-				type="cmis:cmisCreatablePropertyTypesType" maxOccurs="1" minOccurs="0">
-			</xs:element>
-			<xs:element name="capabilityNewTypeSettableAttributes"
-				type="cmis:cmisNewTypeSettableAttributes" maxOccurs="1" minOccurs="0">
-			</xs:element>
-
-			<!-- extension -->
-			<xs:any namespace="##other" processContents="skip" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<!-- Unified Search -->
-	<xs:simpleType name="enumTypeOfChanges">
-		<xs:restriction base="xs:string">
-			<!-- content with a new ID has been created -->
-			<xs:enumeration value="created" />
-			<!-- content with an existing ID has been modified -->
-			<xs:enumeration value="updated" />
-			<!-- content with an existing ID has been deleted -->
-			<xs:enumeration value="deleted" />
-			<!-- content with an existing ID has had its security policy changed-->
-			<xs:enumeration value="security" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityChanges">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="objectidsonly" />
-			<xs:enumeration value="properties" />
-			<xs:enumeration value="all" />
-		</xs:restriction>
-	</xs:simpleType>
-	
-	<xs:simpleType name="enumCapabilityOrderBy">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="common" />
-			<xs:enumeration value="custom" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisChangeEventType">
-		<xs:sequence>
-			<xs:element name="changeType" type="cmis:enumTypeOfChanges" />
-			<xs:element name="changeTime" type="xs:dateTime" />
-
-			<!--  extension -->
-			<xs:any processContents="lax" namespace="##other" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- ACL -->
-	<xs:simpleType name="enumACLPropagation">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="repositorydetermined" />
-			<xs:enumeration value="objectonly" />
-			<xs:enumeration value="propagate" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumCapabilityACL">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="discover" />
-			<xs:enumeration value="manage" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumBasicPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:read" />
-			<xs:enumeration value="cmis:write" />
-			<xs:enumeration value="cmis:all" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisPermissionDefinition">
-		<xs:sequence>
-			<xs:element name="permission" type="xs:string" />
-			<xs:element name="description" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" processContents="lax"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisPermissionMapping">
-		<xs:sequence>
-			<xs:element name="key" type="cmis:enumAllowableActionsKey"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded">
-				<xs:annotation>
-					<xs:documentation>
-						Multiple entries are OR'ed together. Any
-						permission that specified is sufficient to 
-						provide rights required in key
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<xs:simpleType name="enumAllowableActionsKey">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="canGetDescendents.Folder" />
-			<xs:enumeration value="canGetChildren.Folder" />
-			<xs:enumeration value="canGetParents.Folder" />
-			<xs:enumeration value="canGetFolderParent.Object" />
-			<xs:enumeration value="canCreateDocument.Folder" />
-			<xs:enumeration value="canCreateFolder.Folder" />
-			<xs:enumeration value="canCreateRelationship.Source" />
-			<xs:enumeration value="canCreateRelationship.Target" />
-			<xs:enumeration value="canGetProperties.Object" />
-			<xs:enumeration value="canViewContent.Object" />
-			<xs:enumeration value="canUpdateProperties.Object" />
-			<xs:enumeration value="canMove.Object" />
-			<xs:enumeration value="canMove.Target" />
-			<xs:enumeration value="canMove.Source" />
-			<xs:enumeration value="canDelete.Object" />
-			<xs:enumeration value="canDeleteTree.Folder" />
-			<xs:enumeration value="canSetContent.Document" />
-			<xs:enumeration value="canDeleteContent.Document" />
-			<xs:enumeration value="canAddToFolder.Object" />
-			<xs:enumeration value="canAddToFolder.Folder" />
-			<xs:enumeration value="canRemoveFromFolder.Object" />
-			<xs:enumeration value="canRemoveFromFolder.Folder" />
-			<xs:enumeration value="canCheckout.Document" />
-			<xs:enumeration value="canCancelCheckout.Document" />
-			<xs:enumeration value="canCheckin.Document" />
-			<xs:enumeration value="canGetAllVersions.VersionSeries" />
-			<xs:enumeration value="canGetObjectRelationships.Object" />
-			<xs:enumeration value="canAddPolicy.Object" />
-			<xs:enumeration value="canAddPolicy.Policy" />
-			<xs:enumeration value="canRemovePolicy.Object" />
-			<xs:enumeration value="canRemovePolicy.Policy" />
-			<xs:enumeration value="canGetAppliedPolicies.Object" />
-			<xs:enumeration value="canGetACL.Object" />
-			<xs:enumeration value="canApplyACL.Object" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumUsers">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:user">
-				<xs:annotation>
-					<xs:documentation>
-						This user can be used on setting ACLs to specify
-						the permission this
-						user context should have.
-			</xs:documentation>
-				</xs:annotation>
-			</xs:enumeration>
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- ACL on objects -->
-	<xs:complexType name="cmisAccessControlPrincipalType">
-		<xs:sequence>
-			<xs:element name="principalId" type="xs:string" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlEntryType">
-		<xs:sequence>
-			<xs:element name="principal" type="cmis:cmisAccessControlPrincipalType" />
-			<xs:element name="permission" type="xs:string" minOccurs="1"
-				maxOccurs="unbounded" />
-			<xs:element name="direct" type="xs:boolean" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisAccessControlListType">
-		<xs:sequence>
-			<xs:element name="permission" type="cmis:cmisAccessControlEntryType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLCapabilityType">
-		<xs:sequence>
-			<xs:element name="supportedPermissions" type="cmis:enumSupportedPermissions" />
-			<xs:element name="propagation" type="cmis:enumACLPropagation" />
-			<xs:element name="permissions" type="cmis:cmisPermissionDefinition"
-				minOccurs="1" maxOccurs="unbounded" />
-			<xs:element name="mapping" type="cmis:cmisPermissionMapping"
-				minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:simpleType name="enumSupportedPermissions">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="basic" />
-			<xs:enumeration value="repository" />
-			<xs:enumeration value="both" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- renditions -->
-	<xs:simpleType name="enumCapabilityRendition">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="none" />
-			<xs:enumeration value="read" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:simpleType name="enumRenditionKind">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="cmis:thumbnail" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<xs:complexType name="cmisRenditionType">
-		<xs:sequence>
-			<xs:element name="streamId" type="xs:string" />
-			<xs:element name="mimetype" type="xs:string" />
-			<xs:element name="length" type="xs:integer" />
-			<xs:element name="kind" type="xs:string" />
-			<xs:element name="title" type="xs:string" minOccurs="0" />
-			<xs:element name="height" type="xs:integer" minOccurs="0" />
-			<xs:element name="width" type="xs:integer" minOccurs="0" />
-			<xs:element name="renditionDocumentId" type="xs:string"
-				minOccurs="0" />
-
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-
-
-	<!-- elements -->
-	<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS AllowableActions
-				Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-
-	<xs:element name="query" type="cmis:cmisQueryType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS Query Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	<xs:element name="acl" type="cmis:cmisAccessControlListType">
-		<xs:annotation>
-			<xs:documentation>
-				This is the root tag for a CMIS ACL Document Type
-			</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-	
-	<!-- type mutability -->
-	<xs:complexType name="cmisTypeMutabilityCapabilitiesType"> 
-		<xs:sequence> 
-			<xs:element name="create" type="xs:boolean"/>
-			<xs:element name="update" type="xs:boolean"/>
-			<xs:element name="delete" type="xs:boolean"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence> 
-	</xs:complexType> 
-
-	<xs:complexType name="cmisCreatablePropertyTypesType">
-		<xs:sequence>
-			<xs:element name="canCreate" type="cmis:enumPropertyType"
-				minOccurs="0" maxOccurs="unbounded"/>
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<xs:complexType name="cmisNewTypeSettableAttributes">
-		<xs:sequence>
-			<xs:element name="id" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="localNamespace" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="displayName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryName" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="description" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="creatable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fileable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="queryable" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="fulltextIndexed" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="includedInSupertypeQuery" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
-			<xs:element name="controllablePolicy" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-			<xs:element name="controllableACL" type="xs:boolean" minOccurs="1" maxOccurs="1" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<!-- feature extensions -->
-	<xs:complexType name="cmisExtensionFeatureKeyValuePair">	
-		<xs:sequence>
-			<xs:element minOccurs="1" maxOccurs="1" name="key" type="xs:string" />
-			<xs:element minOccurs="1" maxOccurs="1" name="value" type="xs:string" />
-		</xs:sequence>
-	</xs:complexType> 
-
-	<xs:complexType name="cmisExtensionFeatureType">	
-		<xs:sequence>
-			<!-- id is the only mandatory field - typically will be a URN-->
-			<xs:element minOccurs="1" maxOccurs="1" name="id" type="xs:anyURI" />
-			<!-- optional url for a site describing the extension -->
-			<xs:element minOccurs="0" maxOccurs="1" name="url" type="xs:anyURI" />
-			<!-- optional short name for standard i.e. FooStandard -->
-			<xs:element minOccurs="0" maxOccurs="1" name="commonName" type="xs:string" />
-			<!-- optional version label-->
-			<xs:element minOccurs="0" maxOccurs="1" name="versionLabel" type="xs:string" />
-			<xs:element minOccurs="0" maxOccurs="1" name="description" type="xs:string" />
-			<xs:element name="featureData" type="cmis:cmisExtensionFeatureKeyValuePair" minOccurs="0" maxOccurs="unbounded" />
-			<xs:any processContents="lax" namespace="##other" minOccurs="0" maxOccurs="unbounded" />
-		</xs:sequence>
-	</xs:complexType> 
-	
-</xs:schema>
-	<!-- EOF -->
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Messaging.xsd.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Messaging.xsd.template
deleted file mode 100644
index f730915..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMIS-Messaging.xsd.template
+++ /dev/null
@@ -1,2309 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0"
-	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-	jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"
-	elementFormDefault="qualified">
-
-	<xs:import schemaLocation="<%cmiscore%>"
-		namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-
-	<!-- exceptions -->
-	<xs:complexType name="cmisFaultType">
-		<xs:sequence>
-			<xs:element name="type" type="cmism:enumServiceException" />
-			<xs:element name="code" type="xs:integer" />
-			<xs:element name="message" type="xs:string" />
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-
-	<xs:element name="cmisFault" type="cmism:cmisFaultType" />
-	<xs:simpleType name="enumServiceException">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="constraint" />
-			<xs:enumeration value="nameConstraintViolation" />
-			<xs:enumeration value="contentAlreadyExists" />
-			<xs:enumeration value="filterNotValid" />
-			<xs:enumeration value="invalidArgument" />
-			<xs:enumeration value="notSupported" />
-			<xs:enumeration value="objectNotFound" />
-			<xs:enumeration value="permissionDenied" />
-			<xs:enumeration value="runtime" />
-			<xs:enumeration value="storage" />
-			<xs:enumeration value="streamNotSupported" />
-			<xs:enumeration value="updateConflict" />
-			<xs:enumeration value="versioning" />
-		</xs:restriction>
-	</xs:simpleType>
-
-	<!-- extension -->
-	<xs:complexType name="cmisExtensionType">
-		<xs:sequence>
-			<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" />
-		</xs:sequence>
-	</xs:complexType>
-	
-	<!-- types for WS -->
-	<xs:complexType name="cmisTypeContainer">
-		<xs:sequence>
-			<xs:element name="type" type="cmis:cmisTypeDefinitionType" 
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisTypeContainer"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisTypeDefinitionListType">
-		<xs:sequence>
-			<xs:element name="types" type="cmis:cmisTypeDefinitionType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderContainerType">
-		<xs:sequence>
-			<xs:element name="objectInFolder" type="cmism:cmisObjectInFolderType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="children" type="cmism:cmisObjectInFolderContainerType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />	
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmis:cmisObjectType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="pathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />		
-	</xs:complexType>
-
-	<xs:complexType name="cmisObjectParentsType">
-		<xs:sequence>
-			<xs:element name="object" type="cmis:cmisObjectType" 
-				minOccurs="1" maxOccurs="1"/>
-			<xs:element name="relativePathSegment" type="xs:string" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" /> 
-	</xs:complexType>
-	
-	<xs:complexType name="cmisObjectInFolderListType">
-		<xs:sequence>
-			<xs:element name="objects" type="cmism:cmisObjectInFolderType"
-				minOccurs="0" maxOccurs="unbounded" />
-			<xs:element name="hasMoreItems" type="xs:boolean"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="numItems" type="xs:integer" minOccurs="0"
-				maxOccurs="1" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<xs:complexType name="cmisRepositoryEntryType">
-		<xs:sequence>
-			<xs:element name="repositoryId" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:element name="repositoryName" type="xs:string" minOccurs="1"
-				maxOccurs="1" />
-			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-				processContents="lax" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisContentStreamType">
-		<xs:sequence>
-			<xs:element name="length" type="xs:integer" minOccurs="0" />
-			<xs:element name="mimeType" type="xs:string" minOccurs="0" />
-			<xs:element name="filename" type="xs:string" minOccurs="0" />
-			<xs:element name="stream" type="xs:base64Binary"
-				xmime:expectedContentTypes="application/octet-stream" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" />
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-
-	<xs:complexType name="cmisACLType">
-		<xs:sequence>
-			<xs:element name="ACL" type="cmis:cmisAccessControlListType"
-				minOccurs="1" maxOccurs="1" />
-			<xs:element name="exact" type="xs:boolean" 
-				minOccurs="0" maxOccurs="1"/>
-			<xs:any namespace="##other" processContents="lax" minOccurs="0"
-				maxOccurs="unbounded" />
-		</xs:sequence>
-		<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-	</xs:complexType>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Repository Services] -->
-	
-	<!-- getRepositories Operation -->
-	<xs:element name="getRepositories">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoriesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositories" type="cmism:cmisRepositoryEntryType"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- getRepositoryInfo Operation -->
-	<xs:element name="getRepositoryInfo">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRepositoryInfoResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryInfo" type="cmis:cmisRepositoryInfoType" 
-					minOccurs="1" maxOccurs="1"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeChildren Operation -->
-	<xs:element name="getTypeChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeDefinitionListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDescendants Operation -->
-	<xs:element name="getTypeDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePropertyDefinitions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="types" type="cmism:cmisTypeContainer"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getTypeDefinition Operation -->
-	<xs:element name="getTypeDefinition">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getTypeDefinitionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="0" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- createType Operation -->
-	<xs:element name="createType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateType Operation -->
-	<xs:element name="updateType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updateTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="type" type="cmis:cmisTypeDefinitionType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteType Operation -->
-	<xs:element name="deleteType">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="typeId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTypeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Navigation Services] -->
-	
-	<!-- getDescendants Operation -->
-	<xs:element name="getDescendants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getDescendantsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getDescendants Operation -->
-	<xs:element name="getFolderTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="depth" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderContainerType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getChildren Operation -->
-	<xs:element name="getChildren">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getChildrenResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectInFolderListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getFolderParent Operation -->
-	<xs:element name="getFolderParent">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getFolderParentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectParents Operation-->
-	<xs:element name="getObjectParents">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelativePathSegment" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectParentsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="parents" type="cmism:cmisObjectParentsType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getRenditions Operation -->
-	<xs:element name="getRenditions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getRenditionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="renditions" type="cmis:cmisRenditionType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getCheckedoutDocs Operation -->
-	<xs:element name="getCheckedOutDocs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="orderBy" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getCheckedOutDocsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Object Services] -->
-	
-	<!-- createDocument Operation -->
-	<xs:element name="createDocument">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createDocumentFromSource Operation -->
-	<xs:element name="createDocumentFromSource">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />					
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="versioningState" type="cmis:enumVersioningState"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createDocumentFromSourceResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createFolder Operation -->
-	<xs:element name="createFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createRelationship Operation -->
-	<xs:element name="createRelationship">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createRelationshipResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- createPolicy Operation -->
-	<xs:element name="createPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- createItem Operation -->
-	<xs:element name="createItem">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="createItemResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1" maxOccurs="1" />
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	
-	<!-- getAllowableActions Operation -->
-	<xs:element name="getAllowableActions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllowableActionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="allowableActions" type="cmis:cmisAllowableActionsType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getProperties Operation -->
-	<xs:element name="getProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObject Operation -->
-	<xs:element name="getObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectByPath Operation -->
-	<xs:element name="getObjectByPath">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="path" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectByPathResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentStream Operation -->
-	<xs:element name="getContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="streamId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="offset" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="length" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- updateProperties Operation -->
-	<xs:element name="updateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<!--
-					if objectId is present in the properties the value must match this
-					objectId
-				-->
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="updatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- bulkUpdateProperties Operation -->
-	<xs:element name="bulkUpdateProperties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="bulkUpdateData" type="cmis:cmisBulkUpdateType"
-					minOccurs="1" maxOccurs="1" />
-					
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="bulkUpdatePropertiesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectIdAndChangeToken" type="cmis:cmisObjectIdAndChangeTokenType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- moveObject Operation -->
-	<xs:element name="moveObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="targetFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="sourceFolderId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="moveObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteObject Operation -->
-	<xs:element name="deleteObject">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteObjectResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteTree Operation -->
-	<xs:element name="deleteTree">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="unfileObjects" type="cmis:enumUnfileObject"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="continueOnFailure" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteTreeResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="failedToDelete">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="objectIds" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-							<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-								processContents="lax" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- setContentStream Operation -->
-	<xs:element name="setContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="overwriteFlag" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="setContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- appendContentStream Operation -->
-	<xs:element name="appendContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="isLastChunk" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="appendContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- deleteContentStream Operation -->
-	<xs:element name="deleteContentStream">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="deleteContentStreamResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="changeToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" />
-				
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Multi-filing Services]-->
-
-	<!-- addObjectToFolder Operation -->
-	<xs:element name="addObjectToFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="allVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="addObjectToFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removeObjectFromFolder Operation -->
-	<xs:element name="removeObjectFromFolder">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="folderId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removeObjectFromFolderResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Discovery Services] -->
-	
-	<!-- query Operation -->
-	<xs:element name="query">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="statement" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="searchAllVersions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-			<xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="queryResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getContentChanges operation -->
-	<xs:element name="getContentChanges">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeProperties" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getContentChangesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="changeLogToken" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!-- [Versioning Services] -->
-
-	<!-- checkOut Operation -->
-	<xs:element name="checkOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="contentCopied" type="xs:boolean"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- cancelCheckOut Operation -->
-	<xs:element name="cancelCheckOut">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cancelCheckOutResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- checkIn Operation -->
-	<xs:element name="checkIn">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="contentStream" type="cmism:cmisContentStreamType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="checkinComment" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="policies" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" nillable="true" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="checkInResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getPropertiesOfLatestVersion -->
-	<xs:element name="getPropertiesOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getPropertiesOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="properties" type="cmis:cmisPropertiesType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getObjectOfLatestVersion Operation -->
-	<xs:element name="getObjectOfLatestVersion">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="major" type="xs:boolean" minOccurs="0"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" 
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeRelationships" type="cmis:enumIncludeRelationships"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="renditionFilter" type="xs:string"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includePolicyIds" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="includeACL" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectOfLatestVersionResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="object" type="cmis:cmisObjectType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAllVersions Operation -->
-	<xs:element name="getAllVersions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAllVersionsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Relationship Services]-->
-
-	<!-- getRelationships Operation -->
-	<xs:element name="getObjectRelationships">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="includeSubRelationshipTypes" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="relationshipDirection" type="cmis:enumRelationshipDirection"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-				<xs:element name="typeId" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="includeAllowableActions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="maxItems" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-				<xs:element name="skipCount" type="xs:integer" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getObjectRelationshipsResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmism:cmisObjectListType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-	<!--[Policy Services]-->
-
-	<!-- applyPolicy Operation -->
-	<xs:element name="applyPolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyPolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- removePolicy Operation -->
-	<xs:element name="removePolicy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="policyId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="removePolicyResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getAppliedPolicies Operation -->
-	<xs:element name="getAppliedPolicies">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="filter" type="xs:string" minOccurs="0"
-					maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getAppliedPoliciesResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="objects" type="cmis:cmisObjectType"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- getACL Operation -->
-	<xs:element name="getACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="onlyBasicPermissions" type="xs:boolean"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-						</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="getACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>	
-	</xs:element>
-	
-	<!-- applyACL Operation -->
-	<xs:element name="applyACL">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="repositoryId" type="xs:string"
-					minOccurs="1" maxOccurs="1" />
-				<xs:element name="objectId" type="xs:string" minOccurs="1"
-					maxOccurs="1" />
-				<xs:element name="addACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="removeACEs" type="cmis:cmisAccessControlListType"
-					minOccurs="0" maxOccurs="1" />
-				<xs:element name="ACLPropagation" type="cmis:enumACLPropagation"
-					minOccurs="0" maxOccurs="1" nillable="true" />
-
-				<xs:element name="extension" type="cmism:cmisExtensionType"
-					minOccurs="0" maxOccurs="1" nillable="true">
-					<xs:annotation>
-						<xs:documentation>
-							This is an extension element to hold any
-							repository or
-							vendor-specific extensions
-					</xs:documentation>
-					</xs:annotation>
-				</xs:element>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="applyACLResponse">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ACL" type="cmism:cmisACLType"
-					minOccurs="1" maxOccurs="1" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-
-</xs:schema>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMISWS-Service.wsdl.template b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMISWS-Service.wsdl.template
deleted file mode 100644
index 9d049a3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11/CMISWS-Service.wsdl.template
+++ /dev/null
@@ -1,1311 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-	<!--
-		Licensed under the Apache License, Version 2.0 (the "License"); you
-		may not use this file except in compliance with the License. You may
-		obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-		applicable law or agreed to in writing, software distributed under the
-		License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-		CONDITIONS OF ANY KIND, either express or implied. See the License for
-		the specific language governing permissions and limitations under the
-		License.
-	-->
-
-<definitions xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmism="http://docs.oasis-open.org/ns/cmis/messaging/200908/"
-	xmlns:cmisw="http://docs.oasis-open.org/ns/cmis/ws/200908/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/"
-	xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" name="CMISWebServices">
-	<types>
-		<xsd:schema elementFormDefault="qualified"
-			targetNamespace="http://docs.oasis-open.org/ns/cmis/ws/200908/">
-			<xsd:import schemaLocation="<%cmiscore%>"
-				namespace="http://docs.oasis-open.org/ns/cmis/core/200908/" />
-			<xsd:import schemaLocation="<%cmismsg%>"
-				namespace="http://docs.oasis-open.org/ns/cmis/messaging/200908/" />
-		</xsd:schema>
-	</types>
-
-	<message name="cmisException">
-		<part name="fault" element="cmism:cmisFault" />
-	</message>
-
-	<message name="getACLRequest">
-		<part name="parameters" element="cmism:getACL" />
-	</message>
-	<message name="getACLResponse">
-		<part name="parameters" element="cmism:getACLResponse" />
-	</message>
-
-	<message name="applyACLRequest">
-		<part name="parameters" element="cmism:applyACL" />
-	</message>
-	<message name="applyACLResponse">
-		<part name="parameters" element="cmism:applyACLResponse" />
-	</message>
-
-	<message name="queryRequest">
-		<part name="parameters" element="cmism:query" />
-	</message>
-	<message name="queryResponse">
-		<part name="parameters" element="cmism:queryResponse" />
-	</message>
-	<message name="getContentChangesRequest">
-		<part name="parameters" element="cmism:getContentChanges" />
-	</message>
-	<message name="getContentChangesResponse">
-		<part name="parameters" element="cmism:getContentChangesResponse" />
-	</message>
-
-	<message name="addObjectToFolderRequest">
-		<part name="parameters" element="cmism:addObjectToFolder" />
-	</message>
-	<message name="addObjectToFolderResponse">
-		<part name="parameters" element="cmism:addObjectToFolderResponse" />
-	</message>
-	<message name="removeObjectFromFolderRequest">
-		<part name="parameters" element="cmism:removeObjectFromFolder" />
-	</message>
-	<message name="removeObjectFromFolderResponse">
-		<part name="parameters" element="cmism:removeObjectFromFolderResponse" />
-	</message>
-
-	<message name="getDescendantsRequest">
-		<part name="parameters" element="cmism:getDescendants" />
-	</message>
-	<message name="getDescendantsResponse">
-		<part name="parameters" element="cmism:getDescendantsResponse" />
-	</message>
-	<message name="getChildrenRequest">
-		<part name="parameters" element="cmism:getChildren" />
-	</message>
-	<message name="getChildrenResponse">
-		<part name="parameters" element="cmism:getChildrenResponse" />
-	</message>
-	<message name="getFolderParentRequest">
-		<part name="parameters" element="cmism:getFolderParent" />
-	</message>
-	<message name="getFolderParentResponse">
-		<part name="parameters" element="cmism:getFolderParentResponse" />
-	</message>
-	<message name="getObjectParentsRequest">
-		<part name="parameters" element="cmism:getObjectParents" />
-	</message>
-	<message name="getObjectParentsResponse">
-		<part name="parameters" element="cmism:getObjectParentsResponse" />
-	</message>
-	<message name="getRenditionsRequest">
-		<part name="parameters" element="cmism:getRenditions" />
-	</message>
-	<message name="getRenditionsResponse">
-		<part name="parameters" element="cmism:getRenditionsResponse" />
-	</message>
-	<message name="getCheckedOutDocsRequest">
-		<part name="parameters" element="cmism:getCheckedOutDocs" />
-	</message>
-	<message name="getCheckedOutDocsResponse">
-		<part name="parameters" element="cmism:getCheckedOutDocsResponse" />
-	</message>
-
-	<message name="createDocumentRequest">
-		<part name="parameters" element="cmism:createDocument" />
-	</message>
-	<message name="createDocumentResponse">
-		<part name="parameters" element="cmism:createDocumentResponse" />
-	</message>
-	<message name="createDocumentFromSourceRequest">
-		<part name="parameters" element="cmism:createDocumentFromSource" />
-	</message>
-	<message name="createDocumentFromSourceResponse">
-		<part name="parameters" element="cmism:createDocumentFromSourceResponse" />
-	</message>
-	<message name="createFolderRequest">
-		<part name="parameters" element="cmism:createFolder" />
-	</message>
-	<message name="createFolderResponse">
-		<part name="parameters" element="cmism:createFolderResponse" />
-	</message>
-	<message name="createRelationshipRequest">
-		<part name="parameters" element="cmism:createRelationship" />
-	</message>
-	<message name="createRelationshipResponse">
-		<part name="parameters" element="cmism:createRelationshipResponse" />
-	</message>
-	<message name="createPolicyRequest">
-		<part name="parameters" element="cmism:createPolicy" />
-	</message>
-	<message name="createPolicyResponse">
-		<part name="parameters" element="cmism:createPolicyResponse" />
-	</message>
-		<message name="createItemRequest">
-		<part name="parameters" element="cmism:createItem" />
-	</message>
-	<message name="createItemResponse">
-		<part name="parameters" element="cmism:createItemResponse" />
-	</message>
-	<message name="getAllowableActionsRequest">
-		<part name="parameters" element="cmism:getAllowableActions" />
-	</message>
-	<message name="getAllowableActionsResponse">
-		<part name="parameters" element="cmism:getAllowableActionsResponse" />
-	</message>
-	<message name="getObjectRequest">
-		<part name="parameters" element="cmism:getObject" />
-	</message>
-	<message name="getObjectResponse">
-		<part name="parameters" element="cmism:getObjectResponse" />
-	</message>
-	<message name="getPropertiesRequest">
-		<part name="parameters" element="cmism:getProperties" />
-	</message>
-	<message name="getPropertiesResponse">
-		<part name="parameters" element="cmism:getPropertiesResponse" />
-	</message>
-
-	<message name="getObjectByPathRequest">
-		<part name="parameters" element="cmism:getObjectByPath" />
-	</message>
-	<message name="getObjectByPathResponse">
-		<part name="parameters" element="cmism:getObjectByPathResponse" />
-	</message>
-
-	<message name="getContentStreamRequest">
-		<part name="parameters" element="cmism:getContentStream" />
-	</message>
-	<message name="getContentStreamResponse">
-		<part name="parameters" element="cmism:getContentStreamResponse" />
-	</message>
-	<message name="updatePropertiesRequest">
-		<part name="parameters" element="cmism:updateProperties" />
-	</message>
-	<message name="updatePropertiesResponse">
-		<part name="parameters" element="cmism:updatePropertiesResponse" />
-	</message>
-	<message name="bulkUpdatePropertiesRequest">
-		<part name="parameters" element="cmism:bulkUpdateProperties" />
-	</message>
-	<message name="bulkUpdatePropertiesResponse">
-		<part name="parameters" element="cmism:bulkUpdatePropertiesResponse" />
-	</message>
-	<message name="moveObjectRequest">
-		<part name="parameters" element="cmism:moveObject" />
-	</message>
-	<message name="moveObjectResponse">
-		<part name="parameters" element="cmism:moveObjectResponse" />
-	</message>
-	<message name="deleteObjectRequest">
-		<part name="parameters" element="cmism:deleteObject" />
-	</message>
-	<message name="deleteObjectResponse">
-		<part name="parameters" element="cmism:deleteObjectResponse" />
-	</message>
-	<message name="deleteTreeRequest">
-		<part name="parameters" element="cmism:deleteTree" />
-	</message>
-	<message name="deleteTreeResponse">
-		<part name="parameters" element="cmism:deleteTreeResponse" />
-	</message>
-	<message name="setContentStreamRequest">
-		<part name="parameters" element="cmism:setContentStream" />
-	</message>
-	<message name="setContentStreamResponse">
-		<part name="parameters" element="cmism:setContentStreamResponse" />
-	</message>
-	<message name="appendContentStreamRequest">
-		<part name="parameters" element="cmism:appendContentStream" />
-	</message>
-	<message name="appendContentStreamResponse">
-		<part name="parameters" element="cmism:appendContentStreamResponse" />
-	</message>
-	<message name="deleteContentStreamRequest">
-		<part name="parameters" element="cmism:deleteContentStream" />
-	</message>
-	<message name="deleteContentStreamResponse">
-		<part name="parameters" element="cmism:deleteContentStreamResponse" />
-	</message>
-
-	<message name="applyPolicyRequest">
-		<part name="parameters" element="cmism:applyPolicy" />
-	</message>
-	<message name="applyPolicyResponse">
-		<part name="parameters" element="cmism:applyPolicyResponse" />
-	</message>
-	<message name="removePolicyRequest">
-		<part name="parameters" element="cmism:removePolicy" />
-	</message>
-	<message name="removePolicyResponse">
-		<part name="parameters" element="cmism:removePolicyResponse" />
-	</message>
-	<message name="getAppliedPoliciesRequest">
-		<part name="parameters" element="cmism:getAppliedPolicies" />
-	</message>
-	<message name="getAppliedPoliciesResponse">
-		<part name="parameters" element="cmism:getAppliedPoliciesResponse" />
-	</message>
-
-	<message name="getObjectRelationshipsRequest">
-		<part name="parameters" element="cmism:getObjectRelationships" />
-	</message>
-	<message name="getObjectRelationshipsResponse">
-		<part name="parameters" element="cmism:getObjectRelationshipsResponse" />
-	</message>
-
-	<message name="getRepositoriesRequest">
-		<part name="parameters" element="cmism:getRepositories" />
-	</message>
-	<message name="getRepositoriesResponse">
-		<part name="parameters" element="cmism:getRepositoriesResponse" />
-	</message>
-	<message name="getRepositoryInfoRequest">
-		<part name="parameters" element="cmism:getRepositoryInfo" />
-	</message>
-	<message name="getRepositoryInfoResponse">
-		<part name="parameters" element="cmism:getRepositoryInfoResponse" />
-	</message>
-	<message name="getTypeChildrenRequest">
-		<part name="parameters" element="cmism:getTypeChildren" />
-	</message>
-	<message name="getTypeChildrenResponse">
-		<part name="parameters" element="cmism:getTypeChildrenResponse" />
-	</message>
-	<message name="getTypeDescendantsRequest">
-		<part name="parameters" element="cmism:getTypeDescendants" />
-	</message>
-	<message name="getTypeDescendantsResponse">
-		<part name="parameters" element="cmism:getTypeDescendantsResponse" />
-	</message>
-	<message name="getTypeDefinitionRequest">
-		<part name="parameters" element="cmism:getTypeDefinition" />
-	</message>
-	<message name="getTypeDefinitionResponse">
-		<part name="parameters" element="cmism:getTypeDefinitionResponse" />
-	</message>
-	<message name="createTypeRequest">
-		<part name="parameters" element="cmism:createType" />
-	</message>
-	<message name="createTypeResponse">
-		<part name="parameters" element="cmism:createTypeResponse" />
-	</message>
-	<message name="updateTypeRequest">
-		<part name="parameters" element="cmism:updateType" />
-	</message>
-	<message name="updateTypeResponse">
-		<part name="parameters" element="cmism:updateTypeResponse" />
-	</message>
-	<message name="deleteTypeRequest">
-		<part name="parameters" element="cmism:deleteType" />
-	</message>
-	<message name="deleteTypeResponse">
-		<part name="parameters" element="cmism:deleteTypeResponse" />
-	</message>
-
-	<message name="checkOutRequest">
-		<part name="parameters" element="cmism:checkOut" />
-	</message>
-	<message name="checkOutResponse">
-		<part name="parameters" element="cmism:checkOutResponse" />
-	</message>
-	<message name="cancelCheckOutRequest">
-		<part name="parameters" element="cmism:cancelCheckOut" />
-	</message>
-	<message name="cancelCheckOutResponse">
-		<part name="parameters" element="cmism:cancelCheckOutResponse" />
-	</message>
-	<message name="checkInRequest">
-		<part name="parameters" element="cmism:checkIn" />
-	</message>
-	<message name="checkInResponse">
-		<part name="parameters" element="cmism:checkInResponse" />
-	</message>
-	<message name="getObjectOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getObjectOfLatestVersion" />
-	</message>
-	<message name="getObjectOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getObjectOfLatestVersionResponse" />
-	</message>	
-	<message name="getPropertiesOfLatestVersionRequest">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersion" />
-	</message>
-	<message name="getPropertiesOfLatestVersionResponse">
-		<part name="parameters" element="cmism:getPropertiesOfLatestVersionResponse" />
-	</message>
-	<message name="getAllVersionsRequest">
-		<part name="parameters" element="cmism:getAllVersions" />
-	</message>
-	<message name="getAllVersionsResponse">
-		<part name="parameters" element="cmism:getAllVersionsResponse" />
-	</message>
-
-	<message name="getFolderTreeRequest">
-		<part name="parameters" element="cmism:getFolderTree" />
-	</message>
-	<message name="getFolderTreeResponse">
-		<part name="parameters" element="cmism:getFolderTreeResponse" />
-	</message>
-
-	<portType name="DiscoveryServicePort">
-		<operation name="query">
-			<input message="cmisw:queryRequest" />
-			<output message="cmisw:queryResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentChanges">
-			<input message="cmisw:getContentChangesRequest" />
-			<output message="cmisw:getContentChangesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="MultiFilingServicePort">
-		<operation name="addObjectToFolder">
-			<input message="cmisw:addObjectToFolderRequest" />
-			<output message="cmisw:addObjectToFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<input message="cmisw:removeObjectFromFolderRequest" />
-			<output message="cmisw:removeObjectFromFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="NavigationServicePort">
-		<operation name="getDescendants">
-			<input message="cmisw:getDescendantsRequest" />
-			<output message="cmisw:getDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getChildren">
-			<input message="cmisw:getChildrenRequest" />
-			<output message="cmisw:getChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderParent">
-			<input message="cmisw:getFolderParentRequest" />
-			<output message="cmisw:getFolderParentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getFolderTree">
-			<input message="cmisw:getFolderTreeRequest" />
-			<output message="cmisw:getFolderTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectParents">
-			<input message="cmisw:getObjectParentsRequest" />
-			<output message="cmisw:getObjectParentsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<input message="cmisw:getCheckedOutDocsRequest" />
-			<output message="cmisw:getCheckedOutDocsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ObjectServicePort">
-		<operation name="createDocument">
-			<input message="cmisw:createDocumentRequest" />
-			<output message="cmisw:createDocumentResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createDocumentFromSource">
-			<input message="cmisw:createDocumentFromSourceRequest" />
-			<output message="cmisw:createDocumentFromSourceResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createFolder">
-			<input message="cmisw:createFolderRequest" />
-			<output message="cmisw:createFolderResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createRelationship">
-			<input message="cmisw:createRelationshipRequest" />
-			<output message="cmisw:createRelationshipResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createPolicy">
-			<input message="cmisw:createPolicyRequest" />
-			<output message="cmisw:createPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="createItem">
-			<input message="cmisw:createItemRequest" />
-			<output message="cmisw:createItemResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllowableActions">
-			<input message="cmisw:getAllowableActionsRequest" />
-			<output message="cmisw:getAllowableActionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObject">
-			<input message="cmisw:getObjectRequest" />
-			<output message="cmisw:getObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getProperties">
-			<input message="cmisw:getPropertiesRequest" />
-			<output message="cmisw:getPropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRenditions">
-			<input message="cmisw:getRenditionsRequest" />
-			<output message="cmisw:getRenditionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectByPath">
-			<input message="cmisw:getObjectByPathRequest" />
-			<output message="cmisw:getObjectByPathResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getContentStream">
-			<input message="cmisw:getContentStreamRequest" />
-			<output message="cmisw:getContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="updateProperties">
-			<input message="cmisw:updatePropertiesRequest" />
-			<output message="cmisw:updatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="bulkUpdateProperties">
-			<input message="cmisw:bulkUpdatePropertiesRequest" />
-			<output message="cmisw:bulkUpdatePropertiesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="moveObject">
-			<input message="cmisw:moveObjectRequest" />
-			<output message="cmisw:moveObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteObject">
-			<input message="cmisw:deleteObjectRequest" />
-			<output message="cmisw:deleteObjectResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteTree">
-			<input message="cmisw:deleteTreeRequest" />
-			<output message="cmisw:deleteTreeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="setContentStream">
-			<input message="cmisw:setContentStreamRequest" />
-			<output message="cmisw:setContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="appendContentStream">
-			<input message="cmisw:appendContentStreamRequest" />
-			<output message="cmisw:appendContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="deleteContentStream">
-			<input message="cmisw:deleteContentStreamRequest" />
-			<output message="cmisw:deleteContentStreamResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="PolicyServicePort">
-		<operation name="applyPolicy">
-			<input message="cmisw:applyPolicyRequest" />
-			<output message="cmisw:applyPolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="removePolicy">
-			<input message="cmisw:removePolicyRequest" />
-			<output message="cmisw:removePolicyResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAppliedPolicies">
-			<input message="cmisw:getAppliedPoliciesRequest" />
-			<output message="cmisw:getAppliedPoliciesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-	<portType name="RelationshipServicePort">
-		<operation name="getObjectRelationships">
-			<input message="cmisw:getObjectRelationshipsRequest" />
-			<output message="cmisw:getObjectRelationshipsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="RepositoryServicePort">
-		<operation name="getRepositories">
-			<input message="cmisw:getRepositoriesRequest" />
-			<output message="cmisw:getRepositoriesResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getRepositoryInfo">
-			<input message="cmisw:getRepositoryInfoRequest" />
-			<output message="cmisw:getRepositoryInfoResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeChildren">
-			<input message="cmisw:getTypeChildrenRequest" />
-			<output message="cmisw:getTypeChildrenResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDescendants">
-			<input message="cmisw:getTypeDescendantsRequest" />
-			<output message="cmisw:getTypeDescendantsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getTypeDefinition">
-			<input message="cmisw:getTypeDefinitionRequest" />
-			<output message="cmisw:getTypeDefinitionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="createType">
-			<input message="cmisw:createTypeRequest" />
-			<output message="cmisw:createTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="updateType">
-			<input message="cmisw:updateTypeRequest" />
-			<output message="cmisw:updateTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	 	<operation name="deleteType">
-			<input message="cmisw:deleteTypeRequest" />
-			<output message="cmisw:deleteTypeResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="VersioningServicePort">
-		<operation name="checkOut">
-			<input message="cmisw:checkOutRequest" />
-			<output message="cmisw:checkOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="cancelCheckOut">
-			<input message="cmisw:cancelCheckOutRequest" />
-			<output message="cmisw:cancelCheckOutResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="checkIn">
-			<input message="cmisw:checkInRequest" />
-			<output message="cmisw:checkInResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<input message="cmisw:getObjectOfLatestVersionRequest" />
-			<output message="cmisw:getObjectOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<input message="cmisw:getPropertiesOfLatestVersionRequest" />
-			<output message="cmisw:getPropertiesOfLatestVersionResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="getAllVersions">
-			<input message="cmisw:getAllVersionsRequest" />
-			<output message="cmisw:getAllVersionsResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-	<portType name="ACLServicePort">
-		<operation name="getACL">
-			<input message="cmisw:getACLRequest" />
-			<output message="cmisw:getACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-		<operation name="applyACL">
-			<input message="cmisw:applyACLRequest" />
-			<output message="cmisw:applyACLResponse" />
-			<fault message="cmisw:cmisException" name="cmisException" />
-		</operation>
-	</portType>
-
-
-	<binding name="DiscoveryServicePortBinding" type="cmisw:DiscoveryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="query">
-			<soap:operation soapAction="query" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentChanges">
-			<soap:operation soapAction="getContentChanges" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="MultiFilingServicePortBinding" type="cmisw:MultiFilingServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="addObjectToFolder">
-			<soap:operation soapAction="addObjectToFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removeObjectFromFolder">
-			<soap:operation soapAction="removeObjectFromFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="NavigationServicePortBinding" type="cmisw:NavigationServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getDescendants">
-			<soap:operation soapAction="getDescendants" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getChildren">
-			<soap:operation soapAction="getChildren" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderParent">
-			<soap:operation soapAction="getFolderParent" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getFolderTree">
-			<soap:operation soapAction="getFolderTree" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectParents">
-			<soap:operation soapAction="getObjectParents" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getCheckedOutDocs">
-			<soap:operation soapAction="getCheckedOutDocs" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ObjectServicePortBinding" type="cmisw:ObjectServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="createDocument">
-			<soap:operation soapAction="createDocument" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createDocumentFromSource">
-			<soap:operation soapAction="createDocumentFromSource" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createFolder">
-			<soap:operation soapAction="createFolder" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createRelationship">
-			<soap:operation soapAction="createRelationship" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createPolicy">
-			<soap:operation soapAction="createPolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createItem">
-			<soap:operation soapAction="" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllowableActions">
-			<soap:operation soapAction="getAllowableActions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObject">
-			<soap:operation soapAction="getObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getProperties">
-			<soap:operation soapAction="getProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRenditions">
-			<soap:operation soapAction="getRenditions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectByPath">
-			<soap:operation soapAction="getObjectByPath" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getContentStream">
-			<soap:operation soapAction="getContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateProperties">
-			<soap:operation soapAction="updateProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="bulkUpdateProperties">
-			<soap:operation soapAction="bulkUpdateProperties" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="moveObject">
-			<soap:operation soapAction="moveObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteObject">
-			<soap:operation soapAction="deleteObject" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteTree">
-			<soap:operation soapAction="deleteTree" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="setContentStream">
-			<soap:operation soapAction="setContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="appendContentStream">
-			<soap:operation soapAction="appendContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteContentStream">
-			<soap:operation soapAction="deleteContentStream" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="PolicyServicePortBinding" type="cmisw:PolicyServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="applyPolicy">
-			<soap:operation soapAction="applyPolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="removePolicy">
-			<soap:operation soapAction="removePolicy" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAppliedPolicies">
-			<soap:operation soapAction="getAppliedPolicies" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RelationshipServicePortBinding" type="cmisw:RelationshipServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getObjectRelationships">
-			<soap:operation soapAction="getObjectRelationships" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="RepositoryServicePortBinding" type="cmisw:RepositoryServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getRepositories">
-			<soap:operation soapAction="getRepositories" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getRepositoryInfo">
-			<soap:operation soapAction="getRepositoryInfo" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeChildren">
-			<soap:operation soapAction="getTypeChildren" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDescendants">
-			<soap:operation soapAction="getTypeDescendants" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getTypeDefinition">
-			<soap:operation soapAction="getTypeDefinition" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="createType">
-			<soap:operation soapAction="createType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="updateType">
-			<soap:operation soapAction="updateType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="deleteType">
-			<soap:operation soapAction="deleteType" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="VersioningServicePortBinding" type="cmisw:VersioningServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="checkOut">
-			<soap:operation soapAction="checkOut" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="cancelCheckOut">
-			<soap:operation soapAction="cancelCheckOut" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="checkIn">
-			<soap:operation soapAction="checkIn" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getObjectOfLatestVersion">
-			<soap:operation soapAction="getObjectOfLatestVersion" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getPropertiesOfLatestVersion">
-			<soap:operation soapAction="getPropertiesOfLatestVersion" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="getAllVersions">
-			<soap:operation soapAction="getAllVersions" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-	<binding name="ACLServicePortBinding" type="cmisw:ACLServicePort">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name="getACL">
-			<soap:operation soapAction="getACL" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-		<operation name="applyACL">
-			<soap:operation soapAction="applyACL" />
-			<input>
-				<soap:body use="literal" />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-			<fault name="cmisException">
-				<soap:fault name="cmisException" use="literal" />
-			</fault>
-		</operation>
-	</binding>
-
-
-	<service name="DiscoveryService">
-		<port name="DiscoveryServicePort" binding="cmisw:DiscoveryServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/DiscoveryService" />
-		</port>
-	</service>
-	<service name="MultiFilingService">
-		<port name="MultiFilingServicePort" binding="cmisw:MultiFilingServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/MultiFilingService" />
-		</port>
-	</service>
-	<service name="NavigationService">
-		<port name="NavigationServicePort" binding="cmisw:NavigationServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/NavigationService" />
-		</port>
-	</service>
-	<service name="ObjectService">
-		<port name="ObjectServicePort" binding="cmisw:ObjectServicePortBinding">
-			<soap:address location="<%cmisbase%>/ObjectService" />
-		</port>
-	</service>
-	<service name="PolicyService">
-		<port name="PolicyServicePort" binding="cmisw:PolicyServicePortBinding">
-			<soap:address location="<%cmisbase%>/PolicyService" />
-		</port>
-	</service>
-	<service name="RelationshipService">
-		<port name="RelationshipServicePort" binding="cmisw:RelationshipServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/RelationshipService" />
-		</port>
-	</service>
-	<service name="RepositoryService">
-		<port name="RepositoryServicePort" binding="cmisw:RepositoryServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/RepositoryService" />
-		</port>
-	</service>
-	<service name="VersioningService">
-		<port name="VersioningServicePort" binding="cmisw:VersioningServicePortBinding">
-			<soap:address
-				location="<%cmisbase%>/VersioningService" />
-		</port>
-	</service>
-	<service name="ACLService">
-		<port name="ACLServicePort" binding="cmisw:ACLServicePortBinding">
-			<soap:address location="<%cmisbase%>/ACLService" />
-		</port>
-	</service>
-
-</definitions>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/sun-jaxws.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/sun-jaxws.xml
deleted file mode 100644
index 07c8306..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/sun-jaxws.xml
+++ /dev/null
@@ -1,278 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
-
-    <!-- CMIS 1.0 endpoints -->
-
-    <endpoint name="RepositoryService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.RepositoryService10"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RepositoryService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RepositoryServicePort"
-        url-pattern="/services/RepositoryService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="NavigationService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.NavigationService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}NavigationService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}NavigationServicePort"
-        url-pattern="/services/NavigationService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="ObjectService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.ObjectService10"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ObjectService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ObjectServicePort"
-        url-pattern="/services/ObjectService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="VersioningService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.VersioningService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}VersioningService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}VersioningServicePort"
-        url-pattern="/services/VersioningService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="RelationshipService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.RelationshipService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RelationshipService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RelationshipServicePort"        
-        url-pattern="/services/RelationshipService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-    
-    <endpoint name="DiscoveryService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.DiscoveryService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}DiscoveryService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}DiscoveryServicePort"
-        url-pattern="/services/DiscoveryService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="MultiFilingService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.MultiFilingService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}MultiFilingService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}MultiFilingServicePort"
-        url-pattern="/services/MultiFilingService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="ACLService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.AclService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ACLService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ACLServicePort"
-        url-pattern="/services/ACLService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="PolicyService"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.PolicyService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}PolicyService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}PolicyServicePort"
-        url-pattern="/services/PolicyService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-    
-    <!-- CMIS 1.1 endpoints -->
-
-    <endpoint name="RepositoryService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.RepositoryService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RepositoryService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RepositoryServicePort"
-        url-pattern="/services11/RepositoryService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="NavigationService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.NavigationService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}NavigationService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}NavigationServicePort"
-        url-pattern="/services11/NavigationService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="ObjectService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.ObjectService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ObjectService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ObjectServicePort"
-        url-pattern="/services11/ObjectService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="VersioningService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.VersioningService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}VersioningService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}VersioningServicePort"
-        url-pattern="/services11/VersioningService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="RelationshipService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.RelationshipService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RelationshipService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}RelationshipServicePort"        
-        url-pattern="/services11/RelationshipService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-    
-    <endpoint name="DiscoveryService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.DiscoveryService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}DiscoveryService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}DiscoveryServicePort"
-        url-pattern="/services11/DiscoveryService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="MultiFilingService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.MultiFilingService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}MultiFilingService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}MultiFilingServicePort"
-        url-pattern="/services11/MultiFilingService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="ACLService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.AclService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ACLService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}ACLServicePort"
-        url-pattern="/services11/ACLService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-    <endpoint name="PolicyService11"
-        implementation="org.apache.chemistry.opencmis.server.impl.webservices.PolicyService"
-        service="{http://docs.oasis-open.org/ns/cmis/ws/200908/}PolicyService"
-        port="{http://docs.oasis-open.org/ns/cmis/ws/200908/}PolicyServicePort"
-        url-pattern="/services11/PolicyService" enable-mtom="true">
-        <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
-            <handler-chain>
-                <handler>
-                    <handler-class>org.apache.chemistry.opencmis.server.impl.webservices.AuthHandler</handler-class>
-                </handler>
-            </handler-chain>
-        </handler-chains>
-    </endpoint>
-
-</endpoints>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/cmis.js.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/cmis.js.jsp
deleted file mode 100644
index 4500994..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/cmis.js.jsp
+++ /dev/null
@@ -1,204 +0,0 @@
-<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-function OpenCMISConnector()  {
-	this.repositoryDomain  = '<%= request.getAttribute("org.apache.chemistry.opencmis.domain") %>';
-	this.serviceUrl        = '<%= request.getAttribute("org.apache.chemistry.opencmis.serviceUrl") %>';
-	this.iframeUrl         = '<%= request.getAttribute("org.apache.chemistry.opencmis.iframeUrl") %>';
-	this.applicationDomain = '';
-	this.iframe   = null;
-	this.init     = false;
-	this.appKey   = '';
-	this.loginKey = '';
-	this.loginCallback  = null;
-	this.logoutCallback = null;
-	this.tokenCallbacks = new Array();
-}
-
-OpenCMISConnector.prototype.cmisInit = function() {
-	// get login key cookie
-	var ca = document.cookie.split(';');
-	for (var i = 0; i < ca.length; i++) {
-		var c = ca[i].replace(/^\s\s*/, '').replace(/\s\s*$/, '');
-		if (c.indexOf('opencmis_loginkey=') == 0) {
-			this.loginKey = unescape(c.substring(18));
-			break;
-		}
-	}
-
-	if (this.loginKey != '') {
-		// remove the cookie
-		document.cookie = 'opencmis_loginkey=_; Max-Age=0; expires=Thu, 01-Jan-70 00:00:01 GMT; Version="1"';
-	}
-
-	// app domain and path
-	this.applicationDomain = window.location.protocol + '//' + window.location.host;
-	var appDomainEncoded = encodeURIComponent(this.applicationDomain);
-	var appPathEncoded = encodeURIComponent(window.location.pathname + window.location.search);
-
-	var self = this;
-
-	// register message event listener
-	window.addEventListener('message', function(event) { self.cmisReceiver(event) }, false);
-
-	// set up iframe
-	var repositoryIframe = document.createElement('iframe');
-	repositoryIframe.src = this.iframeUrl + (this.iframeUrl.indexOf('?') == -1 ? '?' : '&') + 'domain=' + appDomainEncoded + '&path=' + appPathEncoded;
-	repositoryIframe.style.display = 'none';
-
-	//var frameLoginKey = this.loginKey;
-	//var frameRepositoryDomain = this.repositoryDomain;
-	repositoryIframe.onload = function() { self.sendLoginMessage(); };
-
-	this.iframe = document.getElementsByTagName('body').item(0).appendChild(repositoryIframe);
-
-	this.init = true;
-};
-
-OpenCMISConnector.prototype.cmisReceiver = function(e) {
-	if (e.origin != this.repositoryDomain) {
-		// ignore messages that have not been sent from the repository domain
-		return;
-	}
-
-	if (e.data.substring(0, 6) == 'token:') {
-		// response of a token request, repository sends token
-
-		if (this.tokenCallbacks.length > 0) {
-			// at least one callback is waiting for a token
-
-			// extract token
-			var token = e.data.substring(6);
-
-			// trigger callback
-			this.tokenCallbacks.pop()(token);
-		}
-	} else if (e.data.substring(0, 7) == 'appkey:') {
-		if (this.loginCallback != null) {
-			var callback = this.loginCallback;
-			this.loginCallback = null;
-
-			this.appKey = e.data.substring(7, 67);
-			this.loginKey = '';
-
-			callback(true);
-		}
-	} else if (e.data.substring(0, 9) == 'loginkey:') {
-		if (this.loginCallback != null) {
-			var callback = this.loginCallback;
-			this.loginCallback = null;
-
-			this.loginKey = e.data.substring(9, 69);
-
-			var loginUrl = e.data.substring(70);
-
-			var expires = new Date();
-			expires.setTime(expires.getTime() + 3600);
-
-			document.cookie = 'opencmis_loginkey=' + escape(this.loginKey)
-			+ '; Max-Age=3600; expires=' + expires.toGMTString()
-			+ '; Version="1"; Discard';
-
-			window.location.href = loginUrl;
-		}
-	} else if (e.data.substring(0, 7) == 'logout:') {
-		if (this.logoutCallback != null) {
-			var callback = this.logoutCallback;
-			this.logoutCallback = null;
-
-			var success = ('ok' == e.data.substring(7));
-
-			callback(success);
-		}
-	}
-};
-
-OpenCMISConnector.prototype.sendLoginMessage = function() {
-	this.iframe.contentWindow.postMessage('login:' + this.loginKey, this.repositoryDomain);
-};
-
-OpenCMISConnector.prototype.cmisServiceURL = function() {
-	return this.serviceUrl;
-};
-
-OpenCMISConnector.prototype.cmisLogin = function(callback) {
-	if (this.loginCallback != null) {
-		// there is already a login in progress
-		callback(false);
-		return;
-	}
-
-	this.loginCallback = callback;
-
-	if (!this.init) {
-		this.cmisInit();
-	} else {
-		sendLoginMessage();
-	}
-};
-
-OpenCMISConnector.prototype.cmisLogout = function(callback) {
-	if (this.logoutCallback != null) {
-		// there is already a logout in progress
-		callback(false);
-		return;
-	}
-
-	if (!this.init) {
-		// there hasn't been a login before
-		callback(false);
-		return;
-	}
-
-	this.logoutCallback = callback;
-	this.iframe.contentWindow.postMessage('logout:' + this.appKey, this.repositoryDomain);
-};
-
-OpenCMISConnector.prototype.cmisNextToken = function(callback) {
-	if (!this.init) {
-		// not logged in
-		callback('');
-		return;
-	}
-
-	this.tokenCallbacks.unshift(callback);
-	this.iframe.contentWindow.postMessage('token:' + this.appKey, this.repositoryDomain);
-};
-
-var openCMISConnector = new OpenCMISConnector();
-
-
-// Functions defined by the CMIS 1.1 specification
-
-function cmisServiceURL() {
-	return openCMISConnector.cmisServiceURL();
-}
-
-function cmisLogin(callback) {
-	openCMISConnector.cmisLogin(callback);
-}
-
-function cmisLogout(callback) {
-	openCMISConnector.cmisLogout(callback);
-}
-
-function cmisNextToken(callback) {
-	openCMISConnector.cmisNextToken(callback);
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/login.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/login.jsp
deleted file mode 100644
index edf16eb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/login.jsp
+++ /dev/null
@@ -1,76 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
-<!DOCTYPE html>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
-<meta charset="UTF-8">
-<title>Login</title>
-<style type="text/css">
-<!--
-body {
-  font-family: Verdana, arial, sans-serif;
-  color: black;
-  font-size: 12px;
-}
--->
-</style>
-</head>
-<body>
-	<h1>OpenCMIS Repository Login</h1>
-
-	<div>
-	<p>Please provide your credentials for this CMIS repository.</p>
-	<p>
-		<% if (request.getAttribute("org.apache.chemistry.opencmis.error") != null) { %>
-		<span style="color: red"><%= request.getAttribute("org.apache.chemistry.opencmis.error") %></span>
-		<% } %>
-	</p>
-	</div>
-
-	<div>
-	<form method="POST">
-		<table>
-			<tr>
-				<td>Username:</td>
-				<td><input type="text" name="user" size="20"></td>
-			</tr>
-			<tr>
-				<td>Password:</td>
-				<td><input type="password" name="password" size="20" autocomplete="off"/></td>
-			</tr>
-			<tr>
-				<td></td>
-				<td><input type="checkbox" name="trustapp" value="1">
-				    I'm trusting this application:<br>
-				    <span style="font-weight: bold"><%= request.getAttribute("org.apache.chemistry.opencmis.appurl") %></span>
-				</td>
-			</tr>
-			<tr>
-				<td></td>
-				<td><input type="submit" value="Login"> <input type="button" value="Cancel" onClick="window.history.back()"></td>
-			</tr>
-
-		</table>
-		<input type="hidden" name="key" value="<%= request.getAttribute("org.apache.chemistry.opencmis.formkey") %>">
-	</form>
-	</div>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/repository.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/repository.jsp
deleted file mode 100644
index da39122..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/token/repository.jsp
+++ /dev/null
@@ -1,163 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
-<!DOCTYPE html>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
-<meta charset="UTF-8">
-<title>Repository</title>
-</head>
-<body>
-	<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
-	<script type="text/javascript">
-		var appInfo = getAppInfo();
-		var appDomain = appInfo[0];
-		var appPath = appInfo[1]
-
-		// tokens in stock, initially empty
-		var tokens = new Array();
-
-		if (window.top != window.self && appDomain != null && appPath != null) {
-			// add message event listener
-			window.addEventListener('message', receiver, false);
-		}
-
-		//////////////////////////////////////////////////////////
-		// Event listener callback.
-		//////////////////////////////////////////////////////////
-		function receiver(e) {
-			if (e.origin != appDomain) {
-				// ignore messages that have not been sent from the application domain
-				return;
-			}
-
-			if (e.data.substring(0, 5) == 'token') {
-				var appKey = e.data.substring(6);
-
-				if (tokens.length > 0) {
-					// we have a least one token in stock -> remove one and send it
-					e.source.postMessage('token:' + tokens.pop(), e.origin);
-				} else {
-					// we are out of tokens -> ask the server for another batch
-					requestTokens(e, appKey);
-				}
-			} else if (e.data.substring(0, 5) == 'login') {
-				var loginKey = e.data.substring(6);
-				login(e, loginKey);
-			} else if (e.data.substring(0, 6) == 'logout') {
-				var appKey = e.data.substring(7);
-				logout(e, appKey);
-			}
-		}
-
-		function login(e, loginKey) {
-			$.ajax({
-				url : '<%= request.getAttribute("org.apache.chemistry.opencmis.loginUrl") %>login',
-				type : 'POST',
-				data : {
-					url : appDomain + appPath,
-					key : loginKey
-				},
-				success : function(data) {
-					if (data.ok == 1) {
-						e.source.postMessage('appkey:' + data.key, e.origin);
-					} else {
-						e.source.postMessage('loginkey:' + data.key + ":"
-								+ data.url, e.origin);
-					}
-				},
-				error : function(msg) {
-					alert("Error: " + msg);
-				}
-			});
-		}
-
-		function logout(e, appKey) {
-			$.ajax({
-				url : '<%= request.getAttribute("org.apache.chemistry.opencmis.loginUrl") %>logout',
-				type : 'POST',
-				data : {
-					key : appKey
-				},
-				success : function(data) {
-					if (data.ok == 1) {
-						e.source.postMessage('logout:ok', e.origin);
-					} else {
-						e.source.postMessage('logout:failure', e.origin);
-					}
-				},
-				error : function(msg) {
-					alert("Error: " + msg);
-				}
-			});
-		}
-
-		//////////////////////////////////////////////////////////
-		// Requests new tokens from the server.
-		//////////////////////////////////////////////////////////
-		function requestTokens(e, appKey) {
-			$.ajax({
-				url : '<%= request.getAttribute("org.apache.chemistry.opencmis.loginUrl") %>token',
-				type : 'POST',
-				data : {
-					key : appKey
-				},
-				success : function(data) {
-
-					// sanity check: we expect an array
-					if ($.isArray(data)) {
-
-						// if we received more than one token, put them in stock except for the first one
-						if (data.length > 1) {
-							for ( var i = 1; i < data.length; i++) {
-								var token = data[i];
-								tokens.push(token);
-							}
-						}
-
-						// if the array wasn't empty, send the first token to the applictaion
-						if (data.length > 0) {
-							e.source.postMessage('token:' + data[0], e.origin);
-						}
-					}
-				}
-			});
-		}
-
-		function getAppInfo() {
-			var domain = null;
-			var path = null;
-			var frameHref = window.location.href;
-
-			var params = frameHref.slice(frameHref.indexOf('?') + 1).split('&');
-			for ( var i = 0; i < params.length; i++) {
-				var keyValue = params[i].split('=');
-				if (keyValue[0] == 'domain') {
-					domain = decodeURIComponent(keyValue[1]);
-				} else if (keyValue[0] == 'path') {
-					path = decodeURIComponent(keyValue[1]);
-				}
-			}
-
-			return [ domain, path ];
-		}
-	</script>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/web.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index b5bd7d0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.  
--->
-<web-app version="2.4"
-    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-    <display-name>OpenCMIS Server</display-name>
-
-    <welcome-file-list>
-        <welcome-file>index.jsp</welcome-file>
-        <welcome-file>index.html</welcome-file>
-    </welcome-file-list>
-
-    <listener>
-        <listener-class>org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener</listener-class>
-    </listener>
-    
-    <listener>
-        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
-    </listener>
-    
-    <!-- 
-         A servlet filter that logs all requests in files. Useful for monitoring and debugging.
-         Use it with care! It can generate a huge amount of files and will slow down performance
-         significantly.
-    -->
-    <!-- - ->
-    <filter>
-           <filter-name>LoggingFilter</filter-name>
-          <filter-class>org.apache.chemistry.opencmis.server.support.filter.LoggingFilter</filter-class>
-           <init-param>
-              <param-name>LogDir</param-name>
-              <param-value></param-value>
-           </init-param>
-           <init-param>
-              <param-name>PrettyPrint</param-name>
-              <param-value>true</param-value>
-           </init-param>
-           <init-param>
-              <param-name>LogHeader</param-name>
-              <param-value>true</param-value>
-           </init-param>
-           <init-param>
-              <param-name>Indent</param-name>
-              <param-value>4</param-value>
-           </init-param>
-    </filter>
-    
-    <filter-mapping>
-           <filter-name>LoggingFilter</filter-name>
-           <servlet-name>cmisatom10</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>LoggingFilter</filter-name>
-           <servlet-name>cmisatom11</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>LoggingFilter</filter-name>
-           <servlet-name>cmisws10</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>LoggingFilter</filter-name>
-           <servlet-name>cmisws11</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>LoggingFilter</filter-name>
-           <servlet-name>cmisbrowser</servlet-name> 
-    </filter-mapping>
-    <!- -   -->
-
-    <!--
-        Uncomment the following filter if the OpenCMIS server runs behind a proxy server or a load balancer.
-        The value of the 'trustedProxies' parameter is a regular expression. It must match the IP address of the proxy or load balancer.
-    -->
-    <!--
-    <filter>
-           <filter-name>ProxyFilter</filter-name>
-          <filter-class>org.apache.chemistry.opencmis.server.filter.ProxyFilter</filter-class>
-        <init-param>
-            <param-name>trustedProxies</param-name>
-            <param-value>10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}</param-value>
-        </init-param>
-    </filter>
-
-    <filter-mapping>
-           <filter-name>ProxyFilter</filter-name>
-           <servlet-name>cmisatom10</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>ProxyFilter</filter-name>
-           <servlet-name>cmisatom11</servlet-name> 
-    </filter-mapping>
-    <filter-mapping>
-           <filter-name>ProxyFilter</filter-name>
-           <servlet-name>cmisbrowser</servlet-name> 
-    </filter-mapping>    
-    -->
-
-    <!--
-        Uncomment the following filter to enable CORS support for the browser binding.
-        See http://software.dzhuvinov.com/cors-filter.html for details.
-        Put the CORS libraries into the WEB-INF/lib directory or uncomment the CORS depenedency in the pom.xml.
-    -->
-    <!--
-    <filter>
-        <filter-name>CORS</filter-name>
-        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
-        <init-param>
-            <param-name>cors.allowGenericHttpRequests</param-name>
-            <param-value>true</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.allowOrigin</param-name>
-            <param-value>*</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.allowSubdomains</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.supportedMethods</param-name>
-            <param-value>GET, POST</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.supportedHeaders</param-name>
-            <param-value>*</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.exposedHeaders</param-name>
-            <param-value></param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.supportsCredentials</param-name>
-            <param-value>true</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.maxAge</param-name>
-            <param-value>3600</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.tagRequests</param-name>
-            <param-value>false</param-value>
-        </init-param>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>CORS</filter-name>
-        <servlet-name>cmisbrowser</servlet-name>
-    </filter-mapping>
-    -->
-
-    <servlet>
-        <servlet-name>cmisws10</servlet-name>
-        <servlet-class>org.apache.chemistry.opencmis.server.impl.webservices.CmisWebServicesServlet</servlet-class>
-        <init-param>
-            <param-name>cmisVersion</param-name>
-            <param-value>1.0</param-value>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-    
-    <servlet>
-        <servlet-name>cmisws11</servlet-name>
-        <servlet-class>org.apache.chemistry.opencmis.server.impl.webservices.CmisWebServicesServlet</servlet-class>
-        <init-param>
-            <param-name>cmisVersion</param-name>
-            <param-value>1.1</param-value>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet>
-        <servlet-name>cmisatom10</servlet-name>
-        <servlet-class>org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet</servlet-class>
-        <init-param>
-            <param-name>callContextHandler</param-name>
-            <param-value>org.apache.chemistry.opencmis.server.shared.BasicAuthCallContextHandler</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cmisVersion</param-name>
-            <param-value>1.0</param-value>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <servlet>
-        <servlet-name>cmisatom11</servlet-name>
-        <servlet-class>org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet</servlet-class>
-        <init-param>
-            <param-name>callContextHandler</param-name>
-            <param-value>org.apache.chemistry.opencmis.server.shared.BasicAuthCallContextHandler</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cmisVersion</param-name>
-            <param-value>1.1</param-value>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-    
-    <servlet>
-        <servlet-name>cmisbrowser</servlet-name>
-        <servlet-class>org.apache.chemistry.opencmis.server.impl.browser.CmisBrowserBindingServlet</servlet-class>
-        <init-param>
-            <param-name>callContextHandler</param-name>
-            <param-value>org.apache.chemistry.opencmis.server.impl.browser.token.TokenCallContextHandler</param-value>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>cmisws10</servlet-name>
-        <url-pattern>/services/*</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>cmisws11</servlet-name>
-        <url-pattern>/services11/*</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>cmisatom10</servlet-name>
-        <url-pattern>/atom/*</url-pattern>
-    </servlet-mapping>
-    
-    <servlet-mapping>
-        <servlet-name>cmisatom11</servlet-name>
-        <url-pattern>/atom11/*</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>cmisbrowser</servlet-name>
-        <url-pattern>/browser/*</url-pattern>
-    </servlet-mapping>
-</web-app>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/css/opencmis.css b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/css/opencmis.css
deleted file mode 100644
index 22da92d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/css/opencmis.css
+++ /dev/null
@@ -1,63 +0,0 @@
-@CHARSET "UTF-8";
-
-body {
-  font-family: Verdana, arial, sans-serif;
-  color: black;
-  font-size: 12px;
-}
-
-h1 {
-  font-size: 24px;
-  line-height: normal;
-  font-weight: bold;
-  background-color: #f0f0f0;
-  color: #003366;
-   border-bottom: 1px solid #3c78b5;
-  padding: 2px;
-  margin: 4px 0px 4px 0px;
-}
-
-h2 {
-  font-size: 18px;
-  line-height: normal;
-  font-weight: bold;
-  background-color: #f0f0f0;
-   border-bottom: 1px solid #3c78b5;
-  padding: 2px;
-  margin: 4px 0px 4px 0px;
-}
-
-h3 {
-  font-size: 14px;
-  line-height: normal;
-  font-weight: bold;
-  background-color: #f0f0f0;
-  padding: 2px;
-  margin: 4px 0px 4px 0px;
-}
-
-h4 {
-  font-size: 12px;
-  line-height: normal;
-  font-weight: bold;
-  background-color: #f0f0f0;
-  padding: 2px;
-  margin: 4px 0px 4px 0px;
-}
-
-HR {
-  color: 3c78b5;
-  height: 1;
-}
-
-th  {
-    border: 1px solid #ccc;
-    padding: 2px 4px 2px 4px;
-    background: #f0f0f0;
-    text-align: center;
-}
-
-td  {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/asf_logo.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/asf_logo.png
deleted file mode 100644
index 66c34f0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/asf_logo.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/chemistry_logo_small.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/chemistry_logo_small.png
deleted file mode 100644
index f76b35f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/chemistry_logo_small.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/pb-chemistry-150x150.jpg b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/pb-chemistry-150x150.jpg
deleted file mode 100644
index b3096d2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images/pb-chemistry-150x150.jpg
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/index.html b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/index.html
deleted file mode 100644
index 5d7a3c6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- 
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
--->
-<html>
-<head>
-<title>OpenCMIS Browser Binding</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<link rel="stylesheet" type="text/css" href="css/opencmis.css"/>
-</head>
-<body>
-<a href="http://chemistry.apache.org"><img alt="Apache Chemistry Logo" title="Apache Chemistry Logo" src="images/chemistry_logo_small.png" /></a>
-<h1>Apache Chemistry OpenCMIS</h1>
-
-<br/>
-<h2>AtomPub binding</h2>
-<div><a href="atom">AtomPub service document</a></div>
-
-<br/>
-<h2>Web Services binding</h2>
-<div><a href="services/RepositoryService">Web Services overview</a></div>
-
-<br/>
-<h2>Browser binding</h2>
-<div><a href="browser">Browser binding service URL</a></div>
-
-<br/>
-<h2>Web interface</h2>
-<div><a href="web">OpenCMIS web interface</a></div>
-
-<br/>
-<h2>License</h2>
-<a href="http://www.apache.org"><img alt="ASF Logo" title="ASF Logo" src="images/asf_logo.png" align="right"/></a>
-<div>This software is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0 License</a>.</div>
-<br/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/web/index.html b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/web/index.html
deleted file mode 100644
index 5165ee6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/web/index.html
+++ /dev/null
@@ -1,562 +0,0 @@
-<!DOCTYPE html>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
-<meta charset="UTF-8">
-<title>OpenCMIS Browser Binding</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<link rel="stylesheet" type="text/css" href="../css/opencmis.css"/>
-<script src="../browser?login=script" type="text/javascript"></script>
-<script type="text/javascript">
-var repositoryUrl;
-var rootFolderUrl;
-var rootFolderId;
-var rootFolder = "/";
-var lastToken;
-var currentFolderId;
-
-// login and logout
-
-function login() {
-	cmisLogin(function(success) {
-		if (success) {
-			cmisNextToken(function(token) {
-				var script0 = document.createElement('script');
-				script0.setAttribute('src', cmisServiceURL() + '?callback=printRepositoryInfos&token=' + token);
-				script0.setAttribute('type', 'text/javascript');
-				document.body.appendChild(script0);
-			});
-		}
-	});
-}
-
-function logout() {
-	cmisLogout(function(success) {
-		if (success) {
-			// login again
-			login();
-		}
-	});
-}
-
-// helpers
-
-function performJsonpRequest(url, callback, params) {
-	var callUrl = url;
-
-	if (params) {
-		for (var key in params) {
-			callUrl = callUrl + '&' + key + '=' + encodeURIComponent(params[key]);
-		}
-	}
-
-	cmisNextToken(function(token) {
-		callUrl = callUrl + 
-		'&callback=' + callback + 
-		'&token=' + encodeURIComponent(token) +
-		'&suppressResponseCodes=true'
-
-		var script = document.createElement('script');
-		script.setAttribute('src', callUrl);
-		script.setAttribute('type', 'text/javascript');
-		document.body.appendChild(script);
-	});
-}
-
-function loadCmisDataById(id, selector, callback, params) {
-	performJsonpRequest(rootFolderUrl + '?cmisselector=' + selector + '&objectId=' + encodeURIComponent(id), callback, params);
-}
-
-function loadCmisDataByPath(path, selector, callback, params) {
-	performJsonpRequest(rootFolderUrl + path + '?cmisselector=' + selector, callback, params);
-}
-
-function loadCmisRepositoryData(selector, callback, params) {
-	performJsonpRequest(repositoryUrl + '?cmisselector=' + selector, callback, params);
-}
-
-function loadCmisLastResult(token, callback) {
-	var url = repositoryUrl + '?cmisselector=lastResult' +
-	'&callback=' + callback +
-	'&token=' + encodeURIComponent(token);
-
-	var script = document.createElement('script');
-	script.setAttribute('src', url);
-	script.setAttribute('type', 'text/javascript');
-	document.body.appendChild(script);
-}
-
-function openContentInNewWindow(id) {
-	cmisNextToken(function(token) {
-		var url = rootFolderUrl + 
-		'?cmisselector=content' +
-		'&objectId=' + encodeURIComponent(id) + 
-		'&token=' + encodeURIComponent(token);
-		window.open(url, '_blank');
-	});
-}
-
-function createAndSubmitDeleteForm(rootFolderUrl, id, cmisaction, callback) {
-	cmisNextToken(function(token) {
-		var targetFrame = document.createElement('iframe');
-		targetFrame.style.display = 'none';
-		targetFrame.name = 'cmis-frame-' + cmisaction + '-' + id;
-		document.body.appendChild(targetFrame);
-
-		targetFrame.addEventListener('load',
-		function() {
-			callback();
-			document.body.removeChild(targetFrame);
-		},
-		false);
-
-		var frameBody = targetFrame.contentWindow.document.createElement('body');
-		targetFrame.appendChild(frameBody);
-
-		var cmisForm = targetFrame.contentWindow.document.createElement('form');
-		cmisForm.action = rootFolderUrl + '?objectId=' + encodeURIComponent(id);
-		cmisForm.method = 'POST';
-		cmisForm.target = targetFrame.name;
-		frameBody.appendChild(cmisForm);
-
-		var cmisActionInput = targetFrame.contentWindow.document.createElement('input');
-		cmisActionInput.name = 'cmisaction';
-		cmisActionInput.type = 'text';
-		cmisActionInput.value = cmisaction;
-		cmisForm.appendChild(cmisActionInput);
-
-		var cmisAllVersionsInput = targetFrame.contentWindow.document.createElement('input');
-		cmisAllVersionsInput.name = 'allVersions';
-		cmisAllVersionsInput.type = 'text';
-		cmisAllVersionsInput.value = 'true';
-		cmisForm.appendChild(cmisAllVersionsInput);
-
-		var cmisTokenInput = targetFrame.contentWindow.document.createElement('input');
-		cmisTokenInput.name = 'token';
-		cmisTokenInput.type = 'text';
-		cmisTokenInput.value = token;
-		cmisForm.appendChild(cmisTokenInput);
-
-		cmisForm.submit();
-	});
-}
-
-// print callbacks
-
-function printRepositoryInfos(infos) {
-	for(repId in infos) {
-		var ri = infos[repId];		
-		document.getElementById('repositoryInfo').innerHTML =
-			'<h2>Repsository "' + ri.repositoryName + '" (' + ri.repositoryId + ')</h2>' +
-			'<table>' +
-			'<tr><td>Id:</td><td>' + ri.repositoryId + '</td></tr>' +
-			'<tr><td>Name:</td><td>' + ri.repositoryName + '</td></tr>' +
-			'<tr><td>Description:</td><td>' + ri.repositoryDescription + '</td></tr>' +
-			'<tr><td>Product:</td><td>' + ri.vendorName + ' ' + ri.productName + ' ' + ri.productVersion + '</td></tr>' +
-			'<tr><td>Root folder id:</td><td>' + ri.rootFolderId + '</td></tr>' +
-			'<tr><td>Repository URL:</td><td>' + ri.repositoryUrl + '</td></tr>' +
-			'<tr><td>Root folder URL:</td><td>' + ri.rootFolderUrl + '</td></tr>' +
-			'</table>';
-
-		// the InMemory repository has only one repository
-		repositoryUrl = ri.repositoryUrl;
-		rootFolderUrl = ri.rootFolderUrl;
-		rootFolderId = ri.rootFolderId;
-	}
-
-	currentFolderId = rootFolderId;
-
-	loadCmisDataByPath(rootFolder, 'object', 'printObject', {});
-	reloadChildren();
-	loadCmisRepositoryData('typeChildren', 'printTypes', {});
-}
-
-function printObject(obj) {
-	var id = obj.properties["cmis:objectId"].value;
-	var name = obj.properties["cmis:name"].value;
-
-	var s = '<h2>Object "' + name + '" (' + id + ')</h2>';
-
-	s = s + '<h3>Properties</h3>';
-	s = s + '<table>';
-
-	for(propertyId in obj.properties) {
-		var property = obj.properties[propertyId];
-		s = s + '<tr><td>' + propertyId + '</td>';
-		s = s + '<td>' + property.displayName + '</td>';
-		s = s + '<td>' + property.type + '</td>';
-		s = s + '<td>' + property.cardinality + '</td>';
-
-		if(property.type == 'datetime') {
-			s = s + '<td>' + (new Date(property.value)) + '</td></tr>';
-		} else {
-			s = s + '<td>' + property.value + '</td></tr>';
-		}
-	}
-
-	s = s + '</table>';
-
-	document.getElementById('objectInfo').innerHTML = s;
-}
-
-function printChildren(children) {
-	var s = '<h2>Children</h2>';
-
-	s = s + '<h3>Properties</h3>';
-
-	s = s + '<input type="button" value="Reload folder" onClick="reloadChildren()">';
-
-	s = s + '<table><tr><th>Name</th><th>Type</th><th>MIME Type</th><th>Size</th>' +
-	'<th>Created By</th><th>Created At</th><th>Id</th><th></th></tr>';
-
-	for(var index in children.objects) {
-		var object = children.objects[index].object;
-
-		var name = object.properties["cmis:name"].value;
-		var type = object.properties["cmis:objectTypeId"].value;
-		var mimetype = "";
-		var size = "";
-		var createdBy = object.properties["cmis:createdBy"].value;
-		var creationDate = new Date(object.properties["cmis:creationDate"].value);
-		var id = object.properties["cmis:objectId"].value;
-		var link = 0; // 0 - no link, 1 - content link, 2 - folder link
-		var deleteLink = "deleteObject('" + id + "')";
-
-		if(object.properties["cmis:baseTypeId"].value == "cmis:folder") {
-			deleteLink = "deleteFolder('" + id + "')";
-			link = 2;
-		}
-
-		if(object.properties["cmis:baseTypeId"].value == "cmis:document") {
-			if(object.properties["cmis:contentStreamLength"]) {
-				size = object.properties["cmis:contentStreamLength"].value;
-			} else {
-				size = "";
-			}
-
-			if(object.properties["cmis:contentStreamMimeType"]) {
-				mimetype = object.properties["cmis:contentStreamMimeType"].value;
-				link = 1;
-			} else {
-				mimetype = "";
-				link = "";
-			}
-		}
-
-		s = s + '<tr><td>';
-		if(link == 1) {
-			s = s + "<a href=\"javascript:openContentInNewWindow('" + id + "')\">" + name + "</a>";
-		} else if(link == 2) {
-			s = s + "<a href=\"javascript:navigateDown('" + id + "')\">" + name + "</a>";
-		} else {
-			s = s + name;
-		}
-
-		s = s + '</td><td>' + type + '</td><td>' + mimetype + '</td><td style="rext-align:right">' + size +
-		'</td><td>' + createdBy + '</td><td>' + creationDate + '</td><td>' + id + '</td><td><button onClick="' + deleteLink + '">delete</button></td></tr>';
-	}
-
-	s = s + '</table>';
-
-	document.getElementById('folderInfo').innerHTML = s;
-}
-
-function printTypes(types) {
-	var s = '<h2>Base Types</h2>';
-
-	for(var index in types.types) {
-		var type = types.types[index];
-
-		s = s + '<h3>' + type.id + '</h3>';
-		s = s + '<ul>';
-
-		for(var propId in type.propertyDefinitions) {
-			var propType = type.propertyDefinitions[propId];
-			s = s + '<li>' + propType.id + '</li>';
-		}
-
-		s = s + '</ul>';
-	}
-
-	document.getElementById('typeInfo').innerHTML = s;
-}
-
-// navigate
-
-function reloadChildren() {
-	var params = {};
-
-	params.filter = 'cmis:name,cmis:objectId,cmis:objectTypeId,cmis:baseTypeId,' +
-	'cmis:contentStreamMimeType,cmis:contentStreamLength,' + 
-	'cmis:creationDate,cmis:createdBy'
-	params.includeAllowableActions = 'false';	
-	params.includeRelationships = 'none';	
-	params.renditionFilter = 'cmis:none';
-	params.maxItems = '100';	
-	params.orderBy = 'cmis:name';
-
-	loadCmisDataById(currentFolderId, 'children', 'printChildren', params);
-}
-
-function navigateDown(folderId) {
-	currentFolderId = folderId;
-	loadCmisDataById(currentFolderId, 'children', 'printChildren', {});
-}
-
-// delete
-
-function deleteObject(id) {
-	createAndSubmitDeleteForm(rootFolderUrl, id, 'delete', reloadChildren);
-}
-
-function deleteFolder(id) {
-	createAndSubmitDeleteForm(rootFolderUrl, id, 'deleteTree', reloadChildren);
-}
-
-
-// query
-
-function querySubmit() {
-	var queryForm = document.getElementById('queryForm');	
-	queryForm.action = repositoryUrl;
-
-	var queryParams = {};
-	queryParams.q = queryForm.q.value;
-	queryParams.maxItems = queryForm.maxItems.value;
-	queryParams.skipCount = queryForm.skipCount.value;
-
-	loadCmisRepositoryData('query', 'queryCallback', queryParams);
-}
-
-function queryCallback(result) {
-	if (!(typeof result.exception === 'undefined')) {
-		alert('Exception: ' + result.exception + '\n\nError:\n' + result.message);
-		return;
-	}
-
-	var cols = {};
-	var colCount = 0;
-	var table = [];
-
-	for(var i = 0; i < result.results.length; i++) {
-		var props = result.results[i].properties;
-		var row = [];
-		for(var queryName in props) {
-			var pos;
-			if (typeof cols[queryName] === 'undefined') {
-				pos = cols[queryName] = colCount++;
-			} else {
-				pos = cols[queryName];
-			}
-
-			while(row.length < pos - 1) {
-				row.push('');
-			}
-
-			if(props[queryName].type == 'datetime') {
-				row[pos] = new Date(props[queryName].value);
-			} else {
-				row[pos] = props[queryName].value;
-			}
-		}
-		table.push(row);
-	}
-
-	var s = '<h3>Query Results</h3>';
-
-	s = s + '<table><tr>';
-	for(var i = 0; i < colCount; i++) {
-		for(var colName in cols) {
-			if(cols[colName] == i) {
-				s = s + '<th>' + colName + '</th>';
-				break;
-			}
-		}
-	}
-	s = s + '</tr>';
-
-	for(var rowIndex = 0; rowIndex < table.length; rowIndex++) {
-		s = s + '<tr>';
-		for(var colIndex = 0; colIndex < colCount; colIndex++) {
-			s = s + '<td>';
-			if(colIndex < table[rowIndex].length) {
-				s = s + table[rowIndex][colIndex];
-			}
-			s = s + '</td>';
-		}
-		s = s + '</tr>';
-	}
-
-	s = s + '</table>';
-
-	document.getElementById('queryResult').innerHTML = s;
-}
-
-// create Folder
-
-function createFolderSubmit() {
-	var createForm = document.getElementById('createFolderForm');
-	createForm.action = rootFolderUrl + createForm.folder.value;
-
-	cmisNextToken(function(token) {
-		lastToken = token;
-		createForm.token.value = token;
-		createForm.submit();
-	});
-}
-
-// create document
-
-function createDocumentSubmit() {
-	var createForm = document.getElementById('createDocumentForm');
-	createForm.action = rootFolderUrl + createForm.folder.value;
-
-	cmisNextToken(function(token) {
-		lastToken = token;
-		createForm.token.value = token;
-		createForm.submit();
-	});
-}
-
-// create helpers
-
-function createCallback() {
-	if(lastToken) {
-		loadCmisLastResult(lastToken, 'showNewId');
-	}
-}
-
-function showNewId(result) {
-	if(result.objectId) {
-		alert('New object id: ' + result.objectId + '\n\nCode: ' + result.code);
-	} else {
-		alert('Exception: ' + result.exception + '\n\nError:\n' + result.message + '\n\nCode: ' + result.code);
-	}
-}
-</script>
-</head>
-<body onLoad="login()">
-
-<h1>OpenCMIS Web Interface</h1>
-
-<input type="button" value="Logout" onClick="logout()">
-
-<br />
-<div id="repositoryInfo" class="box">repositoryInfo</div>
-<br />
-<div id="objectInfo" class="box">objectInfo</div>
-<br />
-<div id="folderInfo" class="box">folderInfo</div>
-<br />
-<div id="typeInfo" class="box">typeInfo</div>
-<br />
-
-<div id="query" class="box">
-<h2>Query</h2>
-<form id="queryForm" action="" method="GET" target="_blank">
-	<input name="cmisaction" type="hidden" value="query" />
-	<input name="token" type="hidden" value="" />
-	<table>
-		<tr><td>Query:</td><td><input name="q" type="text" size="100" maxlength="1000" value="SELECT * FROM cmis:document"></td></tr>
-		<tr><td>Max Items:</td><td><input name="maxItems" type="text" size="4" maxlength="8" value="100"></td></tr>
-		<tr><td>Skip Count:</td><td><input name="skipCount" type="text" size="4" maxlength="8" value="0"></td></tr>
-		<tr><td></td><td><input type="button" value="Go" onClick="querySubmit()"/></td></tr>
-	</table>
-</form>
-</div>
-<div id="queryResult" class="box"></div>
-<br />
-
-<div id="folder" class="box">
-<h2>Create Folder</h2>
-<form id="createFolderForm" action="" method="POST" target="createResult">
-	<input name="_charset_" type="hidden" />
-	<input name="cmisaction" type="hidden" value="createFolder" />
-	<input name="token" type="hidden" value="" />
-	<table>
-	<tr>
-		<td>Parent Folder:</td>
-		<td><input name="folder" type="text" size="100" maxlength="1000" value="/"></td>
-	</tr>
-	<tr>
-		<td>Folder Name:</td>
-		<td><input id="docname" name="propertyValue[0]" type="text" size="100" maxlength="100" value="folder"><input name="propertyId[0]" type="hidden" value="cmis:name" /></td>
-	</tr>
-	<tr>
-		<td>Object Type:</td>
-		<td><input name="propertyValue[1]" type="text" size="100" maxlength="100" value="cmis:folder"><input name="propertyId[1]" type="hidden" value="cmis:objectTypeId" /></td>
-	</tr>
-	<tr>
-		<td></td>
-		<td><input type="button" value="Create" onClick="createFolderSubmit()"/></td>
-	</tr>
-	</table>
-</form>
-</div>
-<br />
-
-<div id="document" class="box">
-<h2>Create Document</h2>
-
-
-
-<form id="createDocumentForm" action="" method="POST" target="createResult" enctype="multipart/form-data">
-	<input name="_charset_" type="hidden" />
-	<input name="cmisaction" type="hidden" value="createDocument" />
-	<input name="token" type="hidden" value="" />
-	<table>
-	<tr>
-		<td>Parent Folder:</td>
-		<td><input name="folder" type="text" size="100" maxlength="1000" value="/"></td>
-	</tr>
-	<tr>
-		<td>Document Name:</td>
-		<td><input id="docname" name="propertyValue[0]" type="text" size="100" maxlength="100" value="document"><input name="propertyId[0]" type="hidden" value="cmis:name" /></td>
-	</tr>
-	<tr>
-		<td>Object Type:</td>
-		<td><input name="propertyValue[1]" type="text" size="100" maxlength="100" value="cmis:document"><input name="propertyId[1]" type="hidden" value="cmis:objectTypeId" /></td>  
-	</tr>
-	<tr>
-		<td>File name:</td>
-		<td><input name="filename" type="text" size="30" maxlength="30" value=""> (if left blank, the original file name is used)</td>
-	</tr>
-	<tr>
-		<td>Content type:</td>
-		<td><input name="contentType" type="text" size="30" maxlength="30" value=""> (if left blank, the content type is determined by the browser)</td>
-	</tr>
-	<tr>
-		<td>File:</td>
-		<td><input name="content" type="file"></td>
-	</tr>
-	<tr>
-		<td></td>
-		<td><input type="button" value="Create" onClick="createDocumentSubmit()"/></td>
-	</tr>
-	</table>
-</form>
-
-</div>
-<br />
-
-<iframe name="createResult" style="display:none;" onload="createCallback()"></iframe>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/pom.xml
deleted file mode 100644
index 5020097..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/pom.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-bindings</artifactId>
-    <name>OpenCMIS Server Implementation</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.jvnet.mimepull</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>${mimepull.version}</version>
-        </dependency> 
-        <dependency>
-            <groupId>com.sun.xml.ws</groupId>
-            <artifactId>jaxws-rt</artifactId>
-            <version>${jaxws-rt.version}</version>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>stax</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion>	 
-                    <groupId>org.codehaus.woodstox</groupId>	 
-                    <artifactId>wstx-asl</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>junit</groupId>	 
-                    <artifactId>junit</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>org.jvnet</groupId>	 
-                    <artifactId>mimepull</artifactId>	 
-                </exclusion>	 
-            </exclusions>
-        </dependency>
-        <!-- server-support is not a *runtime* dependency but it's added for commodity in the WAR -->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.6</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <version>1.9.0</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyFilter.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyFilter.java
deleted file mode 100644
index 7167293..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyFilter.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.filter;
-
-import java.io.IOException;
-import java.util.regex.Pattern;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * A filter that corrects server name, server port and scheme if OpenCMIS is
- * running behind a proxy or load balancer.
- */
-public class ProxyFilter implements Filter {
-
-    public static final String PARAM_BASE_PATH = "basePath";
-    public static final String PARAM_TRUSTED_PROXIES = "trustedProxies";
-
-    private String basePath;
-    private Pattern trustedProxies;
-
-    public void init(FilterConfig filterConfig) throws ServletException {
-        basePath = filterConfig.getInitParameter(PARAM_BASE_PATH);
-
-        trustedProxies = null;
-        String trustedProxiesString = filterConfig.getInitParameter(PARAM_TRUSTED_PROXIES);
-        if (trustedProxiesString != null) {
-            try {
-                trustedProxies = Pattern.compile(trustedProxiesString);
-            } catch (Exception e) {
-                throw new ServletException("Could not compile trustedProxies parameter: " + e, e);
-            }
-        }
-    }
-
-    public void doFilter(ServletRequest request, ServletResponse response, final FilterChain chain) throws IOException,
-            ServletException {
-
-        // check for trusted proxy
-        if (trustedProxies != null && (request instanceof HttpServletRequest)
-                && trustedProxies.matcher(request.getRemoteAddr()).matches()) {
-            request = new ProxyHttpServletRequestWrapper((HttpServletRequest) request, basePath);
-        }
-
-        // call next
-        chain.doFilter(request, response);
-    }
-
-    public void destroy() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyHttpServletRequestWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyHttpServletRequestWrapper.java
deleted file mode 100644
index b3b299d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/filter/ProxyHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.filter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-public class ProxyHttpServletRequestWrapper extends HttpServletRequestWrapper {
-
-    public static final String FORWARDED_HOST_HEADER = "X-Forwarded-Host";
-    public static final String FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
-    public static final String HTTPS_SCHEME = "https";
-    public static final String HTTP_SCHEME = "http";
-
-    private String scheme;
-    private String serverName;
-    private int serverPort;
-    private final String contextPath;
-    private final String servletPath;
-    private final String requestURI;
-
-    public ProxyHttpServletRequestWrapper(HttpServletRequest request, String basePath) {
-        super(request);
-
-        scheme = request.getHeader(FORWARDED_PROTO_HEADER);
-
-        if (!HTTP_SCHEME.equalsIgnoreCase(scheme) && !HTTPS_SCHEME.equalsIgnoreCase(scheme)) {
-            scheme = request.getScheme();
-        }
-
-        serverName = request.getServerName();
-        serverPort = request.getServerPort();
-
-        String host = request.getHeader(FORWARDED_HOST_HEADER);
-        if ((host != null) && (host.length() > 0)) {
-            int index = host.indexOf(':');
-            if (index < 0) {
-                serverName = host;
-                serverPort = getDefaultPort(scheme);
-            } else {
-                serverName = host.substring(0, index);
-                try {
-                    serverPort = Integer.parseInt(host.substring(index + 1));
-                } catch (NumberFormatException e) {
-                    serverPort = getDefaultPort(scheme);
-                }
-            }
-        }
-
-        servletPath = request.getServletPath();
-
-        if (basePath != null && basePath.length() > 0) {
-            final String path = request.getRequestURI().substring(
-                    request.getContextPath().length() + request.getServletPath().length());
-
-            contextPath = (basePath.charAt(0) == '/' ? basePath : "/" + basePath);
-            requestURI = contextPath + servletPath + path;
-        } else {
-            contextPath = request.getContextPath();
-            requestURI = request.getRequestURI();
-        }
-    }
-
-    private int getDefaultPort(String scheme) {
-        if (HTTPS_SCHEME.equalsIgnoreCase(scheme)) {
-            return 443;
-        }
-
-        return 80;
-    }
-
-    @Override
-    public String getScheme() {
-        return scheme;
-    }
-
-    @Override
-    public String getServerName() {
-        return serverName;
-    }
-
-    @Override
-    public int getServerPort() {
-        return serverPort;
-    }
-
-    @Override
-    public String getContextPath() {
-        return contextPath;
-    }
-
-    @Override
-    public String getServletPath() {
-        return servletPath;
-    }
-
-    @Override
-    public String getRequestURI() {
-        return requestURI;
-    }
-
-    @Override
-    public StringBuffer getRequestURL() {
-        StringBuffer sb = new StringBuffer();
-        sb.append(scheme);
-        sb.append("://");
-        sb.append(serverName);
-        sb.append(':');
-        sb.append(serverPort);
-        sb.append(getRequestURI());
-
-        return sb;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CallContextImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CallContextImpl.java
deleted file mode 100644
index f68a347..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CallContextImpl.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.MutableCallContext;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Implementation of the {@link CallContext} interface.
- */
-public class CallContextImpl implements MutableCallContext {
-
-    private final String binding;
-    private final boolean objectInfoRequired;
-    private final Map<String, Object> parameter = new HashMap<String, Object>();
-
-    public CallContextImpl(String binding, CmisVersion cmisVersion, String repositoryId, ServletContext servletContext,
-            HttpServletRequest request, HttpServletResponse response, CmisServiceFactory factory,
-            TempStoreOutputStreamFactory streamFactory) {
-        this.binding = binding;
-        this.objectInfoRequired = BINDING_ATOMPUB.equals(binding);
-        put(REPOSITORY_ID, repositoryId);
-
-        // CMIS version
-        if (cmisVersion == null) {
-            throw new IllegalArgumentException("CMIS version must be set!");
-        }
-        put(CallContext.CMIS_VERSION, cmisVersion);
-
-        // servlet context and HTTP servlet request and response
-        put(CallContext.SERVLET_CONTEXT, servletContext);
-        put(CallContext.HTTP_SERVLET_REQUEST, request);
-        put(CallContext.HTTP_SERVLET_RESPONSE, response);
-
-        if (factory != null) {
-            put(TEMP_DIR, factory.getTempDirectory());
-            put(MEMORY_THRESHOLD, factory.getMemoryThreshold());
-            put(MAX_CONTENT_SIZE, factory.getMaxContentSize());
-            put(ENCRYPT_TEMP_FILE, factory.encryptTempFiles());
-            put(STREAM_FACTORY, streamFactory);
-        }
-    }
-
-    public void setRange(String rangeHeader) {
-        if (rangeHeader == null) {
-            return;
-        }
-
-        remove(OFFSET);
-        remove(LENGTH);
-
-        rangeHeader = rangeHeader.replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
-
-        if (rangeHeader.length() > 6 && rangeHeader.startsWith("bytes=") && rangeHeader.indexOf(',') == -1
-                && rangeHeader.charAt(6) != '-') {
-            BigInteger offset = null;
-            BigInteger length = null;
-
-            int ds = rangeHeader.indexOf('-');
-            if (ds > 6) {
-                try {
-                    String firstBytePosStr = rangeHeader.substring(6, ds);
-                    if (firstBytePosStr.length() > 0) {
-                        offset = new BigInteger(firstBytePosStr);
-                    }
-
-                    if (!rangeHeader.endsWith("-")) {
-                        String lastBytePosStr = rangeHeader.substring(ds + 1);
-                        if (offset == null) {
-                            length = (new BigInteger(lastBytePosStr)).add(BigInteger.ONE);
-                        } else {
-                            length = (new BigInteger(lastBytePosStr)).subtract(offset).add(BigInteger.ONE);
-                        }
-                    }
-
-                    if (offset != null) {
-                        put(OFFSET, offset);
-                    }
-                    if (length != null) {
-                        put(LENGTH, length);
-                    }
-                } catch (NumberFormatException e) {
-                    // invalid Range header must be ignored
-                }
-            }
-        }
-    }
-
-    public void setAcceptLanguage(String acceptLanguageHeader) {
-        if (acceptLanguageHeader == null) {
-            return;
-        }
-
-        remove(LOCALE_ISO639_LANGUAGE);
-        remove(LOCALE_ISO3166_COUNTRY);
-        remove(LOCALE);
-
-        double lastQ = 0;
-        String language = null;
-        String country = null;
-
-        String[] languageHeader = acceptLanguageHeader.split(",");
-        for (String languageRange : languageHeader) {
-            String langRange = languageRange.trim();
-            double currentQ = 0;
-
-            int x = langRange.indexOf(';');
-            if (x > -1) {
-                String qStr = langRange.substring(x + 1).replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
-                if (!qStr.startsWith("q=") && qStr.length() < 3) {
-                    continue;
-                }
-                currentQ = Double.parseDouble(qStr.substring(2));
-                langRange = langRange.substring(0, x);
-            } else {
-                currentQ = 1;
-            }
-
-            if (currentQ <= lastQ) {
-                continue;
-            } else {
-                lastQ = currentQ;
-            }
-
-            String[] locale = langRange.split("-");
-            String local0 = locale[0].trim();
-
-            language = null;
-            country = null;
-
-            if (!locale.equals("*")) {
-                language = local0;
-                if (locale.length > 1) {
-                    String local1 = locale[1].trim();
-                    if (!local1.equals("*")) {
-                        country = local1;
-                    }
-                }
-            }
-
-            if (currentQ >= 1) {
-                break;
-            }
-        }
-
-        if (language != null) {
-            put(LOCALE_ISO639_LANGUAGE, language);
-            put(LOCALE, language);
-        }
-
-        if (country != null) {
-            put(LOCALE_ISO3166_COUNTRY, country);
-            put(LOCALE, language + "-" + country);
-        }
-    }
-
-    public String getBinding() {
-        return binding;
-    }
-
-    public boolean isObjectInfoRequired() {
-        return objectInfoRequired;
-    }
-
-    public Object get(String key) {
-        return parameter.get(key);
-    }
-
-    public CmisVersion getCmisVersion() {
-        return (CmisVersion) get(CMIS_VERSION);
-    }
-
-    public String getRepositoryId() {
-        return (String) get(REPOSITORY_ID);
-    }
-
-    public String getUsername() {
-        return (String) get(USERNAME);
-    }
-
-    public String getPassword() {
-        return (String) get(PASSWORD);
-    }
-
-    public String getLocale() {
-        return (String) get(LOCALE);
-    }
-
-    public BigInteger getOffset() {
-        return (BigInteger) get(OFFSET);
-    }
-
-    public BigInteger getLength() {
-        return (BigInteger) get(LENGTH);
-    }
-
-    public File getTempDirectory() {
-        return (File) get(TEMP_DIR);
-    }
-
-    public boolean encryptTempFiles() {
-        return Boolean.TRUE.equals(get(ENCRYPT_TEMP_FILE));
-    }
-
-    public int getMemoryThreshold() {
-        return (Integer) get(MEMORY_THRESHOLD);
-    }
-
-    public long getMaxContentSize() {
-        return (Long) get(MAX_CONTENT_SIZE);
-    }
-
-    public final void put(String key, Object value) {
-        parameter.put(key, value);
-    }
-
-    public final Object remove(String key) {
-        return parameter.remove(key);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CmisRepositoryContextListener.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CmisRepositoryContextListener.java
deleted file mode 100644
index f8c2f31..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/CmisRepositoryContextListener.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * CMIS context listener.
- */
-public class CmisRepositoryContextListener implements ServletContextListener {
-
-    public static final String SERVICES_FACTORY = "org.apache.chemistry.opencmis.servicesfactory";
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisRepositoryContextListener.class.getName());
-
-    private static final String CONFIG_INIT_PARAM = "org.apache.chemistry.opencmis.REPOSITORY_CONFIG_FILE";
-    private static final String CONFIG_FILENAME = "/repository.properties";
-    private static final String PROPERTY_CLASS = "class";
-
-    public void contextInitialized(ServletContextEvent sce) {
-        // get config file name or use default
-        String configFilename = sce.getServletContext().getInitParameter(CONFIG_INIT_PARAM);
-        if (configFilename == null) {
-            configFilename = CONFIG_FILENAME;
-        }
-
-        // create services factory
-        CmisServiceFactory factory = null;
-        try {
-            factory = createServiceFactory(configFilename);
-        } catch (Exception e) {
-            LOG.error("Service factory couldn't be created: " + e.toString(), e);
-            return;
-        }
-
-        // set the services factory into the servlet context
-        sce.getServletContext().setAttribute(SERVICES_FACTORY, factory);
-    }
-
-    public void contextDestroyed(ServletContextEvent sce) {
-        // destroy services factory
-        CmisServiceFactory factory = (CmisServiceFactory) sce.getServletContext().getAttribute(SERVICES_FACTORY);
-        if (factory != null) {
-            try {
-                factory.destroy();
-            } catch (Exception e) {
-                LOG.error("Service factory couldn't be destroyed: " + e.toString(), e);
-                return;
-            }
-        }
-    }
-
-    /**
-     * Creates a service factory.
-     */
-    private CmisServiceFactory createServiceFactory(String filename) {
-        // load properties
-        InputStream stream = this.getClass().getResourceAsStream(filename);
-
-        if (stream == null) {
-            LOG.warn("Cannot find configuration!");
-            return null;
-        }
-
-        Properties props = new Properties();
-        try {
-            props.load(stream);
-        } catch (IOException e) {
-            LOG.warn("Cannot load configuration: " + e, e);
-            return null;
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-
-        // get 'class' property
-        String className = props.getProperty(PROPERTY_CLASS);
-        if (className == null) {
-            LOG.warn("Configuration doesn't contain the property 'class'!");
-            return null;
-        }
-
-        // create a factory instance
-        Object object = null;
-        try {
-            object = ClassLoaderUtil.loadClass(className).newInstance();
-        } catch (Exception e) {
-            LOG.warn("Could not create a services factory instance: " + e, e);
-            return null;
-        }
-
-        if (!(object instanceof CmisServiceFactory)) {
-            LOG.warn("The provided class is not an instance of CmisServiceFactory!");
-        }
-
-        CmisServiceFactory factory = (CmisServiceFactory) object;
-
-        // initialize factory instance
-        Map<String, String> parameters = new HashMap<String, String>();
-
-        for (Enumeration<?> e = props.propertyNames(); e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-            String value = props.getProperty(key);
-            parameters.put(key, value);
-        }
-
-        factory.init(parameters);
-
-        LOG.info("Initialized Services Factory: " + factory.getClass().getName());
-
-        return factory;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/ServerVersion.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/ServerVersion.java
deleted file mode 100644
index 386df1d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/ServerVersion.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-public final class ServerVersion {
-
-    public static final String OPENCMIS_VERSION;
-    public static final String OPENCMIS_SERVER;
-
-    static {
-        Package p = Package.getPackage("org.apache.chemistry.opencmis.server.impl");
-        if (p == null) {
-            OPENCMIS_VERSION = "?";
-            OPENCMIS_SERVER = "Apache-Chemistry-OpenCMIS";
-        } else {
-            OPENCMIS_VERSION = p.getImplementationVersion();
-            OPENCMIS_SERVER = "Apache-Chemistry-OpenCMIS/" + (OPENCMIS_VERSION == null ? "?" : OPENCMIS_VERSION);
-        }
-    }
-
-    private ServerVersion() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AbstractAtomPubServiceCall.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AbstractAtomPubServiceCall.java
deleted file mode 100644
index 9f576a7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AbstractAtomPubServiceCall.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Florian Mueller
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.LinkInfo;
-import org.apache.chemistry.opencmis.commons.server.NamespaceDefinitions;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-import org.apache.chemistry.opencmis.server.shared.AbstractServiceCall;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-
-public abstract class AbstractAtomPubServiceCall extends AbstractServiceCall {
-
-    public static final String RESOURCE_CHILDREN = "children";
-    public static final String RESOURCE_DESCENDANTS = "descendants";
-    public static final String RESOURCE_FOLDERTREE = "foldertree";
-    public static final String RESOURCE_TYPE = "type";
-    public static final String RESOURCE_TYPES = "types";
-    public static final String RESOURCE_TYPESDESC = "typedesc";
-    public static final String RESOURCE_ENTRY = "entry";
-    public static final String RESOURCE_PARENT = "parent";
-    public static final String RESOURCE_PARENTS = "parents";
-    public static final String RESOURCE_VERSIONS = "versions";
-    public static final String RESOURCE_ALLOWABLEACIONS = "allowableactions";
-    public static final String RESOURCE_ACL = "acl";
-    public static final String RESOURCE_POLICIES = "policies";
-    public static final String RESOURCE_RELATIONSHIPS = "relationships";
-    public static final String RESOURCE_OBJECTBYID = "id";
-    public static final String RESOURCE_OBJECTBYPATH = "path";
-    public static final String RESOURCE_QUERY = "query";
-    public static final String RESOURCE_CHECKEDOUT = "checkedout";
-    public static final String RESOURCE_UNFILED = "unfiled";
-    public static final String RESOURCE_CHANGES = "changes";
-    public static final String RESOURCE_CONTENT = "content";
-    public static final String RESOURCE_BULK_UPDATE = "update";
-
-    public static final String REPOSITORY_PLACEHOLDER = "{repositoryId}";
-
-    public static final BigInteger PAGE_SIZE = BigInteger.valueOf(100);
-
-    public static final String TYPE_AUTHOR = "unknown";
-
-    /**
-     * Compiles the base URL for links, collections and templates.
-     */
-    public UrlBuilder compileBaseUrl(HttpServletRequest request, String repositoryId) {
-        String baseUrl = (String) request.getAttribute(Dispatcher.BASE_URL_ATTRIBUTE);
-        if (baseUrl != null) {
-            int repIdPos = baseUrl.indexOf(REPOSITORY_PLACEHOLDER);
-            if (repIdPos < 0) {
-                return new UrlBuilder(baseUrl);
-            } else {
-                return new UrlBuilder(baseUrl.substring(0, repIdPos) + repositoryId
-                        + baseUrl.substring(repIdPos + REPOSITORY_PLACEHOLDER.length()));
-            }
-        }
-
-        UrlBuilder url = new UrlBuilder(request.getScheme(), request.getServerName(), request.getServerPort(), null);
-
-        url.addPath(request.getContextPath());
-        url.addPath(request.getServletPath());
-
-        if (repositoryId != null) {
-            url.addPathSegment(repositoryId);
-        }
-
-        return url;
-    }
-
-    /**
-     * Compiles a URL for links, collections and templates.
-     */
-    public String compileUrl(UrlBuilder baseUrl, String resource, String id) {
-        return compileUrlBuilder(baseUrl, resource, id).toString();
-    }
-
-    /**
-     * Compiles a URL for links, collections and templates.
-     */
-    public UrlBuilder compileUrlBuilder(UrlBuilder baseUrl, String resource, String id) {
-        UrlBuilder url = new UrlBuilder(baseUrl);
-        url.addPathSegment(resource);
-
-        if (id != null) {
-            url.addParameter("id", id);
-        }
-
-        return url;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- namespaces ---
-    // -------------------------------------------------------------------------
-
-    public Map<String, String> getNamespaces(Object obj) {
-        if (obj instanceof NamespaceDefinitions) {
-            return ((NamespaceDefinitions) obj).getNamespaces();
-        }
-
-        return null;
-    }
-
-    // -------------------------------------------------------------------------
-    // --- entry builder ---
-    // -------------------------------------------------------------------------
-
-    /**
-     * Writes the a object entry.
-     */
-    public void writeObjectEntry(CmisService service, AtomEntry entry, ObjectData object,
-            List<ObjectInFolderContainer> children, String repositoryId, String pathSegment,
-            String relativePathSegment, UrlBuilder baseUrl, boolean isRoot, CmisVersion cmisVersion)
-            throws XMLStreamException {
-        if (object == null) {
-            throw new CmisRuntimeException("Object not set!");
-        }
-
-        ObjectInfo info = service.getObjectInfo(repositoryId, object.getId());
-        if (info == null) {
-            throw new CmisRuntimeException("Object Info not found for: " + object.getId());
-        }
-
-        // start
-        entry.startEntry(isRoot);
-
-        // write object
-        String contentSrc = null;
-
-        if (info.hasContent()) {
-            UrlBuilder contentSrcBuilder = compileUrlBuilder(baseUrl, RESOURCE_CONTENT, info.getId());
-            if (info.getFileName() != null) {
-                contentSrcBuilder.addPathSegment(info.getFileName());
-            }
-
-            contentSrc = contentSrcBuilder.toString();
-        }
-
-        entry.writeObject(object, info, contentSrc, info.getContentType(), pathSegment, relativePathSegment,
-                cmisVersion);
-
-        // write links
-        entry.writeServiceLink(baseUrl.toString(), repositoryId);
-
-        entry.writeSelfLink(compileUrl(baseUrl, RESOURCE_ENTRY, info.getId()), info.getId());
-        entry.writeEnclosureLink(compileUrl(baseUrl, RESOURCE_ENTRY, info.getId()));
-        entry.writeEditLink(compileUrl(baseUrl, RESOURCE_ENTRY, info.getId()));
-        entry.writeDescribedByLink(compileUrl(baseUrl, RESOURCE_TYPE, info.getTypeId()));
-        entry.writeAllowableActionsLink(compileUrl(baseUrl, RESOURCE_ALLOWABLEACIONS, info.getId()));
-
-        if (info.hasParent()) {
-            if (info.getBaseType() == BaseTypeId.CMIS_FOLDER) {
-                entry.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENT, info.getId()), Constants.MEDIATYPE_ENTRY);
-            } else {
-                entry.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, info.getId()), Constants.MEDIATYPE_FEED);
-            }
-        }
-
-        if (info.getBaseType() == BaseTypeId.CMIS_FOLDER) {
-            entry.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, info.getId()), Constants.MEDIATYPE_FEED);
-
-            if (info.supportsDescendants()) {
-                entry.writeDownLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, info.getId()),
-                        Constants.MEDIATYPE_DESCENDANTS);
-            }
-
-            if (info.supportsFolderTree()) {
-                entry.writeFolderTreeLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, info.getId()));
-            }
-        }
-
-        if (info.getVersionSeriesId() != null) {
-            UrlBuilder vsUrl = compileUrlBuilder(baseUrl, RESOURCE_VERSIONS, info.getId());
-            vsUrl.addParameter(Constants.PARAM_VERSION_SERIES_ID, info.getVersionSeriesId());
-            entry.writeVersionHistoryLink(vsUrl.toString());
-        }
-
-        if (!info.isCurrentVersion()) {
-            UrlBuilder cvUrl = compileUrlBuilder(baseUrl, RESOURCE_ENTRY, info.getId());
-            cvUrl.addParameter(Constants.PARAM_RETURN_VERSION, ReturnVersion.LATEST);
-            entry.writeEditLink(cvUrl.toString());
-        }
-
-        if (info.getBaseType() == BaseTypeId.CMIS_DOCUMENT) {
-            entry.writeEditMediaLink(compileUrl(baseUrl, RESOURCE_CONTENT, info.getId()), info.getContentType());
-        }
-
-        if (info.getWorkingCopyId() != null) {
-            entry.writeWorkingCopyLink(compileUrl(baseUrl, RESOURCE_ENTRY, info.getWorkingCopyId()));
-        }
-
-        if (info.getWorkingCopyOriginalId() != null) {
-            entry.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, info.getWorkingCopyOriginalId()));
-        }
-
-        if (info.getRenditionInfos() != null) {
-            for (RenditionInfo ri : info.getRenditionInfos()) {
-                UrlBuilder rurl = compileUrlBuilder(baseUrl, RESOURCE_CONTENT, info.getId());
-                rurl.addParameter(Constants.PARAM_STREAM_ID, ri.getId());
-                entry.writeAlternateLink(rurl.toString(), ri.getContenType(), ri.getKind(), ri.getTitle(),
-                        ri.getLength());
-            }
-        }
-
-        if (info.hasAcl()) {
-            entry.writeAclLink(compileUrl(baseUrl, RESOURCE_ACL, info.getId()));
-        }
-
-        if (info.supportsPolicies()) {
-            entry.writePoliciesLink(compileUrl(baseUrl, RESOURCE_POLICIES, info.getId()));
-        }
-
-        if (info.supportsRelationships()) {
-            entry.writeRelationshipsLink(compileUrl(baseUrl, RESOURCE_RELATIONSHIPS, info.getId()));
-        }
-
-        if (info.getRelationshipSourceIds() != null) {
-            for (String id : info.getRelationshipSourceIds()) {
-                entry.writeRelationshipSourceLink(compileUrl(baseUrl, RESOURCE_ENTRY, id));
-            }
-        }
-
-        if (info.getRelationshipTargetIds() != null) {
-            for (String id : info.getRelationshipTargetIds()) {
-                entry.writeRelationshipTargetLink(compileUrl(baseUrl, RESOURCE_ENTRY, id));
-            }
-        }
-
-        if (info.getAdditionalLinks() != null) {
-            for (LinkInfo linkInfo : info.getAdditionalLinks()) {
-                entry.writeLink(linkInfo.getRel(), linkInfo.getHref(), linkInfo.getType(), linkInfo.getId());
-            }
-        }
-
-        // write children
-        if (isNotEmpty(children)) {
-            writeObjectChildren(service, entry, info, children, repositoryId, baseUrl, cmisVersion);
-        }
-
-        // we are done
-        entry.endEntry();
-    }
-
-    /**
-     * Writes the a object entry in a content changes list.
-     * 
-     * Content changes objects need special treatment because some of them could
-     * have been deleted and an object info cannot be generated.
-     */
-    public void writeContentChangesObjectEntry(CmisService service, AtomEntry entry, ObjectData object,
-            List<ObjectInFolderContainer> children, String repositoryId, String pathSegment,
-            String relativePathSegment, UrlBuilder baseUrl, boolean isRoot, CmisVersion cmisVersion)
-            throws XMLStreamException {
-        if (object == null) {
-            throw new CmisRuntimeException("Object not set!");
-        }
-
-        ObjectInfo info = null;
-        try {
-            info = service.getObjectInfo(repositoryId, object.getId());
-        } catch (Exception e) {
-            // ignore all exceptions
-        }
-
-        if (info != null) {
-            writeObjectEntry(service, entry, object, children, repositoryId, pathSegment, relativePathSegment, baseUrl,
-                    isRoot, cmisVersion);
-            return;
-        }
-
-        // start delete object entry
-        entry.startEntry(isRoot);
-
-        // write object
-        entry.writeDeletedObject(object, cmisVersion);
-
-        // write links
-        entry.writeServiceLink(baseUrl.toString(), repositoryId);
-
-        // we are done
-        entry.endEntry();
-    }
-
-    /**
-     * Writes an objects entry children feed.
-     */
-    public void writeObjectChildren(CmisService service, AtomEntry entry, ObjectInfo folderInfo,
-            List<ObjectInFolderContainer> children, String repositoryId, UrlBuilder baseUrl, CmisVersion cmisVersion)
-            throws XMLStreamException {
-
-        // start
-        AtomFeed feed = new AtomFeed(entry.getWriter());
-        feed.startChildren();
-        feed.startFeed(false);
-
-        // write basic Atom feed elements
-        feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
-                folderInfo.getName(), folderInfo.getLastModificationDate(), null, null);
-
-        // write links
-        feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-        feed.writeSelfLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId()), null);
-
-        feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, folderInfo.getId()));
-
-        feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-
-        feed.writeDownLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId()),
-                Constants.MEDIATYPE_DESCENDANTS);
-
-        feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-
-        for (ObjectInFolderContainer container : children) {
-            if ((container != null) && (container.getObject() != null)) {
-                writeObjectEntry(service, entry, container.getObject().getObject(), container.getChildren(),
-                        repositoryId, container.getObject().getPathSegment(), null, baseUrl, false, cmisVersion);
-            }
-        }
-
-        // we are done
-        feed.endFeed();
-        feed.endChildren();
-    }
-
-    /**
-     * Writes the a type entry.
-     */
-    public void writeTypeEntry(AtomEntry entry, TypeDefinition type, List<TypeDefinitionContainer> children,
-            String repositoryId, UrlBuilder baseUrl, boolean isRoot, CmisVersion cmisVersion) throws XMLStreamException {
-
-        // start
-        entry.startEntry(isRoot);
-
-        // write type
-        entry.writeType(type, cmisVersion);
-
-        // write links
-        entry.writeServiceLink(baseUrl.toString(), repositoryId);
-
-        entry.writeSelfLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getId()), type.getId());
-        entry.writeEnclosureLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getId()));
-        if (type.getParentTypeId() != null) {
-            entry.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getParentTypeId()), Constants.MEDIATYPE_ENTRY);
-        }
-        UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-        downLink.addParameter(Constants.PARAM_TYPE_ID, type.getId());
-        entry.writeDownLink(downLink.toString(), Constants.MEDIATYPE_CHILDREN);
-        UrlBuilder downLink2 = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
-        downLink2.addParameter(Constants.PARAM_TYPE_ID, type.getId());
-        entry.writeDownLink(downLink2.toString(), Constants.MEDIATYPE_DESCENDANTS);
-        entry.writeDescribedByLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getBaseTypeId().value()));
-
-        // write children
-        if (isNotEmpty(children)) {
-            writeTypeChildren(entry, type, children, repositoryId, baseUrl, cmisVersion);
-        }
-
-        // we are done
-        entry.endEntry();
-    }
-
-    /**
-     * Writes the a type entry children feed.
-     */
-    private void writeTypeChildren(AtomEntry entry, TypeDefinition type, List<TypeDefinitionContainer> children,
-            String repositoryId, UrlBuilder baseUrl, CmisVersion cmisVersion) throws XMLStreamException {
-
-        // start
-        AtomFeed feed = new AtomFeed(entry.getWriter());
-        feed.startChildren();
-        feed.startFeed(false);
-
-        // write basic Atom feed elements
-        feed.writeFeedElements(type.getId(), null, TYPE_AUTHOR, type.getDisplayName(), new GregorianCalendar(), null,
-                null);
-
-        feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-        UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
-        selfLink.addParameter(Constants.PARAM_TYPE_ID, type.getId());
-        feed.writeSelfLink(selfLink.toString(), type.getId());
-
-        feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getId()));
-
-        UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-        downLink.addParameter(Constants.PARAM_TYPE_ID, type.getId());
-        feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_FEED);
-
-        if (type.getParentTypeId() != null) {
-            feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, type.getParentTypeId()), Constants.MEDIATYPE_ENTRY);
-        }
-
-        // write tree
-        for (TypeDefinitionContainer container : children) {
-            if ((container != null) && (container.getTypeDefinition() != null)) {
-                writeTypeEntry(entry, container.getTypeDefinition(), container.getChildren(), repositoryId, baseUrl,
-                        false, cmisVersion);
-            }
-        }
-
-        // write extensions
-        feed.writeExtensions(type);
-
-        // we are done
-        feed.endFeed();
-        feed.endChildren();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AclService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AclService.java
deleted file mode 100644
index 4feb590..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AclService.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.io.OutputStream;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * ACL Service operations.
- */
-public class AclService {
-
-    public abstract static class AclServiceCall extends AbstractAtomPubServiceCall {
-        protected void writeAclXML(Acl acl, CmisVersion cmisVersion, OutputStream out) throws XMLStreamException {
-            XMLStreamWriter writer = XMLUtils.createWriter(out);
-            XMLUtils.startXmlDocument(writer);
-            XMLConverter.writeAcl(writer, cmisVersion, true, acl);
-            XMLUtils.endXmlDocument(writer);
-        }
-    }
-
-    /**
-     * Get ACL.
-     */
-    public static class GetAcl extends AclServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            Boolean onlyBasicPermissions = getBooleanParameter(request, Constants.PARAM_ONLY_BASIC_PERMISSIONS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Acl acl = service.getAcl(repositoryId, objectId, onlyBasicPermissions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (acl == null) {
-                throw new CmisRuntimeException("ACL is null!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ACL);
-
-            // write XML
-            writeAclXML(acl, context.getCmisVersion(), response.getOutputStream());
-        }
-    }
-
-    /**
-     * Apply ACL.
-     */
-    public static class ApplyAcl extends AclServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            AclPropagation aclPropagation = getEnumParameter(request, Constants.PARAM_ACL_PROPAGATION,
-                    AclPropagation.class);
-
-            Acl aces = null;
-            XMLStreamReader parser = null;
-            try {
-                parser = XMLUtils.createParser(request.getInputStream());
-                XMLUtils.findNextStartElemenet(parser);
-                aces = XMLConverter.convertAcl(parser);
-            } catch (XMLStreamException e) {
-                throw new CmisInvalidArgumentException("Invalid request!", e);
-            } finally {
-                if (parser != null) {
-                    try {
-                        parser.close();
-                    } catch (XMLStreamException e2) {
-                        // ignore
-                    }
-                }
-            }
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Acl acl = service.applyAcl(repositoryId, objectId, aces, aclPropagation);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (acl == null) {
-                throw new CmisRuntimeException("ACL is null!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ACL);
-
-            // write XML
-            writeAclXML(acl, context.getCmisVersion(), response.getOutputStream());
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomDocumentBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomDocumentBase.java
deleted file mode 100644
index 6a14436..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomDocumentBase.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-
-/**
- * Atom base class.
- */
-public abstract class AtomDocumentBase extends XMLDocumentBase {
-
-    private static final String ID_PREFIX = "http://chemistry.apache.org/";
-    private static final String ID_DUMMY = "http://chemistry.apache.org/no-id";
-
-    /**
-     * Generates a valid Atom id.
-     */
-    public String generateAtomId(String input) {
-        if (input == null) {
-            return ID_DUMMY;
-        }
-
-        return ID_PREFIX + Base64.encodeBytes(IOUtils.toUTF8Bytes(input));
-    }
-
-    /**
-     * Writes an Atom id tag.
-     */
-    public void writeId(String id) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "id", id);
-    }
-
-    /**
-     * Writes an Atom title tag.
-     */
-    public void writeTitle(String title) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "title", title);
-    }
-
-    /**
-     * Writes an Atom author tag.
-     */
-    public void writeAuthor(String author) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "author", XMLConstants.NAMESPACE_ATOM);
-        XMLUtils.write(xsw, XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "name", author);
-        xsw.writeEndElement();
-    }
-
-    /**
-     * Writes an Atom updated tag.
-     */
-    public void writeUpdated(GregorianCalendar updated) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP, "edited", updated);
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "updated", updated);
-    }
-
-    /**
-     * Writes an Atom updated tag.
-     */
-    public void writeUpdated(long updated) throws XMLStreamException {
-        String updatedStr = DateTimeHelper.formatHttpDateTime(updated);
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP, "edited", updatedStr);
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "updated", updatedStr);
-    }
-
-    /**
-     * Writes an Atom published tag.
-     */
-    public void writePublished(GregorianCalendar published) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "published", published);
-    }
-
-    /**
-     * Writes an Atom published tag.
-     */
-    public void writePublished(long published) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "published",
-                DateTimeHelper.formatHttpDateTime(published));
-    }
-
-    /**
-     * Writes a CMIS pathSegment tag.
-     */
-    public void writePathSegment(String pathSegment) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "pathSegment",
-                pathSegment);
-    }
-
-    /**
-     * Writes a CMIS relativePathSegment tag.
-     */
-    public void writeRelativePathSegment(String relativePathSegment) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM,
-                "relativePathSegment", relativePathSegment);
-    }
-
-    /**
-     * Writes an Atom collection.
-     */
-    public void writeCollection(String href, String collectionType, String text, String... accept)
-            throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_APP, "collection", XMLConstants.NAMESPACE_APP);
-        xsw.writeAttribute("href", href);
-
-        if (collectionType != null) {
-            XMLUtils.write(xsw, XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "collectionType",
-                    collectionType);
-        }
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "title", XMLConstants.NAMESPACE_ATOM);
-        xsw.writeAttribute("type", "text");
-        xsw.writeCharacters(text);
-        xsw.writeEndElement();
-
-        for (String ct : accept) {
-            XMLUtils.write(xsw, XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP, "accept", ct);
-        }
-
-        xsw.writeEndElement();
-    }
-
-    /**
-     * Writes a link.
-     */
-    public void writeLink(String rel, String href, String type, String id) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "link", XMLConstants.NAMESPACE_ATOM);
-
-        xsw.writeAttribute("rel", rel);
-        xsw.writeAttribute("href", href);
-        if (type != null) {
-            xsw.writeAttribute("type", type);
-        }
-        if (id != null) {
-            xsw.writeAttribute(XMLConstants.NAMESPACE_RESTATOM, "id", id);
-        }
-
-        xsw.writeEndElement();
-    }
-
-    public void writeServiceLink(String href, String repositoryId) throws XMLStreamException {
-        writeLink(Constants.REL_SERVICE, href + "?repositoryId=" + IOUtils.encodeURL(repositoryId),
-                Constants.MEDIATYPE_SERVICE, null);
-    }
-
-    public void writeSelfLink(String href, String type, String id) throws XMLStreamException {
-        writeLink(Constants.REL_SELF, href, type, id);
-    }
-
-    public void writeEnclosureLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_ENCLOSURE, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeEditLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_EDIT, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeAlternateLink(String href, String type, String kind, String title, BigInteger length)
-            throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "link", XMLConstants.NAMESPACE_ATOM);
-
-        xsw.writeAttribute("rel", Constants.REL_ALTERNATE);
-        xsw.writeAttribute("href", href);
-        if (type != null) {
-            xsw.writeAttribute("type", type);
-        }
-        if (kind != null) {
-            xsw.writeAttribute(XMLConstants.NAMESPACE_RESTATOM, "renditionKind", kind);
-        }
-        if (title != null) {
-            xsw.writeAttribute("title", title);
-        }
-        if (length != null) {
-            xsw.writeAttribute("length", length.toString());
-        }
-
-        xsw.writeEndElement();
-    }
-
-    public void writeWorkingCopyLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_WORKINGCOPY, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeUpLink(String href, String type) throws XMLStreamException {
-        writeLink(Constants.REL_UP, href, type, null);
-    }
-
-    public void writeDownLink(String href, String type) throws XMLStreamException {
-        writeLink(Constants.REL_DOWN, href, type, null);
-    }
-
-    public void writeVersionHistoryLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_VERSIONHISTORY, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeCurrentVerionsLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_CURRENTVERSION, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeEditMediaLink(String href, String type) throws XMLStreamException {
-        writeLink(Constants.REL_EDITMEDIA, href, type, null);
-    }
-
-    public void writeDescribedByLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_DESCRIBEDBY, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeAllowableActionsLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_ALLOWABLEACTIONS, href, Constants.MEDIATYPE_ALLOWABLEACTION, null);
-    }
-
-    public void writeAclLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_ACL, href, Constants.MEDIATYPE_ACL, null);
-    }
-
-    public void writePoliciesLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_POLICIES, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeRelationshipsLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_RELATIONSHIPS, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeRelationshipSourceLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_SOURCE, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeRelationshipTargetLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_TARGET, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeFolderTreeLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_FOLDERTREE, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeTypeUpLink(String href, String type) throws XMLStreamException {
-        writeLink(Constants.REL_UP, href, type, null);
-    }
-
-    public void writeTypeDownLink(String href, String type) throws XMLStreamException {
-        writeLink(Constants.REL_DOWN, href, type, null);
-    }
-
-    public void writeViaLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_VIA, href, Constants.MEDIATYPE_ENTRY, null);
-    }
-
-    public void writeFirstLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_FIRST, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeLastLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_LAST, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writePreviousLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_PREV, href, Constants.MEDIATYPE_FEED, null);
-    }
-
-    public void writeNextLink(String href) throws XMLStreamException {
-        writeLink(Constants.REL_NEXT, href, Constants.MEDIATYPE_FEED, null);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntry.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntry.java
deleted file mode 100644
index 90a3017..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntry.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-
-/**
- * Atom Entry class.
- */
-public class AtomEntry extends AtomDocumentBase {
-
-    private static final String DEFAULT_AUTHOR = "unknown";
-
-    // private boolean contentTagAdded;
-
-    /**
-     * Creates an Atom entry document.
-     */
-    public AtomEntry() {
-    }
-
-    /**
-     * Creates an Atom entry that is embedded somewhere.
-     */
-    public AtomEntry(XMLStreamWriter writer) {
-        setWriter(writer);
-    }
-
-    /**
-     * Opens the entry tag.
-     */
-    public void startEntry(boolean isRoot) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "entry", XMLConstants.NAMESPACE_ATOM);
-
-        if (isRoot) {
-            xsw.writeNamespace(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-            xsw.writeNamespace(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-            xsw.writeNamespace(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-            xsw.writeNamespace(XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP);
-
-            writeAllCustomNamespace();
-        }
-
-        // contentTagAdded = false;
-    }
-
-    /**
-     * Closes the entry tag.
-     */
-    public void endEntry() throws XMLStreamException {
-        // if (!contentTagAdded) {
-        // writeEmptyContent();
-        // }
-
-        getWriter().writeEndElement();
-    }
-
-    /**
-     * Writes an entry self link.
-     */
-    public void writeSelfLink(String href, String id) throws XMLStreamException {
-        writeSelfLink(href, Constants.MEDIATYPE_ENTRY, id);
-    }
-
-    /**
-     * Writes an object.
-     */
-    public void writeObject(ObjectData object, ObjectInfo info, String contentSrc, String contentType,
-            String pathSegment, String relativePathSegment, CmisVersion cmisVersion) throws XMLStreamException {
-        if (object == null) {
-            return;
-        }
-
-        writeAuthor(info.getCreatedBy());
-        writeId(info.getAtomId() == null ? generateAtomId(info.getId()) : info.getAtomId());
-        writePublished(info.getCreationDate());
-        writeTitle(info.getName());
-        writeUpdated(info.getLastModificationDate());
-
-        writeContent(contentSrc, contentType);
-
-        XMLConverter.writeObject(getWriter(), cmisVersion, false, XMLConstants.TAG_OBJECT,
-                XMLConstants.NAMESPACE_RESTATOM, object);
-
-        writePathSegment(pathSegment);
-        writeRelativePathSegment(relativePathSegment);
-    }
-
-    /**
-     * Writes a delete object.
-     */
-    public void writeDeletedObject(ObjectData object, CmisVersion cmisVersion) throws XMLStreamException {
-        if (object == null) {
-            return;
-        }
-
-        long now = System.currentTimeMillis();
-
-        writeAuthor(DEFAULT_AUTHOR);
-        writeId(generateAtomId(object.getId()));
-        writePublished(now);
-        writeTitle(object.getId());
-        writeUpdated(now);
-
-        XMLConverter.writeObject(getWriter(), cmisVersion, false, XMLConstants.TAG_OBJECT,
-                XMLConstants.NAMESPACE_RESTATOM, object);
-    }
-
-    /**
-     * Writes a type.
-     */
-    public void writeType(TypeDefinition type, CmisVersion cmisVersion) throws XMLStreamException {
-        if (type == null) {
-            return;
-        }
-
-        long now = System.currentTimeMillis();
-
-        writeAuthor(DEFAULT_AUTHOR);
-        writeId(generateAtomId(type.getId()));
-        writeTitle(type.getDisplayName());
-        writeUpdated(now);
-
-        XMLConverter.writeTypeDefinition(getWriter(), cmisVersion, XMLConstants.NAMESPACE_RESTATOM, type);
-    }
-
-    /**
-     * Writes a content tag.
-     */
-    public void writeContent(String src, String type) throws XMLStreamException {
-        if (src == null) {
-            return;
-        }
-
-        XMLStreamWriter xsw = getWriter();
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "content", XMLConstants.NAMESPACE_ATOM);
-
-        xsw.writeAttribute("src", src);
-        if (type != null) {
-            xsw.writeAttribute("type", type);
-        }
-
-        xsw.writeEndElement();
-
-        // contentTagAdded = true;
-    }
-
-    /**
-     * Writes an empty content tag for Atom spec compliance.
-     */
-    public void writeEmptyContent() throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "content", XMLConstants.NAMESPACE_ATOM);
-        xsw.writeEndElement();
-
-        // contentTagAdded = true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntryParser.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntryParser.java
deleted file mode 100644
index b3bafe3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomEntryParser.java
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstraints;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-import org.apache.chemistry.opencmis.server.shared.CappedInputStream;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Parser for Atom Entries.
- */
-public final class AtomEntryParser {
-
-    private static final long MAX_STREAM_LENGTH = 10 * 1024 * 1024;
-
-    private static final String TAG_ENTRY = "entry";
-    private static final String TAG_TITLE = "title";
-    private static final String TAG_OBJECT = "object";
-    private static final String TAG_CONTENT = "content";
-    private static final String TAG_BASE64 = "base64";
-    private static final String TAG_MEDIATYPE = "mediatype";
-    private static final String TAG_FILENAME = "filename";
-    private static final String TAG_TYPE = "type";
-    private static final String TAG_BULK_UPDATE = "bulkUpdate";
-
-    private static final String ATTR_SRC = "src";
-    private static final String ATTR_TYPE = "type";
-
-    private boolean ignoreAtomContentSrc;
-
-    private CappedInputStream cappedStream;
-
-    private final TempStoreOutputStreamFactory streamFactory;
-
-    private ObjectData object;
-    private ContentStreamImpl atomContentStream;
-    private ContentStreamImpl cmisContentStream;
-    private TypeDefinition typeDef;
-    private BulkUpdateImpl bulkUpdate;
-
-    /**
-     * Constructor.
-     */
-    public AtomEntryParser(TempStoreOutputStreamFactory streamFactory) {
-        this.streamFactory = streamFactory;
-    }
-
-    /**
-     * Constructor that immediately parses the given stream.
-     */
-    public AtomEntryParser(InputStream stream, TempStoreOutputStreamFactory streamFactory) throws XMLStreamException,
-            IOException {
-        this(streamFactory);
-        parse(stream);
-    }
-
-    /**
-     * Sets the flag controlling whether atom content src (external content) is
-     * ignored. This flag is false by default (not ignored).
-     */
-    public void setIgnoreAtomContentSrc(boolean ignoreAtomContentSrc) {
-        this.ignoreAtomContentSrc = ignoreAtomContentSrc;
-    }
-
-    /**
-     * Returns the object.
-     */
-    public ObjectData getObject() {
-        return object;
-    }
-
-    /**
-     * Returns the properties of the object.
-     */
-    public Properties getProperties() {
-        return (object == null ? null : object.getProperties());
-    }
-
-    /**
-     * Returns the Id of the object.
-     */
-    public String getId() {
-        Properties properties = getProperties();
-        if (properties == null) {
-            return null;
-        }
-
-        Map<String, PropertyData<?>> propertiesMap = properties.getProperties();
-        if (propertiesMap == null) {
-            return null;
-        }
-
-        PropertyData<?> property = propertiesMap.get(PropertyIds.OBJECT_ID);
-        if (property instanceof PropertyId) {
-            return ((PropertyId) property).getFirstValue();
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the ACL of the object.
-     */
-    public Acl getAcl() {
-        return (object == null ? null : object.getAcl());
-    }
-
-    /**
-     * Returns the policy id list of the object.
-     */
-    public List<String> getPolicyIds() {
-        if ((object == null) || (object.getPolicyIds() == null)) {
-            return null;
-        }
-
-        return object.getPolicyIds().getPolicyIds();
-    }
-
-    /**
-     * Returns the content stream.
-     */
-    public ContentStream getContentStream() {
-        return (cmisContentStream == null ? atomContentStream : cmisContentStream);
-    }
-
-    /**
-     * Returns the type definition.
-     */
-    public TypeDefinition getTypeDefinition() {
-        return typeDef;
-    }
-
-    /**
-     * Returns the bulk update data.
-     */
-    public BulkUpdateImpl getBulkUpdate() {
-        return bulkUpdate;
-    }
-
-    /**
-     * Parses the stream.
-     */
-    public void parse(InputStream stream) throws XMLStreamException, IOException {
-        release();
-
-        if (stream == null) {
-            return;
-        }
-
-        cappedStream = new CappedInputStream(stream, MAX_STREAM_LENGTH);
-        XMLStreamReader parser = XMLUtils.createParser(cappedStream);
-
-        try {
-            while (true) {
-                int event = parser.getEventType();
-                if (event == XMLStreamReader.START_ELEMENT) {
-                    QName name = parser.getName();
-
-                    if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())
-                            && (TAG_ENTRY.equals(name.getLocalPart()))) {
-                        parseEntry(parser);
-                        break;
-                    } else {
-                        throw new CmisInvalidArgumentException("XML is not an Atom entry!");
-                    }
-                }
-
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        } catch (XMLStreamException xse) {
-            release();
-            throw xse;
-        } catch (IOException ioe) {
-            release();
-            throw ioe;
-        } catch (RuntimeException re) {
-            release();
-            throw re;
-        } finally {
-            parser.close();
-        }
-    }
-
-    /**
-     * Releases all resources.
-     */
-    public void release() {
-        object = null;
-        typeDef = null;
-        bulkUpdate = null;
-        closeAtomContentStream();
-        closeCmisContentStream();
-    }
-
-    /**
-     * Closes the Atom content stream.
-     */
-    private void closeAtomContentStream() {
-        IOUtils.closeQuietly(atomContentStream);
-        atomContentStream = null;
-    }
-
-    /**
-     * Closes the CMIS content stream.
-     */
-    private void closeCmisContentStream() {
-        IOUtils.closeQuietly(cmisContentStream);
-        cmisContentStream = null;
-    }
-
-    /**
-     * Parses an Atom entry.
-     */
-    private void parseEntry(XMLStreamReader parser) throws XMLStreamException, IOException {
-        String atomTitle = null;
-
-        XMLUtils.next(parser);
-
-        // walk through all tags in entry
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-
-                if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_OBJECT.equals(name.getLocalPart())) {
-                        parseObject(parser);
-                    } else if (TAG_TYPE.equals(name.getLocalPart())) {
-                        parseTypeDefinition(parser);
-                    } else if (TAG_BULK_UPDATE.equals(name.getLocalPart())) {
-                        parseBulkUpdate(parser);
-                    } else if (TAG_CONTENT.equals(name.getLocalPart())) {
-                        parseCmisContent(parser);
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_CONTENT.equals(name.getLocalPart())) {
-                        parseAtomContent(parser);
-                    } else if (TAG_TITLE.equals(name.getLocalPart())) {
-                        atomTitle = XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH);
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        // overwrite cmis:name with Atom title
-        if ((object != null) && (object.getProperties() != null) && (atomTitle != null) && (atomTitle.length() > 0)) {
-            PropertyString nameProperty = new PropertyStringImpl(PropertyIds.NAME, atomTitle);
-            ((PropertiesImpl) object.getProperties()).replaceProperty(nameProperty);
-        }
-    }
-
-    /**
-     * Parses a CMIS object.
-     */
-    private void parseObject(XMLStreamReader parser) throws XMLStreamException {
-        object = XMLConverter.convertObject(parser);
-    }
-
-    /**
-     * Parses a CMIS type.
-     */
-    private void parseTypeDefinition(XMLStreamReader parser) throws XMLStreamException {
-        typeDef = XMLConverter.convertTypeDefinition(parser);
-    }
-
-    /**
-     * Parses a bluk update.
-     */
-    private void parseBulkUpdate(XMLStreamReader parser) throws XMLStreamException {
-        bulkUpdate = XMLConverter.convertBulkUpdate(parser);
-    }
-
-    /**
-     * Extract the content stream.
-     * 
-     * @throws XMLStreamException
-     * @throws IOException
-     */
-    private void parseAtomContent(XMLStreamReader parser) throws XMLStreamException, IOException {
-        if (atomContentStream != null) {
-            closeAtomContentStream();
-            throw new CmisInvalidArgumentException("More than one content provided!");
-        }
-
-        if (cmisContentStream != null) {
-            // CMIS content takes precedence (see CMIS spec)
-            XMLUtils.skip(parser);
-            return;
-        }
-
-        atomContentStream = new ContentStreamImpl();
-
-        // read attributes
-        String type = "text";
-        String mimeType = "text/plain";
-        for (int i = 0; i < parser.getAttributeCount(); i++) {
-            QName attrName = parser.getAttributeName(i);
-            if (ATTR_TYPE.equals(attrName.getLocalPart())) {
-                if (parser.getAttributeValue(i) != null) {
-                    type = parser.getAttributeValue(i).trim().toLowerCase(Locale.ENGLISH);
-                }
-            } else if (ATTR_SRC.equals(attrName.getLocalPart())) {
-                if (ignoreAtomContentSrc) {
-                    atomContentStream = null;
-                    XMLUtils.skip(parser);
-                    return;
-                }
-                throw new CmisNotSupportedException("External content not supported!");
-            }
-        }
-
-        TempStoreOutputStream tsos = null;
-        if (type.equals("text")) {
-            mimeType = "text/plain";
-            tsos = readContentBytes(parser, mimeType);
-        } else if (type.equals("html")) {
-            mimeType = "text/html";
-            tsos = readContentBytes(parser, mimeType);
-        } else if (type.equals("xhtml")) {
-            mimeType = "application/xhtml+xml";
-            tsos = copy(parser, mimeType);
-        } else if (type.endsWith("/xml") || type.endsWith("+xml")) {
-            mimeType = type;
-            tsos = copy(parser, mimeType);
-        } else if (type.startsWith("text/")) {
-            mimeType = type;
-            tsos = readContentBytes(parser, mimeType);
-        } else {
-            mimeType = type;
-            tsos = readBase64(parser, mimeType, null);
-        }
-
-        atomContentStream.setMimeType(mimeType);
-
-        if (tsos != null) {
-            try {
-                atomContentStream.setStream(tsos.getInputStream());
-                atomContentStream.setLength(BigInteger.valueOf(tsos.getLength()));
-            } catch (IOException e) {
-                tsos.destroy(e);
-                throw e;
-            }
-        }
-    }
-
-    /**
-     * Extract the content stream.
-     */
-    private void parseCmisContent(XMLStreamReader parser) throws XMLStreamException, IOException {
-        closeAtomContentStream();
-        if (cmisContentStream != null) {
-            closeCmisContentStream();
-            throw new CmisInvalidArgumentException("More than one content provided!");
-        }
-
-        cmisContentStream = new ContentStreamImpl();
-
-        XMLUtils.next(parser);
-
-        // walk through all tags in content
-        while (true) {
-            int event = parser.getEventType();
-            if (event == XMLStreamReader.START_ELEMENT) {
-                QName name = parser.getName();
-
-                if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
-                    if (TAG_MEDIATYPE.equals(name.getLocalPart())) {
-                        cmisContentStream.setMimeType(XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-                    } else if (TAG_BASE64.equals(name.getLocalPart())) {
-                        TempStoreOutputStream tsos = readBase64(parser, cmisContentStream.getMimeType(),
-                                cmisContentStream.getFileName());
-                        try {
-                            cmisContentStream.setStream(tsos.getInputStream());
-                            cmisContentStream.setLength(BigInteger.valueOf(tsos.getLength()));
-                        } catch (IOException e) {
-                            tsos.destroy(e);
-                            throw e;
-                        }
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else if (XMLConstants.NAMESPACE_APACHE_CHEMISTRY.equals(name.getNamespaceURI())) {
-                    if (TAG_FILENAME.equals(name.getLocalPart())) {
-                        cmisContentStream.setFileName(XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
-                    } else {
-                        XMLUtils.skip(parser);
-                    }
-                } else {
-                    XMLUtils.skip(parser);
-                }
-            } else if (event == XMLStreamReader.END_ELEMENT) {
-                break;
-            } else {
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        }
-
-        XMLUtils.next(parser);
-    }
-
-    /**
-     * Parses a tag that contains content bytes.
-     */
-    private TempStoreOutputStream readContentBytes(XMLStreamReader parser, String mimeType) throws XMLStreamException,
-            IOException {
-        TempStoreOutputStream bufferStream = streamFactory.newOutputStream();
-        bufferStream.setMimeType(mimeType);
-
-        XMLUtils.next(parser);
-
-        try {
-            while (true) {
-                int event = parser.getEventType();
-                if (event == XMLStreamReader.END_ELEMENT) {
-                    break;
-                } else if (event == XMLStreamReader.CHARACTERS) {
-                    String s = parser.getText();
-                    if (s != null) {
-                        byte[] bytes = IOUtils.toUTF8Bytes(s);
-                        bufferStream.write(bytes);
-                        cappedStream.deductBytes(bytes.length);
-                    }
-                } else if (event == XMLStreamReader.START_ELEMENT) {
-                    bufferStream.destroy(null);
-                    throw new CmisInvalidArgumentException("Unexpected tag: " + parser.getName());
-                }
-
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-        } catch (XMLStreamException xse) {
-            // remove temp file
-            bufferStream.destroy(xse);
-            throw xse;
-        } catch (IOException ioe) {
-            // remove temp file
-            bufferStream.destroy(ioe);
-            throw ioe;
-        }
-
-        XMLUtils.next(parser);
-
-        return bufferStream;
-    }
-
-    /**
-     * Parses a tag that contains base64 encoded content.
-     */
-    private TempStoreOutputStream readBase64(XMLStreamReader parser, String mimeType, String filename)
-            throws XMLStreamException, IOException {
-        TempStoreOutputStream bufferStream = streamFactory.newOutputStream();
-        bufferStream.setMimeType(mimeType);
-        bufferStream.setFileName(filename);
-        Base64.OutputStream b64stream = new Base64.OutputStream(bufferStream, Base64.DECODE);
-
-        XMLUtils.next(parser);
-
-        try {
-            while (true) {
-                int event = parser.getEventType();
-                if (event == XMLStreamReader.END_ELEMENT) {
-                    break;
-                } else if (event == XMLStreamReader.CHARACTERS) {
-                    int len = parser.getTextLength();
-                    if (len > 0) {
-                        char[] chars = parser.getTextCharacters();
-                        int offset = parser.getTextStart();
-                        for (int i = 0; i < len; i++) {
-                            // it's base64/ASCII
-                            b64stream.write(chars[offset + i]);
-                        }
-                        cappedStream.deductBytes(len);
-                    }
-                } else if (event == XMLStreamReader.START_ELEMENT) {
-                    b64stream.close();
-                    bufferStream.destroy(null);
-                    throw new CmisInvalidArgumentException("Unexpected tag: " + parser.getName());
-                }
-
-                if (!XMLUtils.next(parser)) {
-                    break;
-                }
-            }
-
-            b64stream.close();
-        } catch (XMLStreamException xse) {
-            // remove temp file
-            bufferStream.destroy(xse);
-            throw xse;
-        } catch (IOException ioe) {
-            // remove temp file
-            bufferStream.destroy(ioe);
-            throw ioe;
-        }
-
-        XMLUtils.next(parser);
-
-        return bufferStream;
-    }
-
-    /**
-     * Copies a subtree into a stream.
-     */
-    private TempStoreOutputStream copy(XMLStreamReader parser, String mimeType) throws XMLStreamException, IOException {
-        // create a writer
-        TempStoreOutputStream bufferStream = streamFactory.newOutputStream();
-        bufferStream.setMimeType(mimeType);
-
-        try {
-            XMLStreamWriter writer = XMLUtils.createWriter(bufferStream);
-
-            writer.writeStartDocument();
-
-            // copy subtree
-            int level = 1;
-            while (XMLUtils.next(parser)) {
-                int event = parser.getEventType();
-                if (event == XMLStreamReader.START_ELEMENT) {
-                    copyStartElement(parser, writer);
-                    level++;
-                } else if (event == XMLStreamReader.CHARACTERS) {
-                    writer.writeCharacters(parser.getText());
-                } else if (event == XMLStreamReader.COMMENT) {
-                    writer.writeComment(parser.getText());
-                } else if (event == XMLStreamReader.CDATA) {
-                    writer.writeCData(parser.getText());
-                } else if (event == XMLStreamReader.END_ELEMENT) {
-                    level--;
-                    if (level == 0) {
-                        break;
-                    }
-                    writer.writeEndElement();
-                } else {
-                    break;
-                }
-            }
-
-            writer.writeEndDocument();
-            writer.flush();
-
-            bufferStream.close();
-        } catch (XMLStreamException xse) {
-            // remove temp file
-            bufferStream.destroy(xse);
-            throw xse;
-        } catch (IOException ioe) {
-            // remove temp file
-            bufferStream.destroy(ioe);
-            throw ioe;
-        }
-
-        XMLUtils.next(parser);
-
-        return bufferStream;
-    }
-
-    /**
-     * Copies a XML start element.
-     */
-    private static void copyStartElement(XMLStreamReader parser, XMLStreamWriter writer) throws XMLStreamException {
-        String namespaceUri = parser.getNamespaceURI();
-        String prefix = parser.getPrefix();
-        String localName = parser.getLocalName();
-
-        // write start element
-        if (namespaceUri != null) {
-            if ((prefix == null) || (prefix.length() == 0)) {
-                writer.writeStartElement(localName);
-            } else {
-                writer.writeStartElement(prefix, localName, namespaceUri);
-            }
-        } else {
-            writer.writeStartElement(localName);
-        }
-
-        // set namespaces
-        for (int i = 0; i < parser.getNamespaceCount(); i++) {
-            addNamespace(writer, parser.getNamespacePrefix(i), parser.getNamespaceURI(i));
-        }
-        addNamespaceIfMissing(writer, prefix, namespaceUri);
-
-        // write attributes
-        for (int i = 0; i < parser.getAttributeCount(); i++) {
-            String attrNamespaceUri = parser.getAttributeNamespace(i);
-            String attrPrefix = parser.getAttributePrefix(i);
-            String attrName = parser.getAttributeLocalName(i);
-            String attrValue = parser.getAttributeValue(i);
-
-            if ((attrNamespaceUri == null) || (attrNamespaceUri.trim().length() == 0)) {
-                writer.writeAttribute(attrName, attrValue);
-            } else if ((attrPrefix == null) || (attrPrefix.trim().length() == 0)) {
-                writer.writeAttribute(attrNamespaceUri, attrName, attrValue);
-            } else {
-                addNamespaceIfMissing(writer, attrPrefix, attrNamespaceUri);
-                writer.writeAttribute(attrPrefix, attrNamespaceUri, attrName, attrValue);
-            }
-        }
-    }
-
-    /**
-     * Checks if the given prefix is assigned to the given namespace.
-     */
-    @SuppressWarnings("unchecked")
-    private static void addNamespaceIfMissing(XMLStreamWriter writer, String prefix, String namespaceUri)
-            throws XMLStreamException {
-        if ((namespaceUri == null) || (namespaceUri.trim().length() == 0)) {
-            return;
-        }
-
-        if (prefix == null) {
-            prefix = "";
-        }
-
-        Iterator<String> iter = writer.getNamespaceContext().getPrefixes(namespaceUri);
-        if (iter == null) {
-            return;
-        }
-
-        while (iter.hasNext()) {
-            String p = iter.next();
-            if ((p != null) && (p.equals(prefix))) {
-                return;
-            }
-        }
-
-        addNamespace(writer, prefix, namespaceUri);
-    }
-
-    /**
-     * Adds a namespace to a XML element.
-     */
-    private static void addNamespace(XMLStreamWriter writer, String prefix, String namespaceUri)
-            throws XMLStreamException {
-        if ((prefix == null) || (prefix.trim().length() == 0)) {
-            writer.setDefaultNamespace(namespaceUri);
-            writer.writeDefaultNamespace(namespaceUri);
-        } else {
-            writer.setPrefix(prefix, namespaceUri);
-            writer.writeNamespace(prefix, namespaceUri);
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomFeed.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomFeed.java
deleted file mode 100644
index 4ecf448..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/AtomFeed.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-
-/**
- * Atom Feed class.
- */
-public class AtomFeed extends AtomDocumentBase {
-
-    public static final BigInteger DEFAULT_PAGE_SIZE = BigInteger.valueOf(100);
-
-    /**
-     * Creates an Atom feed document.
-     */
-    public AtomFeed() {
-    }
-
-    /**
-     * Creates an Atom feed that is embedded somewhere.
-     */
-    public AtomFeed(XMLStreamWriter writer) {
-        setWriter(writer);
-    }
-
-    /**
-     * Opens the feed tag.
-     */
-    public void startFeed(boolean isRoot) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_ATOM, "feed", XMLConstants.NAMESPACE_ATOM);
-
-        if (isRoot) {
-            xsw.writeNamespace(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-            xsw.writeNamespace(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-            xsw.writeNamespace(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-            xsw.writeNamespace(XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP);
-
-            writeAllCustomNamespace();
-        }
-    }
-
-    /**
-     * Opens the children tag.
-     */
-    public void startChildren() throws XMLStreamException {
-        XMLStreamWriter writer = getWriter();
-        writer.writeStartElement(XMLConstants.PREFIX_RESTATOM, "children", XMLConstants.NAMESPACE_RESTATOM);
-    }
-
-    /**
-     * Closes the feed tag.
-     */
-    public void endChildren() throws XMLStreamException {
-        getWriter().writeEndElement();
-    }
-
-    /**
-     * Closes the feed tag.
-     */
-    public void endFeed() throws XMLStreamException {
-        getWriter().writeEndElement();
-    }
-
-    /**
-     * Writes an feed self link.
-     */
-    public void writeSelfLink(String href, String id) throws XMLStreamException {
-        writeSelfLink(href, Constants.MEDIATYPE_FEED, id);
-    }
-
-    /**
-     * Writes the feed elements that are required by Atom.
-     */
-    public void writeFeedElements(String id, String atomId, String author, String title, GregorianCalendar updated,
-            String pathSegment, BigInteger numItems) throws XMLStreamException {
-        writeAuthor(author);
-        writeId(atomId == null ? generateAtomId(id) : atomId);
-        writeTitle(title);
-        writeUpdated(updated);
-        writePathSegment(pathSegment);
-        writeNumItems(numItems);
-    }
-
-    /**
-     * Writes a CMIS numItems tag.
-     */
-    public void writeNumItems(BigInteger numItems) throws XMLStreamException {
-        XMLUtils.write(getWriter(), XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "numItems", numItems);
-    }
-
-    /**
-     * Writes paging links.
-     */
-    public void writePagingLinks(UrlBuilder pagingUrl, BigInteger maxItems, BigInteger skipCount, BigInteger numItems,
-            Boolean hasMoreItems, BigInteger pageSize) throws XMLStreamException {
-
-        if ((skipCount == null) || (skipCount.compareTo(BigInteger.ZERO) == -1)) {
-            skipCount = BigInteger.ZERO;
-        }
-
-        if ((maxItems == null) || (maxItems.compareTo(BigInteger.ZERO) == -1)) {
-            if ((pageSize == null) || (pageSize.compareTo(BigInteger.ZERO) == -1)) {
-                maxItems = DEFAULT_PAGE_SIZE;
-            } else {
-                maxItems = pageSize;
-            }
-        }
-
-        // if not first page -> add "first" and "previous" link
-        if (skipCount.compareTo(BigInteger.ZERO) == 1) {
-            // first link
-            UrlBuilder firstLink = new UrlBuilder(pagingUrl);
-            firstLink.addParameter(Constants.PARAM_SKIP_COUNT, "0");
-            firstLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            writeFirstLink(firstLink.toString());
-
-            // previous link
-            UrlBuilder previousLink = new UrlBuilder(pagingUrl);
-            previousLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount.subtract(maxItems).max(BigInteger.ZERO));
-            previousLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            writePreviousLink(previousLink.toString());
-        }
-
-        // if has more -> add "next" link
-        if (Boolean.TRUE.equals(hasMoreItems)) {
-            // next link
-            UrlBuilder nextLink = new UrlBuilder(pagingUrl);
-            nextLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount.add(maxItems));
-            nextLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            writeNextLink(nextLink.toString());
-        }
-
-        // if not last page -> add "last" link
-        if ((numItems != null) && (numItems.compareTo(BigInteger.ZERO) == 1)) {
-            BigInteger lastSkip = numItems.subtract(maxItems).max(BigInteger.ZERO);
-            if (lastSkip.compareTo(BigInteger.ZERO) == 1) {
-                // last link
-                UrlBuilder lastLink = new UrlBuilder(pagingUrl);
-                lastLink.addParameter(Constants.PARAM_SKIP_COUNT, lastSkip);
-                lastLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-                writeLastLink(lastLink.toString());
-            }
-        }
-    }
-
-    /**
-     * Writes extensions.
-     */
-    public void writeExtensions(ExtensionsData extensions) throws XMLStreamException {
-        XMLConverter.writeExtensions(getWriter(), extensions);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java
deleted file mode 100644
index 6c38b67..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_ACL;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_ALLOWABLEACIONS;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_BULK_UPDATE;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_CHANGES;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_CHECKEDOUT;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_CHILDREN;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_CONTENT;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_DESCENDANTS;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_ENTRY;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_FOLDERTREE;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_OBJECTBYID;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_OBJECTBYPATH;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_PARENT;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_PARENTS;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_POLICIES;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_QUERY;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_RELATIONSHIPS;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_TYPE;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_TYPES;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_TYPESDESC;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_UNFILED;
-import static org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall.RESOURCE_VERSIONS;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_DELETE;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_GET;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_HEAD;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_POST;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_PUT;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisServiceUnavailableException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.impl.ServerVersion;
-import org.apache.chemistry.opencmis.server.shared.AbstractCmisHttpServlet;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-import org.apache.chemistry.opencmis.server.shared.ExceptionHelper;
-import org.apache.chemistry.opencmis.server.shared.HEADHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.shared.HttpUtils;
-import org.apache.chemistry.opencmis.server.shared.NoBodyHttpServletResponseWrapper;
-import org.apache.chemistry.opencmis.server.shared.QueryStringHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.shared.ServiceCall;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * CMIS AtomPub servlet.
- */
-public class CmisAtomPubServlet extends AbstractCmisHttpServlet {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisAtomPubServlet.class);
-
-    private static final long serialVersionUID = 1L;
-
-    private final Dispatcher dispatcher = new Dispatcher();
-
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-        super.init(config);
-
-        // set the binding
-        setBinding(CallContext.BINDING_ATOMPUB);
-
-        // get and CMIS version
-        String cmisVersionStr = config.getInitParameter(PARAM_CMIS_VERSION);
-        if (cmisVersionStr != null) {
-            try {
-                setCmisVersion(CmisVersion.fromValue(cmisVersionStr));
-            } catch (IllegalArgumentException e) {
-                LOG.warn("CMIS version is invalid! Setting it to CMIS 1.0.");
-                setCmisVersion(CmisVersion.CMIS_1_0);
-            }
-        } else {
-            LOG.warn("CMIS version is not defined! Setting it to CMIS 1.0.");
-            setCmisVersion(CmisVersion.CMIS_1_0);
-        }
-
-        // initialize resources
-        addResource("", METHOD_GET, new RepositoryService.GetRepositories());
-        addResource(RESOURCE_TYPES, METHOD_GET, new RepositoryService.GetTypeChildren());
-        addResource(RESOURCE_TYPES, METHOD_POST, new RepositoryService.CreateType());
-        addResource(RESOURCE_TYPESDESC, METHOD_GET, new RepositoryService.GetTypeDescendants());
-        addResource(RESOURCE_TYPE, METHOD_GET, new RepositoryService.GetTypeDefinition());
-        addResource(RESOURCE_TYPE, METHOD_PUT, new RepositoryService.UpdateType());
-        addResource(RESOURCE_TYPE, METHOD_DELETE, new RepositoryService.DeleteType());
-        addResource(RESOURCE_CHILDREN, METHOD_GET, new NavigationService.GetChildren());
-        addResource(RESOURCE_DESCENDANTS, METHOD_GET, new NavigationService.GetDescendants());
-        addResource(RESOURCE_FOLDERTREE, METHOD_GET, new NavigationService.GetFolderTree());
-        addResource(RESOURCE_PARENT, METHOD_GET, new NavigationService.GetFolderParent());
-        addResource(RESOURCE_PARENTS, METHOD_GET, new NavigationService.GetObjectParents());
-        addResource(RESOURCE_CHECKEDOUT, METHOD_GET, new NavigationService.GetCheckedOutDocs());
-        addResource(RESOURCE_ENTRY, METHOD_GET, new ObjectService.GetObject());
-        addResource(RESOURCE_OBJECTBYID, METHOD_GET, new ObjectService.GetObject());
-        addResource(RESOURCE_OBJECTBYPATH, METHOD_GET, new ObjectService.GetObjectByPath());
-        addResource(RESOURCE_ALLOWABLEACIONS, METHOD_GET, new ObjectService.GetAllowableActions());
-        addResource(RESOURCE_CONTENT, METHOD_GET, new ObjectService.GetContentStream());
-        addResource(RESOURCE_CONTENT, METHOD_PUT, new ObjectService.SetOrAppendContentStream());
-        addResource(RESOURCE_CONTENT, METHOD_DELETE, new ObjectService.DeleteContentStream());
-        addResource(RESOURCE_CHILDREN, METHOD_POST, new ObjectService.Create());
-        addResource(RESOURCE_RELATIONSHIPS, METHOD_POST, new ObjectService.CreateRelationship());
-        addResource(RESOURCE_ENTRY, METHOD_PUT, new ObjectService.UpdateProperties());
-        addResource(RESOURCE_ENTRY, METHOD_DELETE, new ObjectService.DeleteObject());
-        addResource(RESOURCE_CHILDREN, METHOD_DELETE, new ObjectService.DeleteTree()); // 1.1
-        addResource(RESOURCE_DESCENDANTS, METHOD_DELETE, new ObjectService.DeleteTree());
-        addResource(RESOURCE_FOLDERTREE, METHOD_DELETE, new ObjectService.DeleteTree());
-        addResource(RESOURCE_BULK_UPDATE, METHOD_POST, new ObjectService.BulkUpdateProperties());
-        addResource(RESOURCE_CHECKEDOUT, METHOD_POST, new VersioningService.CheckOut());
-        addResource(RESOURCE_VERSIONS, METHOD_GET, new VersioningService.GetAllVersions());
-        addResource(RESOURCE_VERSIONS, METHOD_DELETE, new VersioningService.DeleteAllVersions());
-        addResource(RESOURCE_QUERY, METHOD_GET, new DiscoveryService.Query());
-        addResource(RESOURCE_QUERY, METHOD_POST, new DiscoveryService.Query());
-        addResource(RESOURCE_CHANGES, METHOD_GET, new DiscoveryService.GetContentChanges());
-        addResource(RESOURCE_RELATIONSHIPS, METHOD_GET, new RelationshipService.GetObjectRelationships());
-        addResource(RESOURCE_UNFILED, METHOD_POST, new MultiFilingService.RemoveObjectFromFolder());
-        addResource(RESOURCE_ACL, METHOD_GET, new AclService.GetAcl());
-        addResource(RESOURCE_ACL, METHOD_PUT, new AclService.ApplyAcl());
-        addResource(RESOURCE_POLICIES, METHOD_GET, new PolicyService.GetAppliedPolicies());
-        addResource(RESOURCE_POLICIES, METHOD_POST, new PolicyService.ApplyPolicy());
-        addResource(RESOURCE_POLICIES, METHOD_DELETE, new PolicyService.RemovePolicy());
-    }
-
-    @Override
-    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
-            IOException {
-
-        CallContext context = null;
-        try {
-            // split path
-            String[] pathFragments = HttpUtils.splitPath(request);
-
-            // create stream factory
-            TempStoreOutputStreamFactory streamFactoy = TempStoreOutputStreamFactory.newInstance(getServiceFactory(),
-                    pathFragments.length > 0 ? pathFragments[0] : null);
-
-            // treat HEAD requests
-            if (METHOD_HEAD.equals(request.getMethod())) {
-                request = new HEADHttpServletRequestWrapper(request);
-                response = new NoBodyHttpServletResponseWrapper(response);
-            } else {
-                request = new QueryStringHttpServletRequestWrapper(request);
-            }
-
-            // set default headers
-            response.addHeader("Cache-Control", "private, max-age=0");
-            response.addHeader("Server", ServerVersion.OPENCMIS_SERVER);
-
-            context = createContext(getServletContext(), request, response, streamFactoy);
-            dispatch(context, request, response, pathFragments);
-        } catch (Exception e) {
-            if (e instanceof CmisUnauthorizedException) {
-                response.setHeader("WWW-Authenticate", "Basic realm=\"CMIS\", charset=\"UTF-8\"");
-                response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Required");
-            } else if (e instanceof CmisPermissionDeniedException) {
-                if ((context == null) || (context.getUsername() == null)) {
-                    response.setHeader("WWW-Authenticate", "Basic realm=\"CMIS\", charset=\"UTF-8\"");
-                    response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Required");
-                } else {
-                    response.sendError(getErrorCode((CmisPermissionDeniedException) e), e.getMessage());
-                }
-            } else {
-                printError(e, response);
-            }
-        } finally {
-            // we are done.
-            response.flushBuffer();
-        }
-    }
-
-    /**
-     * Registers a new resource.
-     */
-    protected void addResource(String resource, String httpMethod, ServiceCall serviceCall) {
-        dispatcher.addResource(resource, httpMethod, serviceCall);
-    }
-
-    /**
-     * Dispatches to feed, entry or whatever.
-     */
-    private void dispatch(CallContext context, HttpServletRequest request, HttpServletResponse response,
-            String[] pathFragments) throws Exception {
-
-        CmisService service = null;
-        try {
-            // get the service
-            service = getServiceFactory().getService(context);
-
-            // analyze the path
-            if (pathFragments.length < 2) {
-                // root -> service document
-                dispatcher.dispatch("", METHOD_GET, context, service, null, request, response);
-                return;
-            }
-
-            String method = request.getMethod();
-            String repositoryId = pathFragments[0];
-            String resource = pathFragments[1];
-
-            // dispatch
-            boolean callServiceFound = dispatcher.dispatch(resource, method, context, service, repositoryId, request,
-                    response);
-
-            // if the dispatcher couldn't find a matching service
-            // -> return an error message
-            if (!callServiceFound) {
-                response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "Unknown operation");
-            }
-        } finally {
-            if (service != null) {
-                service.close();
-            }
-        }
-    }
-
-    /**
-     * Translates an exception in an appropriate HTTP error code.
-     */
-    protected int getErrorCode(CmisBaseException ex) {
-        if (ex instanceof CmisConstraintException) {
-            return 409;
-        } else if (ex instanceof CmisContentAlreadyExistsException) {
-            return 409;
-        } else if (ex instanceof CmisFilterNotValidException) {
-            return 400;
-        } else if (ex instanceof CmisInvalidArgumentException) {
-            return 400;
-        } else if (ex instanceof CmisNameConstraintViolationException) {
-            return 409;
-        } else if (ex instanceof CmisNotSupportedException) {
-            return 405;
-        } else if (ex instanceof CmisObjectNotFoundException) {
-            return 404;
-        } else if (ex instanceof CmisPermissionDeniedException) {
-            return 403;
-        } else if (ex instanceof CmisStorageException) {
-            return 500;
-        } else if (ex instanceof CmisStreamNotSupportedException) {
-            return 403;
-        } else if (ex instanceof CmisUpdateConflictException) {
-            return 409;
-        } else if (ex instanceof CmisVersioningException) {
-            return 409;
-        } else if (ex instanceof CmisServiceUnavailableException) {
-            return 503;
-        }
-
-        return 500;
-    }
-
-    /**
-     * Prints the error HTML page.
-     */
-    protected void printError(Exception ex, HttpServletResponse response) {
-        int statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
-        String exceptionName = "runtime";
-
-        if (ex instanceof CmisRuntimeException) {
-            LOG.error(ex.getMessage(), ex);
-        } else if (ex instanceof CmisStorageException) {
-            LOG.error(ex.getMessage(), ex);
-            statusCode = getErrorCode((CmisStorageException) ex);
-            exceptionName = ((CmisStorageException) ex).getExceptionName();
-        } else if (ex instanceof CmisBaseException) {
-            statusCode = getErrorCode((CmisBaseException) ex);
-            exceptionName = ((CmisBaseException) ex).getExceptionName();
-
-            if (statusCode == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
-                LOG.error(ex.getMessage(), ex);
-            }
-        } else if (ex instanceof IOException) {
-            LOG.warn(ex.getMessage(), ex);
-        } else {
-            LOG.error(ex.getMessage(), ex);
-        }
-
-        if (response.isCommitted()) {
-            LOG.warn("Failed to send error message to client. Response is already committed.", ex);
-            return;
-        }
-
-        String message = ex.getMessage();
-        if (!(ex instanceof CmisBaseException)) {
-            message = "An error occurred!";
-        }
-
-        try {
-            response.resetBuffer();
-            response.setStatus(statusCode);
-            response.setContentType("text/html");
-            response.setCharacterEncoding(IOUtils.UTF8);
-
-            PrintWriter pw = response.getWriter();
-
-            pw.print("<html><head><title>Apache Chemistry OpenCMIS - "
-                    + exceptionName
-                    + " error</title>"
-                    + "<style><!--H1 {font-size:24px;line-height:normal;font-weight:bold;background-color:#f0f0f0;color:#003366;border-bottom:1px solid #3c78b5;padding:2px;} "
-                    + "BODY {font-family:Verdana,arial,sans-serif;color:black;font-size:14px;} "
-                    + "HR {color:#3c78b5;height:1px;}--></style></head><body>");
-            pw.print("<h1>HTTP Status " + statusCode + " - <!--exception-->" + exceptionName + "<!--/exception--></h1>");
-            pw.print("<p><!--message-->" + StringEscapeUtils.escapeHtml(message) + "<!--/message--></p>");
-
-            String st = ExceptionHelper.getStacktraceAsString(ex);
-            if (st != null) {
-                pw.print("<hr noshade='noshade'/><!--stacktrace--><pre>\n" + st
-                        + "\n</pre><!--/stacktrace--><hr noshade='noshade'/>");
-            }
-
-            pw.print("</body></html>");
-        } catch (Exception e) {
-            LOG.error(e.getMessage(), e);
-            try {
-                response.sendError(statusCode, message);
-            } catch (Exception en) {
-                // there is nothing else we can do
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/DiscoveryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/DiscoveryService.java
deleted file mode 100644
index 77ce862..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/DiscoveryService.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-
-/**
- * Discovery Service operations.
- */
-public class DiscoveryService {
-
-    /**
-     * Query.
-     */
-    public static class Query extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String statement = null;
-            Boolean searchAllVersions = null;
-            Boolean includeAllowableActions = null;
-            IncludeRelationships includeRelationships = null;
-            String renditionFilter = null;
-            BigInteger maxItems = null;
-            BigInteger skipCount = null;
-
-            int statusCode = 0;
-
-            if (Dispatcher.METHOD_POST.equals(request.getMethod())) {
-                // POST -> read from stream
-
-                QueryTypeImpl queryType = null;
-                XMLStreamReader parser = null;
-                try {
-                    parser = XMLUtils.createParser(request.getInputStream());
-                    XMLUtils.findNextStartElemenet(parser);
-                    queryType = XMLConverter.convertQuery(parser);
-                } catch (XMLStreamException e) {
-                    throw new CmisInvalidArgumentException("Invalid query request!", e);
-                } finally {
-                    if (parser != null) {
-                        try {
-                            parser.close();
-                        } catch (XMLStreamException e2) {
-                            // ignore
-                        }
-                    }
-                }
-
-                statement = queryType.getStatement();
-                searchAllVersions = queryType.getSearchAllVersions();
-                includeAllowableActions = queryType.getIncludeAllowableActions();
-                includeRelationships = queryType.getIncludeRelationships();
-                renditionFilter = queryType.getRenditionFilter();
-                maxItems = queryType.getMaxItems();
-                skipCount = queryType.getSkipCount();
-
-                statusCode = HttpServletResponse.SC_CREATED;
-            } else if (Dispatcher.METHOD_GET.equals(request.getMethod())) {
-                // GET -> parameters
-                statement = getStringParameter(request, Constants.PARAM_Q);
-                searchAllVersions = getBooleanParameter(request, Constants.PARAM_SEARCH_ALL_VERSIONS);
-                includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-                includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                        IncludeRelationships.class);
-                // since CMIS 1.1
-                renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-                maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-                skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-                statusCode = HttpServletResponse.SC_OK;
-            } else {
-                throw new CmisRuntimeException("Invalid HTTP method!");
-            }
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList results = service.query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                    includeRelationships, renditionFilter, maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (results == null) {
-                throw new CmisRuntimeException("Results are null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_QUERY, null);
-            pagingUrl.addParameter(Constants.PARAM_Q, statement);
-            pagingUrl.addParameter(Constants.PARAM_SEARCH_ALL_VERSIONS, searchAllVersions);
-            pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            pagingUrl.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-
-            UrlBuilder location = new UrlBuilder(pagingUrl);
-            location.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            location.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-            response.setStatus(statusCode);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // The Content-Location header is optional (CMIS specification
-            // 3.7.2.1).
-            // Since it can cause problems with long query statements it is
-            // deactivated.
-            // response.setHeader("Content-Location", location.toString());
-
-            // The Location header is not optional (CMIS specification 3.7.2.1).
-            response.setHeader("Location", location.toString());
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            GregorianCalendar now = new GregorianCalendar();
-            feed.writeFeedElements("query", null, "", "Query", now, null, results.getNumItems());
-
-            // write links
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            feed.writePagingLinks(pagingUrl, maxItems, skipCount, results.getNumItems(), results.hasMoreItems(),
-                    PAGE_SIZE);
-
-            CmisVersion cmisVersion = context.getCmisVersion();
-            if (results.getObjects() != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                int idCounter = 0;
-                for (ObjectData result : results.getObjects()) {
-                    if (result == null) {
-                        continue;
-                    }
-                    idCounter++;
-                    writeQueryResultEntry(entry, result, "id-" + idCounter, now, cmisVersion);
-                }
-            }
-
-            // write extensions
-            feed.writeExtensions(results);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-
-        private void writeQueryResultEntry(AtomEntry entry, ObjectData result, String id, GregorianCalendar now,
-                CmisVersion cmisVersion) throws Exception {
-            if (result == null) {
-                return;
-            }
-
-            // start
-            entry.startEntry(false);
-
-            // write Atom base tags
-            entry.writeAuthor("");
-            entry.writeId(entry.generateAtomId(id));
-            entry.writePublished(now);
-            entry.writeTitle("Query Result " + id);
-            entry.writeUpdated(now);
-
-            // write query result object
-            XMLConverter.writeObject(entry.getWriter(), cmisVersion, false, XMLConstants.TAG_OBJECT,
-                    XMLConstants.NAMESPACE_RESTATOM, result);
-
-            // we are done
-            entry.endEntry();
-        }
-    }
-
-    /**
-     * Get content changes.
-     */
-    public static class GetContentChanges extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String changeLogToken = getStringParameter(request, Constants.PARAM_CHANGE_LOG_TOKEN);
-            Boolean includeProperties = getBooleanParameter(request, Constants.PARAM_PROPERTIES);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
-            Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> changeLogTokenHolder = new Holder<String>(changeLogToken);
-            ObjectList changes = service.getContentChanges(repositoryId, changeLogTokenHolder, includeProperties,
-                    filter, includePolicyIds, includeAcl, maxItems, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (changes == null) {
-                throw new CmisRuntimeException("Changes are null!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            GregorianCalendar now = new GregorianCalendar();
-            feed.writeFeedElements("contentChanges", null, "", "Content Change", now, null, changes.getNumItems());
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_CHANGES, null);
-            selfLink.addParameter(Constants.PARAM_CHANGE_LOG_TOKEN, changeLogToken);
-            selfLink.addParameter(Constants.PARAM_PROPERTIES, includeProperties);
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-            selfLink.addParameter(Constants.PARAM_ACL, includeAcl);
-            selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            if (changeLogTokenHolder.getValue() != null) {
-                if (Boolean.TRUE.equals(changes.hasMoreItems())) {
-                    UrlBuilder nextLink = compileUrlBuilder(baseUrl, RESOURCE_CHANGES, null);
-                    nextLink.addParameter(Constants.PARAM_CHANGE_LOG_TOKEN, changeLogTokenHolder.getValue());
-                    nextLink.addParameter(Constants.PARAM_PROPERTIES, includeProperties);
-                    nextLink.addParameter(Constants.PARAM_FILTER, filter);
-                    nextLink.addParameter(Constants.PARAM_POLICY_IDS, includePolicyIds);
-                    nextLink.addParameter(Constants.PARAM_ACL, includeAcl);
-                    nextLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-                    feed.writeNextLink(nextLink.toString());
-                }
-
-                // The CMIS spec says that the AtomPub binding doesn't provide
-                // the change log token. We are doing it anyway.
-                XMLStreamWriter writer = feed.getWriter();
-                writer.writeStartElement(XMLConstants.PREFIX_APACHE_CHEMISTY, "changeLogToken",
-                        XMLConstants.NAMESPACE_APACHE_CHEMISTRY);
-                writer.writeNamespace(XMLConstants.PREFIX_APACHE_CHEMISTY, XMLConstants.NAMESPACE_APACHE_CHEMISTRY);
-                writer.writeCharacters(changeLogTokenHolder.getValue());
-                writer.writeEndElement();
-            }
-
-            // write entries
-            if (changes.getObjects() != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                for (ObjectData object : changes.getObjects()) {
-                    if (object == null) {
-                        continue;
-                    }
-                    writeContentChangesObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl,
-                            false, context.getCmisVersion());
-                }
-            }
-
-            // write extensions
-            feed.writeExtensions(changes);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java
deleted file mode 100644
index a17fd45..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * MultiFiling Service operations.
- */
-public class MultiFilingService {
-
-    /**
-     * Remove object from folder.
-     */
-    public static class RemoveObjectFromFolder extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String removeFrom = getStringParameter(request, Constants.PARAM_REMOVE_FROM);
-
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.setIgnoreAtomContentSrc(true); // needed for some clients
-            parser.parse(request.getInputStream());
-
-            // execute
-            String objectId = parser.getId();
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                if (objectId == null && removeFrom == null) {
-                    createUnfiledObject(context, service, repositoryId, request, response, parser);
-                    return;
-                }
-
-                service.removeObjectFromFolder(repositoryId, objectId, removeFrom, null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            if (object.getId() == null) {
-                throw new CmisRuntimeException("Object Id is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, object.getId()));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-
-        /**
-         * Create unfiled object.
-         */
-        private void createUnfiledObject(CallContext context, CmisService service, String repositoryId,
-                HttpServletRequest request, HttpServletResponse response, AtomEntryParser parser) throws Exception {
-            // get additional parameters
-            VersioningState versioningState = getEnumParameter(request, Constants.PARAM_VERSIONIG_STATE,
-                    VersioningState.class);
-
-            // create
-            ContentStream contentStream = parser.getContentStream();
-            String newObjectId = service.create(repositoryId, parser.getProperties(), null, contentStream,
-                    versioningState, parser.getPolicyIds(), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, newObjectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, newObjectId));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.java
deleted file mode 100644
index 40621ce..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-
-/**
- * Navigation Service operations.
- */
-public class NavigationService {
-
-    /**
-     * Children Collection GET.
-     */
-    public static class GetChildren extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            String orderBy = getStringParameter(request, Constants.PARAM_ORDER_BY);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectInFolderList children = service.getChildren(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems,
-                    skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (children == null) {
-                throw new CmisRuntimeException("Children are null!");
-            }
-
-            ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
-            if (folderInfo == null) {
-                throw new CmisRuntimeException("Folder Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
-                    folderInfo.getName(), folderInfo.getLastModificationDate(), null, children.getNumItems());
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_CHILDREN, folderInfo.getId());
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-            selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            feed.writeDescribedByLink(compileUrl(baseUrl, RESOURCE_TYPE, folderInfo.getTypeId()));
-
-            feed.writeAllowableActionsLink(compileUrl(baseUrl, RESOURCE_ALLOWABLEACIONS, folderInfo.getId()));
-
-            feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-
-            if (folderInfo.supportsDescendants()) {
-                feed.writeDownLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId()),
-                        Constants.MEDIATYPE_DESCENDANTS);
-            }
-
-            if (folderInfo.supportsFolderTree()) {
-                feed.writeFolderTreeLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId()));
-            }
-
-            if (folderInfo.hasParent()) {
-                feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-            }
-
-            if (folderInfo.getRenditionInfos() != null) {
-                for (RenditionInfo ri : folderInfo.getRenditionInfos()) {
-                    feed.writeAlternateLink(compileUrl(baseUrl, RESOURCE_CONTENT, ri.getId()), ri.getContenType(),
-                            ri.getKind(), ri.getTitle(), ri.getLength());
-                }
-            }
-
-            if (folderInfo.hasAcl()) {
-                feed.writeAclLink(compileUrl(baseUrl, RESOURCE_ACL, folderInfo.getId()));
-            }
-
-            if (folderInfo.supportsPolicies()) {
-                feed.writeAclLink(compileUrl(baseUrl, RESOURCE_POLICIES, folderInfo.getId()));
-            }
-
-            if (folderInfo.supportsRelationships()) {
-                feed.writeRelationshipsLink(compileUrl(baseUrl, RESOURCE_RELATIONSHIPS, folderInfo.getId()));
-            }
-
-            UrlBuilder pagingUrl = new UrlBuilder(compileUrlBuilder(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()));
-            pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
-            pagingUrl.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-            pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            pagingUrl.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            pagingUrl.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            pagingUrl.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-            feed.writePagingLinks(pagingUrl, maxItems, skipCount, children.getNumItems(), children.hasMoreItems(),
-                    PAGE_SIZE);
-
-            // write collection
-            feed.writeCollection(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), null, "Folder collection",
-                    Constants.MEDIATYPE_CMISATOM);
-
-            // write entries
-            if (children.getObjects() != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                for (ObjectInFolderData object : children.getObjects()) {
-                    if ((object == null) || (object.getObject() == null)) {
-                        continue;
-                    }
-                    writeObjectEntry(service, entry, object.getObject(), null, repositoryId, object.getPathSegment(),
-                            null, baseUrl, false, context.getCmisVersion());
-                }
-            }
-
-            // write extensions
-            feed.writeExtensions(children);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Descendants feed GET.
-     */
-    public static class GetDescendants extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectInFolderContainer> descendants = service.getDescendants(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (descendants == null) {
-                throw new CmisRuntimeException("Descendants are null!");
-            }
-
-            ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
-            if (folderInfo == null) {
-                throw new CmisRuntimeException("Folder Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
-                    folderInfo.getName(), folderInfo.getLastModificationDate(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId());
-            selfLink.addParameter(Constants.PARAM_DEPTH, depth);
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, folderInfo.getId()));
-
-            feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-
-            if (folderInfo.supportsFolderTree()) {
-                feed.writeFolderTreeLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId()));
-            }
-
-            if (folderInfo.hasParent()) {
-                feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-            }
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectInFolderContainer container : descendants) {
-                if ((container == null) || (container.getObject() == null)
-                        || (container.getObject().getObject() == null)) {
-                    continue;
-                }
-                writeObjectEntry(service, entry, container.getObject().getObject(), container.getChildren(),
-                        repositoryId, container.getObject().getPathSegment(), null, baseUrl, false,
-                        context.getCmisVersion());
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Folder tree feed GET.
-     */
-    public static class GetFolderTree extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectInFolderContainer> folderTree = service.getFolderTree(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (folderTree == null) {
-                throw new CmisRuntimeException("Folder tree is null!");
-            }
-
-            ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
-            if (folderInfo == null) {
-                throw new CmisRuntimeException("Folder Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
-                    folderInfo.getName(), folderInfo.getLastModificationDate(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId());
-            selfLink.addParameter(Constants.PARAM_DEPTH, depth);
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, folderInfo.getId()));
-
-            feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-
-            if (folderInfo.supportsDescendants()) {
-                feed.writeDownLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId()),
-                        Constants.MEDIATYPE_DESCENDANTS);
-            }
-
-            if (folderInfo.hasParent()) {
-                feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
-            }
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectInFolderContainer container : folderTree) {
-                if ((container == null) || (container.getObject() == null)
-                        || (container.getObject().getObject() == null)) {
-                    continue;
-                }
-                writeObjectEntry(service, entry, container.getObject().getObject(), container.getChildren(),
-                        repositoryId, container.getObject().getPathSegment(), null, baseUrl, false,
-                        context.getCmisVersion());
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Object parents feed GET.
-     */
-    public static class GetFolderParent extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectData object = service.getFolderParent(repositoryId, folderId, filter, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, folderId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-
-            // write XML
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Object parents feed GET.
-     */
-    public static class GetObjectParents extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includeRelativePathSegment = getBooleanParameter(request, Constants.PARAM_RELATIVE_PATH_SEGMENT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectParentData> parents = service.getObjectParents(repositoryId, objectId, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (parents == null) {
-                throw new CmisRuntimeException("Parents are null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(objectInfo.getId(), objectInfo.getAtomId(), objectInfo.getCreatedBy(),
-                    objectInfo.getName(), objectInfo.getLastModificationDate(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_PARENTS, objectInfo.getId());
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            selfLink.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, includeRelativePathSegment);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectParentData object : parents) {
-                if ((object == null) || (object.getObject() == null)) {
-                    continue;
-                }
-                writeObjectEntry(service, entry, object.getObject(), null, repositoryId, null,
-                        object.getRelativePathSegment(), baseUrl, false, context.getCmisVersion());
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Checked Out Collection GET.
-     */
-    public static class GetCheckedOutDocs extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_FOLDER_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            String orderBy = getStringParameter(request, Constants.PARAM_ORDER_BY);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList checkedOut = service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (checkedOut == null) {
-                throw new CmisRuntimeException("Checked Out list is null!");
-            }
-
-            ObjectInfo folderInfo = null;
-            if (folderId != null) {
-                folderInfo = service.getObjectInfo(repositoryId, folderId);
-                if (folderInfo == null) {
-                    throw new CmisRuntimeException("Folder Object Info is missing!");
-                }
-            } else {
-                folderInfo = new ObjectInfoImpl();
-                GregorianCalendar now = new GregorianCalendar();
-
-                ((ObjectInfoImpl) folderInfo).setId("uri:x-checkedout");
-                ((ObjectInfoImpl) folderInfo).setName("Checked Out");
-                ((ObjectInfoImpl) folderInfo).setCreatedBy("");
-                ((ObjectInfoImpl) folderInfo).setCreationDate(now);
-                ((ObjectInfoImpl) folderInfo).setLastModificationDate(now);
-                ((ObjectInfoImpl) folderInfo).setHasParent(false);
-                ((ObjectInfoImpl) folderInfo).setSupportsDescendants(false);
-                ((ObjectInfoImpl) folderInfo).setSupportsFolderTree(false);
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
-                    folderInfo.getName(), folderInfo.getLastModificationDate(), null, checkedOut.getNumItems());
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_CHECKEDOUT, folderInfo.getId());
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_CHECKEDOUT, folderInfo.getId());
-            pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
-            pagingUrl.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-            pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            pagingUrl.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
-            pagingUrl.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
-            feed.writePagingLinks(pagingUrl, maxItems, skipCount, checkedOut.getNumItems(), checkedOut.hasMoreItems(),
-                    PAGE_SIZE);
-
-            // write entries
-            if (checkedOut.getObjects() != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                for (ObjectData object : checkedOut.getObjects()) {
-                    if (object == null) {
-                        continue;
-                    }
-                    writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false,
-                            context.getCmisVersion());
-                }
-            }
-
-            // write extensions
-            feed.writeExtensions(checkedOut);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java
deleted file mode 100644
index 5baffbb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java
+++ /dev/null
@@ -1,880 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Object Service operations.
- */
-public class ObjectService {
-
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    /**
-     * Create.
-     */
-    public static class Create extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            String sourceFolderId = getStringParameter(request, Constants.PARAM_SOURCE_FOLDER_ID);
-            VersioningState versioningState = getEnumParameter(request, Constants.PARAM_VERSIONIG_STATE,
-                    VersioningState.class);
-
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.setIgnoreAtomContentSrc(true); // needed for some clients
-            parser.parse(request.getInputStream());
-
-            // execute
-            String newObjectId = null;
-            String objectId = parser.getId();
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                if (objectId == null) {
-                    // create
-                    ContentStream contentStream = parser.getContentStream();
-                    newObjectId = service.create(repositoryId, parser.getProperties(), folderId, contentStream,
-                            versioningState, parser.getPolicyIds(), null);
-                } else {
-                    if (sourceFolderId == null || sourceFolderId.trim().length() == 0) {
-                        // addObjectToFolder
-                        service.addObjectToFolder(repositoryId, objectId, folderId, null, null);
-                        newObjectId = objectId;
-                    } else {
-                        // move
-                        Holder<String> objectIdHolder = new Holder<String>(objectId);
-                        service.moveObject(repositoryId, objectIdHolder, folderId, sourceFolderId, null);
-                        newObjectId = objectIdHolder.getValue();
-                    }
-                }
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, newObjectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, newObjectId));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Create relationship.
-     */
-    public static class CreateRelationship extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(request.getInputStream(), streamFactory);
-
-            // execute
-            String newObjectId = null;
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                newObjectId = service.createRelationship(repositoryId, parser.getProperties(), parser.getPolicyIds(),
-                        null, null, null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, newObjectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, newObjectId));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Delete object.
-     */
-    public static class DeleteObject extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-
-    /**
-     * Delete content stream.
-     */
-    public static class DeleteContentStream extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteContentStream(repositoryId, new Holder<String>(objectId), changeToken == null ? null
-                    : new Holder<String>(changeToken), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-
-    /**
-     * Set or append content stream.
-     */
-    public static class SetOrAppendContentStream extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-            Boolean appendFlag = getBooleanParameter(request, Constants.PARAM_APPEND);
-            Boolean overwriteFlag = getBooleanParameter(request, Constants.PARAM_OVERWRITE_FLAG);
-            Boolean isLastChunk = getBooleanParameter(request, Constants.PARAM_IS_LAST_CHUNK);
-
-            ContentStreamImpl contentStream = new ContentStreamImpl();
-            contentStream.setStream(request.getInputStream());
-            contentStream.setMimeType(request.getHeader("Content-Type"));
-            String lengthStr = request.getHeader("Content-Length");
-            if (lengthStr != null) {
-                try {
-                    contentStream.setLength(new BigInteger(lengthStr));
-                } catch (NumberFormatException e) {
-                    // invalid content length -> ignore
-                }
-            }
-            String contentDisposition = request.getHeader(MimeHelper.CONTENT_DISPOSITION);
-            if (contentDisposition != null) {
-                contentStream.setFileName(MimeHelper.decodeContentDispositionFilename(contentDisposition));
-            }
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            if (Boolean.TRUE.equals(appendFlag)) {
-                service.appendContentStream(repositoryId, objectIdHolder, changeToken == null ? null
-                        : new Holder<String>(changeToken), contentStream, (Boolean.TRUE.equals(isLastChunk) ? true
-                        : false), null);
-            } else {
-                service.setContentStream(repositoryId, objectIdHolder, overwriteFlag, changeToken == null ? null
-                        : new Holder<String>(changeToken), contentStream, null);
-            }
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-            String contentLocation = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_CONTENT, newObjectId);
-            String location = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_OBJECTBYID, newObjectId);
-
-            // set status
-            if (newObjectId.equals(objectId)) {
-                if (Boolean.TRUE.equals(appendFlag)) {
-                    // append stream: no new version -> OK
-                    response.setStatus(HttpServletResponse.SC_OK);
-                    response.setContentLength(0);
-                } else {
-                    if (!Boolean.FALSE.equals(overwriteFlag)) {
-                        // set stream: no new version and overwrite ->
-                        // OK: if the document had a stream,
-                        // CREATED: if the document had no stream
-                        // ... but we don't know, ... OK is more likely ...
-                        response.setStatus(HttpServletResponse.SC_OK);
-                        response.setContentLength(0);
-                    } else {
-                        // set stream: no new version and not overwrite ->
-                        // CREATED (the document hasn't had a stream)
-                        response.setStatus(HttpServletResponse.SC_CREATED);
-                    }
-                }
-            } else {
-                // new version created -> CREATED
-                response.setStatus(HttpServletResponse.SC_CREATED);
-            }
-            response.setHeader("Content-Location", contentLocation);
-            response.setHeader("Location", location);
-        }
-    }
-
-    /**
-     * Delete tree.
-     */
-    public static class DeleteTree extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = getStringParameter(request, Constants.PARAM_ID);
-            Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-            UnfileObject unfileObjects = getEnumParameter(request, Constants.PARAM_UNFILE_OBJECTS, UnfileObject.class);
-            Boolean continueOnFailure = getBooleanParameter(request, Constants.PARAM_CONTINUE_ON_FAILURE);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            FailedToDeleteData ftd = service.deleteTree(repositoryId, folderId, allVersions, unfileObjects,
-                    continueOnFailure, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (ftd != null && isNotEmpty(ftd.getIds())) {
-                // print ids that could not be deleted
-                response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-                response.setContentType("text/plain");
-
-                PrintWriter pw = response.getWriter();
-
-                pw.println("Failed to delete the following objects:");
-                for (String id : ftd.getIds()) {
-                    pw.println(id);
-                }
-
-                pw.flush();
-
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-
-    /**
-     * getObject.
-     */
-    public static class GetObject extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            ReturnVersion returnVersion = getEnumParameter(request, Constants.PARAM_RETURN_VERSION, ReturnVersion.class);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
-            Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectData object = null;
-            if (returnVersion == ReturnVersion.LATEST || returnVersion == ReturnVersion.LASTESTMAJOR) {
-                object = service.getObjectOfLatestVersion(repositoryId, objectId, null,
-                        returnVersion == ReturnVersion.LASTESTMAJOR, filter, includeAllowableActions,
-                        includeRelationships, renditionFilter, includePolicyIds, includeAcl, null);
-            } else {
-                object = service.getObject(repositoryId, objectId, filter, includeAllowableActions,
-                        includeRelationships, renditionFilter, includePolicyIds, includeAcl, null);
-            }
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-
-            // write XML
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * objectByPath URI template.
-     */
-    public static class GetObjectByPath extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String path = getStringParameter(request, Constants.PARAM_PATH);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
-            Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectData object = service.getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePolicyIds, includeAcl, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, object.getId());
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-
-            // write XML
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Allowable Actions.
-     */
-    public static class GetAllowableActions extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            AllowableActions allowableActions = service.getAllowableActions(repositoryId, objectId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (allowableActions == null) {
-                throw new CmisRuntimeException("Allowable Actions is null!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ALLOWABLEACTION);
-
-            // write XML
-            XMLStreamWriter writer = XMLUtils.createWriter(response.getOutputStream());
-            XMLUtils.startXmlDocument(writer);
-            XMLConverter.writeAllowableActions(writer, context.getCmisVersion(), true, allowableActions);
-            XMLUtils.endXmlDocument(writer);
-        }
-    }
-
-    /**
-     * getContentStream.
-     */
-    public static class GetContentStream extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String streamId = getStringParameter(request, Constants.PARAM_STREAM_ID);
-
-            BigInteger offset = context.getOffset();
-            BigInteger length = context.getLength();
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ContentStream content = service.getContentStream(repositoryId, objectId, streamId, offset, length, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (content == null || content.getStream() == null) {
-                throw new CmisRuntimeException("Content stream is null!");
-            }
-
-            // set HTTP headers, if requested by the server implementation
-            if (sendContentStreamHeaders(content, request, response)) {
-                return;
-            }
-
-            String contentType = content.getMimeType();
-            if (contentType == null) {
-                contentType = Constants.MEDIATYPE_OCTETSTREAM;
-            }
-
-            // set headers
-            if ((offset == null || offset.signum() == 0) && (length == null)) {
-                response.setStatus(HttpServletResponse.SC_OK);
-            } else {
-                response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
-
-                if (content.getBigLength() != null && content.getBigLength().signum() == 1) {
-                    BigInteger firstBytePos = (offset == null ? BigInteger.ZERO : offset);
-                    BigInteger lastBytePos = firstBytePos.add(content.getBigLength().subtract(BigInteger.ONE));
-
-                    response.setHeader("Content-Range",
-                            "bytes " + firstBytePos.toString() + "-" + lastBytePos.toString() + "/*");
-                }
-            }
-            response.setContentType(contentType);
-
-            if (content.getFileName() != null) {
-                response.setHeader(MimeHelper.CONTENT_DISPOSITION,
-                        MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_ATTACHMENT, content.getFileName()));
-            }
-
-            // send content
-            InputStream in = content.getStream();
-            OutputStream out = response.getOutputStream();
-            try {
-                IOUtils.copy(in, out, BUFFER_SIZE);
-                out.flush();
-            } finally {
-                in.close();
-            }
-        }
-    }
-
-    /**
-     * UpdateProperties.
-     */
-    public static class UpdateProperties extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            Boolean checkin = getBooleanParameter(request, Constants.PARAM_CHECK_IN);
-            String checkinComment = getStringParameter(request, Constants.PARAM_CHECKIN_COMMENT);
-            Boolean major = getBooleanParameter(request, Constants.PARAM_MAJOR);
-
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(request.getInputStream(), streamFactory);
-
-            // execute
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-
-            try {
-                if ((checkin != null) && (checkin.booleanValue())) {
-                    if (stopBeforeService(service)) {
-                        return;
-                    }
-
-                    ContentStream contentStream = parser.getContentStream();
-                    service.checkIn(repositoryId, objectIdHolder, major, parser.getProperties(), contentStream,
-                            checkinComment, parser.getPolicyIds(), null, null, null);
-
-                    if (stopAfterService(service)) {
-                        return;
-                    }
-                } else {
-                    Properties properties = parser.getProperties();
-                    String changeToken = null;
-                    if (properties != null) {
-                        changeToken = extractChangeToken(properties);
-                        if (changeToken != null) {
-                            properties = new PropertiesImpl(properties);
-                            ((PropertiesImpl) properties).removeProperty(PropertyIds.CHANGE_TOKEN);
-                        }
-                    }
-
-                    if (changeToken == null) {
-                        // not required by the CMIS specification
-                        // -> keep for backwards compatibility with older
-                        // OpenCMIS
-                        // clients
-                        changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-                    }
-
-                    if (stopBeforeService(service)) {
-                        return;
-                    }
-
-                    service.updateProperties(repositoryId, objectIdHolder, changeToken == null ? null
-                            : new Holder<String>(changeToken), properties, null);
-
-                    if (stopAfterService(service)) {
-                        return;
-                    }
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectIdHolder.getValue());
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-            String location = compileUrl(baseUrl, RESOURCE_ENTRY, objectIdHolder.getValue());
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Content-Location", location);
-            response.setHeader("Location", location);
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-
-        /**
-         * Gets the change token from a property set.
-         */
-        private String extractChangeToken(Properties properties) {
-            if (properties == null) {
-                return null;
-            }
-
-            Map<String, PropertyData<?>> propertiesMap = properties.getProperties();
-            if (propertiesMap == null) {
-                return null;
-            }
-
-            PropertyData<?> changeTokenProperty = propertiesMap.get(PropertyIds.CHANGE_TOKEN);
-            if (!(changeTokenProperty instanceof PropertyString)) {
-                return null;
-            }
-
-            return ((PropertyString) changeTokenProperty).getFirstValue();
-        }
-    }
-
-    /**
-     * BulkUpdateProperties.
-     */
-    public static class BulkUpdateProperties extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.parse(request.getInputStream());
-
-            // execute
-            List<BulkUpdateObjectIdAndChangeToken> result = null;
-            try {
-                BulkUpdateImpl bulkUpdate = parser.getBulkUpdate();
-                if (bulkUpdate == null) {
-                    throw new CmisInvalidArgumentException("Bulk update data is missing!");
-                }
-
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                result = service.bulkUpdateProperties(repositoryId, bulkUpdate.getObjectIdAndChangeToken(),
-                        bulkUpdate.getProperties(), bulkUpdate.getAddSecondaryTypeIds(),
-                        bulkUpdate.getRemoveSecondaryTypeIds(), null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(null, null, null, "Bulk Update Properties",
-                    new GregorianCalendar(TimeZone.getTimeZone("GMT")), null,
-                    (result == null ? null : BigInteger.valueOf(result.size())));
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_BULK_UPDATE, null);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            // write entries
-            if (result != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                for (BulkUpdateObjectIdAndChangeToken idAndToken : result) {
-                    if ((idAndToken == null) || (idAndToken.getId() == null)) {
-                        continue;
-                    }
-
-                    ObjectDataImpl object = new ObjectDataImpl();
-                    PropertiesImpl properties = new PropertiesImpl();
-                    object.setProperties(properties);
-
-                    properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_ID,
-                            idAndToken.getNewId() != null ? idAndToken.getNewId() : idAndToken.getId()));
-
-                    if (idAndToken.getChangeToken() != null) {
-                        properties.addProperty(new PropertyStringImpl(PropertyIds.CHANGE_TOKEN, idAndToken
-                                .getChangeToken()));
-                    }
-
-                    writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false,
-                            context.getCmisVersion());
-                }
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java
deleted file mode 100644
index c164e7a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Policy Service operations.
- */
-public class PolicyService {
-
-    public abstract static class AbstractPoliciesServiceCall extends AbstractAtomPubServiceCall {
-        /**
-         * Writes an entry that is attached to an object.
-         */
-        protected void writePolicyEntry(CmisService service, AtomEntry entry, String objectId, ObjectData policy,
-                String repositoryId, UrlBuilder baseUrl, CmisVersion cmisVersion) throws Exception {
-            ObjectInfo info = service.getObjectInfo(repositoryId, policy.getId());
-            if (info == null) {
-                throw new CmisRuntimeException("Object Info not found!");
-            }
-
-            // start
-            entry.startEntry(false);
-
-            // write the object
-            entry.writeObject(policy, info, null, null, null, null, cmisVersion);
-
-            // write links
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
-            selfLink.addParameter(Constants.PARAM_POLICY_ID, info.getId());
-            entry.writeSelfLink(selfLink.toString(), null);
-
-            // we are done
-            entry.endEntry();
-        }
-    }
-
-    /**
-     * Get applied policies.
-     */
-    public static class GetAppliedPolicies extends AbstractPoliciesServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectData> policies = service.getAppliedPolicies(repositoryId, objectId, filter, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (policies == null) {
-                throw new CmisRuntimeException("Policies are null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(objectInfo.getId(), objectInfo.getAtomId(), objectInfo.getCreatedBy(),
-                    objectInfo.getName(), objectInfo.getLastModificationDate(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectInfo.getId());
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectData policy : policies) {
-                if (policy == null) {
-                    continue;
-                }
-                writePolicyEntry(service, entry, objectInfo.getId(), policy, repositoryId, baseUrl,
-                        context.getCmisVersion());
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Apply policy.
-     */
-    public static class ApplyPolicy extends AbstractPoliciesServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(request.getInputStream(), streamFactory);
-
-            // execute
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                service.applyPolicy(repositoryId, parser.getId(), objectId, null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, parser.getId());
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData policy = objectInfo.getObject();
-            if (policy == null) {
-                throw new CmisRuntimeException("Policy is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-            UrlBuilder location = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
-            location.addParameter(Constants.PARAM_POLICY_ID, policy.getId());
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Content-Location", location.toString());
-            response.setHeader("Location", location.toString());
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writePolicyEntry(service, entry, objectId, policy, repositoryId, baseUrl, context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Remove policy.
-     */
-    public static class RemovePolicy extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String policyId = getStringParameter(request, Constants.PARAM_POLICY_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.removePolicy(repositoryId, policyId, objectId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java
deleted file mode 100644
index 1803993..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-
-/**
- * Relationship Service operations.
- */
-public class RelationshipService {
-
-    /**
-     * Get object relationships.
-     */
-    public static class GetObjectRelationships extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            Boolean includeSubRelationshipTypes = getBooleanParameter(request, Constants.PARAM_SUB_RELATIONSHIP_TYPES);
-            RelationshipDirection relationshipDirection = getEnumParameter(request,
-                    Constants.PARAM_RELATIONSHIP_DIRECTION, RelationshipDirection.class);
-            String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList relationships = service.getObjectRelationships(repositoryId, objectId,
-                    includeSubRelationshipTypes, relationshipDirection, typeId, filter, includeAllowableActions,
-                    maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (relationships == null) {
-                throw new CmisRuntimeException("Relationships are null!");
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(objectInfo.getId(), objectInfo.getAtomId(), objectInfo.getCreatedBy(),
-                    objectInfo.getName(), objectInfo.getLastModificationDate(), null, relationships.getNumItems());
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_RELATIONSHIPS, objectInfo.getId());
-            selfLink.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
-            selfLink.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
-            selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            selfLink.addParameter(Constants.PARAM_FILTER, filter);
-            selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-            feed.writeSelfLink(selfLink.toString(), null);
-
-            UrlBuilder pagingUrl = new UrlBuilder(
-                    compileUrlBuilder(baseUrl, RESOURCE_RELATIONSHIPS, objectInfo.getId()));
-            pagingUrl.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
-            pagingUrl.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
-            pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
-            pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
-            feed.writePagingLinks(pagingUrl, maxItems, skipCount, relationships.getNumItems(),
-                    relationships.hasMoreItems(), PAGE_SIZE);
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectData object : relationships.getObjects()) {
-                if (object == null) {
-                    continue;
-                }
-                writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false,
-                        context.getCmisVersion());
-            }
-
-            // write extensions
-            feed.writeExtensions(relationships);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java
deleted file mode 100644
index f66cf32..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Repository Service operations.
- */
-public class RepositoryService {
-
-    /**
-     * Renders the service document.
-     */
-    public static class GetRepositories extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            repositoryId = getStringParameter(request, Constants.PARAM_REPOSITORY_ID);
-
-            // execute
-            List<RepositoryInfo> infoDataList = null;
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            if (repositoryId == null) {
-                infoDataList = service.getRepositoryInfos(null);
-            } else {
-                infoDataList = Collections.singletonList(service.getRepositoryInfo(repositoryId, null));
-                if (context instanceof CallContextImpl) {
-                    ((CallContextImpl) context).put(CallContext.REPOSITORY_ID, repositoryId);
-                }
-            }
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_SERVICE);
-
-            // write XML
-            ServiceDocument serviceDoc = new ServiceDocument();
-
-            serviceDoc.startDocument(response.getOutputStream(), getNamespaces(service));
-            serviceDoc.startServiceDocument();
-
-            if (infoDataList != null) {
-                CmisVersion cmisVersion = context.getCmisVersion();
-                for (RepositoryInfo infoData : infoDataList) {
-                    if (infoData == null) {
-                        continue;
-                    }
-
-                    String repId = infoData.getId();
-                    UrlBuilder baseUrl = compileBaseUrl(request, repId);
-
-                    boolean supportsQuery = false;
-                    boolean supportsUnFiling = false;
-                    boolean supportsMultifiling = false;
-                    boolean supportsFolderTree = false;
-                    boolean supportsRootDescendants = false;
-                    boolean supportsChanges = false;
-
-                    if (infoData.getCapabilities() != null) {
-                        RepositoryCapabilities cap = infoData.getCapabilities();
-
-                        if (cap.getQueryCapability() != null) {
-                            supportsQuery = (cap.getQueryCapability() != CapabilityQuery.NONE);
-                        }
-
-                        if (cap.isUnfilingSupported() != null) {
-                            supportsUnFiling = cap.isUnfilingSupported();
-                        }
-
-                        if (cap.isMultifilingSupported() != null) {
-                            supportsMultifiling = cap.isMultifilingSupported();
-                        }
-
-                        if (cap.isGetFolderTreeSupported() != null) {
-                            supportsFolderTree = cap.isGetFolderTreeSupported();
-                        }
-
-                        if (cap.isGetDescendantsSupported() != null) {
-                            supportsRootDescendants = cap.isGetDescendantsSupported();
-                        }
-
-                        if (cap.getChangesCapability() != null) {
-                            supportsChanges = (cap.getChangesCapability() != CapabilityChanges.NONE);
-                        }
-                    }
-
-                    serviceDoc.startWorkspace(infoData.getId());
-
-                    // add collections
-
-                    // - root collection
-                    serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_CHILDREN, infoData.getRootFolderId()),
-                            Constants.COLLECTION_ROOT, "Root Collection", Constants.MEDIATYPE_ENTRY,
-                            Constants.MEDIATYPE_CMISATOM);
-
-                    // - types collection
-                    serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_TYPES, null), Constants.COLLECTION_TYPES,
-                            "Types Collection", "");
-
-                    // - query collection
-                    if (supportsQuery) {
-                        serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_QUERY, null),
-                                Constants.COLLECTION_QUERY, "Query Collection", Constants.MEDIATYPE_QUERY);
-                    }
-
-                    // - checked out collection collection
-                    serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_CHECKEDOUT, null),
-                            Constants.COLLECTION_CHECKEDOUT, "Checked Out Collection", Constants.MEDIATYPE_CMISATOM);
-
-                    // - unfiled collection collection
-                    if (supportsUnFiling || supportsMultifiling) {
-                        serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_UNFILED, null),
-                                Constants.COLLECTION_UNFILED, "Unfiled Collection", Constants.MEDIATYPE_CMISATOM);
-                    }
-
-                    // - bulk update collection
-                    serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_BULK_UPDATE, null),
-                            Constants.COLLECTION_BULK_UPDATE, "Bulk Update Collection", Constants.MEDIATYPE_CMISATOM);
-
-                    // add repository info
-                    serviceDoc.writeRepositoryInfo(infoData, cmisVersion);
-
-                    // add links
-
-                    // - types descendants
-                    serviceDoc.writeLink(Constants.REP_REL_TYPEDESC, compileUrl(baseUrl, RESOURCE_TYPESDESC, null),
-                            Constants.MEDIATYPE_FEED, null);
-
-                    // - folder tree
-                    if (supportsFolderTree) {
-                        serviceDoc.writeLink(Constants.REP_REL_FOLDERTREE,
-                                compileUrl(baseUrl, RESOURCE_FOLDERTREE, infoData.getRootFolderId()),
-                                Constants.MEDIATYPE_DESCENDANTS, null);
-                    }
-
-                    // - root descendants
-                    if (supportsRootDescendants) {
-                        serviceDoc.writeLink(Constants.REP_REL_ROOTDESC,
-                                compileUrl(baseUrl, RESOURCE_DESCENDANTS, infoData.getRootFolderId()),
-                                Constants.MEDIATYPE_DESCENDANTS, infoData.getRootFolderId());
-                    }
-
-                    // - changes
-                    if (supportsChanges) {
-                        serviceDoc.writeLink(Constants.REP_REL_CHANGES, compileUrl(baseUrl, RESOURCE_CHANGES, null),
-                                Constants.MEDIATYPE_FEED, null);
-                    }
-
-                    // add URI templates
-
-                    // - object by id
-                    String url = compileUrl(baseUrl, RESOURCE_OBJECTBYID, null)
-                            + "?id={id}&filter={filter}&includeAllowableActions={includeAllowableActions}"
-                            + "&includeACL={includeACL}&includePolicyIds={includePolicyIds}"
-                            + "&includeRelationships={includeRelationships}&renditionFilter={renditionFilter}";
-                    serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_ID, Constants.MEDIATYPE_ENTRY);
-
-                    // - object by path
-                    url = compileUrl(baseUrl, RESOURCE_OBJECTBYPATH, null)
-                            + "?path={path}&filter={filter}&includeAllowableActions={includeAllowableActions}"
-                            + "&includeACL={includeACL}&includePolicyIds={includePolicyIds}"
-                            + "&includeRelationships={includeRelationships}&renditionFilter={renditionFilter}";
-                    serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_PATH, Constants.MEDIATYPE_ENTRY);
-
-                    // - type by id
-                    url = compileUrl(baseUrl, RESOURCE_TYPE, null) + "?id={id}";
-                    serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_TYPE_BY_ID, Constants.MEDIATYPE_ENTRY);
-
-                    // - query
-                    if (supportsQuery) {
-                        url = compileUrl(baseUrl, RESOURCE_QUERY, null)
-                                + "?q={q}&searchAllVersions={searchAllVersions}&includeAllowableActions={includeAllowableActions}"
-                                + "&includeRelationships={includeRelationships}&maxItems={maxItems}&skipCount={skipCount}";
-                        serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_QUERY, Constants.MEDIATYPE_FEED);
-                    }
-
-                    serviceDoc.endWorkspace();
-                }
-            }
-
-            serviceDoc.endServiceDocument();
-            serviceDoc.endDocument();
-        }
-    }
-
-    /**
-     * Renders a type children collection.
-     */
-    public static class GetTypeChildren extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
-            boolean includePropertyDefinitions = getBooleanParameter(request, Constants.PARAM_PROPERTY_DEFINITIONS,
-                    false);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinitionList typeList = service.getTypeChildren(repositoryId, typeId, includePropertyDefinitions,
-                    maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            BigInteger numItems = (typeList == null ? null : typeList.getNumItems());
-            Boolean hasMoreItems = (typeList == null ? null : typeList.hasMoreItems());
-
-            String parentTypeId = null;
-            String typeName = "Type Children";
-
-            // in order to get the parent type, we need the type definition of
-            // this type as well
-            if (typeId != null) {
-                TypeDefinition typeDefinition = service.getTypeDefinition(repositoryId, typeId, null);
-
-                parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
-                typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
-            }
-
-            // write XML
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(typeId, null, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, numItems);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-            selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-            selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-            selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-            feed.writeSelfLink(selfLink.toString(), typeId);
-
-            feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
-
-            UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
-            downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_DESCENDANTS);
-
-            if (parentTypeId != null) {
-                feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
-            }
-
-            // write paging links
-            UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-            pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            pagingUrl.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-            feed.writePagingLinks(pagingUrl, maxItems, skipCount, numItems, hasMoreItems, PAGE_SIZE);
-
-            // write collection
-            UrlBuilder collectionUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-            collectionUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            feed.writeCollection(collectionUrl.toString(), null, "Types Collection", "");
-
-            // write type entries
-            if ((typeList != null) && (typeList.getList() != null)) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-                for (TypeDefinition type : typeList.getList()) {
-                    writeTypeEntry(entry, type, null, repositoryId, baseUrl, false, context.getCmisVersion());
-                }
-            }
-
-            // write extensions
-            feed.writeExtensions(typeList);
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Renders a type descendants feed.
-     */
-    public static class GetTypeDescendants extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
-            BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
-            boolean includePropertyDefinitions = getBooleanParameter(request, Constants.PARAM_PROPERTY_DEFINITIONS,
-                    false);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<TypeDefinitionContainer> typeTree = service.getTypeDescendants(repositoryId, typeId, depth,
-                    includePropertyDefinitions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String parentTypeId = null;
-            String typeName = "Type Children";
-
-            // in order to get the parent type, we need the type definition of
-            // this type as well
-            if (typeId != null) {
-                TypeDefinition typeDefinition = service.getTypeDefinition(repositoryId, typeId, null);
-
-                parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
-                typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
-            }
-
-            // write XML
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            feed.writeFeedElements(typeId, null, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
-            selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            selfLink.addParameter(Constants.PARAM_DEPTH, depth);
-            selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
-            feed.writeSelfLink(selfLink.toString(), typeId);
-
-            feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
-
-            UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
-            downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
-            feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_FEED);
-
-            if (parentTypeId != null) {
-                feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
-            }
-
-            // write tree
-            if (typeTree != null) {
-                AtomEntry entry = new AtomEntry(feed.getWriter());
-
-                for (TypeDefinitionContainer container : typeTree) {
-                    if ((container != null) && (container.getTypeDefinition() != null)) {
-                        writeTypeEntry(entry, container.getTypeDefinition(), container.getChildren(), repositoryId,
-                                baseUrl, false, context.getCmisVersion());
-                    }
-                }
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Renders a type definition.
-     */
-    public static class GetTypeDefinition extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, Constants.PARAM_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition type = service.getTypeDefinition(repositoryId, typeId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // write XML
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeTypeEntry(entry, type, null, repositoryId, compileBaseUrl(request, repositoryId), true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Creates a type.
-     */
-    public static class CreateType extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // parse entry
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.parse(request.getInputStream());
-
-            // execute
-            TypeDefinition newType = null;
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                newType = service.createType(repositoryId, parser.getTypeDefinition(), null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_TYPE, newType.getId()));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeTypeEntry(entry, newType, null, repositoryId, compileBaseUrl(request, repositoryId), true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Updates a type.
-     */
-    public static class UpdateType extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // parse entry
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.parse(request.getInputStream());
-
-            // execute
-            TypeDefinition newType = null;
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                newType = service.updateType(repositoryId, parser.getTypeDefinition(), null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Location", compileUrl(baseUrl, RESOURCE_TYPE, newType.getId()));
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeTypeEntry(entry, newType, null, repositoryId, compileBaseUrl(request, repositoryId), true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Deletes a type.
-     */
-    public static class DeleteType extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, Constants.PARAM_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteType(repositoryId, typeId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java
deleted file mode 100644
index 471fd52..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-
-/**
- * Service document class.
- */
-public class ServiceDocument extends AtomDocumentBase {
-
-    public ServiceDocument() {
-    }
-
-    public void startServiceDocument() throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-        
-        xsw.writeStartElement(XMLConstants.PREFIX_APP, "service", XMLConstants.NAMESPACE_APP);
-
-        xsw.writeNamespace(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-        xsw.writeNamespace(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-        xsw.writeNamespace(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-        xsw.writeNamespace(XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP);
-
-        writeAllCustomNamespace();
-    }
-
-    public void endServiceDocument() throws XMLStreamException {
-        getWriter().writeEndElement();
-    }
-
-    public void startWorkspace(String title) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_APP, "workspace", XMLConstants.NAMESPACE_APP);
-        XMLUtils.write(xsw, XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM, "title", title);
-    }
-
-    public void endWorkspace() throws XMLStreamException {
-        getWriter().writeEndElement();
-    }
-
-    public void writeRepositoryInfo(RepositoryInfo repInfo, CmisVersion cmisVersion) throws XMLStreamException {
-        XMLConverter.writeRepositoryInfo(getWriter(), cmisVersion, XMLConstants.NAMESPACE_RESTATOM, repInfo);
-    }
-
-    public void writeUriTemplate(String template, String type, String mediatype) throws XMLStreamException {
-        XMLStreamWriter xsw = getWriter();
-
-        xsw.writeStartElement(XMLConstants.PREFIX_RESTATOM, "uritemplate", XMLConstants.NAMESPACE_RESTATOM);
-        XMLUtils.write(xsw, XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "template", template);
-        XMLUtils.write(xsw, XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "type", type);
-        XMLUtils.write(xsw, XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM, "mediatype", mediatype);
-        xsw.writeEndElement();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/VersioningService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/VersioningService.java
deleted file mode 100644
index 52410c3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/VersioningService.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Versioning Service operations.
- */
-public class VersioningService {
-
-    /**
-     * Check Out.
-     */
-    public static class CheckOut extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            TempStoreOutputStreamFactory streamFactory = (TempStoreOutputStreamFactory) context
-                    .get(CallContext.STREAM_FACTORY);
-            AtomEntryParser parser = new AtomEntryParser(streamFactory);
-            parser.setIgnoreAtomContentSrc(true); // needed for some clients
-            parser.parse(request.getInputStream());
-
-            // execute
-            Holder<String> checkOutId = new Holder<String>(parser.getId());
-            try {
-                if (stopBeforeService(service)) {
-                    return;
-                }
-
-                service.checkOut(repositoryId, checkOutId, null, null);
-
-                if (stopAfterService(service)) {
-                    return;
-                }
-            } finally {
-                parser.release();
-            }
-
-            ObjectInfo objectInfo = service.getObjectInfo(repositoryId, checkOutId.getValue());
-            if (objectInfo == null) {
-                throw new CmisRuntimeException("Object Info is missing!");
-            }
-
-            ObjectData object = objectInfo.getObject();
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            if (object.getId() == null) {
-                throw new CmisRuntimeException("Object Id is null!");
-            }
-
-            // set headers
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-            String location = compileUrl(baseUrl, RESOURCE_ENTRY, object.getId());
-
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setContentType(Constants.MEDIATYPE_ENTRY);
-            response.setHeader("Content-Location", location);
-            response.setHeader("Location", location);
-
-            // write XML
-            AtomEntry entry = new AtomEntry();
-            entry.startDocument(response.getOutputStream(), getNamespaces(service));
-            writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
-                    context.getCmisVersion());
-            entry.endDocument();
-        }
-    }
-
-    /**
-     * Get all versions.
-     */
-    public static class GetAllVersions extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-            String versionSeriesId = getStringParameter(request, Constants.PARAM_VERSION_SERIES_ID);
-            String filter = getStringParameter(request, Constants.PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectData> versions = service.getAllVersions(repositoryId, objectId, versionSeriesId, filter,
-                    includeAllowableActions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (isNullOrEmpty(versions)) {
-                throw new CmisRuntimeException("Version list is null or empty!");
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_OK);
-            response.setContentType(Constants.MEDIATYPE_FEED);
-
-            // write XML
-            AtomFeed feed = new AtomFeed();
-            feed.startDocument(response.getOutputStream(), getNamespaces(service));
-            feed.startFeed(true);
-
-            // write basic Atom feed elements
-            ObjectInfo latestObjectInfo = service.getObjectInfo(repositoryId, versions.get(0).getId());
-            ObjectInfo firstObjectInfo = service.getObjectInfo(repositoryId, versions.get(versions.size() - 1).getId());
-
-            feed.writeFeedElements(versionSeriesId, null, firstObjectInfo.getCreatedBy(), latestObjectInfo.getName(),
-                    latestObjectInfo.getLastModificationDate(), null, null);
-
-            // write links
-            UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
-            feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
-            if (objectId != null) {
-                feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, objectId));
-            }
-
-            // write entries
-            AtomEntry entry = new AtomEntry(feed.getWriter());
-            for (ObjectData object : versions) {
-                if (object == null) {
-                    continue;
-                }
-                writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false,
-                        context.getCmisVersion());
-            }
-
-            // we are done
-            feed.endFeed();
-            feed.endDocument();
-        }
-    }
-
-    /**
-     * Delete object.
-     */
-    public static class DeleteAllVersions extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = getStringParameter(request, Constants.PARAM_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteObjectOrCancelCheckOut(repositoryId, objectId, Boolean.TRUE, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/XMLDocumentBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/XMLDocumentBase.java
deleted file mode 100644
index 2eb44b7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/XMLDocumentBase.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.atompub;
-
-import java.io.OutputStream;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-
-/**
- * Base class for XML documents.
- */
-public abstract class XMLDocumentBase {
-
-    private XMLStreamWriter writer;
-    private Map<String, String> namespaces;
-
-    /**
-     * Sets the namespaces for the document.
-     */
-    public void setNamespaces(Map<String, String> namespaces) throws XMLStreamException {
-        writer.setPrefix(XMLConstants.PREFIX_ATOM, XMLConstants.NAMESPACE_ATOM);
-        writer.setPrefix(XMLConstants.PREFIX_CMIS, XMLConstants.NAMESPACE_CMIS);
-        writer.setPrefix(XMLConstants.PREFIX_RESTATOM, XMLConstants.NAMESPACE_RESTATOM);
-        writer.setPrefix(XMLConstants.PREFIX_APP, XMLConstants.NAMESPACE_APP);
-
-        if (namespaces != null) {
-            this.namespaces = namespaces;
-            for (Map.Entry<String, String> ns : namespaces.entrySet()) {
-                writer.setPrefix(ns.getKey(), ns.getValue());
-            }
-        }
-    }
-
-    /**
-     * Writes custom namespace declaration to the current tag.
-     */
-    public void writeAllCustomNamespace() throws XMLStreamException {
-        if (namespaces != null) {
-            for (Map.Entry<String, String> ns : namespaces.entrySet()) {
-                writer.writeNamespace(ns.getKey(), ns.getValue());
-            }
-        }
-    }
-
-    /**
-     * Starts the document and sets the namespaces.
-     */
-    public void startDocument(OutputStream out, Map<String, String> namespaces) throws XMLStreamException {
-        // create a writer
-        writer = XMLUtils.createWriter(out);
-
-        // start the document
-        writer.writeStartDocument(IOUtils.UTF8, "1.0");
-        setNamespaces(namespaces);
-    }
-
-    /**
-     * Finishes the document.
-     */
-    public void endDocument() throws XMLStreamException {
-        if (writer == null) {
-            return;
-        }
-
-        // end the document
-        writer.writeEndDocument();
-
-        // we are done.
-        writer.close();
-    }
-
-    /**
-     * Returns the writer object.
-     */
-    public XMLStreamWriter getWriter() {
-        return writer;
-    }
-
-    /**
-     * Sets the writer object.
-     */
-    protected void setWriter(XMLStreamWriter writer) {
-        this.writer = writer;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AbstractBrowserServiceCall.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AbstractBrowserServiceCall.java
deleted file mode 100644
index 3e99a77..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AbstractBrowserServiceCall.java
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONStreamAware;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.shared.AbstractServiceCall;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-
-public abstract class AbstractBrowserServiceCall extends AbstractServiceCall {
-
-    public static final String JSON_MIME_TYPE = "application/json";
-    public static final String HTML_MIME_TYPE = "text/html";
-
-    public static final String ROOT_PATH_FRAGMENT = "root";
-
-    public static final String REPOSITORY_PLACEHOLDER = "{repositoryId}";
-
-    /**
-     * Compiles the base URL for links, collections and templates.
-     */
-    public UrlBuilder compileBaseUrl(HttpServletRequest request, String repositoryId) {
-        String baseUrl = (String) request.getAttribute(Dispatcher.BASE_URL_ATTRIBUTE);
-        if (baseUrl != null) {
-            int repIdPos = baseUrl.indexOf(REPOSITORY_PLACEHOLDER);
-            if (repIdPos < 0) {
-                return new UrlBuilder(baseUrl);
-            } else {
-                return new UrlBuilder(baseUrl.substring(0, repIdPos) + repositoryId
-                        + baseUrl.substring(repIdPos + REPOSITORY_PLACEHOLDER.length()));
-            }
-        }
-
-        UrlBuilder url = new UrlBuilder(request.getScheme(), request.getServerName(), request.getServerPort(), null);
-
-        url.addPath(request.getContextPath());
-        url.addPath(request.getServletPath());
-        url.addPathSegment(repositoryId);
-
-        return url;
-    }
-
-    public UrlBuilder compileRepositoryUrl(HttpServletRequest request, String repositoryId) {
-        return compileBaseUrl(request, repositoryId);
-    }
-
-    public UrlBuilder compileRootUrl(HttpServletRequest request, String repositoryId) {
-        return compileRepositoryUrl(request, repositoryId).addPathSegment(ROOT_PATH_FRAGMENT);
-    }
-
-    public String compileObjectLocationUrl(HttpServletRequest request, String repositoryId, String objectId) {
-        return compileRootUrl(request, repositoryId).addParameter(Constants.PARAM_OBJECT_ID, objectId).toString();
-    }
-
-    public String compileTypeLocationUrl(HttpServletRequest request, String repositoryId, String typeId) {
-        return compileRepositoryUrl(request, repositoryId).addParameter(Constants.PARAM_TYPE_ID, typeId).toString();
-    }
-
-    /**
-     * Writes JSON to the servlet response and adds a callback wrapper if
-     * requested.
-     */
-    public void writeJSON(JSONStreamAware json, HttpServletRequest request, HttpServletResponse response)
-            throws IOException {
-        String token = getStringParameter(request, Constants.PARAM_TOKEN);
-
-        if (token != null && "POST".equals(request.getMethod())) {
-            response.setContentType(HTML_MIME_TYPE);
-            response.setContentLength(0);
-        } else {
-            response.setContentType(JSON_MIME_TYPE);
-            response.setCharacterEncoding(IOUtils.UTF8);
-
-            PrintWriter pw = response.getWriter();
-
-            String callback = getStringParameter(request, Constants.PARAM_CALLBACK);
-            if (callback != null) {
-                if (!callback.matches("[A-Za-z0-9._\\[\\]]*")) {
-                    throw new CmisInvalidArgumentException("Invalid callback name!");
-                }
-                pw.print(callback + "(");
-            }
-
-            json.writeJSONString(pw);
-
-            if (callback != null) {
-                pw.print(");");
-            }
-
-            pw.flush();
-        }
-    }
-
-    public void writeEmpty(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        response.setContentLength(0);
-        response.setContentType(HTML_MIME_TYPE);
-        response.getWriter().flush();
-    }
-
-    public ObjectData getSimpleObject(CmisService service, String repositoryId, String objectId) {
-        return service.getObject(repositoryId, objectId, null, false, IncludeRelationships.NONE, "cmis:none", false,
-                false, null);
-    }
-
-    /**
-     * Sets the given HTTP status code if the surpessResponseCodes parameter is
-     * not set to true; otherwise sets HTTP status code 200 (OK).
-     */
-    public void setStatus(HttpServletRequest request, HttpServletResponse response, int statusCode) {
-        if (getBooleanParameter(request, Constants.PARAM_SUPPRESS_RESPONSE_CODES, false)) {
-            statusCode = HttpServletResponse.SC_OK;
-        }
-
-        response.setStatus(statusCode);
-    }
-
-    /**
-     * Transforms the transaction into a cookie name.
-     */
-    public String getCookieName(String token) {
-        if (token == null || token.length() == 0) {
-            return "cmis%";
-        }
-
-        return "cmis_" + Base64.encodeBytes(IOUtils.toUTF8Bytes(token)).replace('=', '%');
-    }
-
-    /**
-     * Sets a transaction cookie.
-     */
-    public void setCookie(HttpServletRequest request, HttpServletResponse response, String repositoryId, String token,
-            String value) {
-        setCookie(request, response, repositoryId, token, value, 3600);
-    }
-
-    /**
-     * Deletes a transaction cookie.
-     */
-    public void deleteCookie(HttpServletRequest request, HttpServletResponse response, String repositoryId, String token) {
-        setCookie(request, response, repositoryId, token, "", 0);
-    }
-
-    /**
-     * Sets a transaction cookie.
-     */
-    public void setCookie(HttpServletRequest request, HttpServletResponse response, String repositoryId, String token,
-            String value, int expiry) {
-        if (token != null && token.length() > 0) {
-            String cookieValue = IOUtils.encodeURL(value);
-
-            Cookie transactionCookie = new Cookie(getCookieName(token), cookieValue);
-            transactionCookie.setMaxAge(expiry);
-            transactionCookie.setPath(request.getContextPath() + request.getServletPath() + "/" + repositoryId);
-            transactionCookie.setSecure(request.isSecure());
-
-            response.addCookie(transactionCookie);
-        }
-    }
-
-    public String createCookieValue(int code, String objectId, String ex, String message) {
-        JSONObject result = new JSONObject();
-
-        result.put("code", code);
-        result.put("objectId", objectId == null ? "" : objectId);
-        result.put("exception", ex == null ? "" : ex);
-        result.put("message", message == null ? "" : message);
-
-        return result.toJSONString();
-    }
-
-    public Properties createNewProperties(ControlParser controlParser, TypeCache typeCache) {
-        Map<String, List<String>> properties = controlParser.getProperties();
-        if (properties == null) {
-            return null;
-        }
-
-        // load primary type
-        List<String> objectTypeIdsValues = properties.get(PropertyIds.OBJECT_TYPE_ID);
-        if (isNotEmpty(objectTypeIdsValues)) {
-            TypeDefinition typeDef = typeCache.getTypeDefinition(objectTypeIdsValues.get(0));
-            if (typeDef == null) {
-                throw new CmisInvalidArgumentException("Invalid type: " + objectTypeIdsValues.get(0));
-            }
-        }
-
-        // load secondary types
-        List<String> secondaryObjectTypeIdsValues = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        if (isNotEmpty(secondaryObjectTypeIdsValues)) {
-            for (String secTypeId : secondaryObjectTypeIdsValues) {
-                TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
-                if (typeDef == null) {
-                    throw new CmisInvalidArgumentException("Invalid type: " + secTypeId);
-                }
-            }
-        }
-
-        // create properties
-        PropertiesImpl result = new PropertiesImpl();
-        for (Map.Entry<String, List<String>> property : properties.entrySet()) {
-            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(property.getKey());
-            if (propDef == null) {
-                throw new CmisInvalidArgumentException(property.getKey() + " is unknown!");
-            }
-
-            result.addProperty(createPropertyData(propDef, property.getValue()));
-        }
-
-        return result;
-    }
-
-    public Properties createUpdateProperties(ControlParser controlParser, String typeId, List<String> secondaryTypeIds,
-            List<String> objectIds, TypeCache typeCache) {
-        Map<String, List<String>> properties = controlParser.getProperties();
-        if (properties == null) {
-            return null;
-        }
-
-        // load primary type
-        if (typeId != null) {
-            TypeDefinition typeDef = typeCache.getTypeDefinition(typeId);
-            if (typeDef == null) {
-                throw new CmisInvalidArgumentException("Invalid type: " + typeId);
-            }
-        }
-
-        // load secondary types
-        List<String> secondaryObjectTypeIdsValues = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        if (isNotEmpty(secondaryObjectTypeIdsValues)) {
-            for (String secTypeId : secondaryObjectTypeIdsValues) {
-                TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
-                if (typeDef == null) {
-                    throw new CmisInvalidArgumentException("Invalid type: " + secTypeId);
-                }
-            }
-        }
-
-        if (secondaryTypeIds != null) {
-            for (String secTypeId : secondaryTypeIds) {
-                TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
-                if (typeDef == null) {
-                    throw new CmisInvalidArgumentException("Invalid secondary type: " + secTypeId);
-                }
-            }
-        }
-
-        // create properties
-        PropertiesImpl result = new PropertiesImpl();
-        for (Map.Entry<String, List<String>> property : properties.entrySet()) {
-            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(property.getKey());
-            if (propDef == null && objectIds != null) {
-                for (String objectId : objectIds) {
-                    typeCache.getTypeDefinitionForObject(objectId);
-                    propDef = typeCache.getPropertyDefinition(property.getKey());
-                    if (propDef != null) {
-                        break;
-                    }
-                }
-            }
-            if (propDef == null) {
-                throw new CmisInvalidArgumentException(property.getKey() + " is unknown!");
-            }
-
-            result.addProperty(createPropertyData(propDef, property.getValue()));
-        }
-
-        return result;
-    }
-
-    @SuppressWarnings("unchecked")
-    private PropertyData<?> createPropertyData(PropertyDefinition<?> propDef, Object value) {
-
-        List<String> strValues;
-        if (value == null) {
-            strValues = Collections.emptyList();
-        } else if (value instanceof String) {
-            strValues = new ArrayList<String>();
-            strValues.add((String) value);
-        } else {
-            strValues = (List<String>) value;
-        }
-
-        PropertyData<?> propertyData = null;
-        switch (propDef.getPropertyType()) {
-        case STRING:
-            propertyData = new PropertyStringImpl(propDef.getId(), strValues);
-            break;
-        case ID:
-            propertyData = new PropertyIdImpl(propDef.getId(), strValues);
-            break;
-        case BOOLEAN:
-            List<Boolean> boolValues = new ArrayList<Boolean>(strValues.size());
-            for (String s : strValues) {
-                boolValues.add(Boolean.valueOf(s));
-            }
-            propertyData = new PropertyBooleanImpl(propDef.getId(), boolValues);
-            break;
-        case INTEGER:
-            List<BigInteger> intValues = new ArrayList<BigInteger>(strValues.size());
-            try {
-                for (String s : strValues) {
-                    intValues.add(new BigInteger(s));
-                }
-            } catch (NumberFormatException e) {
-                throw new CmisInvalidArgumentException(propDef.getId() + " value is not an integer value!", e);
-            }
-            propertyData = new PropertyIntegerImpl(propDef.getId(), intValues);
-            break;
-        case DECIMAL:
-            List<BigDecimal> decValues = new ArrayList<BigDecimal>(strValues.size());
-            try {
-                for (String s : strValues) {
-                    decValues.add(new BigDecimal(s));
-                }
-            } catch (NumberFormatException e) {
-                throw new CmisInvalidArgumentException(propDef.getId() + " value is not an integer value!", e);
-            }
-            propertyData = new PropertyDecimalImpl(propDef.getId(), decValues);
-            break;
-        case DATETIME:
-            List<GregorianCalendar> calValues = new ArrayList<GregorianCalendar>(strValues.size());
-            for (String s : strValues) {
-                GregorianCalendar cal;
-                try {
-                    long timestamp = Long.parseLong(s);
-                    cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-                    cal.setTimeInMillis(timestamp);
-                } catch (NumberFormatException e) {
-                    cal = DateTimeHelper.parseXmlDateTime(s);
-                }
-
-                if (cal == null) {
-                    throw new CmisInvalidArgumentException(propDef.getId() + " value is not an datetime value!");
-                }
-
-                calValues.add(cal);
-            }
-
-            propertyData = new PropertyDateTimeImpl(propDef.getId(), calValues);
-            break;
-        case HTML:
-            propertyData = new PropertyHtmlImpl(propDef.getId(), strValues);
-            break;
-        case URI:
-            propertyData = new PropertyUriImpl(propDef.getId(), strValues);
-            break;
-        default:
-            assert false;
-        }
-
-        return propertyData;
-    }
-
-    public List<String> createPolicies(ControlParser controlParser) {
-        return controlParser.getValues(Constants.CONTROL_POLICY);
-    }
-
-    public Acl createAddAcl(ControlParser controlParser) {
-        List<String> principals = controlParser.getValues(Constants.CONTROL_ADD_ACE_PRINCIPAL);
-        if (principals == null) {
-            return null;
-        }
-
-        List<Ace> aces = new ArrayList<Ace>();
-
-        int i = 0;
-        for (String principalId : principals) {
-            aces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId), controlParser
-                    .getValues(Constants.CONTROL_ADD_ACE_PERMISSION, i)));
-            i++;
-        }
-
-        return new AccessControlListImpl(aces);
-    }
-
-    public Acl createRemoveAcl(ControlParser controlParser) {
-        List<String> principals = controlParser.getValues(Constants.CONTROL_REMOVE_ACE_PRINCIPAL);
-        if (principals == null) {
-            return null;
-        }
-
-        List<Ace> aces = new ArrayList<Ace>();
-
-        int i = 0;
-        for (String principalId : principals) {
-            aces.add(new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId), controlParser
-                    .getValues(Constants.CONTROL_REMOVE_ACE_PERMISSION, i)));
-            i++;
-        }
-
-        return new AccessControlListImpl(aces);
-    }
-
-    public ContentStream createContentStream(HttpServletRequest request) {
-        ContentStreamImpl result = null;
-
-        if (request instanceof POSTHttpServletRequestWrapper) {
-            POSTHttpServletRequestWrapper post = (POSTHttpServletRequestWrapper) request;
-            if (post.getStream() != null) {
-                result = new ContentStreamImpl(post.getFilename(), post.getSize(), post.getContentType(),
-                        post.getStream());
-            }
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AclService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AclService.java
deleted file mode 100644
index 39d64ca..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AclService.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * ACL Service operations.
- */
-public class AclService {
-
-    /**
-     * getACL.
-     */
-    public static class GetACL extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            Boolean onlyBasicPermissions = getBooleanParameter(request, Constants.PARAM_ONLY_BASIC_PERMISSIONS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Acl acl = service.getAcl(repositoryId, objectId, onlyBasicPermissions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // return ACL
-            response.setStatus(HttpServletResponse.SC_OK);
-
-            JSONObject jsonObject = JSONConverter.convert(acl);
-            if (jsonObject == null) {
-                jsonObject = new JSONObject();
-            }
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * applyACL.
-     */
-    public static class ApplyACL extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            AclPropagation aclPropagation = getEnumParameter(request, Constants.PARAM_ACL_PROPAGATION,
-                    AclPropagation.class);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Acl acl = service.applyAcl(repositoryId, objectId, createAddAcl(cp), createRemoveAcl(cp), aclPropagation,
-                    null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // return ACL
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-
-            JSONObject jsonObject = JSONConverter.convert(acl);
-            if (jsonObject == null) {
-                jsonObject = new JSONObject();
-            }
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserCallContextImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserCallContextImpl.java
deleted file mode 100644
index 93f1ffa..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserCallContextImpl.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * A {@link CallContext} implementation that holds browser binding specific
- * values
- */
-public class BrowserCallContextImpl extends CallContextImpl {
-
-    private CmisService service;
-    private String objectId;
-    private String[] pathFragments;
-    private String typeId;
-    private BaseTypeId baseTypeId;
-    private String token;
-
-    public BrowserCallContextImpl(String binding, CmisVersion cmisVersion, String repositoryId,
-            ServletContext servletContext, HttpServletRequest request, HttpServletResponse response,
-            CmisServiceFactory factory, TempStoreOutputStreamFactory streamFactory) {
-        super(binding, cmisVersion, repositoryId, servletContext, request, response, factory, streamFactory);
-    }
-
-    /**
-     * Sets the necessary details to retrieve the object id, type id, and token
-     * if requested.
-     */
-    @SuppressWarnings("PMD.ArrayIsStoredDirectly")
-    public void setCallDetails(CmisService service, String objectId, String[] pathFragments, String token) {
-        this.service = service;
-        this.objectId = objectId;
-        this.pathFragments = pathFragments;
-        this.token = token;
-    }
-
-    /**
-     * Returns the token.
-     */
-    public String getToken() {
-        return token;
-    }
-
-    /**
-     * Returns the object id of the current object. If the object is unknown,
-     * that is the object has been addressed by path, the object is loaded to
-     * get the object id.
-     */
-    public String getObjectId() {
-        if (objectId != null) {
-            return objectId;
-        }
-
-        loadObject();
-
-        return objectId;
-    }
-
-    /**
-     * Returns the type id of the current object.
-     */
-    public String getTypeId() {
-        return typeId;
-    }
-
-    /**
-     * Returns the base type id of the current object. If the base type is
-     * unknown, the object is loaded to get the base type id.
-     */
-    public BaseTypeId getBaseTypeId() {
-        if (baseTypeId != null) {
-            return baseTypeId;
-        }
-
-        loadObject();
-
-        return baseTypeId;
-    }
-
-    /**
-     * Loads the object.
-     */
-    private void loadObject() {
-        ObjectData object = null;
-
-        if (objectId != null) {
-            object = service.getObject(getRepositoryId(), objectId, "cmis:objectId,cmis:objectTypeId,cmis:baseTypeId",
-                    false, IncludeRelationships.NONE, "cmis:none", false, false, null);
-        } else if (pathFragments != null) {
-            object = service.getObjectByPath(getRepositoryId(), getPath(),
-                    "cmis:objectId,cmis:objectTypeId,cmis:baseTypeId", false, IncludeRelationships.NONE, "cmis:none",
-                    false, false, null);
-        } else {
-            // this is a repository URL call without object id
-            // -> there is nothing to load
-            return;
-        }
-
-        objectId = object.getId();
-        typeId = getStringPropertyValue(object, PropertyIds.OBJECT_TYPE_ID);
-        baseTypeId = BaseTypeId.fromValue(getStringPropertyValue(object, PropertyIds.BASE_TYPE_ID));
-    }
-
-    /**
-     * Builds the object path.
-     */
-    private String getPath() {
-        if (pathFragments.length < 2) {
-            throw new CmisRuntimeException("Internal error!");
-        }
-        if (pathFragments.length == 2) {
-            return "/";
-        }
-
-        StringBuilder sb = new StringBuilder();
-        for (int i = 2; i < pathFragments.length; i++) {
-            if (pathFragments[i].length() == 0) {
-                continue;
-            }
-
-            sb.append('/');
-            sb.append(pathFragments[i]);
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Extracts a property from an object.
-     */
-    protected String getStringPropertyValue(ObjectData object, String name) {
-        if (object == null) {
-            return null;
-        }
-
-        Properties propData = object.getProperties();
-        if (propData == null) {
-            return null;
-        }
-
-        Map<String, PropertyData<?>> properties = propData.getProperties();
-        if (properties == null) {
-            return null;
-        }
-
-        PropertyData<?> property = properties.get(name);
-        if (property == null) {
-            return null;
-        }
-
-        Object value = property.getFirstValue();
-        if (!(value instanceof String)) {
-            return null;
-        }
-
-        return (String) value;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/CmisBrowserBindingServlet.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/CmisBrowserBindingServlet.java
deleted file mode 100644
index 7ac2367..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/CmisBrowserBindingServlet.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_ADD_OBJECT_TO_FOLDER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_APPEND_CONTENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_APPLY_ACL;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_APPLY_POLICY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_BULK_UPDATE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CANCEL_CHECK_OUT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CHECK_IN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CHECK_OUT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_DOCUMENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_DOCUMENT_FROM_SOURCE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_FOLDER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_ITEM;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_POLICY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_RELATIONSHIP;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_CREATE_TYPE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_DELETE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_DELETE_CONTENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_DELETE_TREE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_DELETE_TYPE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_MOVE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_QUERY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_REMOVE_OBJECT_FROM_FOLDER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_REMOVE_POLICY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_SET_CONTENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_UPDATE_PROPERTIES;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CMISACTION_UPDATE_TYPE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_OBJECT_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_ACL;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_ALLOWABLEACTIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_CHECKEDOUT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_CHILDREN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_CONTENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_CONTENT_CHANGES;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_DESCENDANTS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_FOLDER_TREE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_LAST_RESULT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_OBJECT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_PARENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_PARENTS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_POLICIES;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_PROPERTIES;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_QUERY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_RELATIONSHIPS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_RENDITIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_REPOSITORY_INFO;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_TYPE_CHILDREN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_TYPE_DEFINITION;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_TYPE_DESCENDANTS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.SELECTOR_VERSIONS;
-import static org.apache.chemistry.opencmis.commons.impl.JSONConstants.ERROR_EXCEPTION;
-import static org.apache.chemistry.opencmis.commons.impl.JSONConstants.ERROR_MESSAGE;
-import static org.apache.chemistry.opencmis.commons.impl.JSONConstants.ERROR_STACKTRACE;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_GET;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_HEAD;
-import static org.apache.chemistry.opencmis.server.shared.Dispatcher.METHOD_POST;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisServiceUnavailableException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.impl.ServerVersion;
-import org.apache.chemistry.opencmis.server.impl.browser.token.TokenHandler;
-import org.apache.chemistry.opencmis.server.shared.AbstractCmisHttpServlet;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-import org.apache.chemistry.opencmis.server.shared.ExceptionHelper;
-import org.apache.chemistry.opencmis.server.shared.HEADHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.shared.HttpUtils;
-import org.apache.chemistry.opencmis.server.shared.NoBodyHttpServletResponseWrapper;
-import org.apache.chemistry.opencmis.server.shared.QueryStringHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.shared.ServiceCall;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CmisBrowserBindingServlet extends AbstractCmisHttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisBrowserBindingServlet.class);
-
-    private final Dispatcher repositoryDispatcher = new Dispatcher(false);
-    private final Dispatcher rootDispatcher = new Dispatcher(false);
-    private static final ErrorServiceCall ERROR_SERTVICE_CALL = new ErrorServiceCall();
-
-    public enum CallUrl {
-        SERVICE, REPOSITORY, ROOT
-    }
-
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-        super.init(config);
-
-        // set the binding
-        setBinding(CallContext.BINDING_BROWSER);
-
-        // set CMIS version -> can only be 1.1
-        setCmisVersion(CmisVersion.CMIS_1_1);
-
-        // initialize repository resources
-        addRepositoryResource("", METHOD_GET, new RepositoryService.GetRepositories());
-        addRepositoryResource(SELECTOR_REPOSITORY_INFO, METHOD_GET, new RepositoryService.GetRepositoryInfo());
-        addRepositoryResource(SELECTOR_LAST_RESULT, METHOD_GET, new RepositoryService.GetLastResult());
-        addRepositoryResource(SELECTOR_TYPE_CHILDREN, METHOD_GET, new RepositoryService.GetTypeChildren());
-        addRepositoryResource(SELECTOR_TYPE_DESCENDANTS, METHOD_GET, new RepositoryService.GetTypeDescendants());
-        addRepositoryResource(SELECTOR_TYPE_DEFINITION, METHOD_GET, new RepositoryService.GetTypeDefinition());
-        addRepositoryResource(CMISACTION_CREATE_TYPE, METHOD_POST, new RepositoryService.CreateType());
-        addRepositoryResource(CMISACTION_UPDATE_TYPE, METHOD_POST, new RepositoryService.UpdateType());
-        addRepositoryResource(CMISACTION_DELETE_TYPE, METHOD_POST, new RepositoryService.DeleteType());
-        addRepositoryResource(SELECTOR_QUERY, METHOD_GET, new DiscoveryService.Query());
-        addRepositoryResource(SELECTOR_CHECKEDOUT, METHOD_GET, new NavigationService.GetCheckedOutDocs());
-        addRepositoryResource(SELECTOR_CONTENT_CHANGES, METHOD_GET, new DiscoveryService.GetContentChanges());
-
-        addRepositoryResource(CMISACTION_QUERY, METHOD_POST, new DiscoveryService.Query());
-        addRepositoryResource(CMISACTION_CREATE_DOCUMENT, METHOD_POST, new ObjectService.CreateDocument());
-        addRepositoryResource(CMISACTION_CREATE_DOCUMENT_FROM_SOURCE, METHOD_POST,
-                new ObjectService.CreateDocumentFromSource());
-        addRepositoryResource(CMISACTION_CREATE_POLICY, METHOD_POST, new ObjectService.CreatePolicy());
-        addRepositoryResource(CMISACTION_CREATE_ITEM, METHOD_POST, new ObjectService.CreateItem());
-        addRepositoryResource(CMISACTION_CREATE_RELATIONSHIP, METHOD_POST, new ObjectService.CreateRelationship());
-        addRepositoryResource(CMISACTION_BULK_UPDATE, METHOD_POST, new ObjectService.BulkUpdateProperties());
-
-        // initialize root resources
-        addRootResource(SELECTOR_OBJECT, METHOD_GET, new ObjectService.GetObject());
-        addRootResource(SELECTOR_PROPERTIES, METHOD_GET, new ObjectService.GetProperties());
-        addRootResource(SELECTOR_ALLOWABLEACTIONS, METHOD_GET, new ObjectService.GetAllowableActions());
-        addRootResource(SELECTOR_RENDITIONS, METHOD_GET, new ObjectService.GetRenditions());
-        addRootResource(SELECTOR_CONTENT, METHOD_GET, new ObjectService.GetContentStream());
-        addRootResource(SELECTOR_CHILDREN, METHOD_GET, new NavigationService.GetChildren());
-        addRootResource(SELECTOR_DESCENDANTS, METHOD_GET, new NavigationService.GetDescendants());
-        addRootResource(SELECTOR_FOLDER_TREE, METHOD_GET, new NavigationService.GetFolderTree());
-        addRootResource(SELECTOR_PARENT, METHOD_GET, new NavigationService.GetFolderParent());
-        addRootResource(SELECTOR_PARENTS, METHOD_GET, new NavigationService.GetObjectParents());
-        addRootResource(SELECTOR_VERSIONS, METHOD_GET, new VersioningService.GetAllVersions());
-        addRootResource(SELECTOR_RELATIONSHIPS, METHOD_GET, new RelationshipService.GetObjectRelationships());
-        addRootResource(SELECTOR_CHECKEDOUT, METHOD_GET, new NavigationService.GetCheckedOutDocs());
-        addRootResource(SELECTOR_POLICIES, METHOD_GET, new PolicyService.GetAppliedPolicies());
-        addRootResource(SELECTOR_ACL, METHOD_GET, new AclService.GetACL());
-
-        addRootResource(CMISACTION_CREATE_DOCUMENT, METHOD_POST, new ObjectService.CreateDocument());
-        addRootResource(CMISACTION_CREATE_DOCUMENT_FROM_SOURCE, METHOD_POST,
-                new ObjectService.CreateDocumentFromSource());
-        addRootResource(CMISACTION_CREATE_FOLDER, METHOD_POST, new ObjectService.CreateFolder());
-        addRootResource(CMISACTION_CREATE_POLICY, METHOD_POST, new ObjectService.CreatePolicy());
-        addRootResource(CMISACTION_CREATE_ITEM, METHOD_POST, new ObjectService.CreateItem());
-        addRootResource(CMISACTION_UPDATE_PROPERTIES, METHOD_POST, new ObjectService.UpdateProperties());
-        addRootResource(CMISACTION_SET_CONTENT, METHOD_POST, new ObjectService.SetContentStream());
-        addRootResource(CMISACTION_APPEND_CONTENT, METHOD_POST, new ObjectService.AppendContentStream());
-        addRootResource(CMISACTION_DELETE_CONTENT, METHOD_POST, new ObjectService.DeleteContentStream());
-        addRootResource(CMISACTION_DELETE, METHOD_POST, new ObjectService.DeleteObject());
-        addRootResource(CMISACTION_DELETE_TREE, METHOD_POST, new ObjectService.DeleteTree());
-        addRootResource(CMISACTION_MOVE, METHOD_POST, new ObjectService.MoveObject());
-        addRootResource(CMISACTION_ADD_OBJECT_TO_FOLDER, METHOD_POST, new MultiFilingService.AddObjectToFolder());
-        addRootResource(CMISACTION_REMOVE_OBJECT_FROM_FOLDER, METHOD_POST,
-                new MultiFilingService.RemoveObjectFromFolder());
-        addRootResource(CMISACTION_CHECK_OUT, METHOD_POST, new VersioningService.CheckOut());
-        addRootResource(CMISACTION_CANCEL_CHECK_OUT, METHOD_POST, new VersioningService.CancelCheckOut());
-        addRootResource(CMISACTION_CHECK_IN, METHOD_POST, new VersioningService.CheckIn());
-        addRootResource(CMISACTION_APPLY_POLICY, METHOD_POST, new PolicyService.ApplyPolicy());
-        addRootResource(CMISACTION_REMOVE_POLICY, METHOD_POST, new PolicyService.RemovePolicy());
-        addRootResource(CMISACTION_APPLY_ACL, METHOD_POST, new AclService.ApplyACL());
-
-        // old OpenCMIS client send invalid selector, support them anyway
-        addRootResource("folder", METHOD_GET, new NavigationService.GetFolderTree());
-    }
-
-    @Override
-    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
-            IOException {
-        CallContext context = null;
-
-        try {
-            // set default headers
-            response.addHeader("Cache-Control", "private, max-age=0");
-            response.addHeader("Server", ServerVersion.OPENCMIS_SERVER);
-
-            // split path
-            String[] pathFragments = HttpUtils.splitPath(request);
-
-            // create stream factory
-            TempStoreOutputStreamFactory streamFactoy = TempStoreOutputStreamFactory.newInstance(getServiceFactory(),
-                    pathFragments.length > 0 ? pathFragments[0] : null);
-
-            // check HTTP method
-            String method = request.getMethod();
-
-            if (METHOD_GET.equals(method)) {
-                request = new QueryStringHttpServletRequestWrapper(request);
-            } else if (METHOD_POST.equals(method)) {
-                request = new POSTHttpServletRequestWrapper(request, streamFactoy);
-            } else if (METHOD_HEAD.equals(method)) {
-                request = new HEADHttpServletRequestWrapper(request);
-                response = new NoBodyHttpServletResponseWrapper(response);
-            } else {
-                throw new CmisNotSupportedException("Unsupported method");
-            }
-
-            // invoke token handler, if necessary
-            if (request.getParameter("login") != null && getCallContextHandler() instanceof TokenHandler) {
-                ((TokenHandler) getCallContextHandler()).service(getServletContext(), request, response);
-                return;
-            }
-
-            context = createContext(getServletContext(), request, response, streamFactoy);
-            dispatch(context, request, response, pathFragments);
-        } catch (Exception e) {
-            if (e instanceof CmisUnauthorizedException) {
-                response.setHeader("WWW-Authenticate", "Basic realm=\"CMIS\", charset=\"UTF-8\"");
-                response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Required");
-            } else if (e instanceof CmisPermissionDeniedException) {
-                if (context == null || context.getUsername() == null) {
-                    response.setHeader("WWW-Authenticate", "Basic realm=\"CMIS\", charset=\"UTF-8\"");
-                    response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Required");
-                } else {
-                    printError(context, e, request, response);
-                }
-            } else {
-                printError(context, e, request, response);
-            }
-        } finally {
-            // in any case close the content stream if one has been provided
-            if (request instanceof POSTHttpServletRequestWrapper) {
-                InputStream stream = ((POSTHttpServletRequestWrapper) request).getStream();
-                if (stream != null) {
-                    try {
-                        stream.close();
-                    } catch (IOException e) {
-                        LOG.error("Could not close POST stream: {}", e.toString(), e);
-                    }
-                }
-            }
-
-            // we are done.
-            response.flushBuffer();
-        }
-    }
-
-    // --------------------------------------------------------
-
-    /**
-     * Registers a new repository resource.
-     */
-    protected void addRepositoryResource(String resource, String httpMethod, ServiceCall serviceCall) {
-        repositoryDispatcher.addResource(resource, httpMethod, serviceCall);
-    }
-
-    /**
-     * Registers a new root resource.
-     */
-    protected void addRootResource(String resource, String httpMethod, ServiceCall serviceCall) {
-        rootDispatcher.addResource(resource, httpMethod, serviceCall);
-    }
-
-    private void dispatch(CallContext context, HttpServletRequest request, HttpServletResponse response,
-            String[] pathFragments) throws Exception {
-        BrowserCallContextImpl browserContext = (BrowserCallContextImpl) context;
-        CmisService service = null;
-        try {
-            // get the service
-            service = getServiceFactory().getService(context);
-
-            // analyze the path
-            if (pathFragments.length < 1) {
-                // root -> repository infos
-                repositoryDispatcher.dispatch("", METHOD_GET, context, service, null, request, response);
-                return;
-            }
-
-            // select dispatcher
-            CallUrl callUrl = null;
-            if (pathFragments.length == 1) {
-                callUrl = CallUrl.REPOSITORY;
-            } else if (AbstractBrowserServiceCall.ROOT_PATH_FRAGMENT.equals(pathFragments[1])) {
-                callUrl = CallUrl.ROOT;
-            }
-
-            if (callUrl == null) {
-                throw new CmisNotSupportedException("Unknown operation");
-            }
-
-            String method = request.getMethod();
-            String repositoryId = pathFragments[0];
-            boolean callServiceFound = false;
-
-            if (METHOD_GET.equals(method)) {
-                String selector = HttpUtils.getStringParameter(request, Constants.PARAM_SELECTOR);
-                String objectId = HttpUtils.getStringParameter(request, PARAM_OBJECT_ID);
-
-                // dispatch
-                if (callUrl == CallUrl.REPOSITORY) {
-                    if (selector == null || selector.length() == 0) {
-                        throw new CmisNotSupportedException("No selector");
-                    }
-
-                    browserContext.setCallDetails(service, objectId, null, null);
-                    callServiceFound = repositoryDispatcher.dispatch(selector, method, browserContext, service,
-                            repositoryId, request, response);
-                } else if (callUrl == CallUrl.ROOT) {
-                    browserContext.setCallDetails(service, objectId, pathFragments, null);
-
-                    // set default method if necessary
-                    if (selector == null) {
-                        try {
-                            BaseTypeId basetype = browserContext.getBaseTypeId();
-                            switch (basetype) {
-                            case CMIS_DOCUMENT:
-                                selector = SELECTOR_CONTENT;
-                                break;
-                            case CMIS_FOLDER:
-                                selector = SELECTOR_CHILDREN;
-                                break;
-                            default:
-                                selector = SELECTOR_OBJECT;
-                                break;
-                            }
-                        } catch (Exception e) {
-                            selector = SELECTOR_OBJECT;
-                        }
-                    }
-
-                    callServiceFound = rootDispatcher.dispatch(selector, method, browserContext, service, repositoryId,
-                            request, response);
-                }
-            } else if (METHOD_POST.equals(method)) {
-                String cmisaction = HttpUtils.getStringParameter(request, Constants.CONTROL_CMISACTION);
-                String objectId = HttpUtils.getStringParameter(request, Constants.CONTROL_OBJECT_ID);
-                String token = HttpUtils.getStringParameter(request, Constants.CONTROL_TOKEN);
-
-                if (cmisaction == null || cmisaction.length() == 0) {
-                    throw new CmisNotSupportedException("Unknown action");
-                }
-
-                // dispatch
-                if (callUrl == CallUrl.REPOSITORY) {
-                    browserContext.setCallDetails(service, objectId, null, token);
-                    callServiceFound = repositoryDispatcher.dispatch(cmisaction, method, browserContext, service,
-                            repositoryId, request, response);
-                } else if (callUrl == CallUrl.ROOT) {
-                    browserContext.setCallDetails(service, objectId, pathFragments, token);
-                    callServiceFound = rootDispatcher.dispatch(cmisaction, method, browserContext, service,
-                            repositoryId, request, response);
-                }
-            }
-
-            // if the dispatcher couldn't find a matching service call
-            // -> return an error message
-            if (!callServiceFound) {
-                throw new CmisNotSupportedException("Unknown operation");
-            }
-        } finally {
-            if (service != null) {
-                service.close();
-            }
-        }
-    }
-
-    /**
-     * Translates an exception in an appropriate HTTP error code.
-     */
-    protected int getErrorCode(CmisBaseException ex) {
-        return ERROR_SERTVICE_CALL.getErrorCode(ex);
-    }
-
-    /**
-     * Prints an error as JSON.
-     */
-    protected void printError(CallContext context, Exception ex, HttpServletRequest request,
-            HttpServletResponse response) {
-        ERROR_SERTVICE_CALL.printError(context, ex, request, response);
-    }
-
-    static class ErrorServiceCall extends AbstractBrowserServiceCall {
-
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            // no implementation
-        }
-
-        public int getErrorCode(CmisBaseException ex) {
-            if (ex instanceof CmisConstraintException) {
-                return 409;
-            } else if (ex instanceof CmisContentAlreadyExistsException) {
-                return 409;
-            } else if (ex instanceof CmisFilterNotValidException) {
-                return 400;
-            } else if (ex instanceof CmisInvalidArgumentException) {
-                return 400;
-            } else if (ex instanceof CmisNameConstraintViolationException) {
-                return 409;
-            } else if (ex instanceof CmisNotSupportedException) {
-                return 405;
-            } else if (ex instanceof CmisObjectNotFoundException) {
-                return 404;
-            } else if (ex instanceof CmisPermissionDeniedException) {
-                return 403;
-            } else if (ex instanceof CmisStorageException) {
-                return 500;
-            } else if (ex instanceof CmisStreamNotSupportedException) {
-                return 403;
-            } else if (ex instanceof CmisUpdateConflictException) {
-                return 409;
-            } else if (ex instanceof CmisVersioningException) {
-                return 409;
-            } else if (ex instanceof CmisServiceUnavailableException) {
-                return 503;
-            }
-
-            return 500;
-        }
-
-        public void printError(CallContext context, Exception ex, HttpServletRequest request,
-                HttpServletResponse response) {
-            int statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
-            String exceptionName = CmisRuntimeException.EXCEPTION_NAME;
-
-            if (ex instanceof CmisRuntimeException) {
-                LOG.error(ex.getMessage(), ex);
-            } else if (ex instanceof CmisStorageException) {
-                LOG.error(ex.getMessage(), ex);
-                statusCode = getErrorCode((CmisStorageException) ex);
-                exceptionName = ((CmisStorageException) ex).getExceptionName();
-            } else if (ex instanceof CmisBaseException) {
-                statusCode = getErrorCode((CmisBaseException) ex);
-                exceptionName = ((CmisBaseException) ex).getExceptionName();
-
-                if (statusCode == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
-                    LOG.error(ex.getMessage(), ex);
-                }
-            } else if (ex instanceof IOException) {
-                LOG.warn(ex.getMessage(), ex);
-            } else {
-                LOG.error(ex.getMessage(), ex);
-            }
-
-            if (response.isCommitted()) {
-                LOG.warn("Failed to send error message to client. Response is already committed.", ex);
-                return;
-            }
-
-            String token = (context instanceof BrowserCallContextImpl ? ((BrowserCallContextImpl) context).getToken()
-                    : null);
-
-            if (token == null) {
-                response.resetBuffer();
-                setStatus(request, response, statusCode);
-
-                String message = ex.getMessage();
-                if (!(ex instanceof CmisBaseException)) {
-                    message = "An error occurred!";
-                }
-
-                JSONObject jsonResponse = new JSONObject();
-                jsonResponse.put(ERROR_EXCEPTION, exceptionName);
-                jsonResponse.put(ERROR_MESSAGE, message);
-
-                String st = ExceptionHelper.getStacktraceAsString(ex);
-                if (st != null) {
-                    jsonResponse.put(ERROR_STACKTRACE, st);
-                }
-
-                try {
-                    writeJSON(jsonResponse, request, response);
-                } catch (Exception e) {
-                    LOG.error(e.getMessage(), e);
-                    try {
-                        response.sendError(statusCode, message);
-                    } catch (Exception en) {
-                        // there is nothing else we can do
-                    }
-                }
-            } else {
-                setStatus(request, response, HttpServletResponse.SC_OK);
-                response.setContentType(HTML_MIME_TYPE);
-                response.setContentLength(0);
-
-                if (context != null) {
-                    setCookie(request, response, context.getRepositoryId(), token,
-                            createCookieValue(statusCode, null, exceptionName, ex.getMessage()));
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java
deleted file mode 100644
index 474f873..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-
-/**
- * Parses HTML form controls.
- */
-public class ControlParser {
-
-    public static final String CONTROL_PROP_ID_LOWER = "propertyid";
-    private static final String CONTROL_PROP_VALUE_LOWER = "propertyvalue";
-
-    private final HttpServletRequest request;
-
-    private final Map<String, String> zeroDim = new HashMap<String, String>();
-    private final Map<String, Map<Integer, String>> oneDim = new HashMap<String, Map<Integer, String>>();
-    private final Map<String, Map<Integer, Map<Integer, String>>> twoDim = new HashMap<String, Map<Integer, Map<Integer, String>>>();
-
-    public ControlParser(HttpServletRequest request) {
-        this.request = request;
-        parse();
-    }
-
-    @SuppressWarnings("unchecked")
-    private void parse() {
-        // gather all controls
-        Map<String, String[]> controls = request.getParameterMap();
-        if (controls == null) {
-            return;
-        }
-
-        for (Map.Entry<String, String[]> control : controls.entrySet()) {
-            String controlName = control.getKey().trim().toLowerCase(Locale.ENGLISH);
-
-            int firstIndex = getFirstIndex(controlName);
-
-            if (firstIndex == -1) {
-                zeroDim.put(controlName, control.getValue()[0]);
-            } else {
-                String strippedControlName = controlName.substring(0, controlName.indexOf('['));
-                int secondIndex = getSecondIndex(controlName);
-
-                if (secondIndex == -1) {
-                    Map<Integer, String> values = oneDim.get(strippedControlName);
-                    if (values == null) {
-                        values = new HashMap<Integer, String>();
-                        oneDim.put(strippedControlName, values);
-                    }
-
-                    values.put(firstIndex, control.getValue()[0]);
-                } else {
-                    Map<Integer, Map<Integer, String>> values = twoDim.get(strippedControlName);
-                    if (values == null) {
-                        values = new HashMap<Integer, Map<Integer, String>>();
-                        twoDim.put(strippedControlName, values);
-                    }
-
-                    Map<Integer, String> list = values.get(firstIndex);
-                    if (list == null) {
-                        list = new HashMap<Integer, String>();
-                        values.put(firstIndex, list);
-                    }
-
-                    list.put(secondIndex, control.getValue()[0]);
-                }
-            }
-        }
-    }
-
-    private static int getFirstIndex(String controlName) {
-        int result = -1;
-
-        int open = controlName.indexOf('[');
-        int close = controlName.indexOf(']');
-
-        if (open == -1 || close == -1 || close < open) {
-            return result;
-        }
-
-        String indexStr = controlName.substring(open + 1, close);
-        try {
-            result = Integer.parseInt(indexStr);
-            if (result < 0) {
-                result = -1;
-            }
-        } catch (NumberFormatException e) {
-            // return default value (-1)
-        }
-
-        return result;
-    }
-
-    private static int getSecondIndex(String controlName) {
-        int result = -1;
-
-        int open = controlName.indexOf("][");
-        int close = controlName.lastIndexOf(']');
-
-        if (open == -1 || close == -1 || close < open) {
-            return result;
-        }
-
-        String indexStr = controlName.substring(open + 2, close);
-        try {
-            result = Integer.parseInt(indexStr);
-            if (result < 0) {
-                result = -1;
-            }
-        } catch (NumberFormatException e) {
-            // return default value (-1)
-        }
-
-        return result;
-    }
-
-    private static List<String> convertToList(String controlName, Map<Integer, String> map) {
-        if (map == null) {
-            return null;
-        }
-
-        int count = map.size();
-        List<String> result = new ArrayList<String>(count);
-
-        for (int i = 0; i < count; i++) {
-            String value = map.get(i);
-            if (value == null) {
-                throw new CmisInvalidArgumentException(controlName + " has gaps!");
-            }
-            result.add(value);
-        }
-
-        return result;
-    }
-
-    public String getValue(String controlName) {
-        if (controlName == null) {
-            throw new IllegalArgumentException("controlName must not be null!");
-        }
-
-        return zeroDim.get(controlName.toLowerCase(Locale.ENGLISH));
-    }
-
-    public List<String> getValues(String controlName) {
-        if (controlName == null) {
-            throw new IllegalArgumentException("controlName must not be null!");
-        }
-
-        return convertToList(controlName, oneDim.get(controlName.toLowerCase(Locale.ENGLISH)));
-    }
-
-    public List<String> getValues(String controlName, int index) {
-        if (controlName == null) {
-            throw new IllegalArgumentException("controlName must not be null!");
-        }
-
-        Map<Integer, Map<Integer, String>> map = twoDim.get(controlName.toLowerCase(Locale.ENGLISH));
-        if (map == null) {
-            return null;
-        }
-
-        return convertToList(controlName, map.get(index));
-    }
-
-    public Map<Integer, String> getOneDimMap(String controlName) {
-        if (controlName == null) {
-            throw new IllegalArgumentException("controlName must not be null!");
-        }
-
-        return oneDim.get(controlName.toLowerCase(Locale.ENGLISH));
-    }
-
-    public Map<Integer, Map<Integer, String>> getTwoDimMap(String controlName) {
-        if (controlName == null) {
-            throw new IllegalArgumentException("controlName must not be null!");
-        }
-
-        return twoDim.get(controlName.toLowerCase(Locale.ENGLISH));
-    }
-
-    public Map<String, List<String>> getProperties() {
-        Map<Integer, String> propertyIds = oneDim.get(CONTROL_PROP_ID_LOWER);
-        if (propertyIds == null) {
-            return null;
-        }
-
-        Map<Integer, String> oneDimPropValues = oneDim.get(CONTROL_PROP_VALUE_LOWER);
-        Map<Integer, Map<Integer, String>> twoDimPropValues = twoDim.get(CONTROL_PROP_VALUE_LOWER);
-
-        int count = propertyIds.size();
-        Map<String, List<String>> result = new LinkedHashMap<String, List<String>>();
-
-        for (int i = 0; i < count; i++) {
-            String propertyId = propertyIds.get(i);
-            if (propertyId == null) {
-                throw new CmisInvalidArgumentException(Constants.CONTROL_PROP_ID + " has gaps!");
-            }
-
-            List<String> values = null;
-            if (oneDimPropValues != null && oneDimPropValues.containsKey(i)) {
-                values = Collections.singletonList(oneDimPropValues.get(i));
-            } else if (twoDimPropValues != null && twoDimPropValues.containsKey(i)) {
-                values = new ArrayList<String>();
-
-                Map<Integer, String> valuesMap = twoDimPropValues.get(i);
-                if (valuesMap != null) {
-                    int valueCount = valuesMap.size();
-
-                    for (int j = 0; j < valueCount; j++) {
-                        String value = valuesMap.get(j);
-                        if (value == null) {
-                            throw new CmisInvalidArgumentException(Constants.CONTROL_PROP_VALUE + "[" + i
-                                    + "] has gaps!");
-                        }
-
-                        values.add(value);
-                    }
-                }
-            }
-
-            result.put(propertyId, values);
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/DiscoveryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/DiscoveryService.java
deleted file mode 100644
index bbd3e08..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/DiscoveryService.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ACL;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_CHANGE_LOG_TOKEN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_POLICY_IDS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_PROPERTIES;
-
-import java.math.BigInteger;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Discovery Service operations.
- */
-public class DiscoveryService {
-
-    /**
-     * query.
-     */
-    public static class Query extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String statement = getStringParameter(request, Constants.PARAM_STATEMENT);
-            if (statement == null || statement.length() == 0) {
-                statement = getStringParameter(request, Constants.PARAM_Q);
-            }
-            Boolean searchAllVersions = getBooleanParameter(request, Constants.PARAM_SEARCH_ALL_VERSIONS);
-            Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList results = service.query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                    includeRelationships, renditionFilter, maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (results == null) {
-                throw new CmisRuntimeException("Results are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonResults = JSONConverter.convert(results, typeCache, JSONConverter.PropertyMode.QUERY,
-                    succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonResults, request, response);
-        }
-    }
-
-    /**
-     * getContentChanges.
-     */
-    public static class GetContentChanges extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String changeLogToken = getStringParameter(request, PARAM_CHANGE_LOG_TOKEN);
-            Boolean includeProperties = getBooleanParameter(request, PARAM_PROPERTIES);
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includePolicyIds = getBooleanParameter(request, PARAM_POLICY_IDS);
-            Boolean includeAcl = getBooleanParameter(request, PARAM_ACL);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> changeLogTokenHolder = new Holder<String>(changeLogToken);
-            ObjectList changes = service.getContentChanges(repositoryId, changeLogTokenHolder, includeProperties,
-                    filter, includePolicyIds, includeAcl, maxItems, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonChanges = JSONConverter.convert(changes, typeCache, JSONConverter.PropertyMode.CHANGE,
-                    succinct, dateTimeFormat);
-            jsonChanges.put(JSONConstants.JSON_OBJECTLIST_CHANGE_LOG_TOKEN, changeLogTokenHolder.getValue());
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonChanges, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultiFilingService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultiFilingService.java
deleted file mode 100644
index 0a83206..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultiFilingService.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FOLDER_ID;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * MultiFiling Service operations.
- */
-public class MultiFilingService {
-
-    /*
-     * addObjectToFolder.
-     */
-    public static class AddObjectToFolder extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String folderId = getStringParameter(request, PARAM_FOLDER_ID);
-            Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            service.addObjectToFolder(repositoryId, objectId, folderId, allVersions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, newObjectId));
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /*
-     * removeObjectFromFolder.
-     */
-    public static class RemoveObjectFromFolder extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String folderId = getStringParameter(request, PARAM_FOLDER_ID);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            service.removeObjectFromFolder(repositoryId, objectId, folderId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, newObjectId));
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java
deleted file mode 100644
index 989280b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-/**
- * Simple multi-part parser, following all necessary standards for the CMIS
- * browser binding.
- */
-public class MultipartParser {
-
-    public static final String MULTIPART = "multipart/";
-
-    private static final String CHARSET_FIELD = "_charset_";
-
-    private static final int MAX_FIELD_BYTES = 10 * 1024 * 1024;
-    private static final int BUFFER_SIZE = 256 * 1024;
-
-    private static final byte CR = 0x0D;
-    private static final byte LF = 0x0A;
-    private static final byte DASH = 0x2D;
-    private static final byte[] BOUNDARY_PREFIX = { CR, LF, DASH, DASH };
-
-    private final HttpServletRequest request;
-    private final TempStoreOutputStreamFactory streamFactory;
-    private final InputStream requestStream;
-
-    private byte[] boundary;
-    private int[] badCharacters;
-    private int[] goodSuffixes;
-
-    private byte[] buffer;
-    private byte[] buffer2;
-    private int bufferPosition;
-    private int bufferCount;
-    private boolean eof;
-
-    private int fieldBytes;
-    private boolean hasContent;
-
-    private Map<String, String> headers;
-
-    private String filename;
-    private String contentType;
-    private BigInteger contentSize;
-    private InputStream contentStream;
-
-    private Map<String, String[]> fields;
-    private Map<String, byte[][]> rawFields;
-    private String charset = IOUtils.ISO_8859_1;
-
-    public MultipartParser(HttpServletRequest request, TempStoreOutputStreamFactory streamFactory) throws IOException {
-        this.request = request;
-        this.streamFactory = streamFactory;
-        this.requestStream = request.getInputStream();
-
-        extractBoundary();
-
-        buffer = new byte[BUFFER_SIZE + boundary.length];
-        buffer2 = new byte[buffer.length];
-        bufferPosition = 0;
-        bufferCount = 0;
-        eof = false;
-
-        hasContent = false;
-        fieldBytes = 0;
-
-        fields = new HashMap<String, String[]>();
-        rawFields = new HashMap<String, byte[][]>();
-
-        skipPreamble();
-    }
-
-    private void addField(String name, String value) {
-        String[] values = fields.get(name);
-
-        if (values == null) {
-            fields.put(name, new String[] { value });
-        } else {
-            String[] newValues = new String[values.length + 1];
-            System.arraycopy(values, 0, newValues, 0, values.length);
-            newValues[newValues.length - 1] = value;
-            fields.put(name, newValues);
-        }
-    }
-
-    private void addRawField(String name, byte[] value) {
-        byte[][] values = rawFields.get(name);
-
-        if (values == null) {
-            byte[][] newValue = new byte[][] { value };
-            rawFields.put(name, newValue);
-        } else {
-            byte[][] newValues = new byte[values.length + 1][];
-            System.arraycopy(values, 0, newValues, 0, values.length);
-            newValues[newValues.length - 1] = value;
-            rawFields.put(name, newValues);
-        }
-    }
-
-    private void extractBoundary() {
-        String requestContentType = request.getContentType();
-
-        // parse content type and extract boundary
-        byte[] extractedBoundary = MimeHelper.getBoundaryFromMultiPart(requestContentType);
-        if (extractedBoundary == null) {
-            throw new CmisInvalidArgumentException("Invalid multipart request!");
-        }
-
-        boundary = new byte[BOUNDARY_PREFIX.length + extractedBoundary.length];
-        System.arraycopy(BOUNDARY_PREFIX, 0, boundary, 0, BOUNDARY_PREFIX.length);
-        System.arraycopy(extractedBoundary, 0, boundary, BOUNDARY_PREFIX.length, extractedBoundary.length);
-
-        // prepare boundary search
-
-        int m = boundary.length;
-
-        badCharacters = new int[256];
-        Arrays.fill(badCharacters, -1);
-
-        for (int j = 0; j < m; j++) {
-            badCharacters[boundary[j] & 0xff] = j;
-        }
-
-        int[] f = new int[m + 1];
-        goodSuffixes = new int[m + 1];
-        int i = m;
-        int j = m + 1;
-        f[i] = j;
-        while (i > 0) {
-            while (j <= m && boundary[i - 1] != boundary[j - 1]) {
-                if (goodSuffixes[j] == 0) {
-                    goodSuffixes[j] = j - i;
-                }
-                j = f[j];
-            }
-            i--;
-            j--;
-            f[i] = j;
-        }
-
-        j = f[0];
-        for (i = 0; i <= m; i++) {
-            if (goodSuffixes[i] == 0) {
-                goodSuffixes[i] = j;
-            }
-
-            if (i == j) {
-                j = f[j];
-            }
-        }
-    }
-
-    private int findBoundary() {
-        if (bufferCount < boundary.length) {
-            if (eof) {
-                throw new CmisInvalidArgumentException("Unexpected end of stream!");
-            } else {
-                return -1;
-            }
-        }
-
-        int m = boundary.length;
-
-        int i = 0;
-        while (i <= bufferCount - m) {
-            int j = m - 1;
-            while (j >= 0 && boundary[j] == buffer[i + j]) {
-                j--;
-            }
-
-            if (j < 0) {
-                return i;
-            } else {
-                i += Math.max(goodSuffixes[j + 1], j - badCharacters[buffer[i + j] & 0xff]);
-            }
-        }
-
-        return -1;
-    }
-
-    private void readBuffer() throws IOException {
-        if (bufferPosition < bufferCount) {
-            System.arraycopy(buffer, bufferPosition, buffer2, 0, bufferCount - bufferPosition);
-            bufferCount = bufferCount - bufferPosition;
-
-            byte[] tmpBuffer = buffer2;
-            buffer2 = buffer;
-            buffer = tmpBuffer;
-        } else {
-            bufferCount = 0;
-        }
-
-        bufferPosition = 0;
-
-        if (eof) {
-            return;
-        }
-
-        while (true) {
-            int r = requestStream.read(buffer, bufferCount, buffer.length - bufferCount);
-            if (r == -1) {
-                eof = true;
-                break;
-            }
-
-            bufferCount += r;
-            if (buffer.length == bufferCount) {
-                break;
-            }
-        }
-    }
-
-    private int nextByte() throws IOException {
-        if (bufferCount == 0) {
-            if (eof) {
-                return -1;
-            } else {
-                readBuffer();
-                return nextByte();
-            }
-        }
-
-        if (bufferCount > bufferPosition) {
-            return buffer[bufferPosition++] & 0xff;
-        }
-
-        readBuffer();
-        return nextByte();
-    }
-
-    private String readLine() throws IOException {
-        StringBuilder sb = new StringBuilder();
-
-        int r;
-        while ((r = nextByte()) > -1) {
-            if (r == CR) {
-                if (nextByte() != LF) {
-                    throw new CmisInvalidArgumentException("Invalid multipart request!");
-                }
-                break;
-            }
-
-            sb.append((char) r);
-        }
-
-        return sb.toString();
-    }
-
-    private void readHeaders() throws IOException {
-        int b = nextByte();
-        if (b == -1) {
-            throw new CmisInvalidArgumentException("Unexpected end of stream!");
-        }
-
-        if (b == DASH) {
-            b = nextByte();
-            if (b == DASH) {
-                // expected end of stream
-                headers = null;
-                return;
-            }
-        } else if (b == CR) {
-            b = nextByte();
-            if (b == LF) {
-                parseHeaders();
-                return;
-            }
-        }
-
-        throw new CmisInvalidArgumentException("Invalid multipart request!");
-    }
-
-    private void parseHeaders() throws IOException {
-        headers = new HashMap<String, String>();
-
-        while (true) {
-            String line = readLine();
-            if (line.length() == 0) {
-                // empty line -> end of headers
-                break;
-            }
-
-            int x = line.indexOf(':');
-            if (x > 0) {
-                headers.put(line.substring(0, x).toLowerCase(Locale.ENGLISH).trim(), line.substring(x + 1).trim());
-            }
-        }
-    }
-
-    private byte[] readBodyBytes() throws IOException {
-        readBuffer();
-
-        int boundaryPosition = findBoundary();
-
-        if (boundaryPosition > -1) {
-            // the body bytes are completely in the buffer
-            int len = boundaryPosition - bufferPosition;
-            addFieldBytes(len);
-
-            byte[] body = new byte[len];
-            System.arraycopy(buffer, bufferPosition, body, 0, len);
-            bufferPosition = boundaryPosition + boundary.length;
-            return body;
-        }
-
-        // the body bytes are not completely in the buffer
-        // read all available bytes
-        int len = Math.min(BUFFER_SIZE, bufferCount) - bufferPosition;
-        addFieldBytes(len);
-
-        byte[] bodyBytes = new byte[len + BUFFER_SIZE];
-        int bodyBytesPos = len;
-
-        System.arraycopy(buffer, bufferPosition, bodyBytes, 0, len);
-        bufferPosition = bufferPosition + len;
-
-        // read next chunk
-        while (true) {
-            readBuffer();
-
-            boundaryPosition = findBoundary();
-
-            if (boundaryPosition > -1) {
-                // last chunk
-                len = boundaryPosition - bufferPosition;
-                addFieldBytes(len);
-
-                if (bodyBytesPos + len >= bodyBytes.length) {
-                    byte[] newBodyBytes = new byte[bodyBytesPos + len];
-                    System.arraycopy(bodyBytes, 0, newBodyBytes, 0, bodyBytesPos);
-                    bodyBytes = newBodyBytes;
-                }
-                System.arraycopy(buffer, bufferPosition, bodyBytes, bodyBytesPos, len);
-                bodyBytesPos += len;
-
-                bufferPosition = boundaryPosition + boundary.length;
-                break;
-            } else {
-                // not the last chunk
-                len = Math.min(BUFFER_SIZE, bufferCount) - bufferPosition;
-                addFieldBytes(len);
-
-                if (bodyBytesPos + len >= bodyBytes.length) {
-                    int newSize = bodyBytes.length << 1;
-                    if (newSize < 0 || newSize > MAX_FIELD_BYTES) {
-                        newSize = MAX_FIELD_BYTES;
-                    }
-                    if (newSize < bodyBytesPos + len) {
-                        newSize = bodyBytesPos + BUFFER_SIZE;
-                    }
-
-                    byte[] newBodyBytes = new byte[newSize];
-                    System.arraycopy(bodyBytes, 0, newBodyBytes, 0, bodyBytesPos);
-                    bodyBytes = newBodyBytes;
-                }
-                System.arraycopy(buffer, bufferPosition, bodyBytes, bodyBytesPos, len);
-                bodyBytesPos += len;
-
-                bufferPosition = bufferPosition + len;
-            }
-        }
-
-        if (bodyBytes.length == bodyBytesPos) {
-            return bodyBytes;
-        }
-
-        byte[] returnBytes = new byte[bodyBytesPos];
-        System.arraycopy(bodyBytes, 0, returnBytes, 0, returnBytes.length);
-
-        return returnBytes;
-    }
-
-    private void addFieldBytes(int len) {
-        fieldBytes += len;
-        if (fieldBytes > MAX_FIELD_BYTES) {
-            throw new CmisInvalidArgumentException("Limit exceeded!");
-        }
-    }
-
-    private void readBodyAsStream(String contentType, String filename) throws IOException {
-        TempStoreOutputStream stream = streamFactory.newOutputStream();
-        stream.setMimeType(contentType);
-        stream.setFileName(filename);
-
-        try {
-            while (true) {
-                readBuffer();
-
-                int boundaryPosition = findBoundary();
-
-                if (boundaryPosition > -1) {
-                    stream.write(buffer, bufferPosition, boundaryPosition - bufferPosition);
-                    bufferPosition = boundaryPosition + boundary.length;
-                    break;
-                } else {
-                    int len = Math.min(BUFFER_SIZE, bufferCount) - bufferPosition;
-                    stream.write(buffer, bufferPosition, len);
-                    bufferPosition = bufferPosition + len;
-                }
-            }
-
-            stream.close();
-
-            contentSize = BigInteger.valueOf(stream.getLength());
-            contentStream = stream.getInputStream();
-        } catch (IOException e) {
-            // if something went wrong, make sure the temp file will
-            // be deleted
-            stream.destroy(e);
-            throw e;
-        }
-    }
-
-    private void readBody() throws IOException {
-        String contentDisposition = headers.get("content-disposition");
-
-        if (contentDisposition == null) {
-            throw new CmisInvalidArgumentException("Invalid multipart request!");
-        }
-
-        Map<String, String> params = new HashMap<String, String>();
-        MimeHelper.decodeContentDisposition(contentDisposition, params);
-        boolean isContent = params.containsKey(MimeHelper.DISPOSITION_FILENAME);
-
-        if (isContent) {
-            if (hasContent) {
-                throw new CmisInvalidArgumentException("Only one content expected!");
-            }
-
-            hasContent = true;
-
-            filename = params.get(MimeHelper.DISPOSITION_FILENAME);
-
-            if (filename != null) {
-                // if the browser sent the full path,
-                // extract the filename segment
-                int pathsep = filename.lastIndexOf('/');
-                if (pathsep > -1) {
-                    filename = filename.substring(pathsep + 1);
-                }
-                pathsep = filename.lastIndexOf('\\');
-                if (pathsep > -1) {
-                    filename = filename.substring(pathsep + 1);
-                }
-
-                filename = filename.trim();
-            }
-
-            contentType = headers.get("content-type");
-            if (contentType == null) {
-                contentType = Constants.MEDIATYPE_OCTETSTREAM;
-            }
-
-            readBodyAsStream(contentType, filename);
-        } else {
-            String name = params.get(MimeHelper.DISPOSITION_NAME);
-            byte[] rawValue = readBodyBytes();
-
-            if (CHARSET_FIELD.equalsIgnoreCase(name)) {
-                charset = new String(rawValue, IOUtils.ISO_8859_1);
-                return;
-            }
-
-            String fieldContentType = headers.get("content-type");
-            if (fieldContentType != null) {
-                String fieldCharset = MimeHelper.getCharsetFromContentType(fieldContentType);
-                if (fieldCharset != null) {
-                    addField(name, new String(rawValue, fieldCharset));
-                    return;
-                }
-            }
-
-            addRawField(name, rawValue);
-        }
-    }
-
-    private void skipPreamble() throws IOException {
-        readBuffer();
-
-        if (bufferCount < boundary.length - 2) {
-            throw new CmisInvalidArgumentException("Invalid multipart request!");
-        }
-
-        for (int i = 2; i < boundary.length; i++) {
-            if (boundary[i] != buffer[i - 2]) {
-                break;
-            }
-
-            if (i == boundary.length - 1) {
-                bufferPosition = boundary.length - 2;
-                readBuffer();
-                return;
-            }
-        }
-
-        while (true) {
-            int boundaryPosition = findBoundary();
-
-            if (boundaryPosition > -1) {
-                bufferPosition = boundaryPosition + boundary.length;
-                readBuffer();
-                break;
-            }
-
-            bufferPosition = BUFFER_SIZE + 1;
-            readBuffer();
-        }
-    }
-
-    private void skipEpilogue() {
-        try {
-            // read to the end of stream, but max 1 MB
-            int count = 0;
-            byte[] tmpBuf = new byte[4096];
-            int b;
-            while ((b = requestStream.read(tmpBuf)) > -1) {
-                count += b;
-                if (count >= 1024 * 1024) {
-                    break;
-                }
-            }
-        } catch (IOException e) {
-            // ignore
-        }
-    }
-
-    private boolean readNext() throws IOException {
-        try {
-            readHeaders();
-
-            // no headers -> end of request
-            if (headers == null) {
-                skipEpilogue();
-                return false;
-            }
-
-            readBody();
-
-            return true;
-        } catch (IOException e) {
-            IOUtils.closeQuietly(contentStream);
-
-            skipEpilogue();
-
-            throw e;
-        }
-    }
-
-    public void parse() throws IOException {
-        try {
-
-            while (readNext()) {
-                // nothing to do here, just read
-            }
-
-            // apply charset
-            for (Map.Entry<String, byte[][]> e : rawFields.entrySet()) {
-
-                String[] otherValues = fields.get(e.getKey());
-                int index = (otherValues != null ? otherValues.length : 0);
-
-                String[] values = new String[e.getValue().length + index];
-
-                if (otherValues != null) {
-                    System.arraycopy(otherValues, 0, values, 0, otherValues.length);
-                }
-
-                for (byte[] rawValue : e.getValue()) {
-                    values[index++] = new String(rawValue, charset);
-                }
-
-                fields.put(e.getKey(), values);
-            }
-        } catch (Exception e) {
-            if (contentStream != null) {
-                IOUtils.closeQuietly(contentStream);
-            }
-
-            skipEpilogue();
-
-            fields = null;
-
-            if (e instanceof UnsupportedEncodingException) {
-                throw new CmisInvalidArgumentException("Encoding not supported!", e);
-            } else if (e instanceof CmisBaseException) {
-                throw (CmisBaseException) e;
-            } else if (e instanceof IOException) {
-                throw (IOException) e;
-            } else {
-                throw new CmisRuntimeException(e.getMessage(), e);
-            }
-        } finally {
-            rawFields = null;
-        }
-    }
-
-    public boolean hasContent() {
-        return hasContent;
-    }
-
-    public String getFilename() {
-        return filename;
-    }
-
-    public String getContentType() {
-        return contentType;
-    }
-
-    public BigInteger getSize() {
-        return contentSize;
-    }
-
-    public InputStream getStream() {
-        return contentStream;
-    }
-
-    public Map<String, String[]> getFields() {
-        return fields;
-    }
-
-    /**
-     * Returns if the request is a multi-part request
-     */
-    public static final boolean isMultipartContent(HttpServletRequest request) {
-        String contentType = request.getContentType();
-
-        if (contentType != null && contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART)) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/NavigationService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/NavigationService.java
deleted file mode 100644
index a25d409..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/NavigationService.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ALLOWABLE_ACTIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_DEPTH;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_MAX_ITEMS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ORDER_BY;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RELATIONSHIPS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RELATIVE_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RENDITION_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SKIP_COUNT;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * Navigation Service operations.
- */
-public class NavigationService {
-
-    /**
-     * getChildren.
-     */
-    public static class GetChildren extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            String orderBy = getStringParameter(request, PARAM_ORDER_BY);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, PARAM_PATH_SEGMENT);
-            BigInteger maxItems = getBigIntegerParameter(request, PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, PARAM_SKIP_COUNT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectInFolderList children = service.getChildren(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems,
-                    skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (children == null) {
-                throw new CmisRuntimeException("Children are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonChildren = JSONConverter.convert(children, typeCache, succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonChildren, request, response);
-        }
-    }
-
-    /**
-     * getDescendants.
-     */
-    public static class GetDescendants extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            BigInteger depth = getBigIntegerParameter(request, PARAM_DEPTH);
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, PARAM_PATH_SEGMENT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectInFolderContainer> descendants = service.getDescendants(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (descendants == null) {
-                throw new CmisRuntimeException("Descendants are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONArray jsonDescendants = new JSONArray();
-            for (ObjectInFolderContainer descendant : descendants) {
-                jsonDescendants.add(JSONConverter.convert(descendant, typeCache, succinct, dateTimeFormat));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonDescendants, request, response);
-        }
-    }
-
-    /**
-     * getFolderTree.
-     */
-    public static class GetFolderTree extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            BigInteger depth = getBigIntegerParameter(request, PARAM_DEPTH);
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includePathSegment = getBooleanParameter(request, PARAM_PATH_SEGMENT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectInFolderContainer> folderTree = service.getFolderTree(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (folderTree == null) {
-                throw new CmisRuntimeException("Folder Tree are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONArray jsonDescendants = new JSONArray();
-            for (ObjectInFolderContainer descendant : folderTree) {
-                jsonDescendants.add(JSONConverter.convert(descendant, typeCache, succinct, dateTimeFormat));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonDescendants, request, response);
-        }
-    }
-
-    /**
-     * getFolderParent.
-     */
-    public static class GetFolderParent extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectData parent = service.getFolderParent(repositoryId, objectId, filter, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (parent == null) {
-                throw new CmisRuntimeException("Parent is null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(parent, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * getObjectParents.
-     */
-    public static class GetObjectParents extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includeRelativePathSegment = getBooleanParameter(request, PARAM_RELATIVE_PATH_SEGMENT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectParentData> parents = service.getObjectParents(repositoryId, objectId, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (parents == null) {
-                throw new CmisRuntimeException("Parents are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONArray jsonParents = new JSONArray();
-            for (ObjectParentData parent : parents) {
-                jsonParents.add(JSONConverter.convert(parent, typeCache, succinct, dateTimeFormat));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonParents, request, response);
-        }
-    }
-
-    /**
-     * getCheckedOutDocs.
-     */
-    public static class GetCheckedOutDocs extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            String orderBy = getStringParameter(request, PARAM_ORDER_BY);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            BigInteger maxItems = getBigIntegerParameter(request, PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, PARAM_SKIP_COUNT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList checkedout = service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (checkedout == null) {
-                throw new CmisRuntimeException("Checked out list is null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonCheckedOut = JSONConverter.convert(checkedout, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonCheckedOut, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ObjectService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ObjectService.java
deleted file mode 100644
index 68f4848..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ObjectService.java
+++ /dev/null
@@ -1,1094 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.MEDIATYPE_OCTETSTREAM;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ACL;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ALLOWABLE_ACTIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_DOWNLOAD;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_POLICY_IDS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RELATIONSHIPS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RENDITION_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RETURN_VERSION;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SOURCE_FOLDER_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SOURCE_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_STREAM_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TARGET_FOLDER_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TOKEN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_VERSIONIG_STATE;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Object Service operations.
- */
-public class ObjectService {
-
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    /**
-     * Create document.
-     */
-    public static class CreateDocument extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            VersioningState versioningState = getEnumParameter(request, PARAM_VERSIONIG_STATE, VersioningState.class);
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            ContentStream contentStream = createContentStream(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createDocument(repositoryId, createNewProperties(cp, typeCache), folderId,
-                    contentStream, versioningState, createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New document is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * Create document from source.
-     */
-    public static class CreateDocumentFromSource extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String sourceId = getStringParameter(request, PARAM_SOURCE_ID);
-            VersioningState versioningState = getEnumParameter(request, PARAM_VERSIONIG_STATE, VersioningState.class);
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            ObjectData sourceDoc = getSimpleObject(service, repositoryId, sourceId);
-            PropertyData<?> sourceTypeId = sourceDoc.getProperties().getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-            if (sourceTypeId == null || sourceTypeId.getFirstValue() == null) {
-                throw new CmisRuntimeException("Source object has no type!?!");
-            }
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createDocumentFromSource(
-                    repositoryId,
-                    sourceId,
-                    createUpdateProperties(cp, sourceTypeId.getFirstValue().toString(), null,
-                            Collections.singletonList(sourceId), typeCache), folderId, versioningState,
-                    createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New document is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * Create folder.
-     */
-    public static class CreateFolder extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createFolder(repositoryId, createNewProperties(cp, typeCache), folderId,
-                    createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New folder is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * Create policy.
-     */
-    public static class CreatePolicy extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createPolicy(repositoryId, createNewProperties(cp, typeCache), folderId,
-                    createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New policy is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * Create Item.
-     */
-    public static class CreateItem extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String folderId = ((BrowserCallContextImpl) context).getObjectId();
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createItem(repositoryId, createNewProperties(cp, typeCache), folderId,
-                    createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New item is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * Create relationship.
-     */
-    public static class CreateRelationship extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String newObjectId = service.createRelationship(repositoryId, createNewProperties(cp, typeCache),
-                    createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New relationship is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * updateProperties.
-     */
-    public static class UpdateProperties extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String typeId = ((BrowserCallContextImpl) context).getTypeId();
-            String changeToken = getStringParameter(request, Constants.CONTROL_CHANGE_TOKEN);
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.updateProperties(repositoryId, objectIdHolder, changeTokenHolder,
-                    createUpdateProperties(cp, typeId, null, Collections.singletonList(objectId), typeCache), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            int status = HttpServletResponse.SC_OK;
-            if (!objectId.equals(newObjectId)) {
-                status = HttpServletResponse.SC_CREATED;
-            }
-
-            setStatus(request, response, status);
-            setCookie(request, response, repositoryId, token, createCookieValue(status, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * bulkUpdateProperties.
-     */
-    public static class BulkUpdateProperties extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            ControlParser cp = new ControlParser(request);
-
-            // get object ids and change tokens
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-
-            List<String> objectIds = cp.getValues(Constants.CONTROL_OBJECT_ID);
-            List<String> changeTokens = cp.getValues(Constants.CONTROL_CHANGE_TOKEN);
-
-            if (isNullOrEmpty(objectIds)) {
-                throw new CmisInvalidArgumentException("No object ids provided!");
-            }
-
-            int n = objectIds.size();
-            for (int i = 0; i < n; i++) {
-                String id = objectIds.get(i);
-                String changeToken = (changeTokens != null && changeTokens.size() > i ? changeTokens.get(i) : null);
-                objectIdAndChangeToken.add(new BulkUpdateObjectIdAndChangeTokenImpl(id, changeToken));
-            }
-
-            // get secondary type ids
-            List<String> addSecondaryTypes = cp.getValues(Constants.CONTROL_ADD_SECONDARY_TYPE);
-            List<String> removeSecondaryTypes = cp.getValues(Constants.CONTROL_REMOVE_SECONDARY_TYPE);
-
-            // compile properties
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-
-            Properties properties = createUpdateProperties(cp, null, addSecondaryTypes, objectIds, typeCache);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<BulkUpdateObjectIdAndChangeToken> result = service.bulkUpdateProperties(repositoryId,
-                    objectIdAndChangeToken, properties, addSecondaryTypes, removeSecondaryTypes, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            // return result
-            JSONArray jsonList = new JSONArray();
-            if (result != null) {
-                for (BulkUpdateObjectIdAndChangeToken oc : result) {
-                    if (oc != null) {
-                        jsonList.add(JSONConverter.convert(oc));
-                    }
-                }
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonList, request, response);
-        }
-    }
-
-    /**
-     * getProperties.
-     */
-    public static class GetProperties extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            ReturnVersion returnVersion = getEnumParameter(request, PARAM_RETURN_VERSION, ReturnVersion.class);
-            String filter = getStringParameter(request, PARAM_FILTER);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            Properties properties;
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            if (returnVersion == ReturnVersion.LATEST || returnVersion == ReturnVersion.LASTESTMAJOR) {
-                properties = service.getPropertiesOfLatestVersion(repositoryId, objectId, null,
-                        returnVersion == ReturnVersion.LASTESTMAJOR, filter, null);
-            } else {
-                properties = service.getProperties(repositoryId, objectId, filter, null);
-            }
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (properties == null) {
-                throw new CmisRuntimeException("Properties are null!");
-            }
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(properties, objectId, typeCache,
-                    JSONConverter.PropertyMode.OBJECT, succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * getObject.
-     */
-    public static class GetObject extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            ReturnVersion returnVersion = getEnumParameter(request, PARAM_RETURN_VERSION, ReturnVersion.class);
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
-                    IncludeRelationships.class);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includePolicyIds = getBooleanParameter(request, PARAM_POLICY_IDS);
-            Boolean includeAcl = getBooleanParameter(request, PARAM_ACL);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ObjectData object;
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            if (returnVersion == ReturnVersion.LATEST || returnVersion == ReturnVersion.LASTESTMAJOR) {
-                object = service.getObjectOfLatestVersion(repositoryId, objectId, null,
-                        returnVersion == ReturnVersion.LASTESTMAJOR, filter, includeAllowableActions,
-                        includeRelationships, renditionFilter, includePolicyIds, includeAcl, null);
-            } else {
-                object = service.getObject(repositoryId, objectId, filter, includeAllowableActions,
-                        includeRelationships, renditionFilter, includePolicyIds, includeAcl, null);
-            }
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * getAllowableActions.
-     */
-    public static class GetAllowableActions extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            AllowableActions allowableActions = service.getAllowableActions(repositoryId, objectId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject jsonAllowableActions = JSONConverter.convert(allowableActions);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonAllowableActions, request, response);
-        }
-    }
-
-    /**
-     * getRenditions.
-     */
-    public static class GetRenditions extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<RenditionData> renditions = service.getRenditions(repositoryId, objectId, renditionFilter, maxItems,
-                    skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONArray jsonRenditions = new JSONArray();
-            if (renditions != null) {
-                for (RenditionData rendition : renditions) {
-                    jsonRenditions.add(JSONConverter.convert(rendition));
-                }
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonRenditions, request, response);
-        }
-    }
-
-    /**
-     * getContentStream.
-     */
-    public static class GetContentStream extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String streamId = getStringParameter(request, PARAM_STREAM_ID);
-
-            boolean download = false;
-            String downloadParam = getStringParameter(request, PARAM_DOWNLOAD);
-            if (downloadParam != null && downloadParam.length() > 0) {
-                String downloadParamLower = downloadParam.trim().toLowerCase(Locale.ENGLISH);
-                if ("attachment".equals(downloadParamLower)) {
-                    download = true;
-                } else if ("inline".equals(downloadParamLower)) {
-                    download = false;
-                } else {
-                    throw new CmisInvalidArgumentException("Invalid download parameter value!");
-                }
-            }
-
-            BigInteger offset = context.getOffset();
-            BigInteger length = context.getLength();
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ContentStream content = service.getContentStream(repositoryId, objectId, streamId, offset, length, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (content == null || content.getStream() == null) {
-                throw new CmisRuntimeException("Content stream is null!");
-            }
-
-            // set HTTP headers, if requested by the server implementation
-            if (sendContentStreamHeaders(content, request, response)) {
-                return;
-            }
-
-            String contentType = content.getMimeType();
-            if (contentType == null) {
-                contentType = MEDIATYPE_OCTETSTREAM;
-            }
-
-            // set headers
-            if ((offset == null || offset.signum() == 0) && length == null) {
-                response.setStatus(HttpServletResponse.SC_OK);
-            } else {
-                setStatus(request, response, HttpServletResponse.SC_PARTIAL_CONTENT);
-
-                if (content.getBigLength() != null && content.getBigLength().signum() == 1) {
-                    BigInteger firstBytePos = (offset == null ? BigInteger.ZERO : offset);
-                    BigInteger lastBytePos = firstBytePos.add(content.getBigLength().subtract(BigInteger.ONE));
-
-                    response.setHeader("Content-Range",
-                            "bytes " + firstBytePos.toString() + "-" + lastBytePos.toString() + "/*");
-                }
-            }
-            response.setContentType(contentType);
-
-            String contentFilename = content.getFileName();
-            if (contentFilename == null) {
-                contentFilename = "content";
-            }
-
-            if (download) {
-                response.setHeader(MimeHelper.CONTENT_DISPOSITION,
-                        MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_ATTACHMENT, contentFilename));
-            } else {
-                response.setHeader(MimeHelper.CONTENT_DISPOSITION,
-                        MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_INLINE, contentFilename));
-            }
-
-            // send content
-            InputStream in = content.getStream();
-            OutputStream out = response.getOutputStream();
-            try {
-                IOUtils.copy(in, out, BUFFER_SIZE);
-                out.flush();
-            } finally {
-                in.close();
-            }
-        }
-    }
-
-    /**
-     * deleteObject.
-     */
-    public static class DeleteObject extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteObject(repositoryId, objectId, allVersions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeEmpty(request, response);
-        }
-    }
-
-    /**
-     * deleteTree.
-     */
-    public static class DeleteTree extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-            UnfileObject unfileObjects = getEnumParameter(request, Constants.PARAM_UNFILE_OBJECTS, UnfileObject.class);
-            Boolean continueOnFailure = getBooleanParameter(request, Constants.PARAM_CONTINUE_ON_FAILURE);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            FailedToDeleteData ftd = service.deleteTree(repositoryId, objectId, allVersions, unfileObjects,
-                    continueOnFailure, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-
-            if (ftd != null && isNotEmpty(ftd.getIds())) {
-                JSONObject jsonObject = JSONConverter.convert(ftd);
-                writeJSON(jsonObject, request, response);
-                return;
-            }
-
-            writeEmpty(request, response);
-        }
-    }
-
-    /**
-     * Delete content stream.
-     */
-    public static class DeleteContentStream extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteContentStream(repositoryId, objectIdHolder, changeTokenHolder, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * setContentStream.
-     */
-    public static class SetContentStream extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-            Boolean overwriteFlag = getBooleanParameter(request, Constants.PARAM_OVERWRITE_FLAG);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
-            ContentStream contentStream = createContentStream(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.setContentStream(repositoryId, objectIdHolder, overwriteFlag, changeTokenHolder, contentStream,
-                    null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, newObjectId));
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * appendContentStream.
-     */
-    public static class AppendContentStream extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            boolean isLastChunk = getBooleanParameter(request, Constants.CONTROL_IS_LAST_CHUNK, false);
-            String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
-            ContentStream contentStream = createContentStream(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.appendContentStream(repositoryId, objectIdHolder, changeTokenHolder, contentStream, isLastChunk,
-                    null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, newObjectId));
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * moveObject.
-     */
-    public static class MoveObject extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String targetFolderId = getStringParameter(request, PARAM_TARGET_FOLDER_ID);
-            String sourceFolderId = getStringParameter(request, PARAM_SOURCE_FOLDER_ID);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.moveObject(repositoryId, objectIdHolder, targetFolderId, sourceFolderId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, newObjectId));
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/POSTHttpServletRequestWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/POSTHttpServletRequestWrapper.java
deleted file mode 100644
index f75a031..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/POSTHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.server.shared.HttpUtils;
-import org.apache.chemistry.opencmis.server.shared.QueryStringHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-
-public final class POSTHttpServletRequestWrapper extends QueryStringHttpServletRequestWrapper {
-
-    public static final String FORM_URLENCODED = "application/x-www-form-urlencoded";
-    private static final int MAX_CONTENT_BYTES = 10 * 1024 * 1024;
-    private static final int BUFFER_SIZE = 64 * 1024;
-    private static final String CHARSET_FIELD = "_charset_";
-
-    private String filename;
-    private String contentType;
-    private BigInteger size;
-    private InputStream stream;
-
-    @SuppressWarnings("unchecked")
-    public POSTHttpServletRequestWrapper(HttpServletRequest request, TempStoreOutputStreamFactory streamFactory)
-            throws IOException {
-        super(request);
-
-        if (MultipartParser.isMultipartContent(request)) {
-            // multipart processing
-            MultipartParser parser = new MultipartParser(request, streamFactory);
-            parser.parse();
-
-            if (parser.hasContent()) {
-                filename = parser.getFilename();
-                contentType = parser.getContentType();
-                size = parser.getSize();
-                stream = parser.getStream();
-            }
-
-            for (Map.Entry<String, String[]> e : parser.getFields().entrySet()) {
-                addParameter(e.getKey(), e.getValue());
-            }
-
-            String filenameControl = HttpUtils.getStringParameter(this, Constants.CONTROL_FILENAME);
-            if ((filenameControl) != null && (filenameControl.trim().length() > 0)) {
-                filename = filenameControl;
-            }
-
-            String contentTypeControl = HttpUtils.getStringParameter(this, Constants.CONTROL_CONTENT_TYPE);
-            if ((contentTypeControl != null) && (contentTypeControl.trim().length() > 0)) {
-                contentType = contentTypeControl;
-            }
-        } else if (isFormUrlencodedContent(request)) {
-            // form data processing
-            if (!parseFormUrlEncodedData(request)) {
-                parameters.putAll(request.getParameterMap());
-            }
-        } else {
-            // spec incompliant form encoding
-            throw new CmisInvalidArgumentException("Invalid form encoding!");
-        }
-    }
-
-    public String getFilename() {
-        return filename;
-    }
-
-    public String getContentType() {
-        return contentType;
-    }
-
-    public BigInteger getSize() {
-        return size;
-    }
-
-    public InputStream getStream() {
-        return stream;
-    }
-
-    /**
-     * Parses a form data request
-     * 
-     * @param request
-     *            the request
-     * @return {@code true} if the body contained data, {@code false} otherwise
-     */
-    protected boolean parseFormUrlEncodedData(HttpServletRequest request) throws IOException {
-        byte data[] = new byte[BUFFER_SIZE];
-        int dataPos = 0;
-
-        InputStream stream = request.getInputStream();
-        int b;
-        byte buffer[] = new byte[BUFFER_SIZE];
-
-        // read stream
-        while ((b = stream.read(buffer)) != -1) {
-            if (dataPos + b > MAX_CONTENT_BYTES) {
-                throw new CmisInvalidArgumentException("Limit exceeded!");
-            }
-
-            if (data.length - dataPos < b) {
-                // expand buffer
-                int newSize = ((data.length + b) * 2 < MAX_CONTENT_BYTES ? (data.length + b * 2) : MAX_CONTENT_BYTES);
-                byte[] newbuf = new byte[newSize];
-                System.arraycopy(data, 0, newbuf, 0, dataPos);
-                data = newbuf;
-            }
-
-            System.arraycopy(buffer, 0, data, dataPos, b);
-            dataPos += b;
-        }
-
-        if (dataPos == 0) {
-            // empty stream
-            return false;
-        }
-
-        // parse parameters
-        boolean parseName = true;
-        boolean parseCharset = false;
-        int startPos = 0;
-
-        List<String[]> rawParameters = new ArrayList<String[]>();
-        String rawName = null;
-        String rawValue = null;
-
-        String charset = null;
-
-        for (int i = 0; i < dataPos; i++) {
-            switch (data[i]) {
-            case '=':
-                if (startPos < i) {
-                    rawName = new String(data, startPos, i - startPos, IOUtils.ISO_8859_1);
-                    if (CHARSET_FIELD.equalsIgnoreCase(rawName)) {
-                        parseCharset = true;
-                    }
-                }
-
-                parseName = false;
-                startPos = i + 1;
-                break;
-
-            case '&':
-                if (parseName) {
-                    if (startPos < i) {
-                        rawName = new String(data, startPos, i - startPos, IOUtils.ISO_8859_1);
-                        rawParameters.add(new String[] { rawName, null });
-                    }
-                } else {
-                    if (rawName != null) {
-                        rawValue = new String(data, startPos, i - startPos, IOUtils.ISO_8859_1);
-                        rawParameters.add(new String[] { rawName, rawValue });
-                        if (parseCharset) {
-                            charset = rawValue;
-                        }
-                    }
-                }
-
-                rawName = null;
-                rawValue = null;
-
-                parseName = true;
-                parseCharset = false;
-                startPos = i + 1;
-                break;
-
-            default:
-                break;
-            }
-        }
-
-        if (startPos < dataPos) {
-            // there is a final parameter after the last '&'
-            if (parseName) {
-                rawName = new String(data, startPos, dataPos - startPos, IOUtils.ISO_8859_1);
-                rawParameters.add(new String[] { rawName, null });
-            } else {
-                if (rawName != null) {
-                    rawValue = new String(data, startPos, dataPos - startPos, IOUtils.ISO_8859_1);
-                    rawParameters.add(new String[] { rawName, rawValue });
-                    if (parseCharset) {
-                        charset = rawValue;
-                    }
-                }
-            }
-        } else if (!parseName) {
-            // the stream ended with '='
-            rawParameters.add(new String[] { rawName, "" });
-        }
-
-        data = null;
-
-        // find charset
-        if (charset == null) {
-            // check charset in content type
-            String contentType = request.getContentType();
-            if (contentType != null) {
-                String[] parts = contentType.split(";");
-                for (int i = 1; i < parts.length; i++) {
-                    String part = parts[i].trim().toLowerCase(Locale.ENGLISH);
-                    if (part.startsWith("charset")) {
-                        int x = part.indexOf('=');
-                        charset = part.substring(x + 1).trim();
-                        break;
-                    }
-                }
-            }
-        }
-
-        if (charset == null) {
-            // set default charset
-            charset = IOUtils.UTF8;
-        }
-
-        // decode parameters
-        for (String[] rawParameter : rawParameters) {
-            String name = URLDecoder.decode(rawParameter[0], charset);
-
-            String value = null;
-            if (rawParameter[1] != null) {
-                value = URLDecoder.decode(rawParameter[1], charset);
-            }
-
-            addParameter(name, value);
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns if the request is a form-urlencoded request.
-     */
-    public static final boolean isFormUrlencodedContent(HttpServletRequest request) {
-        String contentType = request.getContentType();
-
-        if (contentType != null && contentType.toLowerCase(Locale.ENGLISH).startsWith(FORM_URLENCODED)) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/PolicyService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/PolicyService.java
deleted file mode 100644
index 6b96cfa..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/PolicyService.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_POLICY_ID;
-
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * Policy Service operations.
- */
-public class PolicyService {
-
-    /**
-     * getAppliedPolicies.
-     */
-    public static class GetAppliedPolicies extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectData> policies = service.getAppliedPolicies(repositoryId, objectId, filter, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONArray jsonPolicies = new JSONArray();
-            if (policies != null) {
-                TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-                for (ObjectData policy : policies) {
-                    jsonPolicies.add(JSONConverter.convert(policy, typeCache, JSONConverter.PropertyMode.OBJECT,
-                            succinct, dateTimeFormat));
-                }
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonPolicies, request, response);
-        }
-    }
-
-    /**
-     * applyPolicy.
-     */
-    public static class ApplyPolicy extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String policyId = getStringParameter(request, PARAM_POLICY_ID);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.applyPolicy(repositoryId, policyId, objectId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, objectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // return object
-            response.setStatus(HttpServletResponse.SC_OK);
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * removePolicy.
-     */
-    public static class RemovePolicy extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String policyId = getStringParameter(request, PARAM_POLICY_ID);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            service.removePolicy(repositoryId, policyId, objectId, null);
-
-            ObjectData object = getSimpleObject(service, repositoryId, objectId);
-            if (object == null) {
-                throw new CmisRuntimeException("Object is null!");
-            }
-
-            // return object
-            response.setStatus(HttpServletResponse.SC_OK);
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RelationshipService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RelationshipService.java
deleted file mode 100644
index 7aa9855..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RelationshipService.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ALLOWABLE_ACTIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_MAX_ITEMS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RELATIONSHIP_DIRECTION;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RENDITION_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SKIP_COUNT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SUB_RELATIONSHIP_TYPES;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TYPE_ID;
-
-import java.math.BigInteger;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-public class RelationshipService {
-
-    /**
-     * getObjectRelationships.
-     */
-    public static class GetObjectRelationships extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            Boolean includeSubRelationshipTypes = getBooleanParameter(request, PARAM_SUB_RELATIONSHIP_TYPES);
-            RelationshipDirection relationshipDirection = getEnumParameter(request, PARAM_RELATIONSHIP_DIRECTION,
-                    RelationshipDirection.class);
-            String typeId = getStringParameter(request, PARAM_TYPE_ID);
-            String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            BigInteger maxItems = getBigIntegerParameter(request, PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, PARAM_SKIP_COUNT);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList relationships = service.getObjectRelationships(repositoryId, objectId,
-                    includeSubRelationshipTypes, relationshipDirection, typeId, renditionFilter,
-                    includeAllowableActions, maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (relationships == null) {
-                throw new CmisRuntimeException("Relationships are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonChildren = JSONConverter.convert(relationships, typeCache,
-                    JSONConverter.PropertyMode.OBJECT, succinct, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonChildren, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RepositoryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RepositoryService.java
deleted file mode 100644
index 8bb965f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RepositoryService.java
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CONTROL_TYPE;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.CONTROL_TYPE_ID;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_DEPTH;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_MAX_ITEMS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_PROPERTY_DEFINITIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SKIP_COUNT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TOKEN;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TYPE_ID;
-
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONValue;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * Repository Service operations.
- */
-public class RepositoryService {
-
-    /**
-     * getRepositories.
-     */
-    public static class GetRepositories extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert request != null;
-            assert response != null;
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<RepositoryInfo> infoDataList = service.getRepositoryInfos(null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject result = new JSONObject();
-            for (RepositoryInfo ri : infoDataList) {
-                String repositoryUrl = compileRepositoryUrl(request, ri.getId()).toString();
-                String rootUrl = compileRootUrl(request, ri.getId()).toString();
-
-                result.put(ri.getId(), JSONConverter.convert(ri, repositoryUrl, rootUrl, true));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(result, request, response);
-        }
-    }
-
-    /**
-     * getRepositoryInfo.
-     */
-    public static class GetRepositoryInfo extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            RepositoryInfo ri = service.getRepositoryInfo(repositoryId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String repositoryUrl = compileRepositoryUrl(request, ri.getId()).toString();
-            String rootUrl = compileRootUrl(request, ri.getId()).toString();
-
-            JSONObject result = new JSONObject();
-            result.put(ri.getId(), JSONConverter.convert(ri, repositoryUrl, rootUrl, true));
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(result, request, response);
-        }
-    }
-
-    /**
-     * getLastResult.
-     */
-    public static class GetLastResult extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            String token = getStringParameter(request, PARAM_TOKEN);
-            String cookieName = getCookieName(token);
-            String cookieValue = null;
-
-            if (request.getCookies() != null) {
-                for (Cookie cookie : request.getCookies()) {
-                    if (cookieName.equals(cookie.getName())) {
-                        cookieValue = IOUtils.decodeURL(cookie.getValue());
-                        break;
-                    }
-                }
-            }
-
-            try {
-                if (cookieValue == null) {
-                    cookieValue = createCookieValue(0, null, CmisInvalidArgumentException.EXCEPTION_NAME,
-                            "Unknown transaction!");
-                } else {
-                    JSONValue.parse(cookieValue);
-                }
-            } catch (Exception pe) {
-                cookieValue = createCookieValue(0, null, CmisRuntimeException.EXCEPTION_NAME, "Cookie pasring error!");
-            }
-
-            deleteCookie(request, response, repositoryId, token);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON((JSONObject) JSONValue.parse(cookieValue), request, response);
-        }
-    }
-
-    /**
-     * getTypeChildren.
-     */
-    public static class GetTypeChildren extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, PARAM_TYPE_ID);
-            boolean includePropertyDefinitions = getBooleanParameter(request, PARAM_PROPERTY_DEFINITIONS, false);
-            BigInteger maxItems = getBigIntegerParameter(request, PARAM_MAX_ITEMS);
-            BigInteger skipCount = getBigIntegerParameter(request, PARAM_SKIP_COUNT);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinitionList typeList = service.getTypeChildren(repositoryId, typeId, includePropertyDefinitions,
-                    maxItems, skipCount, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject jsonTypeList = JSONConverter.convert(typeList, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonTypeList, request, response);
-        }
-    }
-
-    public static class GetTypeDescendants extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, PARAM_TYPE_ID);
-            BigInteger depth = getBigIntegerParameter(request, PARAM_DEPTH);
-            boolean includePropertyDefinitions = getBooleanParameter(request, PARAM_PROPERTY_DEFINITIONS, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<TypeDefinitionContainer> typeTree = service.getTypeDescendants(repositoryId, typeId, depth,
-                    includePropertyDefinitions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (typeTree == null) {
-                throw new CmisRuntimeException("Type tree is null!");
-            }
-
-            JSONArray jsonTypeTree = new JSONArray();
-            for (TypeDefinitionContainer container : typeTree) {
-                jsonTypeTree.add(JSONConverter.convert(container, dateTimeFormat));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonTypeTree, request, response);
-        }
-    }
-
-    /**
-     * getTypeDefinition.
-     */
-    public static class GetTypeDefinition extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, PARAM_TYPE_ID);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition type = service.getTypeDefinition(repositoryId, typeId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject jsonType = JSONConverter.convert(type, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonType, request, response);
-        }
-    }
-
-    /**
-     * createType.
-     */
-    public static class CreateType extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeStr = getStringParameter(request, CONTROL_TYPE);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            if (typeStr == null) {
-                throw new CmisInvalidArgumentException("Type definition missing!");
-            }
-
-            // convert type definition
-            JSONParser parser = new JSONParser();
-            Object typeJson = parser.parse(typeStr);
-            if (!(typeJson instanceof Map)) {
-                throw new CmisInvalidArgumentException("Invalid type definition!");
-            }
-
-            @SuppressWarnings("unchecked")
-            TypeDefinition typeIn = JSONConverter.convertTypeDefinition((Map<String, Object>) typeJson);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition typeOut = service.createType(repositoryId, typeIn, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject jsonType = JSONConverter.convert(typeOut, dateTimeFormat);
-
-            // set headers
-            response.setStatus(HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileTypeLocationUrl(request, repositoryId, typeOut.getId()));
-
-            writeJSON(jsonType, request, response);
-        }
-    }
-
-    /**
-     * updateType.
-     */
-    public static class UpdateType extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeStr = getStringParameter(request, CONTROL_TYPE);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            if (typeStr == null) {
-                throw new CmisInvalidArgumentException("Type definition missing!");
-            }
-
-            // convert type definition
-            JSONParser parser = new JSONParser();
-            Object typeJson = parser.parse(typeStr);
-            if (!(typeJson instanceof Map)) {
-                throw new CmisInvalidArgumentException("Invalid type definition!");
-            }
-
-            @SuppressWarnings("unchecked")
-            TypeDefinition typeIn = JSONConverter.convertTypeDefinition((Map<String, Object>) typeJson);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition typeOut = service.updateType(repositoryId, typeIn, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            JSONObject jsonType = JSONConverter.convert(typeOut, dateTimeFormat);
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonType, request, response);
-        }
-    }
-
-    /**
-     * deleteType.
-     */
-    public static class DeleteType extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String typeId = getStringParameter(request, CONTROL_TYPE_ID);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteType(repositoryId, typeId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeEmpty(request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ServerTypeCacheImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ServerTypeCacheImpl.java
deleted file mode 100644
index 673d4bb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ServerTypeCacheImpl.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * Temporary type cache used for one call.
- */
-public class ServerTypeCacheImpl implements TypeCache {
-
-    private final String repositoryId;
-    private final CmisService service;
-    private final Map<String, TypeDefinition> typeDefinitions;
-    private final Map<String, TypeDefinition> objectToTypeDefinitions;
-
-    public ServerTypeCacheImpl(String repositoryId, CmisService service) {
-        this.repositoryId = repositoryId;
-        this.service = service;
-        typeDefinitions = new HashMap<String, TypeDefinition>();
-        objectToTypeDefinitions = new HashMap<String, TypeDefinition>();
-    }
-
-    public TypeDefinition getTypeDefinition(String typeId) {
-        TypeDefinition type = typeDefinitions.get(typeId);
-        if (type == null) {
-            type = service.getTypeDefinition(repositoryId, typeId, null);
-            if (type != null) {
-                typeDefinitions.put(type.getId(), type);
-            }
-        }
-
-        return type;
-    }
-
-    public TypeDefinition reloadTypeDefinition(String typeId) {
-        TypeDefinition type = service.getTypeDefinition(repositoryId, typeId, null);
-        if (type != null) {
-            typeDefinitions.put(type.getId(), type);
-        }
-
-        return type;
-    }
-
-    public TypeDefinition getTypeDefinitionForObject(String objectId) {
-        TypeDefinition type = objectToTypeDefinitions.get(objectId);
-        if (type == null) {
-            ObjectData obj = service.getObject(repositoryId, objectId,
-                    "cmis:objectId,cmis:objectTypeId,cmis:baseTypeId,cmis:secondaryObjectTypeIds", false,
-                    IncludeRelationships.NONE, "cmis:none", false, false, null);
-
-            if (obj != null && obj.getProperties() != null) {
-                PropertyData<?> typeProp = obj.getProperties().getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-                if (typeProp instanceof PropertyId) {
-                    String typeId = ((PropertyId) typeProp).getFirstValue();
-                    if (typeId != null) {
-                        type = getTypeDefinition(typeId);
-                    }
-                }
-
-                PropertyData<?> secTypeProp = obj.getProperties().getProperties()
-                        .get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-                if ((secTypeProp instanceof PropertyId) && (secTypeProp.getValues() != null)) {
-                    for (String secTypeId : ((PropertyId) secTypeProp).getValues()) {
-                        if (secTypeId != null) {
-                            getTypeDefinition(secTypeId);
-                        }
-                    }
-                }
-            }
-
-            objectToTypeDefinitions.put(objectId, type);
-        }
-
-        return type;
-    }
-
-    public PropertyDefinition<?> getPropertyDefinition(String propId) {
-        for (TypeDefinition typeDef : typeDefinitions.values()) {
-            PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(propId);
-            if (propDef != null) {
-                return propDef;
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/VersioningService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/VersioningService.java
deleted file mode 100644
index 7775140..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/VersioningService.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser;
-
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ALLOWABLE_ACTIONS;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_CHECKIN_COMMENT;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_MAJOR;
-import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TOKEN;
-
-import java.util.Collections;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
-import org.apache.chemistry.opencmis.commons.impl.TypeCache;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * Versioning Service operations.
- */
-public class VersioningService {
-
-    /**
-     * checkOut.
-     */
-    public static class CheckOut extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            Holder<String> checkOutId = new Holder<String>(objectId);
-            service.checkOut(repositoryId, checkOutId, null, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            ObjectData object = getSimpleObject(service, repositoryId, checkOutId.getValue());
-            if (object == null) {
-                throw new CmisRuntimeException("PWC is null!");
-            }
-
-            // return object
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, object.getId()));
-
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * checkOut.
-     */
-    public static class CancelCheckOut extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.cancelCheckOut(repositoryId, objectId, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeEmpty(request, response);
-        }
-    }
-
-    /**
-     * checkIn.
-     */
-    public static class CheckIn extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String typeId = ((BrowserCallContextImpl) context).getTypeId();
-            Boolean major = getBooleanParameter(request, PARAM_MAJOR);
-            String checkinComment = getStringParameter(request, PARAM_CHECKIN_COMMENT);
-            String token = getStringParameter(request, PARAM_TOKEN);
-            boolean succinct = getBooleanParameter(request, Constants.CONTROL_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            ControlParser cp = new ControlParser(request);
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            Holder<String> objectIdHolder = new Holder<String>(objectId);
-            ContentStream contentStream = createContentStream(request);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.checkIn(repositoryId, objectIdHolder, major,
-                    createUpdateProperties(cp, typeId, null, Collections.singletonList(objectId), typeCache),
-                    contentStream, checkinComment, createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
-
-            ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
-            if (object == null) {
-                throw new CmisRuntimeException("New version is null!");
-            }
-
-            // return object
-            JSONObject jsonObject = JSONConverter.convert(object, typeCache, JSONConverter.PropertyMode.OBJECT,
-                    succinct, dateTimeFormat);
-
-            // set headers
-            setStatus(request, response, HttpServletResponse.SC_CREATED);
-            response.setHeader("Location", compileObjectLocationUrl(request, repositoryId, object.getId()));
-
-            setCookie(request, response, repositoryId, token,
-                    createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
-
-            writeJSON(jsonObject, request, response);
-        }
-    }
-
-    /**
-     * getAllVersions.
-     */
-    public static class GetAllVersions extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            assert context != null;
-            assert service != null;
-            assert repositoryId != null;
-            assert request != null;
-            assert response != null;
-
-            // get parameters
-            String objectId = ((BrowserCallContextImpl) context).getObjectId();
-            String filter = getStringParameter(request, PARAM_FILTER);
-            Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
-            boolean succinct = getBooleanParameter(request, Constants.PARAM_SUCCINCT, false);
-            DateTimeFormat dateTimeFormat = getDateTimeFormatParameter(request);
-
-            // execute
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<ObjectData> versions = service.getAllVersions(repositoryId, objectId, null, filter,
-                    includeAllowableActions, null);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (versions == null) {
-                throw new CmisRuntimeException("Versions are null!");
-            }
-
-            TypeCache typeCache = new ServerTypeCacheImpl(repositoryId, service);
-            JSONArray jsonVersions = new JSONArray();
-            for (ObjectData version : versions) {
-                jsonVersions.add(JSONConverter.convert(version, typeCache, JSONConverter.PropertyMode.OBJECT, succinct,
-                        dateTimeFormat));
-            }
-
-            response.setStatus(HttpServletResponse.SC_OK);
-            writeJSON(jsonVersions, request, response);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/AbstractSimpleTokenHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/AbstractSimpleTokenHandler.java
deleted file mode 100644
index 0d4dc8e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/AbstractSimpleTokenHandler.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser.token;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.Locale;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
-import org.apache.chemistry.opencmis.commons.impl.json.JSONStreamAware;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener;
-import org.apache.chemistry.opencmis.server.impl.browser.AbstractBrowserServiceCall;
-
-public abstract class AbstractSimpleTokenHandler implements TokenHandler, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    // return 10 tokens per batch
-    private static final int TOKEN_BATCH_SIZE = 10;
-
-    private static final String ATTR_PREFIX = "org.apache.chemistry.opencmis.";
-
-    private static final String JSP_PATH = "/WEB-INF/token/";
-    private static final String JSP_SCRIPT = "cmis.js.jsp";
-    private static final String JSP_IFRAME = "repository.jsp";
-    private static final String JSP_LOGIN = "login.jsp";
-
-    private static final String PARAM_LOGIN = "login";
-
-    private static final String LOGIN_SCRIPT = "script";
-    private static final String LOGIN_CONTROLLER = "controller";
-    private static final String LOGIN_LOGIN = "login";
-    private static final String LOGIN_LOGOUT = "logout";
-    private static final String LOGIN_TOKEN = "token";
-
-    private static final UrlServiceCall URL_SERVICE_CALL = new UrlServiceCall();
-
-    public void service(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) {
-
-        String repositoryId = null; // TODO: determine repository id
-        String login = request.getParameter(PARAM_LOGIN);
-        try {
-            if (LOGIN_TOKEN.equals(login)) {
-                sendTokens(servletContext, request, response);
-            } else if (LOGIN_SCRIPT.equals(login)) {
-                sendJavaScript(servletContext, request, response, repositoryId);
-            } else if (LOGIN_CONTROLLER.equals(login)) {
-                sendControllerContent(servletContext, request, response, repositoryId);
-            } else if (LOGIN_LOGIN.equals(login)) {
-                login(servletContext, request, response, repositoryId);
-            } else if (LOGIN_LOGOUT.equals(login)) {
-                logout(servletContext, request, response);
-            } else {
-                throw new CmisObjectNotFoundException();
-            }
-        } catch (Exception e) {
-            if (e instanceof CmisBaseException) {
-                throw (CmisBaseException) e;
-            } else {
-                throw new CmisRuntimeException("Internal Error!", e);
-            }
-        }
-    }
-
-    /**
-     * Sends a batch of new tokens.
-     */
-    protected void sendTokens(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response)
-            throws IOException {
-        JSONArray result = new JSONArray();
-
-        if (!SimpleTokenHandlerSessionHelper.checkApplicationKey(request)) {
-            // PARANOIA: remove the application key if the presented key is
-            // wrong, don't allow a second attempt
-            String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(SimpleTokenHandlerSessionHelper
-                    .getKey(request));
-            if (appId != null) {
-                SimpleTokenHandlerSessionHelper.removeApplicationKey(request, appId);
-            }
-        } else {
-            // generate a batch of tokens
-            String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(SimpleTokenHandlerSessionHelper
-                    .getKey(request));
-
-            for (int i = 0; i < TOKEN_BATCH_SIZE; i++) {
-                // create token
-                String token = SimpleTokenHandlerSessionHelper.generateKey(appId);
-
-                // put token into session and it to the response
-                SimpleTokenHandlerSessionHelper.addToken(request, token);
-                result.add(token);
-            }
-        }
-
-        printJSON(response, result);
-    }
-
-    /**
-     * Sends the JavaScript file for web clients.
-     */
-    protected void sendJavaScript(ServletContext servletContext, HttpServletRequest request,
-            HttpServletResponse response, String repositoryId) throws IOException {
-
-        UrlBuilder baseUrl = URL_SERVICE_CALL.compileBaseUrl(request, repositoryId);
-        URL url = new URL(baseUrl.toString());
-
-        request.setAttribute(ATTR_PREFIX + "domain", encodeJavaScriptString(url.getProtocol() + "://" + url.getHost()
-                + (url.getPort() > -1 ? ":" + url.getPort() : "")));
-        request.setAttribute(ATTR_PREFIX + "serviceUrl", encodeJavaScriptString(baseUrl.toString()));
-        request.setAttribute(ATTR_PREFIX + "iframeUrl",
-                encodeJavaScriptString(baseUrl.addParameter(PARAM_LOGIN, LOGIN_CONTROLLER).toString()));
-
-        response.setContentType("application/json; charset=UTF-8");
-
-        RequestDispatcher dispatcher = servletContext.getRequestDispatcher(JSP_PATH + JSP_SCRIPT);
-        try {
-            dispatcher.include(request, response);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Internal error!", e);
-        }
-    }
-
-    /**
-     * Sends the IFrame content.
-     */
-    protected void sendControllerContent(ServletContext servletContext, HttpServletRequest request,
-            HttpServletResponse response, String repositoryId) throws IOException {
-
-        response.setContentType("text/html; charset=UTF-8");
-
-        request.setAttribute(
-                ATTR_PREFIX + "loginUrl",
-                encodeJavaScriptString(URL_SERVICE_CALL.compileBaseUrl(request, repositoryId)
-                        .addParameter(PARAM_LOGIN, "").toString()));
-
-        RequestDispatcher dispatcher = servletContext.getRequestDispatcher(JSP_PATH + JSP_IFRAME);
-        try {
-            dispatcher.include(request, response);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Internal error!", e);
-        }
-    }
-
-    /**
-     * Handles logins.
-     */
-    protected void login(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response,
-            String repositoryId) throws IOException {
-        if ("GET".equals(request.getMethod())) {
-            showLoginForm(servletContext, request, response, null);
-        } else if ("POST".equals(request.getMethod())) {
-            authenticate(servletContext, request, response, repositoryId);
-        } else {
-            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-        }
-    }
-
-    protected void showLoginForm(ServletContext servletContext, HttpServletRequest request,
-            HttpServletResponse response, String errorMessage) throws IOException {
-
-        String formKey = SimpleTokenHandlerSessionHelper.getKey(request);
-        String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(formKey);
-        URL appUrl = SimpleTokenHandlerSessionHelper.getApplicationURL(request, appId);
-
-        request.setAttribute(ATTR_PREFIX + "formkey", formKey);
-        request.setAttribute(ATTR_PREFIX + "error", errorMessage);
-        request.setAttribute(ATTR_PREFIX + "appurl", encodeHTMLString(appUrl.toString()));
-
-        response.setContentType("text/html; charset=UTF-8");
-
-        RequestDispatcher dispatcher = servletContext.getRequestDispatcher(JSP_PATH + JSP_LOGIN);
-        try {
-            dispatcher.include(request, response);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Internal error!", e);
-        }
-    }
-
-    protected void authenticate(ServletContext servletContext, HttpServletRequest request,
-            HttpServletResponse response, String repositoryId) throws IOException {
-        if (SimpleTokenHandlerSessionHelper.checkFormKey(request)) {
-            // login form returns
-
-            String trustapp = request.getParameter(SimpleTokenHandlerSessionHelper.PARAM_TRUSTAPP);
-            String user = request.getParameter(SimpleTokenHandlerSessionHelper.PARAM_USER);
-            String password = request.getParameter(SimpleTokenHandlerSessionHelper.PARAM_PASSWORD);
-
-            if (!"1".equals(trustapp)) {
-                String error = "Please confirm that you trust the application!";
-                showLoginForm(servletContext, request, response, error);
-                return;
-            }
-
-            if (!authenticate(servletContext, request, response, user, password)) {
-                String error = "Invalid credentials!";
-                showLoginForm(servletContext, request, response, error);
-                return;
-            }
-
-            // authentication successful -> create application key and
-            // forward to application
-            String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(SimpleTokenHandlerSessionHelper
-                    .getKey(request));
-            String appKey = SimpleTokenHandlerSessionHelper.generateKey(appId);
-            SimpleTokenHandlerSessionHelper.setApplicationKey(request, appKey);
-            SimpleTokenHandlerSessionHelper.setUser(request, appId, user);
-            SimpleTokenHandlerSessionHelper.removeFormKey(request, appId);
-
-            URL appURL = SimpleTokenHandlerSessionHelper.getApplicationURL(request, appId);
-
-            response.sendRedirect(response.encodeRedirectURL(appURL.toString()));
-
-            return;
-        }
-
-        // check URL
-        String url = request.getParameter(SimpleTokenHandlerSessionHelper.PARAM_URL);
-
-        if (url == null || url.trim().length() < 8 || !url.toLowerCase(Locale.ENGLISH).startsWith("http")) {
-            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-
-        URL appURL = null;
-        try {
-            appURL = new URL(url);
-        } catch (Exception e) {
-            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-
-        // check login key
-        String loginKey = request.getParameter(SimpleTokenHandlerSessionHelper.PARAM_KEY);
-
-        if (loginKey == null || loginKey.trim().length() == 0) {
-            // no login key set -> generate one and return it
-
-            String appId = SimpleTokenHandlerSessionHelper.generateAppId();
-            loginKey = SimpleTokenHandlerSessionHelper.generateKey(appId);
-            String formKey = SimpleTokenHandlerSessionHelper.generateKey(appId);
-
-            SimpleTokenHandlerSessionHelper.setLoginKey(request, loginKey, formKey, appURL);
-
-            String formURL = encodeJavaScriptString(URL_SERVICE_CALL.compileBaseUrl(request, repositoryId)
-                    .addParameter(PARAM_LOGIN, LOGIN_LOGIN)
-                    .addParameter(SimpleTokenHandlerSessionHelper.PARAM_KEY, formKey).toString());
-
-            JSONObject result = new JSONObject();
-            result.put("ok", 0);
-            result.put("key", loginKey);
-            result.put("url", formURL);
-
-            printJSON(response, result);
-
-            return;
-        }
-
-        String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(SimpleTokenHandlerSessionHelper
-                .getKey(request));
-        String appKey = SimpleTokenHandlerSessionHelper.getApplicationKey(request, appId);
-
-        // check if login key fits
-        if (appKey == null || !SimpleTokenHandlerSessionHelper.checkLoginKey(request)) {
-            // PARANOIA: remove keys, don't allow a second attempt
-            SimpleTokenHandlerSessionHelper.removeLoginKey(request, appId);
-            SimpleTokenHandlerSessionHelper.removeApplicationKey(request, appId);
-            response.sendError(400);
-            return;
-        }
-
-        // remove login key - it should not be reused
-        SimpleTokenHandlerSessionHelper.removeLoginKey(request, appId);
-
-        // return application key
-        JSONObject result = new JSONObject();
-        result.put("ok", 1);
-        result.put("key", appKey);
-
-        printJSON(response, result);
-    }
-
-    protected abstract boolean authenticate(final ServletContext servletContext, final HttpServletRequest request,
-            final HttpServletResponse response, String user, String password);
-
-    /**
-     * Handles logouts.
-     */
-    protected void logout(final ServletContext servletContext, final HttpServletRequest request,
-            final HttpServletResponse response) throws IOException {
-        String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(SimpleTokenHandlerSessionHelper
-                .getKey(request));
-        if (appId != null) {
-            SimpleTokenHandlerSessionHelper.removeApplicationKey(request, appId);
-        }
-
-        JSONObject result = new JSONObject();
-        result.put("ok", 1);
-
-        printJSON(response, result);
-    }
-
-    protected CmisServiceFactory getCmisServiceFactory(final ServletContext servletContext) {
-        CmisServiceFactory factory = (CmisServiceFactory) servletContext
-                .getAttribute(CmisRepositoryContextListener.SERVICES_FACTORY);
-
-        if (factory == null) {
-            throw new CmisRuntimeException("Service factory not available! Configuration problem?");
-        }
-
-        return factory;
-    }
-
-    protected void printJSON(final HttpServletResponse response, final JSONStreamAware json) throws IOException {
-        response.setStatus(HttpServletResponse.SC_OK);
-        response.setContentType("application/json; charset=utf-8");
-        response.addHeader("Cache-Control", "private, max-age=0");
-
-        PrintWriter pw = response.getWriter();
-        json.writeJSONString(pw);
-        pw.flush();
-    }
-
-    protected String encodeJavaScriptString(final String s) {
-        if (s == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            if (c == '\'') {
-                sb.append("\\'");
-            } else {
-                sb.append(c);
-            }
-        }
-
-        return sb.toString();
-    }
-
-    protected String encodeHTMLString(final String s) {
-        if (s == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-
-            if (c == '\t' || c == '\n' || c == '\r' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
-                    || (c >= '0' && c <= '9') || c == ' ' || c == '.' || c == ',' || c == '-' || c == '_') {
-                sb.append(c);
-            } else if (c <= 0x1f || (c >= 0x7f && c <= 0x9f)) {
-                sb.append(' ');
-            } else if (c == '&') {
-                sb.append("&amp;");
-            } else if (c == '"') {
-                sb.append("&quot;");
-            } else if (c == '<') {
-                sb.append("&lt;");
-            } else if (c == '>') {
-                sb.append("&gt;");
-            } else {
-                sb.append("&#x" + Integer.toHexString(c) + ";");
-            }
-        }
-
-        return sb.toString();
-    }
-
-    static class UrlServiceCall extends AbstractBrowserServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            // no implementation
-
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandler.java
deleted file mode 100644
index 509d7a0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser.token;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
-
-public class SimpleTokenHandler extends AbstractSimpleTokenHandler {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    protected boolean authenticate(final ServletContext servletContext, final HttpServletRequest request,
-            final HttpServletResponse response, final String user, final String password) {
-
-        // get the service factory
-        CmisServiceFactory factory = getCmisServiceFactory(servletContext);
-
-        // build a call context
-        CallContextImpl context = new CallContextImpl(CallContext.BINDING_BROWSER, CmisVersion.CMIS_1_1, null, null,
-                null, null, null, null);
-        context.put(CallContext.USERNAME, user);
-        context.put(CallContext.PASSWORD, password);
-
-        // call getRepositoryInfos() method
-        CmisService service = null;
-        try {
-            // get the service
-            service = factory.getService(context);
-
-            try {
-                service.getRepositoryInfos(null);
-            } catch (Exception e) {
-                // we interpret all exceptions as a login failure
-                return false;
-            }
-        } finally {
-            if (service != null) {
-                service.close();
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandlerSessionHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandlerSessionHelper.java
deleted file mode 100644
index 0658bc5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/SimpleTokenHandlerSessionHelper.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser.token;
-
-import java.net.URL;
-import java.security.SecureRandom;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-public class SimpleTokenHandlerSessionHelper {
-
-    public static final String ATTR_CMIS_USER = "cmis-token.user";
-    public static final String ATTR_CMIS_AUTH_TIMESTAMP = "cmis-token.timestamp";
-    public static final String ATTR_CMIS_TOKEN = "cmis-token.token";
-    public static final String ATTR_CMIS_LOGIN_KEY = "cmis-token.token.loginkey";
-    public static final String ATTR_CMIS_FORM_KEY = "cmis-token.formkey";
-    public static final String ATTR_CMIS_APP_URL = "cmis-token.appurl";
-    public static final String ATTR_CMIS_APP_KEY = "cmis-token.appkey";
-
-    public static final String ATTR_SEPARATOR = "\n";
-
-    public static final String PARAM_KEY = "key";
-    public static final String PARAM_TOKEN = "token";
-    public static final String PARAM_URL = "url";
-    public static final String PARAM_USER = "user";
-    public static final String PARAM_PASSWORD = "password";
-    public static final String PARAM_TRUSTAPP = "trustapp";
-
-    public static final int APP_ID_BYTES = 10;
-    public static final int APP_ID_LENGTH = APP_ID_BYTES * 2;
-    public static final int KEY_BYTES = 20;
-    public static final int KEY_LENGTH = KEY_BYTES * 2;
-
-    public static String getApplicationIdFromKey(String key) {
-        if (key == null || key.length() != APP_ID_LENGTH + KEY_LENGTH) {
-            return null;
-        }
-
-        return key.substring(0, APP_ID_LENGTH);
-    }
-
-    public static String getLoginKey(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return null;
-        }
-
-        return (String) hs.getAttribute(ATTR_CMIS_LOGIN_KEY + appId);
-    }
-
-    public static void setLoginKey(HttpServletRequest request, String loginKey, String formKey, URL appURL) {
-        HttpSession hs = request.getSession();
-
-        String appId = getApplicationIdFromKey(loginKey);
-
-        hs.setAttribute(ATTR_CMIS_LOGIN_KEY + appId, loginKey);
-        hs.setAttribute(ATTR_CMIS_FORM_KEY + appId, formKey);
-        hs.setAttribute(ATTR_CMIS_APP_URL + appId, appURL);
-    }
-
-    public static boolean checkLoginKey(HttpServletRequest request) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return false;
-        }
-
-        String key = getKey(request);
-
-        if (key == null) {
-            return false;
-        }
-
-        String appId = getApplicationIdFromKey(key);
-        if (appId == null) {
-            return false;
-        }
-
-        return key.equals(hs.getAttribute(ATTR_CMIS_LOGIN_KEY + appId));
-    }
-
-    public static void removeLoginKey(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return;
-        }
-
-        hs.removeAttribute(ATTR_CMIS_LOGIN_KEY + appId);
-    }
-
-    public static boolean checkFormKey(HttpServletRequest request) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return false;
-        }
-
-        String formKey = getKey(request);
-
-        if (formKey == null) {
-            return false;
-        }
-
-        String appId = getApplicationIdFromKey(formKey);
-        if (appId == null) {
-            return false;
-        }
-
-        return formKey.equals(hs.getAttribute(ATTR_CMIS_FORM_KEY + appId));
-    }
-
-    public static void removeFormKey(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return;
-        }
-
-        hs.removeAttribute(ATTR_CMIS_FORM_KEY + appId);
-    }
-
-    public static String getUser(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return null;
-        }
-
-        return (String) hs.getAttribute(ATTR_CMIS_USER + appId);
-    }
-
-    public static void setUser(HttpServletRequest request, String appId, String user) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return;
-        }
-
-        hs.setAttribute(ATTR_CMIS_USER + appId, user);
-        hs.setAttribute(ATTR_CMIS_AUTH_TIMESTAMP + appId, System.currentTimeMillis());
-    }
-
-    public static String getApplicationKey(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return null;
-        }
-
-        return (String) hs.getAttribute(ATTR_CMIS_APP_KEY + appId);
-    }
-
-    public static void setApplicationKey(HttpServletRequest request, String key) {
-        HttpSession hs = request.getSession();
-
-        String appId = getApplicationIdFromKey(key);
-
-        hs.setAttribute(ATTR_CMIS_APP_KEY + appId, key);
-    }
-
-    public static boolean checkApplicationKey(HttpServletRequest request) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return false;
-        }
-
-        String key = getKey(request);
-
-        if (key == null) {
-            return false;
-        }
-
-        String appId = getApplicationIdFromKey(key);
-        if (appId == null) {
-            return false;
-        }
-
-        return key.equals(hs.getAttribute(ATTR_CMIS_APP_KEY + appId));
-    }
-
-    public static void removeApplicationKey(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return;
-        }
-
-        hs.removeAttribute(ATTR_CMIS_APP_KEY + appId);
-        hs.removeAttribute(ATTR_CMIS_APP_URL + appId);
-        hs.removeAttribute(ATTR_CMIS_USER + appId);
-        hs.removeAttribute(ATTR_CMIS_AUTH_TIMESTAMP + appId);
-    }
-
-    public static URL getApplicationURL(HttpServletRequest request, String appId) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return null;
-        }
-
-        return (URL) hs.getAttribute(ATTR_CMIS_APP_URL + appId);
-    }
-
-    /**
-     * Retrieves the token from the requests and tests if this token belongs to
-     * the current session. If the token is associated with the session, the
-     * token will be removed from the session and cannot be reused again.
-     * 
-     * @return <code>true</code> if the request contains a token and this token
-     *         belongs to the session, <code>false</code> otherwise
-     */
-    public static boolean testAndInvalidateToken(HttpServletRequest request) {
-        HttpSession hs = request.getSession(false);
-        if (hs == null) {
-            return false;
-        }
-
-        String token = getToken(request);
-
-        if (token == null) {
-            return false;
-        }
-
-        String tokenKey = ATTR_CMIS_TOKEN + token;
-
-        Long tokenCreationTimestamp = (Long) hs.getAttribute(tokenKey);
-        if (tokenCreationTimestamp != null) {
-            // if the token exists, remove it
-            hs.removeAttribute(tokenKey);
-
-            // PARANOIA: don't accept tokens that are older than 8 hours
-            return System.currentTimeMillis() - tokenCreationTimestamp < 8 * 60 * 60 * 1000;
-        }
-
-        return false;
-    }
-
-    /**
-     * Adds a token to the session.
-     */
-    public static void addToken(HttpServletRequest request, String token) {
-        HttpSession hs = request.getSession();
-
-        String tokenKey = ATTR_CMIS_TOKEN + token;
-
-        // set the token and retain creation timestamp
-        hs.setAttribute(tokenKey, System.currentTimeMillis());
-    }
-
-    /**
-     * Gets the key parameter from the request and checks its validity.
-     */
-    public static String getKey(HttpServletRequest request) {
-        String key = request.getParameter(PARAM_KEY);
-        return normalizeKey(key);
-    }
-
-    /**
-     * Gets the domain parameter from the request and checks its validity.
-     */
-    public static String getToken(HttpServletRequest request) {
-        String token = request.getParameter(PARAM_TOKEN);
-        return normalizeKey(token);
-    }
-
-    public static String normalizeKey(String key) {
-        if (key == null) {
-            return null;
-        }
-
-        key = key.trim();
-
-        if (key.length() != APP_ID_LENGTH + KEY_LENGTH || !key.matches("^[0-9a-f]+$")) {
-            return null;
-        }
-
-        return key;
-    }
-
-    public static String generateAppId() {
-        SecureRandom random = new SecureRandom();
-
-        byte[] bytes = new byte[APP_ID_BYTES];
-        random.nextBytes(bytes);
-
-        StringBuilder sb = new StringBuilder();
-
-        for (byte b : bytes) {
-            String s = Integer.toHexString(b & 0xff);
-            if (s.length() < 2) {
-                sb.append('0');
-            }
-            sb.append(s);
-        }
-
-        return sb.toString();
-    }
-
-    public static String generateKey(String appId) {
-        SecureRandom random = new SecureRandom();
-
-        byte[] bytes = new byte[KEY_BYTES];
-        random.nextBytes(bytes);
-
-        StringBuilder sb = new StringBuilder(appId);
-
-        for (byte b : bytes) {
-            String s = Integer.toHexString(b & 0xff);
-            if (s.length() < 2) {
-                sb.append('0');
-            }
-            sb.append(s);
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenCallContextHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenCallContextHandler.java
deleted file mode 100644
index 5a0406c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenCallContextHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser.token;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.server.shared.BasicAuthCallContextHandler;
-import org.apache.chemistry.opencmis.server.shared.HttpUtils;
-
-public class TokenCallContextHandler extends BasicAuthCallContextHandler implements TokenHandler {
-
-    private static final long serialVersionUID = 1L;
-
-    private final TokenHandler tokenHandler;
-
-    /**
-     * Constructor.
-     */
-    public TokenCallContextHandler() {
-        tokenHandler = new SimpleTokenHandler();
-    }
-
-    public Map<String, String> getCallContextMap(HttpServletRequest request) {
-        Map<String, String> result = new HashMap<String, String>();
-
-        Map<String, String> basicAuthMap = super.getCallContextMap(request);
-        if (basicAuthMap != null && !basicAuthMap.isEmpty()) {
-            result.putAll(basicAuthMap);
-        }
-
-        // lastResult must always provide an old token
-        // -> don't check the token
-        boolean isLastResultRequest = "lastresult".equalsIgnoreCase(HttpUtils.getStringParameter(request,
-                Constants.PARAM_SELECTOR));
-
-        if (!isLastResultRequest) {
-            // if a token is provided, check it
-            if (request.getParameter(Constants.PARAM_TOKEN) != null) {
-                if (SimpleTokenHandlerSessionHelper.testAndInvalidateToken(request)) {
-                    String token = SimpleTokenHandlerSessionHelper.getToken(request);
-                    String appId = SimpleTokenHandlerSessionHelper.getApplicationIdFromKey(token);
-                    result.put(CallContext.USERNAME, SimpleTokenHandlerSessionHelper.getUser(request, appId));
-                    result.put(CallContext.PASSWORD, null);
-                } else {
-                    throw new CmisPermissionDeniedException("Invalid token!");
-                }
-            }
-
-            if (!result.containsKey(CallContext.USERNAME)) {
-                // neither basic authentication nor token authentication have
-                // returned a username -> reject request
-                throw new CmisPermissionDeniedException("No authentication!");
-            }
-        }
-
-        return result;
-    }
-
-    public void service(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) {
-        tokenHandler.service(servletContext, request, response);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenHandler.java
deleted file mode 100644
index c10974c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/TokenHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.browser.token;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public interface TokenHandler {
-
-    void service(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/package.html b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/package.html
deleted file mode 100644
index b93a845..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/token/package.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!-- 
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
- -->
-<html>
-<head>
-<!--
- JavaDoc package.html
--->
-</head>
-<body>
-CMIS 1.1 Browser Binding Token Sample Implementation.
-
-<p>
-This package contains a sample implementation of the token handling
-described in the CMIS 1.1 specification. This is sample code and not
-indented for productive use. It has to be adapted or to be replaced
-by repository specific code.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyService.java
deleted file mode 100644
index f2c3634..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyService.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.dummy;
-
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-
-/**
- * Simplest Repository Service implementation.
- */
-public class DummyService extends AbstractCmisService {
-
-    private final RepositoryInfoImpl fRepInfo;
-
-    public DummyService(String id, String name) {
-        fRepInfo = new RepositoryInfoImpl();
-
-        fRepInfo.setId(id);
-        fRepInfo.setName(name);
-        fRepInfo.setDescription(name);
-        fRepInfo.setCmisVersionSupported("1.0");
-        fRepInfo.setRootFolder("root");
-
-        fRepInfo.setVendorName("OpenCMIS");
-        fRepInfo.setProductName("OpenCMIS Server");
-        fRepInfo.setProductVersion("1.0");
-    }
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId,
-            ExtensionsData extension) {
-        if (!fRepInfo.getId().equals(repositoryId)) {
-            throw new CmisObjectNotFoundException(
-                    "A repository with repository id '" + repositoryId
-                            + "' does not exist!");
-        }
-
-        return fRepInfo;
-    }
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return Collections.singletonList((RepositoryInfo) fRepInfo);
-    }
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId,
-            String filter, String orderBy, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems,
-            BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException();
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId,
-            String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException();
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId,
-            String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        throw new CmisNotSupportedException();
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId,
-            String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        throw new CmisNotSupportedException();
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId,
-            ExtensionsData extension) {
-        throw new CmisNotSupportedException();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyServicesFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyServicesFactory.java
deleted file mode 100644
index 344de3b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/DummyServicesFactory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.dummy;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implementation of a repository factory without back-end for test purposes.
- */
-public class DummyServicesFactory extends AbstractServiceFactory {
-
-    private static final String REPOSITORY_ID = "repository.id";
-    private static final String REPOSITORY_ID_DEFAULT = "test-rep";
-
-    private static final String REPOSITORY_NAME = "repository.name";
-    private static final String REPOSITORY_NAME_DEFAULT = "Test Repository";
-
-    private static final Logger LOG = LoggerFactory.getLogger(DummyServicesFactory.class.getName());
-
-    private DummyService service;
-    private String id;
-    private String name;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        // get the id
-        id = parameters.get(REPOSITORY_ID);
-        if ((id == null) || (id.trim().length() == 0)) {
-            id = REPOSITORY_ID_DEFAULT;
-        }
-
-        // get the name
-        name = parameters.get(REPOSITORY_NAME);
-        if ((name == null) || (name.trim().length() == 0)) {
-            name = REPOSITORY_NAME_DEFAULT;
-        }
-
-        // create a repository service
-        service = new DummyService(id, name);
-
-        LOG.info("Initialized dummy repository '" + name + "' (" + id + ")");
-    }
-
-    @Override
-    public void destroy() {
-        LOG.info("Destroyed dummy repository '" + name + "' (" + id + ")");
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        return service;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractService.java
deleted file mode 100644
index d057a9d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractService.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.handler.MessageContext;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisFaultType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumServiceException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService.Progress;
-import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
-import org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener;
-import org.apache.chemistry.opencmis.server.impl.ServerVersion;
-import org.apache.chemistry.opencmis.server.shared.ExceptionHelper;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Node;
-
-/**
- * This class contains operations used by all services.
- */
-public abstract class AbstractService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractService.class);
-
-    public static final String CALL_CONTEXT_MAP = "org.apache.chemistry.opencmis.callcontext";
-
-    /**
-     * Returns the services factory.
-     */
-    protected CmisServiceFactory getServiceFactory(WebServiceContext wsContext) {
-        ServletContext servletContext = (ServletContext) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_CONTEXT);
-
-        // get services factory
-        CmisServiceFactory factory = (CmisServiceFactory) servletContext
-                .getAttribute(CmisRepositoryContextListener.SERVICES_FACTORY);
-
-        if (factory == null) {
-            throw new CmisRuntimeException("Service factory not available! Configuration problem?");
-        }
-
-        HttpServletResponse httpResp = (HttpServletResponse) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_RESPONSE);
-        httpResp.setHeader("Server", ServerVersion.OPENCMIS_SERVER);
-
-        return factory;
-    }
-
-    /**
-     * Creates a CallContext object for the Web Service context.
-     */
-    @SuppressWarnings("unchecked")
-    protected CallContext createContext(WebServiceContext wsContext, CmisServiceFactory factory, String repositoryId) {
-        ServletContext servletContext = (ServletContext) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_CONTEXT);
-        HttpServletRequest request = (HttpServletRequest) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_REQUEST);
-        HttpServletResponse response = (HttpServletResponse) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_RESPONSE);
-
-        CmisVersion cmisVersion = (CmisVersion) request.getAttribute(CmisWebServicesServlet.CMIS_VERSION);
-        if (cmisVersion == null) {
-            throw new CmisRuntimeException("Server configuration issue. CMIS version not set!");
-        }
-
-        TempStoreOutputStreamFactory streamFactoy = TempStoreOutputStreamFactory.newInstance(factory, repositoryId);
-        CallContextImpl context = new CallContextImpl(CallContext.BINDING_WEBSERVICES, cmisVersion, repositoryId,
-                servletContext, request, response, factory, streamFactoy);
-
-        Map<String, List<String>> headers = (Map<String, List<String>>) wsContext.getMessageContext().get(
-                MessageContext.HTTP_REQUEST_HEADERS);
-        if (headers != null) {
-            for (Map.Entry<String, List<String>> header : headers.entrySet()) {
-                if (header.getKey().equalsIgnoreCase("Accept-Language") && header.getValue() != null
-                        && !header.getValue().isEmpty()) {
-                    context.setAcceptLanguage(header.getValue().get(0));
-                    break;
-                }
-            }
-        }
-
-        MessageContext mc = wsContext.getMessageContext();
-        Map<String, String> callContextMap = (Map<String, String>) mc.get(CALL_CONTEXT_MAP);
-        if (callContextMap != null) {
-            for (Map.Entry<String, String> e : callContextMap.entrySet()) {
-                context.put(e.getKey(), e.getValue());
-            }
-        }
-
-        return context;
-    }
-
-    /**
-     * Returns the CMIS version.
-     */
-    protected CmisVersion getCmisVersion(WebServiceContext wsContext) {
-        HttpServletRequest request = (HttpServletRequest) wsContext.getMessageContext().get(
-                MessageContext.SERVLET_REQUEST);
-        return (CmisVersion) request.getAttribute(CmisWebServicesServlet.CMIS_VERSION);
-    }
-
-    /**
-     * Returns the {@link CmisService} object.
-     */
-    protected CmisService getService(WebServiceContext wsContext, String repositoryId) {
-        CmisServiceFactory factory = getServiceFactory(wsContext);
-        CallContext context = createContext(wsContext, factory, repositoryId);
-        return factory.getService(context);
-    }
-
-    /**
-     * Determines if the processing should be stopped before the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopBeforeService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).beforeServiceCall() == Progress.STOP;
-    }
-
-    /**
-     * Determines if the processing should be stopped after the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopAfterService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).afterServiceCall() == Progress.STOP;
-    }
-
-    /**
-     * Closes the service instance.
-     */
-    protected void closeService(CmisService service) {
-        if (service != null) {
-            service.close();
-        }
-    }
-
-    /**
-     * Converts a CMIS exception to the appropriate Web Service exception.
-     */
-    protected CmisException convertException(Exception ex) {
-        CmisFaultType fault = new CmisFaultType();
-        fault.setMessage("Unknown exception");
-        fault.setCode(BigInteger.ZERO);
-        fault.setType(EnumServiceException.RUNTIME);
-
-        if (ex != null) {
-            if (ex instanceof CmisBaseException) {
-                fault.setCode(((CmisBaseException) ex).getCode());
-                fault.setMessage(ex.getMessage());
-
-                if (ex instanceof CmisConstraintException) {
-                    fault.setType(EnumServiceException.CONSTRAINT);
-                } else if (ex instanceof CmisContentAlreadyExistsException) {
-                    fault.setType(EnumServiceException.CONTENT_ALREADY_EXISTS);
-                } else if (ex instanceof CmisFilterNotValidException) {
-                    fault.setType(EnumServiceException.FILTER_NOT_VALID);
-                } else if (ex instanceof CmisInvalidArgumentException) {
-                    fault.setType(EnumServiceException.INVALID_ARGUMENT);
-                } else if (ex instanceof CmisNameConstraintViolationException) {
-                    fault.setType(EnumServiceException.NAME_CONSTRAINT_VIOLATION);
-                } else if (ex instanceof CmisNotSupportedException) {
-                    fault.setType(EnumServiceException.NOT_SUPPORTED);
-                } else if (ex instanceof CmisObjectNotFoundException) {
-                    fault.setType(EnumServiceException.OBJECT_NOT_FOUND);
-                } else if (ex instanceof CmisPermissionDeniedException) {
-                    fault.setType(EnumServiceException.PERMISSION_DENIED);
-                } else if (ex instanceof CmisStorageException) {
-                    LOG.error(ex.getMessage(), ex);
-                    fault.setType(EnumServiceException.STORAGE);
-                } else if (ex instanceof CmisStreamNotSupportedException) {
-                    fault.setType(EnumServiceException.STREAM_NOT_SUPPORTED);
-                } else if (ex instanceof CmisUpdateConflictException) {
-                    fault.setType(EnumServiceException.UPDATE_CONFLICT);
-                } else if (ex instanceof CmisVersioningException) {
-                    fault.setType(EnumServiceException.VERSIONING);
-                } else {
-                    LOG.error(ex.getMessage(), ex);
-                }
-            } else {
-                fault.setMessage("An error occurred!");
-
-                if (ex instanceof IOException) {
-                    LOG.warn(ex.getMessage(), ex);
-                } else {
-                    LOG.error(ex.getMessage(), ex);
-                }
-            }
-
-            Node node = ExceptionHelper.getStacktraceAsNode(ex);
-            if (node != null) {
-                fault.getAny().add(node);
-            }
-        }
-
-        return new CmisException(fault.getMessage(), fault, ex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractUsernameTokenAuthHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractUsernameTokenAuthHandler.java
deleted file mode 100644
index d0e4687..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AbstractUsernameTokenAuthHandler.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAnyAttribute;
-import javax.xml.bind.annotation.XmlAnyElement;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlID;
-import javax.xml.bind.annotation.XmlRegistry;
-import javax.xml.bind.annotation.XmlSchemaType;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlValue;
-import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import javax.xml.namespace.QName;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-public class AbstractUsernameTokenAuthHandler {
-
-    protected static final JAXBContext WSSE_CONTEXT;
-    static {
-        JAXBContext jc = null;
-        try {
-            jc = JAXBContext.newInstance(ObjectFactory.class);
-        } catch (JAXBException e) {
-            e.printStackTrace();
-        }
-        WSSE_CONTEXT = jc;
-    }
-
-    protected static final String WSSE_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
-    protected static final QName WSSE_SECURITY = new QName(WSSE_NS, "Security");
-    protected static final QName WSSE_USERNAME_TOKEN = new QName(WSSE_NS, "UsernameToken");
-    protected static final QName WSSE_PASSWORD = new QName(WSSE_NS, "Password");
-
-    protected static final Set<QName> HEADERS = new HashSet<QName>();
-    static {
-        HEADERS.add(WSSE_SECURITY);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected Map<String, String> extractUsernamePassword(JAXBElement<SecurityHeaderType> sht) {
-        String username = null;
-        String password = null;
-
-        for (Object uno : sht.getValue().getAny()) {
-            if ((uno instanceof JAXBElement) && ((JAXBElement<?>) uno).getValue() instanceof UsernameTokenType) {
-                UsernameTokenType utt = ((JAXBElement<UsernameTokenType>) uno).getValue();
-                username = utt.getUsername().getValue();
-
-                for (Object po : utt.getAny()) {
-                    if ((po instanceof JAXBElement) && ((JAXBElement<?>) po).getValue() instanceof PasswordString) {
-                        password = ((JAXBElement<PasswordString>) po).getValue().getValue();
-                        break;
-                    }
-                }
-
-                break;
-            }
-        }
-
-        Map<String, String> result = null;
-
-        if (username != null) {
-            result = new HashMap<String, String>();
-            result.put(CallContext.USERNAME, username);
-            result.put(CallContext.PASSWORD, password);
-        }
-
-        return result;
-    }
-
-    // --- JAXB classes ---
-
-    @XmlRegistry
-    public static class ObjectFactory {
-
-        public ObjectFactory() {
-        }
-
-        public SecurityHeaderType createSecurityHeaderType() {
-            return new SecurityHeaderType();
-        }
-
-        public UsernameTokenType createUsernameTokenType() {
-            return new UsernameTokenType();
-        }
-
-        public PasswordString createPasswordString() {
-            return new PasswordString();
-        }
-
-        public AttributedString createAttributedString() {
-            return new AttributedString();
-        }
-
-        @XmlElementDecl(namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", name = "Security")
-        public JAXBElement<SecurityHeaderType> createSecurity(SecurityHeaderType value) {
-            return new JAXBElement<SecurityHeaderType>(WSSE_SECURITY, SecurityHeaderType.class, null, value);
-        }
-
-        @XmlElementDecl(namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", name = "UsernameToken")
-        public JAXBElement<UsernameTokenType> createUsernameToken(UsernameTokenType value) {
-            return new JAXBElement<UsernameTokenType>(WSSE_USERNAME_TOKEN, UsernameTokenType.class, null, value);
-        }
-
-        @XmlElementDecl(namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", name = "Password")
-        public JAXBElement<PasswordString> createPassword(PasswordString value) {
-            return new JAXBElement<PasswordString>(WSSE_PASSWORD, PasswordString.class, null, value);
-        }
-
-    }
-
-    @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "SecurityHeaderType", propOrder = { "any" })
-    public static class SecurityHeaderType {
-
-        @XmlAnyElement(lax = true)
-        protected List<Object> any;
-        @XmlAnyAttribute
-        private final Map<QName, String> otherAttributes = new HashMap<QName, String>();
-
-        public List<Object> getAny() {
-            if (any == null) {
-                any = new ArrayList<Object>();
-            }
-            return this.any;
-        }
-
-        public Map<QName, String> getOtherAttributes() {
-            return otherAttributes;
-        }
-
-    }
-
-    @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "UsernameTokenType", propOrder = { "username", "any" })
-    public static class UsernameTokenType {
-
-        @XmlElement(name = "Username", namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", required = true)
-        protected AttributedString username;
-        @XmlAnyElement(lax = true)
-        protected List<Object> any;
-        @XmlAttribute(name = "Id", namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
-        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
-        @XmlID
-        @XmlSchemaType(name = "ID")
-        protected String id;
-        @XmlAnyAttribute
-        private final Map<QName, String> otherAttributes = new HashMap<QName, String>();
-
-        public AttributedString getUsername() {
-            return username;
-        }
-
-        public void setUsername(AttributedString value) {
-            this.username = value;
-        }
-
-        public List<Object> getAny() {
-            if (any == null) {
-                any = new ArrayList<Object>();
-            }
-            return this.any;
-        }
-
-        public String getId() {
-            return id;
-        }
-
-        public void setId(String value) {
-            this.id = value;
-        }
-
-        public Map<QName, String> getOtherAttributes() {
-            return otherAttributes;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "PasswordString")
-    public static class PasswordString extends AttributedString {
-
-        @XmlAttribute(name = "Type")
-        @XmlSchemaType(name = "anyURI")
-        protected String type;
-
-        public String getType() {
-            return type;
-        }
-
-        public void setType(String value) {
-            this.type = value;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "AttributedString", propOrder = { "value" })
-    @XmlSeeAlso({ PasswordString.class })
-    public static class AttributedString {
-
-        @XmlValue
-        protected String value;
-        @XmlAttribute(name = "Id", namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
-        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
-        @XmlID
-        @XmlSchemaType(name = "ID")
-        protected String id;
-        @XmlAnyAttribute
-        private final Map<QName, String> otherAttributes = new HashMap<QName, String>();
-
-        public String getValue() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public String getId() {
-            return id;
-        }
-
-        public void setId(String value) {
-            this.id = value;
-        }
-
-        public Map<QName, String> getOtherAttributes() {
-            return otherAttributes;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AclService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AclService.java
deleted file mode 100644
index 75d3dbe..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AclService.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ACLServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisACLType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumACLPropagation;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS ACL Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.ACLServicePort")
-public class AclService extends AbstractService implements ACLServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public CmisACLType applyACL(String repositoryId, String objectId, CmisAccessControlListType addAces,
-            CmisAccessControlListType removeAces, EnumACLPropagation aclPropagation, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Acl acl = service.applyAcl(repositoryId, objectId, convert(addAces, null), convert(removeAces, null),
-                    convert(AclPropagation.class, aclPropagation), convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (acl == null) {
-                return null;
-            }
-
-            CmisACLType result = new CmisACLType();
-            result.setACL(convert(acl));
-            result.setExact(acl.isExact());
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisACLType getACL(String repositoryId, String objectId, Boolean onlyBasicPermissions,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Acl acl = service.getAcl(repositoryId, objectId, onlyBasicPermissions, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (acl == null) {
-                return null;
-            }
-
-            CmisACLType result = new CmisACLType();
-            result.setACL(convert(acl));
-            result.setExact(acl.isExact());
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AuthHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AuthHandler.java
deleted file mode 100644
index 7172929..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/AuthHandler.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.namespace.QName;
-import javax.xml.ws.handler.MessageContext;
-import javax.xml.ws.handler.MessageContext.Scope;
-
-import com.sun.xml.ws.api.handler.MessageHandler;
-import com.sun.xml.ws.api.handler.MessageHandlerContext;
-import com.sun.xml.ws.api.message.Header;
-import com.sun.xml.ws.api.message.HeaderList;
-import com.sun.xml.ws.api.message.Message;
-
-/**
- * This class tries to extract a user name and a password from a UsernameToken.
- */
-public class AuthHandler extends AbstractUsernameTokenAuthHandler implements MessageHandler<MessageHandlerContext> {
-
-    public Set<QName> getHeaders() {
-        return HEADERS;
-    }
-
-    public void close(MessageContext context) {
-    }
-
-    public boolean handleFault(MessageHandlerContext context) {
-        return true;
-    }
-
-    public boolean handleMessage(MessageHandlerContext context) {
-        Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
-        if (outboundProperty.booleanValue()) {
-            // we are only looking at inbound messages
-            return true;
-        }
-
-        Map<String, String> callContextMap = null;
-
-        try {
-            // read the header
-            Message msg = context.getMessage();
-            HeaderList hl = msg.getHeaders();
-            Header securityHeader = hl.get(WSSE_SECURITY, true);
-
-            JAXBElement<SecurityHeaderType> sht = securityHeader.readAsJAXB(WSSE_CONTEXT.createUnmarshaller());
-
-            callContextMap = extractUsernamePassword(sht);
-        } catch (Exception e) {
-            // something went wrong, e.g. a part of the SOAP header wasn't set
-        }
-
-        // add user and password to context
-        if (callContextMap == null) {
-            callContextMap = new HashMap<String, String>();
-        }
-
-        context.put(AbstractService.CALL_CONTEXT_MAP, callContextMap);
-        context.setScope(AbstractService.CALL_CONTEXT_MAP, Scope.APPLICATION);
-
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/CmisWebServicesServlet.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/CmisWebServicesServlet.java
deleted file mode 100644
index 0f2cdd7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/CmisWebServicesServlet.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.ws.WebServiceFeature;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.sun.xml.ws.api.WSFeatureList;
-import com.sun.xml.ws.developer.StreamingAttachmentFeature;
-import com.sun.xml.ws.transport.http.servlet.ServletAdapter;
-import com.sun.xml.ws.transport.http.servlet.WSServlet;
-import com.sun.xml.ws.transport.http.servlet.WSServletDelegate;
-
-public class CmisWebServicesServlet extends WSServlet {
-
-    public static final String PARAM_CMIS_VERSION = "cmisVersion";
-    public static final String CMIS_VERSION = "org.apache.chemistry.opencmis.cmisVersion";
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisWebServicesServlet.class.getName());
-
-    private static final int MAX_SOAP_SIZE = 10 * 1024 * 1024;
-
-    private static final String CMIS10_PATH = "/WEB-INF/cmis10/";
-    private static final String CMIS11_PATH = "/WEB-INF/cmis11/";
-
-    private static final Pattern BASE_PATTERN = Pattern.compile("<%cmisbase%>");
-    private static final Pattern CORE_PATTERN = Pattern.compile("<%cmiscore%>");
-    private static final Pattern MSG_PATTERN = Pattern.compile("<%cmismsg%>");
-
-    private CmisVersion cmisVersion;
-
-    private Map<String, String> docs;
-
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-
-        // get CMIS version
-        String cmisVersionStr = config.getInitParameter(PARAM_CMIS_VERSION);
-        if (cmisVersionStr != null) {
-            try {
-                cmisVersion = CmisVersion.fromValue(cmisVersionStr);
-            } catch (IllegalArgumentException e) {
-                LOG.warn("CMIS version is invalid! Setting it to CMIS 1.0.");
-                cmisVersion = CmisVersion.CMIS_1_0;
-            }
-        } else {
-            LOG.warn("CMIS version is not defined! Setting it to CMIS 1.0.");
-            cmisVersion = CmisVersion.CMIS_1_0;
-        }
-
-        // set up WSDL and XSD documents
-        docs = new HashMap<String, String>();
-
-        String path = (cmisVersion == CmisVersion.CMIS_1_0 ? CMIS10_PATH : CMIS11_PATH);
-
-        docs.put("wsdl", readFile(config, path + "CMISWS-Service.wsdl.template"));
-        docs.put("core", readFile(config, path + "CMIS-Core.xsd.template"));
-        docs.put("msg", readFile(config, path + "CMIS-Messaging.xsd.template"));
-
-        super.init(config);
-    }
-
-    private String readFile(ServletConfig config, String path) throws ServletException {
-        InputStream stream = config.getServletContext().getResourceAsStream(path);
-        if (stream == null) {
-            throw new ServletException("Cannot find file '" + path + "'!");
-        }
-
-        try {
-            return IOUtils.readAllLines(stream);
-        } catch (IOException e) {
-            throw new ServletException("Cannot read file '" + path + "': " + e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        // set CMIS version
-        request.setAttribute(CMIS_VERSION, cmisVersion);
-
-        // handle GET requests
-        if (request.getMethod().equals("GET")) {
-            UrlBuilder baseUrl = compileBaseUrl(request, response);
-
-            String queryString = request.getQueryString();
-            if (queryString != null) {
-                String doc = docs.get(queryString.toLowerCase(Locale.ENGLISH));
-                if (doc != null) {
-                    printXml(request, response, doc, baseUrl);
-                    return;
-                }
-            }
-
-            printPage(request, response, baseUrl);
-            return;
-        }
-
-        // handle other non-POST requests
-        if (!request.getMethod().equals("POST")) {
-            printError(request, response, "Not a HTTP POST request.");
-            return;
-        }
-
-        // handle POST requests
-        ProtectionRequestWrapper requestWrapper = null;
-        try {
-            requestWrapper = new ProtectionRequestWrapper(request, MAX_SOAP_SIZE);
-        } catch (ServletException e) {
-            printError(request, response, "The request is not MTOM encoded.");
-            return;
-        }
-
-        super.service(requestWrapper, response);
-    }
-
-    private void printXml(HttpServletRequest request, HttpServletResponse response, String doc, UrlBuilder baseUrl)
-            throws ServletException, IOException {
-        response.setStatus(HttpServletResponse.SC_OK);
-        response.setContentType("text/xml");
-        response.setCharacterEncoding(IOUtils.UTF8);
-
-        String respDoc = doc;
-        respDoc = BASE_PATTERN.matcher(respDoc).replaceAll(baseUrl.toString());
-        respDoc = CORE_PATTERN.matcher(respDoc).replaceAll(
-                (new UrlBuilder(baseUrl)).addPath("cmis").addParameter("core").toString());
-        respDoc = MSG_PATTERN.matcher(respDoc).replaceAll(
-                (new UrlBuilder(baseUrl)).addPath("cmis").addParameter("msg").toString());
-
-        PrintWriter pw = response.getWriter();
-        pw.print(respDoc);
-        pw.flush();
-    }
-
-    private void printPage(HttpServletRequest request, HttpServletResponse response, UrlBuilder baseUrl)
-            throws ServletException, IOException {
-        response.setStatus(HttpServletResponse.SC_OK);
-        response.setContentType("text/html");
-        response.setCharacterEncoding(IOUtils.UTF8);
-
-        String urlEscaped = StringEscapeUtils.escapeHtml((new UrlBuilder(baseUrl)).addPath("cmis").addParameter("wsdl")
-                .toString());
-
-        PrintWriter pw = response.getWriter();
-
-        pw.print("<html><head><title>Apache Chemistry OpenCMIS - CMIS "
-                + cmisVersion.value()
-                + " Web Services</title>"
-                + "<style><!--H1 {font-size:24px;line-height:normal;font-weight:bold;background-color:#f0f0f0;color:#003366;border-bottom:1px solid #3c78b5;padding:2px;} "
-                + "BODY {font-family:Verdana,arial,sans-serif;color:black;font-size:14px;} "
-                + "HR {color:#3c78b5;height:1px;}--></style></head><body>");
-        pw.print("<h1>CMIS " + cmisVersion.value() + " Web Services</h1>");
-        pw.print("<p>CMIS WSDL for all services: <a href=\"" + urlEscaped + "\">" + urlEscaped + "</a></p>");
-
-        pw.print("</html></body>");
-        pw.flush();
-    }
-
-    private void printError(HttpServletRequest request, HttpServletResponse response, String message)
-            throws ServletException, IOException {
-        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-        response.setContentType("text/xml");
-        response.setCharacterEncoding(IOUtils.UTF8);
-
-        PrintWriter pw = response.getWriter();
-
-        String messageEscaped = StringEscapeUtils.escapeXml(message);
-
-        pw.println("<?xml version='1.0' encoding='UTF-8'?>");
-        pw.println("<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">");
-        pw.println("<S:Body>");
-        pw.println("<S:Fault>");
-        pw.println("<faultcode>S:Client</faultcode>");
-        pw.println("<faultstring>" + messageEscaped + "</faultstring>");
-        pw.println("<detail>");
-        pw.println("<cmisFault xmlns=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">");
-        pw.println("<type>runtime</type>");
-        pw.println("<code>0</code>");
-        pw.println("<message>" + messageEscaped + "</message>");
-        pw.println("</cmisFault>");
-        pw.println("</detail>");
-        pw.println("</S:Fault>");
-        pw.println("</S:Body>");
-        pw.println("</S:Envelope>");
-
-        pw.flush();
-    }
-
-    private UrlBuilder compileBaseUrl(HttpServletRequest request, HttpServletResponse response) {
-        UrlBuilder result;
-
-        String baseUrl = (String) request.getAttribute(Dispatcher.BASE_URL_ATTRIBUTE);
-        if (baseUrl != null) {
-            result = new UrlBuilder(baseUrl);
-        } else {
-            result = new UrlBuilder(request.getScheme(), request.getServerName(), request.getServerPort(), null);
-            result.addPath(request.getContextPath());
-            result.addPath(request.getServletPath());
-        }
-
-        return result;
-    }
-
-    @Override
-    protected WSServletDelegate getDelegate(ServletConfig servletConfig) {
-        WSServletDelegate delegate = super.getDelegate(servletConfig);
-
-        // set temp directory and the threshold for all services with a
-        // StreamingAttachment annotation
-        if (delegate.adapters != null) {
-            // get the CmisService factory
-            CmisServiceFactory factory = (CmisServiceFactory) getServletContext().getAttribute(
-                    CmisRepositoryContextListener.SERVICES_FACTORY);
-
-            if (factory == null) {
-                throw new CmisRuntimeException("Service factory not available! Configuration problem?");
-            }
-
-            // iterate of all adapters
-            for (ServletAdapter adapter : delegate.adapters) {
-                WSFeatureList wsfl = adapter.getEndpoint().getBinding().getFeatures();
-                for (WebServiceFeature ft : wsfl) {
-                    if (ft instanceof StreamingAttachmentFeature) {
-                        ((StreamingAttachmentFeature) ft).setDir(factory.getTempDirectory().getAbsolutePath());
-                        setMemoryThreshold(factory, (StreamingAttachmentFeature) ft);
-                    }
-                }
-            }
-        }
-
-        return delegate;
-    }
-
-    private void setMemoryThreshold(CmisServiceFactory factory, StreamingAttachmentFeature ft) {
-        try {
-            // JAX-WS RI 2.1
-            ft.setMemoryThreshold(factory.getMemoryThreshold());
-        } catch (NoSuchMethodError e) {
-            // JAX-WS RI 2.2
-            // see CMIS-626
-            try {
-                Method m = ft.getClass().getMethod("setMemoryThreshold", long.class);
-                m.invoke(ft, (long) factory.getMemoryThreshold());
-            } catch (Exception e2) {
-                LOG.warn("Could not set memory threshold for streaming");
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/DiscoveryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/DiscoveryService.java
deleted file mode 100644
index c58e546..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/DiscoveryService.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.math.BigInteger;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryServicePort;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS Discovery Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryServicePort")
-public class DiscoveryService extends AbstractService implements DiscoveryServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public void getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems,
-            CmisExtensionType extension, Holder<CmisObjectListType> objects) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> changeLogTokenHolder = convertHolder(changeLogToken);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            ObjectList changesList = service.getContentChanges(repositoryId, changeLogTokenHolder, includeProperties,
-                    filter, includePolicyIds, includeAcl, maxItems, convert(extension));
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objects != null) {
-                objects.value = convert(changesList, cmisVersion);
-            }
-
-            setHolderValue(changeLogTokenHolder, changeLogToken);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectListType query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.query(repositoryId, statement, searchAllVersions,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/MultiFilingService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/MultiFilingService.java
deleted file mode 100644
index 17dddf9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/MultiFilingService.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.MultiFilingServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS MultiFiling Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.MultiFilingServicePort")
-public class MultiFilingService extends AbstractService implements MultiFilingServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.addObjectToFolder(repositoryId, objectId, folderId, allVersions, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId,
-            Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.removeObjectFromFolder(repositoryId, objectId, folderId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/NavigationService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/NavigationService.java
deleted file mode 100644
index d2a39aa..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/NavigationService.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderContainerType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectInFolderListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectParentsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.NavigationServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS Navigation Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.NavigationServicePort")
-public class NavigationService extends AbstractService implements NavigationServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public CmisObjectListType getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectInFolderListType getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectInFolderList serviceResult = service.getChildren(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePathSegment, maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisObjectInFolderContainerType> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            List<CmisObjectInFolderContainerType> result = new ArrayList<CmisObjectInFolderContainerType>();
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectInFolderContainer> serviceResult = service.getDescendants(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePathSegment, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (serviceResult != null) {
-                for (ObjectInFolderContainer container : serviceResult) {
-                    result.add(convert(container, cmisVersion));
-                }
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectType getFolderParent(String repositoryId, String folderId, String filter,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getFolderParent(repositoryId, folderId, filter, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisObjectInFolderContainerType> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            List<CmisObjectInFolderContainerType> result = new ArrayList<CmisObjectInFolderContainerType>();
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectInFolderContainer> serviceResult = service.getFolderTree(repositoryId, folderId, depth, filter,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePathSegment, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (serviceResult != null) {
-                for (ObjectInFolderContainer container : serviceResult) {
-                    result.add(convert(container, cmisVersion));
-                }
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisObjectParentsType> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            List<CmisObjectParentsType> result = new ArrayList<CmisObjectParentsType>();
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectParentData> serviceResult = service.getObjectParents(repositoryId, objectId, filter,
-                    includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includeRelativePathSegment, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (serviceResult != null) {
-                for (ObjectParentData parent : serviceResult) {
-                    result.add(convert(parent, cmisVersion));
-                }
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService.java
deleted file mode 100644
index d8b9427..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService.java
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.closeStream;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAllowableActionsType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisBulkUpdateType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisContentStreamType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectIdAndChangeTokenType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRenditionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.DeleteTreeResponse.FailedToDelete;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumUnfileObject;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumVersioningState;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-import com.sun.xml.ws.developer.StreamingAttachment;
-
-/**
- * CMIS Object Service.
- */
-@MTOM
-@StreamingAttachment(parseEagerly = false, memoryThreshold = 4 * 1024 * 1204)
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectServicePort")
-public class ObjectService extends AbstractService implements ObjectServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public void createDocument(String repositoryId, CmisPropertiesType properties, String folderId,
-            CmisContentStreamType contentStream, EnumVersioningState versioningState, List<String> policies,
-            CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createDocument(repositoryId, convert(properties), folderId,
-                    convert(contentStream, false), convert(VersioningState.class, versioningState), policies,
-                    convert(addAces, null), convert(removeAces, null), extData);
-
-            closeStream(contentStream);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createDocumentFromSource(String repositoryId, String sourceId, CmisPropertiesType properties,
-            String folderId, EnumVersioningState versioningState, List<String> policies,
-            CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createDocumentFromSource(repositoryId, sourceId, convert(properties), folderId,
-                    convert(VersioningState.class, versioningState), policies, convert(addAces, null),
-                    convert(removeAces, null), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createFolder(String repositoryId, CmisPropertiesType properties, String folderId,
-            List<String> policies, CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createFolder(repositoryId, convert(properties), folderId, policies,
-                    convert(addAces, null), convert(removeAces, null), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createPolicy(String repositoryId, CmisPropertiesType properties, String folderId,
-            List<String> policies, CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createPolicy(repositoryId, convert(properties), folderId, policies,
-                    convert(addAces, null), convert(removeAces, null), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createRelationship(String repositoryId, CmisPropertiesType properties, List<String> policies,
-            CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createRelationship(repositoryId, convert(properties), policies, convert(addAces, null),
-                    convert(removeAces, null), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createItem(String repositoryId, CmisPropertiesType properties, String folderId,
-            CmisAccessControlListType addAces, CmisAccessControlListType removeAces,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            String id = service.createItem(repositoryId, convert(properties), folderId, null, convert(addAces, null),
-                    convert(removeAces, null), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectId != null) {
-                objectId.value = id;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> changeTokenHolder = convertHolder(changeToken);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteContentStream(repositoryId, objectIdHolder, changeTokenHolder, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setHolderValue(changeTokenHolder, changeToken);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions,
-            Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteObject(repositoryId, objectId, allVersions, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public FailedToDelete deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            EnumUnfileObject unfileObjects, Boolean continueOnFailure, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            FailedToDeleteData serviceResult = service.deleteTree(repositoryId, folderId, allVersions,
-                    convert(UnfileObject.class, unfileObjects), continueOnFailure, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisAllowableActionsType getAllowableActions(String repositoryId, String objectId,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            AllowableActions serviceResult = service.getAllowableActions(repositoryId, objectId, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisContentStreamType getContentStream(String repositoryId, String objectId, String streamId,
-            BigInteger offset, BigInteger length, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ContentStream serviceResult = service.getContentStream(repositoryId, objectId, streamId, offset, length,
-                    convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, true);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectType getObject(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObject(repositoryId, objectId, filter, includeAllowableActions,
-                    convert(IncludeRelationships.class, includeRelationships), renditionFilter, includePolicyIds,
-                    includeAcl, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectType getObjectByPath(String repositoryId, String path, String filter,
-            Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                    convert(IncludeRelationships.class, includeRelationships), renditionFilter, includePolicyIds,
-                    includeAcl, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisPropertiesType getProperties(String repositoryId, String objectId, String filter,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Properties serviceResult = service.getProperties(repositoryId, objectId, filter, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisRenditionType> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            List<CmisRenditionType> result = new ArrayList<CmisRenditionType>();
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<RenditionData> renditionList = service.getRenditions(repositoryId, objectId, renditionFilter,
-                    maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (renditionList != null) {
-                for (RenditionData rendition : renditionList) {
-                    result.add(convert(rendition));
-                }
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.moveObject(repositoryId, objectIdHolder, targetFolderId, sourceFolderId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, CmisContentStreamType contentStream, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> changeTokenHolder = convertHolder(changeToken);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.setContentStream(repositoryId, objectIdHolder, overwriteFlag, changeTokenHolder,
-                    convert(contentStream, false), extData);
-
-            closeStream(contentStream);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setHolderValue(changeTokenHolder, changeToken);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Boolean isLastChunk,
-            Holder<String> changeToken, CmisContentStreamType contentStream, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> changeTokenHolder = convertHolder(changeToken);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.appendContentStream(repositoryId, objectIdHolder, changeTokenHolder, convert(contentStream, true),
-                    isLastChunk, extData);
-
-            closeStream(contentStream);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setHolderValue(changeTokenHolder, changeToken);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            CmisPropertiesType properties, Holder<CmisExtensionType> extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> changeTokenHolder = convertHolder(changeToken);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.updateProperties(repositoryId, objectIdHolder, changeTokenHolder, convert(properties), extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setHolderValue(changeTokenHolder, changeToken);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void bulkUpdateProperties(String repositoryId, CmisBulkUpdateType bulkUpdateData,
-            Holder<CmisExtensionType> extension, Holder<CmisObjectIdAndChangeTokenType> objectIdAndChangeToken)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens = null;
-            Properties properties = null;
-            List<String> addSecondaryTypeIds = null;
-            List<String> removeSecondaryTypeIds = null;
-            if (bulkUpdateData != null) {
-                if (!bulkUpdateData.getObjectIdAndChangeToken().isEmpty()) {
-                    objectIdsAndChangeTokens = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-                    for (CmisObjectIdAndChangeTokenType idAndToken : bulkUpdateData.getObjectIdAndChangeToken()) {
-                        objectIdsAndChangeTokens.add(convert(idAndToken));
-                    }
-                }
-                properties = convert(bulkUpdateData.getProperties());
-                if (!bulkUpdateData.getAddSecondaryTypeIds().isEmpty()) {
-                    addSecondaryTypeIds = bulkUpdateData.getAddSecondaryTypeIds();
-                }
-                if (!bulkUpdateData.getRemoveSecondaryTypeIds().isEmpty()) {
-                    removeSecondaryTypeIds = bulkUpdateData.getRemoveSecondaryTypeIds();
-                }
-            }
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            List<BulkUpdateObjectIdAndChangeToken> result = service.bulkUpdateProperties(repositoryId,
-                    objectIdsAndChangeTokens, properties, addSecondaryTypeIds, removeSecondaryTypeIds, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (objectIdAndChangeToken != null && result != null) {
-                // TODO: add workaround
-                // see: https://tools.oasis-open.org/issues/browse/CMIS-754
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService10.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService10.java
deleted file mode 100644
index 3dabccd..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectService10.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import javax.jws.WebService;
-import javax.xml.ws.soap.MTOM;
-
-import com.sun.xml.ws.developer.StreamingAttachment;
-
-/**
- * CMIS 1.0 Object Service. Excludes CMIS 1.1 operations.
- */
-@MTOM
-@StreamingAttachment(parseEagerly = false, memoryThreshold = 4 * 1024 * 1204)
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.server.impl.webservices.ObjectServicePort10")
-public class ObjectService10 extends ObjectService {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectServicePort10.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectServicePort10.java
deleted file mode 100644
index 3187c6e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ObjectServicePort10.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import javax.jws.WebMethod;
-import javax.jws.WebService;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.ws.Holder;
-
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisBulkUpdateType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisContentStreamType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectIdAndChangeTokenType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectFactory;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectServicePort;
-
-@WebService(name = "ObjectServicePort", targetNamespace = "http://docs.oasis-open.org/ns/cmis/ws/200908/")
-@XmlSeeAlso({ ObjectFactory.class })
-public interface ObjectServicePort10 extends ObjectServicePort {
-
-    @WebMethod(action = "createItem", exclude = true)
-    void createItem(String repositoryId, CmisPropertiesType properties, String folderId,
-            CmisAccessControlListType addACEs, CmisAccessControlListType removeACEs,
-            Holder<CmisExtensionType> extension, Holder<String> objectId) throws CmisException;
-
-    @WebMethod(action = "bulkUpdateProperties", exclude = true)
-    void bulkUpdateProperties(String repositoryId, CmisBulkUpdateType bulkUpdateData,
-            Holder<CmisExtensionType> extension, Holder<CmisObjectIdAndChangeTokenType> objectIdAndChangeToken)
-            throws CmisException;
-
-    @WebMethod(action = "appendContentStream", exclude = true)
-    void appendContentStream(String repositoryId, Holder<String> objectId, Boolean isLastChunk,
-            Holder<String> changeToken, CmisContentStreamType contentStream, Holder<CmisExtensionType> extension)
-            throws CmisException;
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/PolicyService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/PolicyService.java
deleted file mode 100644
index 88ae099..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/PolicyService.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.PolicyServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS Policy Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.PolicyServicePort")
-public class PolicyService extends AbstractService implements PolicyServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.applyPolicy(repositoryId, policyId, objectId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisObjectType> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectData> policies = service.getAppliedPolicies(repositoryId, objectId, filter, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (policies == null) {
-                return null;
-            }
-
-            List<CmisObjectType> result = new ArrayList<CmisObjectType>();
-            for (ObjectData object : policies) {
-                result.add(convert(object, cmisVersion));
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.removePolicy(repositoryId, policyId, objectId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ProtectionRequestWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ProtectionRequestWrapper.java
deleted file mode 100644
index 9fd263b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/ProtectionRequestWrapper.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
-
-/**
- * This request wrapper checks if the request is a multipart request (required
- * by MTOM) and checks if the first part is not bigger than the provide max
- * size. This protects the Web Services endpoint from oversized XML attacks.
- */
-public class ProtectionRequestWrapper extends HttpServletRequestWrapper {
-
-    private static final String MULTIPART = "multipart/";
-    private static final byte CR = 0x0D;
-    private static final byte LF = 0x0A;
-    private static final byte DASH = 0x2D;
-
-    private final int messageMax;
-    private final InputStream orgStream;
-    private final ServletInputStream checkedStream;
-    private final byte[] boundary;
-
-    public ProtectionRequestWrapper(HttpServletRequest request, int max) throws ServletException {
-        super(request);
-
-        // check multipart
-        String contentType = request.getContentType();
-        if (contentType == null || !contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART)) {
-            throw new ServletException("Invalid multipart request!");
-        }
-
-        // get boundary
-        boundary = MimeHelper.getBoundaryFromMultiPart(contentType);
-        if (boundary == null) {
-            throw new ServletException("Invalid multipart request!");
-        }
-
-        // set up checked stream
-        try {
-            messageMax = max;
-            orgStream = super.getInputStream();
-            checkedStream = new CheckServletInputStream();
-        } catch (IOException e) {
-            throw new ServletException(e);
-        }
-    }
-
-    @Override
-    public ServletInputStream getInputStream() throws IOException {
-        return checkedStream;
-    }
-
-    class CheckServletInputStream extends ServletInputStream {
-
-        private final int streamMax;
-        private byte[] linebuffer;
-        private int pos;
-        private int count;
-        private int boundariesFound;
-
-        public CheckServletInputStream() {
-            streamMax = messageMax + 2 * (boundary.length + 6);
-            linebuffer = new byte[32 * 1024];
-            pos = 0;
-            count = 0;
-            boundariesFound = 0;
-        }
-
-        @Override
-        public boolean markSupported() {
-            return false;
-        }
-
-        @Override
-        public synchronized void mark(int readlimit) {
-        }
-
-        @Override
-        public synchronized void reset() throws IOException {
-        }
-
-        @Override
-        public int available() throws IOException {
-            return orgStream.available();
-        }
-
-        @Override
-        public int read() throws IOException {
-            int b = orgStream.read();
-
-            if (boundariesFound == 2) {
-                return b;
-            }
-
-            addToLineBuffer((byte) b);
-
-            return b;
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            return read(b, 0, b.length);
-        }
-
-        @Override
-        public int read(byte[] b, int off, int len) throws IOException {
-            if (len == 0) {
-                return 0;
-            }
-
-            int r = orgStream.read(b, off, len);
-
-            if (boundariesFound == 2) {
-                return r;
-            }
-
-            addToLineBuffer(b, off, r);
-
-            return r;
-        }
-
-        @Override
-        public long skip(long n) throws IOException {
-            if (n <= 0) {
-                return 0;
-            }
-
-            return read(new byte[(n > 8 * 1024 ? 8 * 1024 : (int) n)]);
-        }
-
-        @Override
-        public void close() throws IOException {
-            orgStream.close();
-        }
-
-        private void checkBoundary(int startPos) {
-            int lastLineFeed = -1;
-            for (int i = startPos; i < pos; i++) {
-                if (linebuffer[i] == LF) {
-                    if (countBoundaries(i)) {
-                        return;
-                    }
-                    lastLineFeed = i;
-                }
-            }
-
-            if (lastLineFeed == -1) {
-                if (pos > boundary.length + 3) {
-                    // buffer is bigger than the boundary and doesn't contain a
-                    // LF -> only keep the length of the boundary plus three
-                    // characters (two dashes and a CR)
-                    System.arraycopy(linebuffer, pos - (boundary.length + 3), linebuffer, 0, boundary.length + 3);
-                    pos = boundary.length + 3;
-                }
-            } else {
-                if (lastLineFeed == pos - 1) {
-                    // last byte is a LF -> discard the whole buffer
-                    pos = 0;
-                } else {
-                    // only keep bytes after the last LF
-                    System.arraycopy(linebuffer, lastLineFeed + 1, linebuffer, 0, pos - (lastLineFeed + 1));
-                    pos = pos - (lastLineFeed + 1);
-                }
-            }
-        }
-
-        private boolean countBoundaries(int lineFeedPos) {
-            if (isBoundary(lineFeedPos)) {
-                boundariesFound++;
-
-                if (boundariesFound == 2) {
-                    // found boundary a second time within the size
-                    // limit -> request is ok, no more checks necessary
-                    linebuffer = null;
-                }
-            }
-
-            return boundariesFound > 1;
-        }
-
-        private boolean isBoundary(int lineFeedPos) {
-            // a boundary consists of two dashes, the boundary and a CR
-            // -> boundary line length == boundary length + three characters
-            int startPos = lineFeedPos - (boundary.length + 3);
-
-            if (startPos >= 0) {
-                if (linebuffer[startPos] == DASH && linebuffer[startPos + 1] == DASH
-                        && linebuffer[lineFeedPos - 1] == CR) {
-
-                    for (int i = 0; i < boundary.length; i++) {
-                        if (linebuffer[startPos + i + 2] != boundary[i]) {
-                            return false;
-                        }
-                    }
-
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-        /**
-         * Adds a byte to the line buffer.
-         */
-        private void addToLineBuffer(byte b) throws IOException {
-            if (pos == linebuffer.length) {
-                expandBuffer(1);
-            }
-
-            linebuffer[pos++] = (byte) b;
-
-            if (b == LF) {
-                checkBoundary(pos - 1);
-            }
-
-            if (boundariesFound < 2) {
-                count++;
-                if (count > streamMax) {
-                    throw new IOException("SOAP message too big!");
-                }
-            }
-        }
-
-        /**
-         * Adds a buffer to the line buffer.
-         */
-        private void addToLineBuffer(byte[] b, int off, int len) throws IOException {
-            if (len <= 0) {
-                return;
-            }
-
-            if (pos + len >= linebuffer.length) {
-                expandBuffer(len);
-            }
-
-            System.arraycopy(b, off, linebuffer, pos, len);
-            pos += len;
-
-            checkBoundary(pos - len);
-
-            if (boundariesFound < 2) {
-                count += len;
-                if (count > streamMax) {
-                    throw new IOException("SOAP message too big!");
-                }
-            }
-        }
-
-        /**
-         * Expand the line buffer.
-         */
-        private void expandBuffer(int len) throws IOException {
-            if (pos + len > streamMax) {
-                throw new IOException("SOAP message too big!");
-            }
-
-            int expand = (len < 32 * 1024 ? 32 * 1024 : len);
-            byte[] newBuffer = new byte[linebuffer.length + expand];
-            System.arraycopy(linebuffer, 0, newBuffer, 0, pos);
-            linebuffer = newBuffer;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RelationshipService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RelationshipService.java
deleted file mode 100644
index c0caed7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RelationshipService.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-
-import java.math.BigInteger;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumRelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RelationshipServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS Relationship Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.RelationshipServicePort")
-public class RelationshipService extends AbstractService implements RelationshipServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public CmisObjectListType getObjectRelationships(String repositoryId, String objectId,
-            Boolean includeSubRelationshipTypes, EnumRelationshipDirection relationshipDirection, String typeId,
-            String filter, Boolean includeAllowableActions, BigInteger maxItems, BigInteger skipCount,
-            CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectList serviceResult = service.getObjectRelationships(repositoryId, objectId,
-                    includeSubRelationshipTypes, convert(RelationshipDirection.class, relationshipDirection), typeId,
-                    filter, includeAllowableActions, maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java
deleted file mode 100644
index 166fa00..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertTypeContainerList;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryEntryType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeContainer;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * CMIS Repository Service.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort")
-public class RepositoryService extends AbstractService implements RepositoryServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public List<CmisRepositoryEntryType> getRepositories(CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, null);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<RepositoryInfo> infoDataList = service.getRepositoryInfos(convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (infoDataList == null) {
-                return null;
-            }
-
-            List<CmisRepositoryEntryType> result = new ArrayList<CmisRepositoryEntryType>();
-            for (RepositoryInfo infoData : infoDataList) {
-                CmisRepositoryEntryType entry = new CmisRepositoryEntryType();
-                entry.setRepositoryId(infoData.getId());
-                entry.setRepositoryName(infoData.getName());
-
-                result.add(entry);
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisRepositoryInfoType getRepositoryInfo(String repositoryId, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            RepositoryInfo serviceResult = service.getRepositoryInfo(repositoryId, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisTypeDefinitionListType getTypeChildren(String repositoryId, String typeId,
-            Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinitionList serviceResult = service.getTypeChildren(repositoryId, typeId,
-                    includePropertyDefinitions, maxItems, skipCount, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisTypeDefinitionType getTypeDefinition(String repositoryId, String typeId, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            TypeDefinition serviceResult = service.getTypeDefinition(repositoryId, typeId, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisTypeContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<TypeDefinitionContainer> serviceResult = service.getTypeDescendants(repositoryId, typeId, depth,
-                    includePropertyDefinitions, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            List<CmisTypeContainer> result = new ArrayList<CmisTypeContainer>();
-            convertTypeContainerList(serviceResult, result);
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void createType(String repositoryId, Holder<CmisTypeDefinitionType> type, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition serviceResult = service.createType(repositoryId, convert(type.value), convert(extension));
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            type.value = convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void updateType(String repositoryId, Holder<CmisTypeDefinitionType> type, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            TypeDefinition serviceResult = service.updateType(repositoryId, convert(type.value), convert(extension));
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            type.value = convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void deleteType(String repositoryId, String typeId, Holder<CmisExtensionType> extension)
-            throws CmisException {
-
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.deleteType(repositoryId, typeId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService10.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService10.java
deleted file mode 100644
index 0a53187..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService10.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import javax.jws.WebService;
-import javax.xml.ws.soap.MTOM;
-
-/**
- * CMIS 1.0 Repository Service. Excludes CMIS 1.1 operations.
- */
-@MTOM
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.server.impl.webservices.RepositoryServicePort10")
-public class RepositoryService10 extends RepositoryService implements RepositoryServicePort10 {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryServicePort10.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryServicePort10.java
deleted file mode 100644
index 0d55f7e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryServicePort10.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import javax.jws.WebMethod;
-import javax.jws.WebService;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.ws.Holder;
-
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.ObjectFactory;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
-
-@WebService(name = "RepositoryServicePort", targetNamespace = "http://docs.oasis-open.org/ns/cmis/ws/200908/")
-@XmlSeeAlso({ ObjectFactory.class })
-public interface RepositoryServicePort10 extends RepositoryServicePort {
-
-    @WebMethod(action = "createType", exclude = true)
-    void createType(String repositoryId, Holder<CmisTypeDefinitionType> type, CmisExtensionType extension)
-            throws CmisException;
-
-    @WebMethod(action = "updateType", exclude = true)
-    void updateType(String repositoryId, Holder<CmisTypeDefinitionType> type, CmisExtensionType extension)
-            throws CmisException;
-
-    @WebMethod(action = "deleteType", exclude = true)
-    void deleteType(String repositoryId, String typeId, Holder<CmisExtensionType> extension) throws CmisException;
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java
deleted file mode 100644
index aa46232..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.closeStream;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertHolder;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
-import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.jws.WebService;
-import javax.xml.ws.Holder;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.MTOM;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisContentStreamType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertiesType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-import com.sun.xml.ws.developer.StreamingAttachment;
-
-/**
- * CMIS Versioning Service.
- */
-@MTOM
-@StreamingAttachment(parseEagerly = false, memoryThreshold = 4 * 1024 * 1204)
-@WebService(endpointInterface = "org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort")
-public class VersioningService extends AbstractService implements VersioningServicePort {
-    @Resource
-    public WebServiceContext wsContext;
-
-    public void cancelCheckOut(String repositoryId, String objectId, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.cancelCheckOut(repositoryId, objectId, extData);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, CmisPropertiesType properties,
-            CmisContentStreamType contentStream, String checkinComment, List<String> policies,
-            CmisAccessControlListType addAces, CmisAccessControlListType removeAces, Holder<CmisExtensionType> extension)
-            throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.checkIn(repositoryId, objectIdHolder, major, convert(properties), convert(contentStream, false),
-                    checkinComment, policies, convert(addAces, null), convert(removeAces, null), extData);
-
-            closeStream(contentStream);
-            
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, Holder<CmisExtensionType> extension,
-            Holder<Boolean> contentCopied) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            org.apache.chemistry.opencmis.commons.spi.Holder<String> objectIdHolder = convertHolder(objectId);
-            org.apache.chemistry.opencmis.commons.spi.Holder<Boolean> contentCopiedHolder = new org.apache.chemistry.opencmis.commons.spi.Holder<Boolean>();
-            ExtensionsData extData = convertExtensionHolder(extension);
-
-            if (stopBeforeService(service)) {
-                return;
-            }
-
-            service.checkOut(repositoryId, objectIdHolder, extData, contentCopiedHolder);
-
-            if (stopAfterService(service)) {
-                return;
-            }
-
-            if (contentCopied != null) {
-                contentCopied.value = contentCopiedHolder.getValue();
-            }
-
-            setHolderValue(objectIdHolder, objectId);
-            setExtensionValues(extData, extension);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public List<CmisObjectType> getAllVersions(String repositoryId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            List<ObjectData> versions = service.getAllVersions(repositoryId, null, versionSeriesId, filter,
-                    includeAllowableActions, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            if (versions == null) {
-                return null;
-            }
-
-            List<CmisObjectType> result = new ArrayList<CmisObjectType>();
-            for (ObjectData object : versions) {
-                result.add(convert(object, cmisVersion));
-            }
-
-            return result;
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisObjectType getObjectOfLatestVersion(String repositoryId, String versionSeriesId, Boolean major,
-            String filter, Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, CmisExtensionType extension)
-            throws CmisException {
-        CmisService service = null;
-        CmisVersion cmisVersion = null;
-        try {
-            service = getService(wsContext, repositoryId);
-            cmisVersion = getCmisVersion(wsContext);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            ObjectData serviceResult = service.getObjectOfLatestVersion(repositoryId, null, versionSeriesId, major,
-                    filter, includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePolicyIds, includeAcl, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult, cmisVersion);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-
-    public CmisPropertiesType getPropertiesOfLatestVersion(String repositoryId, String versionSeriesId, Boolean major,
-            String filter, CmisExtensionType extension) throws CmisException {
-        CmisService service = null;
-        try {
-            service = getService(wsContext, repositoryId);
-
-            if (stopBeforeService(service)) {
-                return null;
-            }
-
-            Properties serviceResult = service.getPropertiesOfLatestVersion(repositoryId, null, versionSeriesId, major,
-                    filter, convert(extension));
-
-            if (stopAfterService(service)) {
-                return null;
-            }
-
-            return convert(serviceResult);
-        } catch (Exception e) {
-            throw convertException(e);
-        } finally {
-            closeService(service);
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/WebSphereAuthHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/WebSphereAuthHandler.java
deleted file mode 100644
index 5d21b7d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/WebSphereAuthHandler.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl.webservices;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.namespace.QName;
-import javax.xml.ws.handler.MessageContext;
-import javax.xml.ws.handler.MessageContext.Scope;
-import javax.xml.ws.handler.soap.SOAPHandler;
-import javax.xml.ws.handler.soap.SOAPMessageContext;
-
-public class WebSphereAuthHandler extends AbstractUsernameTokenAuthHandler implements SOAPHandler<SOAPMessageContext> {
-
-    public Set<QName> getHeaders() {
-        return HEADERS;
-    }
-
-    public void close(MessageContext context) {
-    }
-
-    public boolean handleFault(SOAPMessageContext context) {
-        return true;
-    }
-
-    @SuppressWarnings("unchecked")
-    public boolean handleMessage(SOAPMessageContext context) {
-        Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
-        if (outboundProperty.booleanValue()) {
-            // we are only looking at inbound messages
-            return true;
-        }
-
-        Map<String, String> callContextMap = null;
-
-        Map<QName, List<String>> requestHeaders = (Map<QName, List<String>>) context
-                .get("jaxws.binding.soap.headers.inbound");
-
-        if (requestHeaders != null) {
-            List<String> secHeaders = requestHeaders.get(WSSE_SECURITY);
-            if (isNotEmpty(secHeaders)) {
-                try {
-                    Unmarshaller unmarshaller = WSSE_CONTEXT.createUnmarshaller();
-
-                    for (String h : secHeaders) {
-                        try {
-                            JAXBElement<SecurityHeaderType> sht = (JAXBElement<SecurityHeaderType>) unmarshaller
-                                    .unmarshal(new StringReader(h));
-
-                            callContextMap = extractUsernamePassword(sht);
-                            if (callContextMap != null) {
-                                break;
-                            }
-
-                        } catch (Exception e) {
-                            // unmarshalling failed, maybe another header -
-                            // ignore
-                        }
-                    }
-                } catch (Exception e) {
-                    // JAXB problem - ignore
-                }
-            }
-        }
-
-        // add user and password to context
-        if (callContextMap == null) {
-            callContextMap = new HashMap<String, String>();
-        }
-
-        context.put(AbstractService.CALL_CONTEXT_MAP, callContextMap);
-        context.setScope(AbstractService.CALL_CONTEXT_MAP, Scope.APPLICATION);
-
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractCmisHttpServlet.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractCmisHttpServlet.java
deleted file mode 100644
index 0370ce2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractCmisHttpServlet.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
-import org.apache.chemistry.opencmis.server.impl.CmisRepositoryContextListener;
-import org.apache.chemistry.opencmis.server.impl.browser.BrowserCallContextImpl;
-
-public abstract class AbstractCmisHttpServlet extends HttpServlet {
-
-    public static final String PARAM_CALL_CONTEXT_HANDLER = "callContextHandler";
-    public static final String PARAM_CMIS_VERSION = "cmisVersion";
-
-    private static final long serialVersionUID = 1L;
-
-    private CmisServiceFactory factory;
-    private String binding;
-    private CmisVersion cmisVersion;
-    private CallContextHandler callContextHandler;
-
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-        super.init(config);
-
-        // initialize the call context handler
-        callContextHandler = null;
-        String callContextHandlerClass = config.getInitParameter(PARAM_CALL_CONTEXT_HANDLER);
-        if (callContextHandlerClass != null) {
-            try {
-                callContextHandler = (CallContextHandler) ClassLoaderUtil.loadClass(callContextHandlerClass)
-                        .newInstance();
-            } catch (Exception e) {
-                throw new ServletException("Could not load call context handler: " + e, e);
-            }
-        }
-
-        // get service factory
-        factory = (CmisServiceFactory) config.getServletContext().getAttribute(
-                CmisRepositoryContextListener.SERVICES_FACTORY);
-
-        if (factory == null) {
-            throw new ServletException("Service factory not available! Configuration problem?");
-        }
-    }
-
-    /**
-     * Sets the binding.
-     */
-    protected void setBinding(String binding) {
-        this.binding = binding;
-    }
-
-    /**
-     * Returns the CMIS version configured for this servlet.
-     */
-    protected CmisVersion getCmisVersion() {
-        return cmisVersion;
-    }
-
-    protected void setCmisVersion(CmisVersion cmisVersion) {
-        this.cmisVersion = cmisVersion;
-    }
-
-    /**
-     * Returns the {@link CmisServiceFactory}.
-     */
-    protected CmisServiceFactory getServiceFactory() {
-        return factory;
-    }
-
-    /**
-     * Return the {@link CallContextHandler}
-     */
-    protected CallContextHandler getCallContextHandler() {
-        return callContextHandler;
-    }
-
-    /**
-     * Creates a {@link CallContext} object from a servlet request.
-     */
-    protected CallContext createContext(ServletContext servletContext, HttpServletRequest request,
-            HttpServletResponse response, TempStoreOutputStreamFactory streamFactory) {
-        String[] pathFragments = HttpUtils.splitPath(request);
-
-        String repositoryId = null;
-        if (pathFragments.length > 0) {
-            repositoryId = pathFragments[0];
-        }
-
-        if (repositoryId == null && CallContext.BINDING_ATOMPUB.equals(binding)) {
-            // it's a getRepositories or getRepositoryInfo call
-            // getRepositoryInfo has the repository ID in the query parameters
-            repositoryId = HttpUtils.getStringParameter(request, Constants.PARAM_REPOSITORY_ID);
-        }
-
-        CallContextImpl context = null;
-
-        if (CallContext.BINDING_BROWSER.equals(binding)) {
-            context = new BrowserCallContextImpl(binding, cmisVersion, repositoryId, servletContext, request, response,
-                    factory, streamFactory);
-        } else {
-            context = new CallContextImpl(binding, cmisVersion, repositoryId, servletContext, request, response,
-                    factory, streamFactory);
-        }
-
-        // decode range
-        context.setRange(request.getHeader("Range"));
-
-        // get locale
-        context.setAcceptLanguage(request.getHeader("Accept-Language"));
-
-        // call call context handler
-        if (callContextHandler != null) {
-            Map<String, String> callContextMap = callContextHandler.getCallContextMap(request);
-            if (callContextMap != null) {
-                for (Map.Entry<String, String> e : callContextMap.entrySet()) {
-                    context.put(e.getKey(), e.getValue());
-                }
-            }
-        }
-
-        return context;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java
deleted file mode 100644
index 6eb9d26..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.CacheHeaderContentStream;
-import org.apache.chemistry.opencmis.commons.data.ContentLengthContentStream;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.LastModifiedContentStream;
-import org.apache.chemistry.opencmis.commons.data.RedirectingContentStream;
-import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.CmisEnumHelper;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService.Progress;
-
-public abstract class AbstractServiceCall implements ServiceCall {
-
-    /**
-     * Extracts a string parameter.
-     */
-    public String getStringParameter(HttpServletRequest request, String name) {
-        return HttpUtils.getStringParameter(request, name);
-    }
-
-    /**
-     * Extracts a boolean parameter (with default).
-     */
-    public boolean getBooleanParameter(HttpServletRequest request, String name, boolean def) {
-        String value = getStringParameter(request, name);
-        if ((value == null) || (value.length() == 0)) {
-            return def;
-        }
-
-        return Boolean.valueOf(value);
-    }
-
-    /**
-     * Extracts a boolean parameter.
-     */
-    public Boolean getBooleanParameter(HttpServletRequest request, String name) {
-        String value = getStringParameter(request, name);
-        if ((value == null) || (value.length() == 0)) {
-            return null;
-        }
-
-        return Boolean.valueOf(value);
-    }
-
-    /**
-     * Extracts an integer parameter (with default).
-     */
-    public BigInteger getBigIntegerParameter(HttpServletRequest request, String name, long def) {
-        BigInteger result = getBigIntegerParameter(request, name);
-        if (result == null) {
-            result = BigInteger.valueOf(def);
-        }
-
-        return result;
-    }
-
-    /**
-     * Extracts an integer parameter.
-     */
-    public BigInteger getBigIntegerParameter(HttpServletRequest request, String name) {
-        String value = getStringParameter(request, name);
-        if ((value == null) || (value.length() == 0)) {
-            return null;
-        }
-
-        try {
-            return new BigInteger(value);
-        } catch (Exception e) {
-            throw new CmisInvalidArgumentException("Invalid parameter '" + name + "'!", e);
-        }
-    }
-
-    public DateTimeFormat getDateTimeFormatParameter(HttpServletRequest request) {
-        String s = getStringParameter(request, Constants.PARAM_DATETIME_FORMAT);
-
-        if (s == null) {
-            return DateTimeFormat.SIMPLE;
-        }
-
-        try {
-            return DateTimeFormat.fromValue(s.trim().toLowerCase(Locale.ENGLISH));
-        } catch (IllegalArgumentException e) {
-            throw new CmisInvalidArgumentException("Invalid value for parameter " + Constants.PARAM_DATETIME_FORMAT
-                    + "!");
-        }
-    }
-
-    /**
-     * Extracts an enum parameter.
-     */
-    public <T extends Enum<T>> T getEnumParameter(HttpServletRequest request, String name, Class<T> clazz) {
-        return CmisEnumHelper.fromValue(getStringParameter(request, name), clazz);
-    }
-
-    /**
-     * Sets certain HTTP headers if the server implementation requested them.
-     * 
-     * @return {@code true} if the request has been served by this method (for
-     *         example status code 304 was send), {@code false} if the content
-     *         should be served.
-     */
-    public boolean sendContentStreamHeaders(ContentStream content, HttpServletRequest request,
-            HttpServletResponse response) throws IOException {
-        assert request != null;
-        assert response != null;
-
-        // check if Last-Modified header should be set
-        if (content instanceof LastModifiedContentStream) {
-            GregorianCalendar lastModified = ((LastModifiedContentStream) content).getLastModified();
-            if (lastModified != null) {
-                long lastModifiedSecs = (long) Math.floor((double) lastModified.getTimeInMillis() / 1000);
-
-                Date modifiedSince = DateTimeHelper.parseHttpDateTime(request.getHeader("If-Modified-Since"));
-                if (modifiedSince != null) {
-                    long modifiedSinceSecs = (long) Math.floor((double) modifiedSince.getTime() / 1000);
-
-                    if (modifiedSinceSecs >= lastModifiedSecs) {
-                        // close stream
-                        content.getStream().close();
-
-                        // send not modified status code
-                        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-                        response.setContentLength(0);
-                        return true;
-                    }
-                }
-
-                response.setHeader("Last-Modified", DateTimeHelper.formatHttpDateTime(lastModifiedSecs * 1000));
-            }
-        }
-
-        // check if redirection is needed
-        if (content instanceof RedirectingContentStream) {
-            RedirectingContentStream rcs = (RedirectingContentStream) content;
-            // close stream
-            if (content.getStream() != null) {
-                content.getStream().close();
-            }
-
-            if (rcs.getLocation() != null) {
-                response.setHeader("Location", rcs.getLocation());
-            }
-
-            int status = rcs.getStatus();
-            if (status < 300 || status >= 400) {
-                status = HttpServletResponse.SC_TEMPORARY_REDIRECT;
-            }
-
-            response.setStatus(status);
-
-            return true;
-        }
-
-        // check if cache headers should be set
-        if (content instanceof CacheHeaderContentStream) {
-            CacheHeaderContentStream chcs = (CacheHeaderContentStream) content;
-
-            if (chcs.getETag() != null) {
-                String etag = request.getHeader("If-None-Match");
-                if (etag != null && !etag.equals("*")) {
-                    if (etag.length() > 2 && etag.charAt(0) == '"' && etag.endsWith("\"")) {
-                        etag = etag.substring(1, etag.length() - 1);
-                    }
-
-                    if (chcs.getETag().equals(etag)) {
-                        // close stream
-                        content.getStream().close();
-
-                        // send not modified status code
-                        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-                        response.setContentLength(0);
-                        return true;
-                    }
-                }
-
-                response.setHeader("ETag", "\"" + chcs.getETag() + "\"");
-            }
-
-            if (chcs.getCacheControl() != null) {
-                response.setHeader("Cache-Control", chcs.getCacheControl());
-            }
-
-            if (chcs.getExpires() != null) {
-                response.setHeader("Expires", DateTimeHelper.formatHttpDateTime(chcs.getExpires()));
-            }
-        }
-
-        // check if Content-Length header should be set
-        if (content instanceof ContentLengthContentStream) {
-            if (content.getBigLength() != null && content.getBigLength().signum() >= 0) {
-                response.setHeader("Content-Length", content.getBigLength().toString());
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Determines if the processing should be stopped before the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopBeforeService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).beforeServiceCall() == Progress.STOP;
-    }
-
-    /**
-     * Determines if the processing should be stopped after the service method
-     * is called.
-     * 
-     * @return {@code true} if the processing should be stopped, {@code false}
-     *         otherwise
-     */
-    protected boolean stopAfterService(CmisService service) {
-        if (!(service instanceof ProgressControlCmisService)) {
-            return false;
-        }
-
-        return ((ProgressControlCmisService) service).afterServiceCall() == Progress.STOP;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/BasicAuthCallContextHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/BasicAuthCallContextHandler.java
deleted file mode 100644
index 661d28a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/BasicAuthCallContextHandler.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-/**
- * Call Context handler that handles basic authentication.
- */
-public class BasicAuthCallContextHandler implements CallContextHandler, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructor.
-     */
-    public BasicAuthCallContextHandler() {
-    }
-
-    public Map<String, String> getCallContextMap(HttpServletRequest request) {
-        assert request != null;
-
-        Map<String, String> result = null;
-
-        String authHeader = request.getHeader("Authorization");
-        if ((authHeader != null) && (authHeader.trim().toLowerCase(Locale.ENGLISH).startsWith("basic "))) {
-            int x = authHeader.lastIndexOf(' ');
-            if (x == -1) {
-                return result;
-            }
-
-            String credentials = null;
-            try {
-                credentials = new String(Base64.decode(authHeader.substring(x + 1).getBytes(IOUtils.ISO_8859_1)),
-                        IOUtils.UTF8);
-            } catch (Exception e) {
-                return result;
-            }
-
-            x = credentials.indexOf(':');
-            if (x == -1) {
-                return result;
-            }
-
-            // extract user and password and add them to map
-            result = new HashMap<String, String>();
-            result.put(CallContext.USERNAME, credentials.substring(0, x));
-            result.put(CallContext.PASSWORD, credentials.substring(x + 1));
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CallContextHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CallContextHandler.java
deleted file mode 100644
index dc376c4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CallContextHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-/**
- * Call Context handler interface.
- */
-public interface CallContextHandler {
-
-    /**
-     * Returns key-value pairs that will be added to the {@link CallContext}.
-     */
-    Map<String, String> getCallContextMap(HttpServletRequest request);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CappedInputStream.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CappedInputStream.java
deleted file mode 100644
index bf6173e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/CappedInputStream.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-
-/**
- * A stream that counts bytes and throws an exception if the given maximum is
- * reached. Counted bytes can be deducted to excludes parts of stream from the
- * length limitation.
- */
-public class CappedInputStream extends InputStream {
-
-    private InputStream stream;
-    private long max;
-    private long counter;
-
-    public CappedInputStream(InputStream stream, long max) {
-        this.stream = stream;
-        this.max = max;
-        this.counter = 0;
-    }
-
-    /**
-     * Returns the counter.
-     */
-    public long getCounter() {
-        return counter;
-    }
-
-    /**
-     * Deducts the byte counter.
-     */
-    public void deductBytes(int byteCount) {
-        counter -= byteCount;
-    }
-
-    /**
-     * Deducts the byte counter.
-     */
-    public void deductString(String s, String encoding) throws UnsupportedEncodingException {
-        if (encoding == null) {
-            counter -= s.getBytes("UTF-8").length;
-        } else {
-            counter -= s.getBytes(encoding).length;
-        }
-    }
-
-    private void checkLength() throws IOException {
-        if (counter > max) {
-            throw new CmisInvalidArgumentException("Limit exceeded!");
-        }
-    }
-
-    @Override
-    public int available() throws IOException {
-        return stream.available();
-    }
-
-    @Override
-    public synchronized void mark(int readlimit) {
-    }
-
-    @Override
-    public synchronized void reset() throws IOException {
-    }
-
-    @Override
-    public boolean markSupported() {
-        return false;
-    }
-
-    @Override
-    public int read() throws IOException {
-        checkLength();
-
-        int b = stream.read();
-        if (b > -1) {
-            counter++;
-        }
-
-        return b;
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        checkLength();
-
-        int l = stream.read(b, off, len);
-        counter += l;
-
-        return l;
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        checkLength();
-
-        int l = stream.read(b);
-        counter += l;
-
-        return l;
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        checkLength();
-
-        long l = stream.skip(n);
-        counter += l;
-
-        return l;
-    }
-
-    @Override
-    public void close() throws IOException {
-        stream.close();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/Dispatcher.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/Dispatcher.java
deleted file mode 100644
index 6c30387..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/Dispatcher.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Dispatcher for the AtomPub and Browser binding servlet.
- */
-public class Dispatcher implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String BASE_URL_ATTRIBUTE = "org.apache.chemistry.opencmis.baseurl";
-
-    public static final String METHOD_GET = "GET";
-    public static final String METHOD_HEAD = "HEAD";
-    public static final String METHOD_POST = "POST";
-    public static final String METHOD_PUT = "PUT";
-    public static final String METHOD_DELETE = "DELETE";
-
-    private static final Logger LOG = LoggerFactory.getLogger(Dispatcher.class.getName());
-
-    private final boolean caseSensitive;
-    private final Map<String, ServiceCall> serviceCallMap;
-
-    public Dispatcher() {
-        this(true);
-    }
-
-    public Dispatcher(boolean caseSensitive) {
-        this.caseSensitive = caseSensitive;
-        serviceCallMap = new HashMap<String, ServiceCall>();
-    }
-
-    /**
-     * Connects a resource and HTTP method with an object that handles the call.
-     */
-    public void addResource(String resource, String httpMethod, ServiceCall serviceCall) {
-        serviceCallMap.put(getKey(resource, httpMethod), serviceCall);
-    }
-
-    /**
-     * Handles the a call.
-     * 
-     * @return <code>true</code> if an object was found that can handle the
-     *         request, <code>false</code> otherwise.
-     */
-    public boolean dispatch(String resource, String httpMethod, CallContext context, CmisService service,
-            String repositoryId, HttpServletRequest request, HttpServletResponse response) {
-        ServiceCall serviceCall = serviceCallMap.get(getKey(resource, httpMethod));
-        if (serviceCall == null) {
-            return false;
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug(repositoryId + " / " + resource + ", " + httpMethod + " -> " + serviceCall.getClass().getName());
-        }
-
-        try {
-            serviceCall.serve(context, service, repositoryId, request, response);
-        } catch (CmisBaseException ce) {
-            throw ce;
-        } catch (XMLStreamException xse) {
-            throw new CmisInvalidArgumentException("Invalid XML!", xse);
-        } catch (JSONParseException jpe) {
-            throw new CmisInvalidArgumentException("Invalid JSON!", jpe);
-        } catch (Exception e) {
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-
-        return true;
-    }
-
-    /**
-     * Generates a map key from a resource and an HTTP method.
-     */
-    private String getKey(String resource, String httpMethod) {
-        String s = resource + "/" + httpMethod;
-        return (caseSensitive ? s : s.toUpperCase());
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ExceptionHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ExceptionHelper.java
deleted file mode 100644
index 978ef54..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ExceptionHelper.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-public final class ExceptionHelper {
-
-    public static final String STACK_TRACE_PROPERTY = "org.apache.chemistry.opencmis.stacktrace.disable";
-
-    private static final boolean SEND_STACK_TRACE;
-
-    static {
-        SEND_STACK_TRACE = System.getProperty(STACK_TRACE_PROPERTY) == null;
-    }
-
-    private ExceptionHelper() {
-    }
-
-    /**
-     * Returns the stack trace as string.
-     */
-    public static String getStacktraceAsString(Throwable t) {
-        if (!SEND_STACK_TRACE || t == null) {
-            return null;
-        }
-
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-
-        t.printStackTrace(pw);
-
-        return sw.toString();
-    }
-
-    /**
-     * Returns the stack trace as DOM node.
-     */
-    public static Node getStacktraceAsNode(Throwable t) {
-        try {
-            String st = getStacktraceAsString(t);
-            if (st != null) {
-                Document doc = XMLUtils.newDomDocument();
-
-                Element node = doc.createElementNS("http://chemistry.apache.org/opencmis/exception", "stacktrace");
-                doc.appendChild(node);
-
-                node.appendChild(doc.createTextNode(st));
-
-                return node;
-            }
-        } catch (Exception e) {
-            assert false;
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HEADHttpServletRequestWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HEADHttpServletRequestWrapper.java
deleted file mode 100644
index d012602..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HEADHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-
-public class HEADHttpServletRequestWrapper extends QueryStringHttpServletRequestWrapper {
-
-    public HEADHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
-        super(request);
-    }
-
-    @Override
-    public String getMethod() {
-        return Dispatcher.METHOD_GET;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HttpUtils.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HttpUtils.java
deleted file mode 100644
index 5f6987b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/HttpUtils.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-
-public final class HttpUtils {
-
-    private HttpUtils() {
-    }
-
-    /**
-     * Extracts a string parameter.
-     */
-    public static String getStringParameter(final HttpServletRequest request, final String name) {
-        assert request != null;
-
-        if (name == null) {
-            return null;
-        }
-
-        @SuppressWarnings("unchecked")
-        Map<String, String[]> parameters = request.getParameterMap();
-
-        if (parameters != null) {
-            for (Map.Entry<String, String[]> parameter : parameters.entrySet()) {
-                if (name.equalsIgnoreCase(parameter.getKey())) {
-                    if (parameter.getValue() == null) {
-                        return null;
-                    }
-                    return parameter.getValue()[0];
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Splits the path into its fragments.
-     */
-    public static String[] splitPath(final HttpServletRequest request) {
-        assert request != null;
-
-        int prefixLength = request.getContextPath().length() + request.getServletPath().length();
-        String p = request.getRequestURI().substring(prefixLength);
-
-        if (p.length() == 0) {
-            return new String[0];
-        }
-
-        String[] result = p.substring(1).split("/");
-        for (int i = 0; i < result.length; i++) {
-            result[i] = IOUtils.decodeURL(result[i]);
-
-            // check for malicious characters
-            for (int j = 0; j < result[i].length(); j++) {
-                char c = result[i].charAt(j);
-                if (c == '\n' || c == '\r' || c == '\b' || c == 0) {
-                    throw new CmisInvalidArgumentException("Invalid path!");
-                }
-            }
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/NoBodyHttpServletResponseWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/NoBodyHttpServletResponseWrapper.java
deleted file mode 100644
index 0b4d30e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/NoBodyHttpServletResponseWrapper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-public class NoBodyHttpServletResponseWrapper extends HttpServletResponseWrapper {
-
-    private final NoBodyOutputStream noBodyStream;
-    private PrintWriter writer;
-
-    public NoBodyHttpServletResponseWrapper(HttpServletResponse response) throws IOException {
-        super(response);
-        noBodyStream = new NoBodyOutputStream();
-    }
-
-    @Override
-    public ServletOutputStream getOutputStream() throws IOException {
-        return noBodyStream;
-    }
-
-    public PrintWriter getWriter() throws UnsupportedEncodingException {
-        if (writer == null) {
-            writer = new PrintWriter(new OutputStreamWriter(noBodyStream, getCharacterEncoding()));
-        }
-
-        return writer;
-    }
-
-    private static class NoBodyOutputStream extends ServletOutputStream {
-        @Override
-        public void write(int b) throws IOException {
-            // ignore
-        }
-
-        @Override
-        public void write(byte[] b) throws IOException {
-            // ignore
-        }
-
-        @Override
-        public void write(byte[] b, int off, int len) throws IOException {
-            // ignore
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/QueryStringHttpServletRequestWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/QueryStringHttpServletRequestWrapper.java
deleted file mode 100644
index bc28264..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/QueryStringHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-
-/**
- * HttpServletRequest wrapper that reads the query string in container
- * independent way and decodes the parameter values with UTF-8.
- */
-public class QueryStringHttpServletRequestWrapper extends HttpServletRequestWrapper {
-
-    protected Map<String, String[]> parameters;
-
-    public QueryStringHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
-        super(request);
-
-        parameters = new HashMap<String, String[]>();
-
-        // parse query string
-        parseFormData(request.getQueryString());
-    }
-
-    /**
-     * Parses the query string.
-     */
-    protected final void parseFormData(String queryString) throws IOException {
-        if (queryString == null || queryString.length() < 3) {
-            return;
-        }
-
-        String[] nameValuePairs = queryString.split("&");
-        for (String nameValuePair : nameValuePairs) {
-            int x = nameValuePair.indexOf('=');
-            if (x > 0) {
-                String name = IOUtils.decodeURL(nameValuePair.substring(0, x));
-                String value = (x == nameValuePair.length() - 1 ? "" : IOUtils
-                        .decodeURL(nameValuePair.substring(x + 1)));
-                addParameter(name, value);
-            } else {
-                String name = IOUtils.decodeURL(nameValuePair);
-                addParameter(name, (String) null);
-            }
-        }
-    }
-
-    /**
-     * Adds a value to a parameter.
-     */
-    protected final void addParameter(String name, String value) {
-        String[] values = parameters.get(name);
-
-        if (values == null) {
-            parameters.put(name, new String[] { value });
-        } else {
-            String[] newValues = new String[values.length + 1];
-            System.arraycopy(values, 0, newValues, 0, values.length);
-            newValues[newValues.length - 1] = value;
-            parameters.put(name, newValues);
-        }
-    }
-
-    /**
-     * Adds an array of values to a parameter.
-     */
-    protected final void addParameter(String name, String[] additionalValues) {
-        String[] values = parameters.get(name);
-
-        if (values == null) {
-            parameters.put(name, additionalValues);
-        } else {
-            String[] newValues = new String[values.length + additionalValues.length];
-            System.arraycopy(values, 0, newValues, 0, values.length);
-            System.arraycopy(additionalValues, 0, newValues, values.length, additionalValues.length);
-            parameters.put(name, newValues);
-        }
-    }
-
-    @Override
-    public final String getParameter(String name) {
-        String[] values = parameters.get(name);
-        if ((values == null) || (values.length == 0)) {
-            return null;
-        }
-
-        return values[0];
-    }
-
-    @Override
-    public final Map<String, String[]> getParameterMap() {
-        return parameters;
-    }
-
-    @Override
-    public final Enumeration<String> getParameterNames() {
-        return Collections.enumeration(parameters.keySet());
-    }
-
-    @Override
-    public final String[] getParameterValues(String name) {
-        return parameters.get(name);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ServiceCall.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ServiceCall.java
deleted file mode 100644
index 247aa37..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ServiceCall.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-public interface ServiceCall {
-
-    /**
-     * Serves an AtomPub or Browser binding call.
-     */
-    void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-            HttpServletResponse response) throws Exception;
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/TempStoreOutputStreamFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/TempStoreOutputStreamFactory.java
deleted file mode 100644
index 293febc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/TempStoreOutputStreamFactory.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.File;
-
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-
-/**
- * A factory for {@link TempStoreOutputStream} objects.
- */
-public class TempStoreOutputStreamFactory {
-
-    private CmisServiceFactory factory;
-    private String repositoryId;
-
-    private File tempDir;
-    private int memoryThreshold;
-    private long maxContentSize;
-    private boolean encrypt;
-
-    protected TempStoreOutputStreamFactory(CmisServiceFactory factory, String repositoryId) {
-        this.factory = factory;
-        this.repositoryId = repositoryId;
-        this.tempDir = factory.getTempDirectory();
-        this.memoryThreshold = factory.getMemoryThreshold();
-        this.maxContentSize = factory.getMaxContentSize();
-        this.encrypt = factory.encryptTempFiles();
-    }
-
-    protected TempStoreOutputStreamFactory(File tempDir, int memoryThreshold, long maxContentSize, boolean encrypt) {
-        this.factory = null;
-        this.repositoryId = null;
-        this.tempDir = tempDir;
-        this.memoryThreshold = memoryThreshold;
-        this.maxContentSize = maxContentSize;
-        this.encrypt = encrypt;
-    }
-
-    /**
-     * Creates a new factory. The parameters are used to create new
-     * {@link TempStoreOutputStream} objects.
-     * 
-     * @param factory
-     *            the CmisService object factory
-     * @param repositoryId
-     *            the repository ID
-     */
-    public static TempStoreOutputStreamFactory newInstance(CmisServiceFactory factory, String repositoryId) {
-        return new TempStoreOutputStreamFactory(factory, repositoryId);
-    }
-
-    /**
-     * Creates a new factory. The parameters are used to create new
-     * {@link TempStoreOutputStream} objects.
-     * 
-     * @param tempDir
-     *            temp directory or {@code null} for the default temp directory
-     * @param memoryThreshold
-     *            memory threshold in bytes
-     * @param maxContentSize
-     *            max size of the content in bytes (-1 to disable the check)
-     * @param encrypt
-     *            indicates if temporary files must be encrypted
-     */
-    public static TempStoreOutputStreamFactory newInstance(File tempDir, int memoryThreshold, long maxContentSize,
-            boolean encrypt) {
-        return new TempStoreOutputStreamFactory(tempDir, memoryThreshold, maxContentSize, encrypt);
-    }
-
-    /**
-     * Creates a new {@link TempStoreOutputStream} object.
-     */
-    public TempStoreOutputStream newOutputStream() {
-        TempStoreOutputStream stream = null;
-
-        if (factory != null) {
-            stream = factory.getTempFileOutputStream(repositoryId);
-        }
-
-        if (stream == null) {
-            stream = new ThresholdOutputStream(tempDir, memoryThreshold, maxContentSize, encrypt);
-        }
-
-        return stream;
-    }
-
-    /**
-     * Returns the temp directory or {@code null} for the default temp
-     * directory.
-     */
-    public File getTempDir() {
-        return tempDir;
-    }
-
-    /**
-     * Returns the memory threshold in bytes.
-     */
-    public int getMemoryThreshold() {
-        return memoryThreshold;
-    }
-
-    /**
-     * Returns the max content size in bytes.
-     */
-    public long getMaxContentSize() {
-        return maxContentSize;
-    }
-
-    /**
-     * Indicates if temporary files are encrypted.
-     */
-    public boolean isEncrypted() {
-        return encrypt;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStream.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStream.java
deleted file mode 100644
index 936134c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStream.java
+++ /dev/null
@@ -1,745 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.Key;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.KeyGenerator;
-import javax.crypto.spec.IvParameterSpec;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * An OutputStream that stores the data in main memory until it reaches a
- * threshold. If the threshold is passed the data is written to a temporary
- * file.
- * 
- * It it is important to close this OutputStream before
- * {@link #getInputStream()} is called or call {@link #destroy()} if the
- * InputStream isn't required!
- */
-public class ThresholdOutputStream extends TempStoreOutputStream {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ThresholdOutputStream.class);
-
-    private static final int MAX_GROW = 10 * 1024 * 1024; // 10 MiB
-    private static final int DEFAULT_THRESHOLD = 4 * 1024 * 1024; // 4 MiB
-
-    private static final String ALGORITHM = "AES";
-    private static final String MODE = "CTR";
-    private static final String PADDING = "PKCS5Padding";
-    private static final String TRANSFORMATION = ALGORITHM + '/' + MODE + '/' + PADDING;
-    private static final int KEY_SIZE = 128;
-
-    private final File tempDir;
-    private final int memoryThreshold;
-    private final long maxContentSize;
-    private final boolean encrypt;
-
-    private byte[] buf = null;
-    private int bufSize = 0;
-    private long length = 0;
-    private File tempFile;
-    private OutputStream tmpStream;
-    private Key key;
-    private byte[] iv;
-    private String mimeType;
-    private String filename;
-
-    /**
-     * Constructor.
-     * 
-     * @param tempDir
-     *            temp directory or {@code null} for the default temp directory
-     * @param memoryThreshold
-     *            memory threshold in bytes
-     * @param maxContentSize
-     *            max size of the content in bytes (-1 to disable the check)
-     */
-    public ThresholdOutputStream(File tempDir, int memoryThreshold, long maxContentSize) {
-        this(64 * 1024, tempDir, memoryThreshold, maxContentSize, false);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param tempDir
-     *            temp directory or {@code null} for the default temp directory
-     * @param memoryThreshold
-     *            memory threshold in bytes
-     * @param maxContentSize
-     *            max size of the content in bytes (-1 to disable the check)
-     */
-    public ThresholdOutputStream(File tempDir, int memoryThreshold, long maxContentSize, boolean encrypt) {
-        this(64 * 1024, tempDir, memoryThreshold, maxContentSize, encrypt);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param initSize
-     *            initial internal buffer size
-     * @param tempDir
-     *            temp directory or {@code null} for the default temp directory
-     * @param memoryThreshold
-     *            memory threshold in bytes
-     * @param maxContentSize
-     *            max size of the content in bytes (-1 to disable the check)
-     * @param encrypt
-     *            indicates if temporary files must be encrypted
-     */
-    public ThresholdOutputStream(int initSize, File tempDir, int memoryThreshold, long maxContentSize, boolean encrypt) {
-        if (initSize < 0) {
-            throw new IllegalArgumentException("Negative initial size: " + initSize);
-        }
-
-        this.tempDir = tempDir;
-        this.memoryThreshold = (memoryThreshold < 0 ? DEFAULT_THRESHOLD : memoryThreshold);
-        this.maxContentSize = maxContentSize;
-        this.encrypt = encrypt;
-
-        buf = new byte[initSize];
-    }
-
-    private void expand(int nextBufferSize) throws IOException {
-        if (bufSize + nextBufferSize <= buf.length) {
-            return;
-        }
-
-        if (bufSize + nextBufferSize > memoryThreshold) {
-            if (tmpStream == null) {
-                openTempFile();
-            }
-            tmpStream.write(buf, 0, bufSize);
-
-            if (buf.length != memoryThreshold) {
-                buf = new byte[memoryThreshold];
-            }
-            bufSize = 0;
-
-            return;
-        }
-
-        int newSize = ((bufSize + nextBufferSize) * 2 < MAX_GROW ? (bufSize + nextBufferSize) * 2 : buf.length
-                + nextBufferSize + MAX_GROW);
-        byte[] newbuf = new byte[newSize];
-        System.arraycopy(buf, 0, newbuf, 0, bufSize);
-        buf = newbuf;
-    }
-
-    private void openTempFile() throws IOException {
-        tempFile = File.createTempFile("opencmis", null, tempDir);
-
-        try {
-            if (encrypt) {
-                Cipher cipher;
-                try {
-                    KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
-                    keyGenerator.init(KEY_SIZE);
-                    key = keyGenerator.generateKey();
-
-                    cipher = Cipher.getInstance(TRANSFORMATION);
-                    cipher.init(Cipher.ENCRYPT_MODE, key);
-
-                    iv = cipher.getIV();
-                } catch (Exception e) {
-
-                    if (LOG.isErrorEnabled()) {
-                        LOG.error("Cannot initialize encryption cipher: {}", e.toString(), e);
-                    }
-
-                    throw new IOException("Cannot initialize encryption cipher!", e);
-                }
-
-                tmpStream = new BufferedOutputStream(new CipherOutputStream(new FileOutputStream(tempFile), cipher));
-            } else {
-                tmpStream = new BufferedOutputStream(new FileOutputStream(tempFile));
-            }
-        } catch (IOException ioe) {
-            if (tempFile.exists()) {
-                if (!tempFile.delete()) {
-                    if (LOG.isErrorEnabled()) {
-                        LOG.error("Temp file {} could not be deleted!", tempFile.getAbsolutePath());
-                    }
-                }
-            }
-
-            throw ioe;
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Created temp file: {}", tempFile.getAbsolutePath());
-        }
-    }
-
-    public void setMimeType(String mimeType) {
-        this.mimeType = mimeType;
-    }
-
-    public String getMimeType() {
-        return mimeType;
-    }
-
-    public void setFileName(String filename) {
-        this.filename = filename;
-    }
-
-    public String getFileName() {
-        return filename;
-    }
-
-    public long getLength() {
-        return length;
-    }
-
-    @Override
-    public void write(byte[] buffer) throws IOException {
-        write(buffer, 0, buffer.length);
-    }
-
-    @Override
-    public void write(byte[] buffer, int offset, int len) throws IOException {
-        try {
-            if (len == 0) {
-                return;
-            }
-
-            if ((maxContentSize > -1) && (length + len > maxContentSize)) {
-                destroy(null);
-                throw new CmisConstraintException("Content too big!");
-            }
-
-            expand(len);
-            System.arraycopy(buffer, offset, buf, bufSize, len);
-            bufSize += len;
-            length += len;
-        } catch (IOException ioe) {
-            destroy(ioe);
-
-            if (LOG.isErrorEnabled()) {
-                if (tempFile != null) {
-                    LOG.error("Writing to temp file {} failed: {}", tempFile.getAbsolutePath(), ioe.toString(), ioe);
-                } else {
-                    LOG.error("Writing to temp buffer failed: {}", ioe.toString(), ioe);
-                }
-            }
-
-            throw ioe;
-        }
-    }
-
-    @Override
-    public void write(int oneByte) throws IOException {
-        try {
-            if (maxContentSize > -1 && length + 1 > maxContentSize) {
-                destroy(null);
-                throw new CmisConstraintException("Content too big!");
-            }
-
-            if (bufSize == buf.length) {
-                expand(1);
-            }
-
-            buf[bufSize++] = (byte) oneByte;
-            length++;
-        } catch (IOException ioe) {
-            destroy(ioe);
-
-            if (LOG.isErrorEnabled()) {
-                if (tempFile != null) {
-                    LOG.error("Writing to temp file {} failed: {}", tempFile.getAbsolutePath(), ioe.toString(), ioe);
-                } else {
-                    LOG.error("Writing to temp buffer failed: {}", ioe.toString(), ioe);
-                }
-            }
-
-            throw ioe;
-        }
-    }
-
-    @Override
-    public void flush() throws IOException {
-        if (tmpStream == null && memoryThreshold < bufSize) {
-            openTempFile();
-        }
-
-        if (tmpStream != null) {
-            try {
-                if (bufSize > 0) {
-                    tmpStream.write(buf, 0, bufSize);
-                    bufSize = 0;
-                }
-                tmpStream.flush();
-            } catch (IOException ioe) {
-                destroy(ioe);
-
-                if (LOG.isErrorEnabled()) {
-                    LOG.error("Flushing the temp file {} failed: {}", tempFile.getAbsolutePath(), ioe.toString(), ioe);
-                }
-
-                throw ioe;
-            }
-        }
-    }
-
-    @Override
-    public void close() throws IOException {
-        flush();
-
-        if (tmpStream != null) {
-            tmpStream.close();
-        }
-    }
-
-    /**
-     * Destroys the object before it has been read.
-     */
-    @Override
-    public void destroy(Throwable cause) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("ThresholdOutputStream destroyed." + (cause == null ? "" : " Cause: " + cause.toString()), cause);
-        }
-
-        if (tmpStream != null) {
-            try {
-                tmpStream.flush();
-            } catch (Exception e) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Flushing the temp file {} failed: {}", tempFile.getAbsolutePath(), e.toString(), e);
-                }
-            }
-            try {
-                tmpStream.close();
-            } catch (Exception e) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Closing the temp file {} failed: {}", tempFile.getAbsolutePath(), e.toString(), e);
-                }
-            }
-
-            tmpStream = null;
-        }
-
-        if (tempFile != null) {
-            boolean isDeleted = tempFile.delete();
-            if (!isDeleted) {
-                if (LOG.isErrorEnabled()) {
-                    LOG.error("Temp file {} could not be deleted!", tempFile.getAbsolutePath());
-                }
-            } else {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Deleted temp file: {}", tempFile.getAbsolutePath());
-                }
-            }
-        }
-
-        buf = null;
-    }
-
-    /**
-     * Returns the data as an InputStream.
-     */
-    @Override
-    public InputStream getInputStream() throws IOException {
-        if (tmpStream != null) {
-            close();
-            buf = null;
-
-            return new InternalTempFileInputStream();
-        } else {
-            return new InternalBufferInputStream();
-        }
-    }
-
-    /**
-     * Provides information about the input stream.
-     */
-    public abstract class ThresholdInputStream extends InputStream {
-
-        /**
-         * Returns if the data is stored in memory.
-         * 
-         * @return {@code true} if the data is in memory and {@code false} if
-         *         the data resides in a temporary file
-         */
-        public abstract boolean isInMemory();
-
-        /**
-         * Gets the temporary file.
-         * 
-         * @return the temporary file or {@code null} if the data is stored in
-         *         memory
-         */
-        public File getTemporaryFile() {
-            return null;
-        }
-
-        /**
-         * Gets the byte buffer.
-         * 
-         * This the underlying byte buffer and might be bigger than then the
-         * total length of the stream.
-         * 
-         * @return the content in a byte array or {@code null} if the data is
-         *         stored in a file
-         */
-        public byte[] getBytes() {
-            return null;
-        }
-
-        /**
-         * Returns the MIME type of the stream.
-         * 
-         * @return the MIME type or {@code null} if the MIME type is unknown
-         */
-        public String getMimeType() {
-            return mimeType;
-        }
-
-        /**
-         * Returns the file name of the stream.
-         * 
-         * @return the file name or {@code null} if the file name is unknown
-         */
-        public String getFileName() {
-            return filename;
-        }
-
-        /**
-         * Returns the length of the stream.
-         * 
-         * @return the length of the stream in bytes
-         */
-        public long getLength() {
-            return length;
-        }
-
-        /**
-         * Rewinds the stream so that it can be read from the beginning.
-         */
-        public abstract void rewind() throws IOException;
-    }
-
-    /**
-     * InputStream for in-memory data.
-     */
-    private class InternalBufferInputStream extends ThresholdInputStream {
-
-        private int pos = 0;
-        private int mark = -1;
-
-        @Override
-        public boolean isInMemory() {
-            return true;
-        }
-
-        @Override
-        public byte[] getBytes() {
-            if (buf == null) {
-                throw new IllegalStateException("Stream is already closed!");
-            }
-
-            return buf;
-        }
-
-        @Override
-        public void rewind() throws IOException {
-            if (buf == null) {
-                throw new IOException("Stream is already closed!");
-            }
-
-            pos = 0;
-            mark = -1;
-        }
-
-        @Override
-        public boolean markSupported() {
-            return true;
-        }
-
-        @Override
-        public void mark(int readlimit) {
-            if (buf != null) {
-                mark = pos;
-            }
-        }
-
-        @Override
-        public void reset() throws IOException {
-            if (mark < 0) {
-                throw new IOException("Reset not possible.");
-            }
-
-            pos = mark;
-        }
-
-        @Override
-        public int available() {
-            if (buf == null) {
-                return 0;
-            }
-
-            return bufSize - pos;
-        }
-
-        @Override
-        public int read() {
-            return (pos < bufSize) && (buf != null) ? (buf[pos++] & 0xff) : -1;
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            return read(b, 0, b.length);
-        }
-
-        @Override
-        public int read(byte[] b, int off, int len) {
-            if ((pos >= bufSize) || (buf == null)) {
-                return -1;
-            }
-
-            if (len == 0) {
-                return 0;
-            }
-
-            if ((pos + len) > bufSize) {
-                len = (bufSize - pos);
-            }
-
-            System.arraycopy(buf, pos, b, off, len);
-            pos += len;
-
-            return len;
-        }
-
-        @Override
-        public long skip(long n) {
-            if (buf == null) {
-                return -1;
-            }
-
-            if (n <= 0) {
-                return 0;
-            }
-
-            if ((pos + n) > bufSize) {
-                n = bufSize - pos;
-            }
-
-            pos += n;
-
-            return n;
-        }
-
-        @Override
-        public void close() throws IOException {
-            buf = null;
-            mark = -1;
-        }
-    }
-
-    /**
-     * InputStream for temp file data.
-     * 
-     * Call {@link #close()} to delete the temp file.
-     */
-    private class InternalTempFileInputStream extends ThresholdInputStream {
-
-        private final Cipher cipher;
-        private BufferedInputStream stream;
-        private boolean isDeleted = false;
-        private boolean isClosed = false;
-
-        public InternalTempFileInputStream() throws IOException {
-
-            if (encrypt) {
-                try {
-                    cipher = Cipher.getInstance(TRANSFORMATION);
-                    cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
-                } catch (Exception e) {
-                    delete();
-
-                    if (LOG.isErrorEnabled()) {
-                        LOG.error("Cannot initialize decryption cipher: {}", e.toString(), e);
-                    }
-
-                    throw new IOException("Cannot initialize decryption cipher!", e);
-                }
-            } else {
-                cipher = null;
-            }
-
-            openStream();
-        }
-
-        /**
-         * Opens the temp file stream.
-         */
-        protected void openStream() throws FileNotFoundException {
-            int bufferSize = (memoryThreshold < 4 * 1024 ? 4 * 1024 : memoryThreshold);
-
-            if (encrypt) {
-                stream = new BufferedInputStream(new CipherInputStream(new FileInputStream(tempFile), cipher),
-                        bufferSize);
-            } else {
-                stream = new BufferedInputStream(new FileInputStream(tempFile), bufferSize);
-            }
-        }
-
-        @Override
-        public boolean isInMemory() {
-            return false;
-        }
-
-        @Override
-        public File getTemporaryFile() {
-            if (isDeleted) {
-                throw new IllegalStateException("Temporary file is already deleted!");
-            }
-
-            return tempFile;
-        }
-
-        @Override
-        public void rewind() throws IOException {
-            if (isClosed) {
-                throw new IOException("Stream is already closed!");
-            }
-
-            stream.close();
-
-            openStream();
-        }
-
-        @Override
-        public int available() throws IOException {
-            if (isClosed) {
-                return 0;
-            }
-
-            return stream.available();
-        }
-
-        @Override
-        public boolean markSupported() {
-            return stream.markSupported();
-        }
-
-        @Override
-        public void mark(int readlimit) {
-            if (!isClosed) {
-                stream.mark(readlimit);
-            }
-        }
-
-        @Override
-        public void reset() throws IOException {
-            if (isClosed) {
-                throw new IOException("Stream is already closed!");
-            }
-
-            stream.reset();
-        }
-
-        @Override
-        public long skip(long n) throws IOException {
-            if (isClosed) {
-                return -1;
-            }
-
-            return stream.skip(n);
-        }
-
-        @Override
-        public int read() throws IOException {
-            if (isClosed) {
-                return -1;
-            }
-
-            int b = stream.read();
-
-            return b;
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            return read(b, 0, b.length);
-        }
-
-        @Override
-        public int read(byte[] b, int off, int len) throws IOException {
-            if (isClosed) {
-                return -1;
-            }
-
-            int n = super.read(b, off, len);
-
-            return n;
-        }
-
-        @Override
-        public void close() throws IOException {
-            delete();
-        }
-
-        /**
-         * Closes the temp file stream and then deletes the temp file.
-         */
-        protected void delete() {
-            if (!isClosed) {
-                try {
-                    stream.close();
-                    isClosed = true;
-                    stream = null;
-                } catch (Exception e) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("Closing the temp file {} failed: {}", tempFile.getAbsolutePath(), e.toString(), e);
-                    }
-                }
-            }
-
-            if (!isDeleted) {
-                isDeleted = tempFile.delete();
-                if (!isDeleted) {
-                    if (LOG.isErrorEnabled()) {
-                        LOG.error("Temp file {} could not be deleted!", tempFile.getAbsolutePath());
-                    }
-                } else {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("Deleted temp file: {}", tempFile.getAbsolutePath());
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStreamFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStreamFactory.java
deleted file mode 100644
index 3b14187..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/ThresholdOutputStreamFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.shared;
-
-import java.io.File;
-
-/**
- * A factory for {@link ThresholdOutputStream} objects.
- * 
- * @deprecated use {@link TempStoreOutputStreamFactory}
- */
-public final class ThresholdOutputStreamFactory extends TempStoreOutputStreamFactory {
-
-    private ThresholdOutputStreamFactory(File tempDir, int memoryThreshold, long maxContentSize, boolean encrypt) {
-        super(tempDir, memoryThreshold, maxContentSize, encrypt);
-    }
-
-    /**
-     * Creates a new factory. The parameters are used to create new
-     * {@link ThresholdOutputStream} objects.
-     * 
-     * @param tempDir
-     *            temp directory or {@code null} for the default temp directory
-     * @param memoryThreshold
-     *            memory threshold in bytes
-     * @param maxContentSize
-     *            max size of the content in bytes (-1 to disable the check)
-     * @param encrypt
-     *            indicates if temporary files must be encrypted
-     */
-    public static ThresholdOutputStreamFactory newInstance(File tempDir, int memoryThreshold, long maxContentSize,
-            boolean encrypt) {
-        return new ThresholdOutputStreamFactory(tempDir, memoryThreshold, maxContentSize, encrypt);
-    }
-
-    /**
-     * Creates a new {@link ThresholdOutputStream} object.
-     */
-    @Override
-    public ThresholdOutputStream newOutputStream() {
-        return new ThresholdOutputStream(getTempDir(), getMemoryThreshold(), getMaxContentSize(), isEncrypted());
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/AtomEntryParserTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/AtomEntryParserTest.java
deleted file mode 100644
index a1370e0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/AtomEntryParserTest.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.Arrays;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.server.impl.atompub.AtomEntryParser;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.apache.chemistry.opencmis.server.shared.ThresholdOutputStream.ThresholdInputStream;
-import org.junit.Test;
-
-/**
- * AtomEntryParser test.
- */
-public class AtomEntryParserTest {
-
-    private static final int THRESHOLD = 4 * 1024 * 1024;
-    private static final int MAX_SIZE = -1;
-
-    private static final String CMIS_ENTRY_CONTENT = "This is my content!";
-    private static final String CMIS_ENTRY = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>test.txt</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>test.txt</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "<cmisra:content>" + "  <cmisra:mediatype>text/plain</cmisra:mediatype>"
-            + "  <cmisra:base64>" + Base64.encodeBytes(CMIS_ENTRY_CONTENT.getBytes()) + "</cmisra:base64>"
-            + "</cmisra:content>" + "</atom:entry>";
-
-    private static final String ATOM_ENTRY_TEXT_CONTENT = "This is plain text!";
-    private static final String ATOM_ENTRY_TEXT = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>test.txt</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>test.txt</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "<atom:content type=\"text\">" + ATOM_ENTRY_TEXT_CONTENT + "</atom:content>"
-            + "</atom:entry>";
-
-    private static final String ATOM_ENTRY_XML_CONTENT = "<first xmlns=\"http://test/1\"><second myattr=\"Cool, a value!\">hey, this is text</second><myns:third xmlns:myns=\"http://test/2\">guess what's here ... more text</myns:third></first>";
-    private static final String ATOM_ENTRY_XML = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>test.txt</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>test.txt</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "<atom:content type=\"text/xml\">" + ATOM_ENTRY_XML_CONTENT + "</atom:content>"
-            + "</atom:entry>";
-
-    private static final String ATOM_ENTRY_XHTML_CONTENT = "<div xmlns=\"http://www.w3.org/1999/xhtml\">This is <b>XHTML</b> content.</div>";
-    private static final String ATOM_ENTRY_XHTML = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>test.txt</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>test.txt</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "<atom:content type=\"xhtml\">" + ATOM_ENTRY_XHTML_CONTENT + "</atom:content>"
-            + "</atom:entry>";
-
-    private static final String ATOM_ENTRY_BASE64_CONTENT = "This is another content!";
-    private static final String ATOM_ENTRY_BASE64 = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>test.txt</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>test.txt</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "<atom:content type=\"application/something\">"
-            + Base64.encodeBytes(ATOM_ENTRY_BASE64_CONTENT.getBytes()) + "</atom:content>" + "</atom:entry>";
-
-    private static final String ATOM_ENTRY_NAME = "<?xml version='1.0' encoding='utf-8'?>"
-            + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-            + "<atom:author><atom:name>test</atom:name></atom:author>" + "<atom:id>http://test/id</atom:id>"
-            + "<atom:published>2009-12-31T12:53:37Z</atom:published>" + "<atom:title>atom.title</atom:title>"
-            + "<atom:updated>2010-01-01T00:00:00Z</atom:updated>"
-            + "<cmisra:object xmlns:ns3=\"http://docs.oasis-open.org/ns/cmis/messaging/200908/\">"
-            + "  <cmis:properties>" + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectId\">"
-            + "      <cmis:value>id</cmis:value>" + "    </cmis:propertyId>"
-            + "    <cmis:propertyString propertyDefinitionId=\"cmis:name\">"
-            + "      <cmis:value>cmis.name</cmis:value>" + "    </cmis:propertyString>"
-            + "    <cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">"
-            + "      <cmis:value>cmis:document</cmis:value>" + "    </cmis:propertyId>" + "  </cmis:properties>"
-            + "</cmisra:object>" + "</atom:entry>";
-
-    @Test
-    public void testCmisContent() throws Exception {
-        byte[] content = parse(CMIS_ENTRY.getBytes(), "text/plain");
-        assertEquals(CMIS_ENTRY_CONTENT, new String(content));
-    }
-
-    @Test
-    public void testAtomContentText() throws Exception {
-        byte[] content = parse(ATOM_ENTRY_TEXT.getBytes(), "text/plain");
-        assertEquals(ATOM_ENTRY_TEXT_CONTENT, new String(content));
-    }
-
-    @Test
-    public void testAtomContentXml() throws Exception {
-        byte[] content = parse(ATOM_ENTRY_XML.getBytes(), "text/xml");
-        String xmlContent = new String(content);
-        assertTrue(xmlContent.indexOf('>') > -1);
-        assertEquals(ATOM_ENTRY_XML_CONTENT, xmlContent.substring(xmlContent.indexOf('>') + 1));
-    }
-
-    @Test
-    public void testAtomContentXHtml() throws Exception {
-        byte[] content = parse(ATOM_ENTRY_XHTML.getBytes(), "application/xhtml+xml");
-        String xmlContent = new String(content);
-        assertTrue(xmlContent.indexOf('>') > -1);
-        assertEquals(ATOM_ENTRY_XHTML_CONTENT, xmlContent.substring(xmlContent.indexOf('>') + 1));
-    }
-
-    @Test
-    public void testAtomContentBase64() throws Exception {
-        byte[] content = parse(ATOM_ENTRY_BASE64.getBytes(), "application/something");
-        assertEquals(ATOM_ENTRY_BASE64_CONTENT, new String(content));
-    }
-
-    @Test
-    public void testAtomTitle() throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        AtomEntryParser aep = new AtomEntryParser(new ByteArrayInputStream(ATOM_ENTRY_NAME.getBytes()), streamFactory);
-
-        assertNotNull(aep);
-        assertNotNull(aep.getObject());
-        assertNotNull(aep.getObject().getProperties());
-        assertNotNull(aep.getObject().getProperties().getProperties());
-        assertNotNull(aep.getObject().getProperties().getProperties().get(PropertyIds.NAME) instanceof PropertyString);
-
-        PropertyString nameProperty = (PropertyString) aep.getObject().getProperties().getProperties()
-                .get(PropertyIds.NAME);
-
-        assertEquals("atom.title", nameProperty.getFirstValue());
-
-        aep.release();
-        assertNull(aep.getContentStream());
-    }
-
-    @Test
-    public void testNullStream() throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        AtomEntryParser aep = new AtomEntryParser(null, streamFactory);
-
-        assertNotNull(aep);
-        assertNull(aep.getId());
-        assertNull(aep.getObject());
-        assertNull(aep.getContentStream());
-        assertNull(aep.getProperties());
-    }
-
-    @Test(expected = XMLStreamException.class)
-    public void testEmptyStream() throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        new AtomEntryParser(new ByteArrayInputStream(new byte[0]), streamFactory);
-    }
-
-    @Test
-    public void testBigStream() throws Exception {
-        byte[] begin = IOUtils
-                .toUTF8Bytes("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
-                        + "<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:app=\"http://www.w3.org/2007/app\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\">"
-                        + "<cmisra:content><cmisra:mediatype>video/raw</cmisra:mediatype><cmisra:base64>");
-        byte[] end = IOUtils
-                .toUTF8Bytes("</cmisra:base64></cmisra:content><cmisra:object xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\">"
-                        + "<cmis:properties></cmis:properties></cmisra:object><title>some.file</title></entry>");
-
-        int contenSize = 50 * 1024 * 1024;
-        int base64Size = 4 * (contenSize + 2 - ((contenSize + 2) % 3)) / 3;
-
-        byte[] entry = new byte[begin.length + base64Size + end.length];
-
-        System.arraycopy(begin, 0, entry, 0, begin.length);
-        System.arraycopy(end, 0, entry, entry.length - end.length, end.length);
-        Arrays.fill(entry, begin.length, entry.length - end.length, (byte) 'a');
-
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        AtomEntryParser aep = new AtomEntryParser(new ByteArrayInputStream(entry), streamFactory);
-        ContentStream contentStream = aep.getContentStream();
-
-        assertNotNull(contentStream);
-        assertNotNull(contentStream.getStream());
-
-        contentStream.getStream().close();
-
-        aep.release();
-        assertNull(aep.getContentStream());
-    }
-
-    private static byte[] parse(byte[] entry, String mimeType) throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        AtomEntryParser aep = new AtomEntryParser(new ByteArrayInputStream(entry), streamFactory);
-        ContentStream contentStream = aep.getContentStream();
-
-        assertNotNull(contentStream);
-        assertNotNull(contentStream.getStream());
-
-        assertEquals(mimeType, contentStream.getMimeType());
-        if (contentStream.getStream() instanceof ThresholdInputStream) {
-            assertEquals(mimeType, ((ThresholdInputStream) contentStream.getStream()).getMimeType());
-        }
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        IOUtils.copy(contentStream.getStream(), baos);
-
-        contentStream.getStream().close();
-
-        aep.release();
-        assertNull(aep.getContentStream());
-
-        return baos.toByteArray();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CallContextImplTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CallContextImplTest.java
deleted file mode 100644
index a917d8c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CallContextImplTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.junit.Test;
-
-public class CallContextImplTest {
-
-    @Test
-    public void testLocal() {
-        CallContextImpl context = new CallContextImpl(null, CmisVersion.CMIS_1_1, null, null, null, null, null, null);
-
-        context.setAcceptLanguage(" en - us ");
-        assertEquals("en", context.get(CallContext.LOCALE_ISO639_LANGUAGE));
-        assertEquals("us", context.get(CallContext.LOCALE_ISO3166_COUNTRY));
-        assertEquals("en-us", context.getLocale());
-
-        context.setAcceptLanguage("en-us; q=0.8 , de-ch ; Q = 0.9, abc-123; q=0.");
-        assertEquals("de", context.get(CallContext.LOCALE_ISO639_LANGUAGE));
-        assertEquals("ch", context.get(CallContext.LOCALE_ISO3166_COUNTRY));
-        assertEquals("de-ch", context.getLocale());
-
-        context.setAcceptLanguage("en-us; q=0.8, abc-123; q=1.0, de-ch ;Q= 0.9");
-        assertEquals("abc", context.get(CallContext.LOCALE_ISO639_LANGUAGE));
-        assertEquals("123", context.get(CallContext.LOCALE_ISO3166_COUNTRY));
-        assertEquals("abc-123", context.getLocale());
-    }
-
-    @Test
-    public void testRange() {
-        CallContextImpl context = new CallContextImpl(null, CmisVersion.CMIS_1_1, null, null, null, null, null, null);
-
-        context.setRange("bytes=100-299");
-        assertEquals(100L, context.getOffset().longValue());
-        assertEquals(200L, context.getLength().longValue());
-
-        context.setRange(" bytes  = 1 - 2");
-        assertEquals(1L, context.getOffset().longValue());
-        assertEquals(2L, context.getLength().longValue());
-
-        context.setRange("bytes=456-");
-        assertEquals(456L, context.getOffset().longValue());
-        assertNull(context.getLength());
-
-        // not supported ranges
-        context.setRange("bytes=10-20,30-40");
-        assertNull(context.getOffset());
-        assertNull(context.getLength());
-
-        context.setRange("bytes=-123");
-        assertNull(context.getOffset());
-        assertNull(context.getLength());
-
-        context.setRange("kb=100-299");
-        assertNull(context.getOffset());
-        assertNull(context.getLength());
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CappedInputStreamTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CappedInputStreamTest.java
deleted file mode 100644
index bf14ad5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CappedInputStreamTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-
-import org.apache.chemistry.opencmis.server.shared.CappedInputStream;
-import org.junit.Test;
-
-public class CappedInputStreamTest {
-
-    @Test
-    public void testStream1() {
-        baseTest(64 * 1024, 10 * 1024, 1000, 60 * 1024, true);
-    }
-
-    @Test
-    public void testStream2() {
-        baseTest(64 * 1024, 10 * 1024, 1000, 2000, false);
-    }
-
-    @Test
-    public void testStream3() {
-        baseTest(100, 20, 0, 79, true);
-    }
-
-    @Test
-    public void testStream4() {
-        baseTest(100, 20, 10, 89, true);
-    }
-
-    @Test
-    public void testStream5() {
-        baseTest(100, 20, 0, 30, false);
-    }
-
-    @Test
-    public void testStream6() {
-        baseTest(100, 20, 19, 99, true);
-    }
-
-    private void baseTest(int bufferSize, int max, int goodBegin, int goodEnd, boolean success) {
-        byte[] byteBuffer = new byte[bufferSize];
-        for (int i = 0; i < byteBuffer.length; i++) {
-            byteBuffer[i] = (byte) (i >= goodBegin && i <= goodEnd ? 1 : 0);
-        }
-
-        // test read with buffer
-        ByteArrayInputStream originStream = new ByteArrayInputStream(byteBuffer);
-
-        try {
-            CappedInputStream stream = new CappedInputStream(originStream, max);
-
-            int b = 0;
-            byte[] buffer = new byte[10];
-            while ((b = stream.read(buffer)) > -1) {
-                int counter = 0;
-
-                for (int i = 0; i < b; i++) {
-                    if (buffer[i] == 1) {
-                        counter++;
-                    }
-                }
-
-                stream.deductBytes(counter);
-            }
-
-            stream.close();
-        } catch (Exception e) {
-            if (success) {
-                fail();
-            }
-        }
-
-        // test single byte read
-        originStream = new ByteArrayInputStream(byteBuffer);
-
-        try {
-            CappedInputStream stream = new CappedInputStream(originStream, max);
-
-            int b = 0;
-            while ((b = stream.read()) > -1) {
-                if (b == 1) {
-                    stream.deductBytes(1);
-                }
-            }
-
-            stream.close();
-        } catch (Exception e) {
-            if (success) {
-                fail();
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CheckServletInputStreamTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CheckServletInputStreamTest.java
deleted file mode 100644
index edceace..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/CheckServletInputStreamTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.Random;
-
-import org.apache.chemistry.opencmis.server.impl.webservices.ProtectionRequestWrapper;
-import org.junit.Test;
-
-public class CheckServletInputStreamTest {
-
-    private static final String BOUNDARY = "test.boundray";
-
-    @Test
-    public void testStream1() {
-        baseTest(200, 50, 20, 10, true);
-    }
-
-    @Test
-    public void testStream2() {
-        baseTest(100 * 1024, 10 * 1024, 8 * 1024, 4 * 1024, true);
-    }
-
-    @Test
-    public void testStream3() {
-        baseTest(100 * 1024, 8 * 1024, 10 * 1024, 4 * 1024, false);
-    }
-
-    @Test
-    public void testStream4() {
-        baseTest(100 * 1024, 10, 7, 4 * 1024, true);
-    }
-
-    @Test
-    public void testStream5() {
-        baseTest(100 * 1024, 99 * 1024, 2 * 1024, 11, true);
-    }
-
-    @Test
-    public void testStream6() {
-        baseTest(100 * 1024, 10 * 1024, 10 * 1024, 8 * 1024, true);
-    }
-
-    @Test
-    public void testStream7() {
-        baseTest(100 * 1024, 10 * 1024, 10 * 1024 + 1, 8 * 1024, false);
-    }
-
-    @Test
-    public void testStream8() {
-        baseTest(100 * 1024, 10 * 1024, 8 * 1024, 120 * 1024, false);
-    }
-
-    @Test
-    public void testStream9() {
-        baseTest(100 * 1024, 80 * 1024, 79 * 1024, 1234, true);
-    }
-
-    @Test
-    public void testStream10() {
-        baseTest(900 * 1024, 1 * 1024 * 1024, 900 * 1024, 8 * 1024, true);
-    }
-
-    @Test
-    public void testStream11() {
-        baseTest(900 * 1024, 512 * 1024, 900 * 1024, 8 * 1024, false);
-    }
-
-    @Test
-    public void testStream12() {
-        baseTest(900 * 1024, 1 * 1024 * 1024, 700 * 1024, 2345, true);
-    }
-
-    @Test
-    public void testStream13() {
-        baseTest(900 * 1024, 1 * 1024 * 1024, 700, 2345, true);
-    }
-
-    @Test
-    public void testStream14() {
-        baseTest(900 * 1024, 1 * 1024 * 1024, 2048, 2345, true);
-    }
-
-    @Test
-    public void testStreamRandom() {
-        int bufferSize = 1 * 1024 * 1024;
-        Random rnd = new Random(1234567890);
-
-        for (int i = 0; i < 100; i++) {
-            int max = rnd.nextInt(bufferSize);
-            int soap = rnd.nextInt(bufferSize);
-            int readBufferSize = rnd.nextInt(64 * 1024);
-
-            baseTest(bufferSize, max, soap, readBufferSize, soap <= max);
-        }
-    }
-
-    private void baseTest(int bufferSize, int max, int soap, int readBufferSize, boolean success) {
-
-        byte[] boundaryBytes = ("\r\n--" + BOUNDARY + "\r\n").getBytes();
-
-        byte[] byteBuffer = new byte[bufferSize + (boundaryBytes.length) * 3 + 2];
-
-        System.arraycopy(boundaryBytes, 0, byteBuffer, 0, boundaryBytes.length);
-
-        for (int i = 0; i < bufferSize; i++) {
-
-            if (i == soap) {
-                System.arraycopy(boundaryBytes, 0, byteBuffer, i + boundaryBytes.length, boundaryBytes.length);
-            }
-            if (i < soap) {
-                byteBuffer[i + boundaryBytes.length] = (byte) 'S';
-            } else {
-                byteBuffer[i + boundaryBytes.length * 2] = (byte) 'C';
-            }
-
-        }
-        System.arraycopy(boundaryBytes, 0, byteBuffer, bufferSize + boundaryBytes.length * 2, boundaryBytes.length);
-        byteBuffer[byteBuffer.length - 4] = '-';
-        byteBuffer[byteBuffer.length - 3] = '-';
-        byteBuffer[byteBuffer.length - 2] = '\r';
-        byteBuffer[byteBuffer.length - 1] = '\n';
-
-        // test read with buffer
-        ByteArrayInputStream originStream = new ByteArrayInputStream(byteBuffer);
-
-        try {
-            ProtectionRequestWrapper prw = new ProtectionRequestWrapper(HttpRequestMockHelper.createMultipartRequest(
-                    BOUNDARY, originStream), max);
-            InputStream stream = prw.getInputStream();
-
-            int countS = 0;
-            int countC = 0;
-
-            byte[] buffer = new byte[readBufferSize];
-            int b;
-
-            assertEquals(0, stream.read(byteBuffer, 0, 0));
-
-            while ((b = stream.read(buffer)) > -1) {
-                for (int i = 0; i < b; i++) {
-                    if (buffer[i] == 'S') {
-                        countS++;
-                    }
-                    if (buffer[i] == 'C') {
-                        countC++;
-                    }
-                }
-            }
-
-            stream.close();
-
-            assertEquals(soap, countS);
-            assertEquals(bufferSize - soap, countC);
-        } catch (Exception e) {
-            if (success) {
-                fail();
-            }
-        }
-
-        // test single byte read
-        originStream = new ByteArrayInputStream(byteBuffer);
-
-        try {
-            ProtectionRequestWrapper prw = new ProtectionRequestWrapper(HttpRequestMockHelper.createMultipartRequest(
-                    BOUNDARY, originStream), max);
-            InputStream stream = prw.getInputStream();
-
-            int countS = 0;
-            int countC = 0;
-
-            int b;
-            while ((b = stream.read()) > -1) {
-                if (b == 'S') {
-                    countS++;
-                }
-                if (b == 'C') {
-                    countC++;
-                }
-            }
-
-            stream.close();
-
-            assertEquals(soap, countS);
-            assertEquals(bufferSize - soap, countC);
-        } catch (Exception e) {
-            if (success) {
-                fail();
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestHeadMethodTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestHeadMethodTest.java
deleted file mode 100644
index ee2d879..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestHeadMethodTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.URISyntaxException;
-
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.data.CacheHeaderContentStream;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall;
-import org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet;
-import org.apache.chemistry.opencmis.server.impl.browser.CmisBrowserBindingServlet;
-import org.apache.chemistry.opencmis.server.shared.Dispatcher;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-public class HttpRequestHeadMethodTest {
-    private static final String CONTEXT_PATH = "/context";
-    private static final String ATOMPUB_SERVLET_PATH = "/cmisatom";
-    private static final String BROWSER_SERVLET_PATH = "/cmisjson";
-    private static final String REPOSITORY_ID = "22d2880a-bae5-4cfc-a5a9-3b2618e6e11c";
-    private static final int BACKEND_SERVER_PORT = 8080;
-    private static final String BACKEND_SERVER_NAME = "www.backend.be";
-    private static final String BACKEND_SERVER_PROTO = "http";
-
-    @Mock
-    private CmisServiceFactory cmisServiceFactory;
-
-    @Mock
-    private CmisService cmisService;
-
-    @Mock
-    private CacheHeaderContentStream contentStream;
-
-    @Mock
-    private HttpServletRequest request;
-
-    @Mock
-    private ServletConfig config;
-
-    @Mock
-    private ServletContext context;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        when(this.request.getScheme()).thenReturn(BACKEND_SERVER_PROTO);
-        when(this.request.getServerName()).thenReturn(BACKEND_SERVER_NAME);
-        when(this.request.getServerPort()).thenReturn(BACKEND_SERVER_PORT);
-        when(this.request.getContextPath()).thenReturn(CONTEXT_PATH);
-        when(this.config.getServletContext()).thenReturn(context);
-        when(this.context.getAttribute(CmisRepositoryContextListener.SERVICES_FACTORY)).thenReturn(cmisServiceFactory);
-        when(cmisServiceFactory.getService((CallContext) any())).thenReturn(cmisService);
-    }
-
-    @Test
-    public void testAtomPubHeadRequest() throws URISyntaxException, IOException, ServletException {
-        String requestURI = CONTEXT_PATH + ATOMPUB_SERVLET_PATH + "/" + REPOSITORY_ID + "/content";
-        String queryString = "id=123";
-        doTestHeadRequest(new CmisAtomPubServlet(), ATOMPUB_SERVLET_PATH, requestURI, queryString);
-    }
-
-    @Test
-    public void testBrowserBindingHeadRequest() throws URISyntaxException, IOException, ServletException {
-        String requestURI = CONTEXT_PATH + BROWSER_SERVLET_PATH + "/" + REPOSITORY_ID + "/root";
-        String queryString = "cmisselector=content&objectId=123";
-        doTestHeadRequest(new CmisBrowserBindingServlet(), BROWSER_SERVLET_PATH, requestURI, queryString);
-    }
-
-    private void doTestHeadRequest(Servlet servlet, String servletPath, String requestURI, String queryString)
-            throws URISyntaxException, IOException, ServletException {
-
-        when(this.request.getServletPath()).thenReturn(servletPath);
-        when(this.request.getRequestURI()).thenReturn(requestURI);
-        when(this.request.getQueryString()).thenReturn(queryString);
-        when(this.request.getMethod()).thenReturn(Dispatcher.METHOD_HEAD);
-
-        when(this.cmisService.getContentStream(REPOSITORY_ID, "123", null, null, null, null)).thenReturn(contentStream);
-        when(this.contentStream.getStream()).thenReturn(new ByteArrayInputStream("789".getBytes()));
-        when(this.contentStream.getETag()).thenReturn("456");
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        HttpServletResponse response = getMockResponse(baos);
-        servlet.init(config);
-        servlet.service(request, response);
-        verify(response).setStatus(HttpServletResponse.SC_OK);
-        verify(response).setHeader("ETag", "\"456\"");
-    }
-
-    private HttpServletResponse getMockResponse(OutputStream out) throws IOException {
-        HttpServletResponse resp = mock(HttpServletResponse.class);
-        ServletOutputStream sos = new StubServletOutputStream(out);
-        PrintWriter printWriter = new PrintWriter(sos);
-        when(resp.getOutputStream()).thenReturn(sos);
-        when(resp.getWriter()).thenReturn(printWriter);
-        return resp;
-    }
-
-    static class UrlServiceCall extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            // no implementation
-        }
-    }
-
-    static class StubServletOutputStream extends ServletOutputStream {
-        private OutputStream os;
-
-        public StubServletOutputStream(OutputStream os) {
-            this.os = os;
-        }
-
-        public void write(int i) throws IOException {
-            os.write(i);
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestMockHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestMockHelper.java
deleted file mode 100644
index 43bdcef..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpRequestMockHelper.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-
-import org.mockito.Mockito;
-
-public class HttpRequestMockHelper {
-
-    public static HttpServletRequest createMultipartRequest(String boundary, byte[] content) throws IOException {
-        FakeServletInputStream stream = new FakeServletInputStream(content);
-
-        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
-        Mockito.when(request.getContentType()).thenReturn("multipart/form-data; boundary=\"" + boundary + "\"");
-        Mockito.when(request.getInputStream()).thenReturn(stream);
-
-        return request;
-    }
-
-    public static HttpServletRequest createMultipartRequest(String boundary, InputStream inputStream)
-            throws IOException {
-        FakeServletInputStream stream = new FakeServletInputStream(inputStream);
-
-        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
-        Mockito.when(request.getContentType()).thenReturn("multipart/form-data; boundary=\"" + boundary + "\"");
-        Mockito.when(request.getInputStream()).thenReturn(stream);
-
-        return request;
-    }
-
-    public static HttpServletRequest createFormRequest(String encoding, byte[] content) throws IOException {
-        FakeServletInputStream stream = new FakeServletInputStream(content);
-
-        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
-        Mockito.when(request.getContentType()).thenReturn(
-                "application/x-www-form-urlencoded" + (encoding == null ? "" : ";charset=" + encoding));
-        Mockito.when(request.getInputStream()).thenReturn(stream);
-
-        return request;
-    }
-
-    private static class FakeServletInputStream extends ServletInputStream {
-
-        private InputStream stream;
-
-        public FakeServletInputStream(byte[] content) {
-            this.stream = new ByteArrayInputStream(content);
-        }
-
-        public FakeServletInputStream(InputStream stream) {
-            this.stream = stream;
-        }
-
-        @Override
-        public int read() throws IOException {
-            return stream.read();
-        }
-
-        @Override
-        public int read(byte[] b, int off, int len) throws IOException {
-            return stream.read(b, off, len);
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            return stream.read(b);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpUtilsTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpUtilsTest.java
deleted file mode 100644
index 4fe73e0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/HttpUtilsTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.net.URLEncoder;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.server.shared.HttpUtils;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class HttpUtilsTest {
-
-    @Test
-    public void testSplitPath() throws Exception {
-        String[] fragments;
-
-        fragments = HttpUtils.splitPath(createRequest("f1/f2/f3/f4"));
-        assertNotNull(fragments);
-        assertEquals(4, fragments.length);
-        assertEquals("f1", fragments[0]);
-        assertEquals("f2", fragments[1]);
-        assertEquals("f3", fragments[2]);
-        assertEquals("f4", fragments[3]);
-
-        fragments = HttpUtils.splitPath(createRequest("f1/" + URLEncoder.encode(" !§$%&/()?@", "UTF-8") + "/f3"));
-        assertNotNull(fragments);
-        assertEquals(3, fragments.length);
-        assertEquals("f1", fragments[0]);
-        assertEquals(" !§$%&/()?@", fragments[1]);
-        assertEquals("f3", fragments[2]);
-
-        try {
-            HttpUtils.splitPath(createRequest("f1/" + URLEncoder.encode("xxx\nxxx", "UTF-8") + "/f3"));
-            fail("CmisInvalidArgumentException expected!");
-        } catch (CmisInvalidArgumentException iae) {
-            // expected
-        }
-
-        try {
-            HttpUtils.splitPath(createRequest("f1/" + URLEncoder.encode("xxx\rxxx", "UTF-8") + "/f3"));
-            fail("CmisInvalidArgumentException expected!");
-        } catch (CmisInvalidArgumentException iae) {
-            // expected
-        }
-
-        try {
-            HttpUtils.splitPath(createRequest("f1/" + URLEncoder.encode("xxx\bxxx", "UTF-8") + "/f3"));
-            fail("CmisInvalidArgumentException expected!");
-        } catch (CmisInvalidArgumentException iae) {
-            // expected
-        }
-
-        try {
-            HttpUtils.splitPath(createRequest("f1/" + URLEncoder.encode("xxx\u0000xxx", "UTF-8") + "/f3"));
-            fail("CmisInvalidArgumentException expected!");
-        } catch (CmisInvalidArgumentException iae) {
-            // expected
-        }
-    }
-
-    private HttpServletRequest createRequest(String path) {
-        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
-
-        Mockito.when(request.getContextPath()).thenReturn("/context");
-        Mockito.when(request.getServletPath()).thenReturn("/servlet");
-        Mockito.when(request.getRequestURI()).thenReturn("/context/servlet/" + path);
-
-        return request;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/MultipartParserTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/MultipartParserTest.java
deleted file mode 100644
index f6944a4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/MultipartParserTest.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.server.impl.browser.MultipartParser;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.junit.Test;
-
-/**
- * Tests the multipart parser.
- */
-public class MultipartParserTest {
-
-    private static final int THRESHOLD = 4 * 1024 * 1024;
-    private static final int MAX_SIZE = -1;
-
-    @Test
-    public void testMultipartParser() throws Exception {
-        String boundary = "---- next ----";
-        byte[] content = "This is content!".getBytes();
-        byte[] formdata = ("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n"
-                + "\r\n" + "value1\r\n" + "--" + boundary + "\r\n"
-                + "content-disposition: form-data; name=\"field2\"\r\n" + "\r\n" + "value2\r\n" + "--" + boundary
-                + "\r\n" + "content-disposition: form-data; name=\"field3\"\r\n" + "\r\n" + "value3\r\n" + "--"
-                + boundary + "\r\n"
-                + "Content-Disposition: form-data; name=\"content\"; filename=test-filename.txt\r\n"
-                + "Content-Type: text/plain\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n"
-                + new String(content) + "\r\n" + "--" + boundary + "--").getBytes("ISO-8859-1");
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", "value1");
-        values.put("field2", "value2");
-        values.put("field3", "value3");
-
-        assertMultipartBasics(parser, 4, values, true, "test-filename.txt", "text/plain", content);
-    }
-
-    @Test
-    public void testMultipartParser2() throws Exception {
-        String boundary = "-----------------------------1294919323195";
-        byte[] content = "Test content!".getBytes("ISO-8859-1");
-        byte[] formdata = ("\r\n--"
-                + boundary
-                + "\r\nContent-Disposition: form-data; name=\"fileUploader\"; filename=\"Ä.txt\"\r\nContent-Type: text/plain\r\n\r\n"
-                + new String(content) + "\r\n--" + boundary
-                + "\r\nContent-Disposition: form-data; name=\"fileUploader-data\"\r\n\r\n\r\n--" + boundary
-                + "\r\nContent-Disposition: form-data; name=\"objectid\"\r\n\r\nf6bad54b4696bf2ac9249805\r\n--"
-                + boundary + "\r\nContent-Disposition: form-data; name=\"cmisaction\"\r\n\r\ncreateDocument\r\n--"
-                + boundary + "\r\nContent-Disposition: form-data; name=\"propertyId[0]\"\r\n\r\ncmis:name\r\n--"
-                + boundary + "\r\nContent-Disposition: form-data; name=\"propertyValue[0]\"\r\n\r\nÄ.txt\r\n--"
-                + boundary
-                + "\r\nContent-Disposition: form-data; name=\"propertyId[1]\"\r\n\r\ncmis:objectTypeId\r\n--"
-                + boundary + "\r\nContent-Disposition: form-data; name=\"propertyValue[1]\"\r\n\r\ncmis:document\r\n--"
-                + boundary
-                + "\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n855475d8a6169b5f57111f5921f56136\r\n--"
-                + boundary + "--").getBytes("ISO-8859-1");
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("fileUploader-data", "");
-        values.put("objectid", "f6bad54b4696bf2ac9249805");
-        values.put("cmisaction", "createDocument");
-        values.put("propertyId[0]", "cmis:name");
-        values.put("propertyValue[0]", "Ä.txt");
-        values.put("propertyId[1]", "cmis:objectTypeId");
-        values.put("propertyValue[1]", "cmis:document");
-        values.put("token", "855475d8a6169b5f57111f5921f56136");
-
-        assertMultipartBasics(parser, 9, values, true, "Ä.txt", "text/plain", content);
-    }
-
-    @Test
-    public void testNoPreamble() throws Exception {
-        String boundary = "BoUnDaRy--987654320";
-        byte[] formdata = ("--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n" + "\r\n"
-                + "value1\r\n" + "--" + boundary + "--").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", "value1");
-
-        assertMultipartBasics(parser, 1, values, false, null, null, null);
-    }
-
-    @Test
-    public void testPreamble() throws Exception {
-        String boundary = "BoUnDaRy--987654320";
-        byte[] formdata = ("This is a preamble.\r\n--" + boundary + "\r\n"
-                + "Content-Disposition: form-data; name=\"field1\"\r\n" + "\r\n" + "value1\r\n" + "--" + boundary + "--")
-                .getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", "value1");
-
-        assertMultipartBasics(parser, 1, values, false, null, null, null);
-    }
-
-    @Test
-    public void testEpilogue() throws Exception {
-        String boundary = "BoUnDaRy--987654320";
-        byte[] formdata = ("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n"
-                + "\r\n" + "value1\r\n" + "--" + boundary + "--This is an epilogue.").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", "value1");
-
-        assertMultipartBasics(parser, 1, values, false, null, null, null);
-    }
-
-    @Test
-    public void testEmpty() throws Exception {
-        String boundary = "BoUnDaRy--987654320";
-        byte[] formdata = ("\r\n--" + boundary + "--").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-
-        assertMultipartBasics(parser, 0, values, false, null, null, null);
-    }
-
-    @Test
-    public void testContentOnly() throws Exception {
-        String boundary = "ABCD-1234";
-        byte[] content = "abcäöü".getBytes();
-        byte[] formdata = ("\r\n--" + boundary + "\r\n"
-                + "Content-Disposition: form-data; name=\"content\"; filename=\"a new file\"\r\n"
-                + "Content-Type: application/something\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n"
-                + new String(content) + "\r\n" + "--" + boundary + "--").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-
-        assertMultipartBasics(parser, 1, values, true, "a new file", "application/something", content);
-    }
-
-    @Test
-    public void testBigContent() throws Exception {
-        String boundary = "---- next ----";
-        byte[] content = new byte[2 * 1024 * 1024];
-
-        Random rnd = new Random();
-        for (int i = 0; i < content.length; i++) {
-            content[i] = (byte) ('a' + rnd.nextInt('z' - 'a'));
-        }
-
-        byte[] formdata = ("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n"
-                + "\r\n" + "value1\r\n" + "--" + boundary + "\r\n"
-                + "content-disposition: form-data; name=\"field2\"\r\n" + "\r\n" + "value2\r\n" + "--" + boundary
-                + "\r\n" + "content-disposition: form-data; name=\"field3\"\r\n" + "\r\n" + "value3\r\n" + "--"
-                + boundary + "\r\n" + "Content-Disposition: form-data; name=\"content\"; filename=bigtest.txt\r\n"
-                + "Content-Type: text/plain\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n"
-                + new String(content) + "\r\n" + "--" + boundary + "--").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", "value1");
-        values.put("field2", "value2");
-        values.put("field3", "value3");
-
-        assertMultipartBasics(parser, 4, values, true, "bigtest.txt", "text/plain", content);
-    }
-
-    @Test
-    public void testManyFields() throws Exception {
-        String boundary = "============";
-
-        StringBuilder sb = new StringBuilder("\r\n");
-
-        Map<String, String> values = new HashMap<String, String>();
-
-        for (int i = 0; i < 10000; i++) {
-            String name = "field" + i;
-            String value = "value " + i * i;
-
-            values.put(name, value);
-
-            sb.append("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + name + "\"\r\n"
-                    + "\r\n" + value);
-        }
-
-        sb.append("\r\n" + "--" + boundary + "--");
-
-        MultipartParser parser = prepareParser(boundary, sb.toString().getBytes(IOUtils.ISO_8859_1));
-
-        assertMultipartBasics(parser, values.size(), values, false, null, null, null);
-    }
-
-    @Test
-    public void testLargeFields() throws Exception {
-        testLargeFields(64 * 1024);
-        testLargeFields(128 * 1024);
-        testLargeFields(256 * 1024);
-        testLargeFields(512 * 1024);
-        testLargeFields(1024 * 1024);
-    }
-
-    private void testLargeFields(int size) throws Exception {
-        String boundary = "============";
-
-        StringBuilder sb = new StringBuilder("\r\n");
-
-        Random rnd = new Random();
-        Map<String, String> values = new HashMap<String, String>();
-
-        for (int i = 0; i < 5; i++) {
-            String name = "field" + i;
-
-            StringBuilder valueBuffer = new StringBuilder();
-            for (int j = 0; j < size; j++) {
-                valueBuffer.append((char) ('a' + rnd.nextInt(26)));
-            }
-            String value = valueBuffer.toString();
-
-            values.put(name, value);
-
-            sb.append("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n");
-            sb.append(value);
-        }
-
-        sb.append("\r\n" + "--" + boundary + "--");
-
-        MultipartParser parser = prepareParser(boundary, sb.toString().getBytes(IOUtils.ISO_8859_1));
-
-        assertMultipartBasics(parser, values.size(), values, false, null, null, null);
-    }
-
-    @Test
-    public void testCharsetsInContentType() throws Exception {
-        String[] charsets = new String[] { "utf-8", "iso-8859-1", "utf-16" };
-
-        String boundary = "ldchqeriuvoqeirbvxipu  eckqnqklwjcnqwklcqwncqewlciqecqwecevoipooei cqwcoewcq";
-        StringBuilder value = new StringBuilder();
-
-        for (int i = 1; i < 255; i++) {
-            value.append((char) i);
-        }
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", value.toString());
-
-        for (String charset : charsets) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"field1\"\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Type: text/plain; charset=" + charset + "\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(value.toString().getBytes(charset));
-            bos.write(("\r\n--" + boundary + "--\r\n").getBytes("ISO-8859-1"));
-            bos.write(("This is an epilogue.").getBytes("ISO-8859-1"));
-
-            MultipartParser parser = prepareParser(boundary, bos.toByteArray());
-
-            assertMultipartBasics(parser, 1, values, false, null, null, null);
-        }
-    }
-
-    @Test
-    public void testCharsetsAsExtraField() throws Exception {
-        String[] charsets = new String[] { "utf-8", "iso-8859-1", "utf-16" };
-
-        String boundary = "ldchqeriuvoqeirbvxipu  eckqnqklwjcnqwklcqwncqewlciqecqwecevoipooei cqwcoewcq";
-        StringBuilder value = new StringBuilder();
-
-        for (int i = 1; i < 255; i++) {
-            value.append((char) i);
-        }
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", value.toString());
-
-        for (String charset : charsets) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"field1\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(value.toString().getBytes(charset));
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"_charset_\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(charset.getBytes("ISO-8859-1"));
-            bos.write(("\r\n--" + boundary + "--\r\n").getBytes("ISO-8859-1"));
-            bos.write(("This is an epilogue.").getBytes("ISO-8859-1"));
-
-            MultipartParser parser = prepareParser(boundary, bos.toByteArray());
-
-            assertMultipartBasics(parser, 1, values, false, null, null, null);
-        }
-    }
-
-    @Test
-    public void testCharsetsMixed() throws Exception {
-        String[] charsets = new String[] { "utf-8", "iso-8859-1", "utf-16" };
-
-        String boundary = "ldchqeriuvoqeirbvxipu  eckqnqklwjcnqwklcqwncqewlciqecqwecevoipooei cqwcoewcq";
-        StringBuilder value = new StringBuilder();
-
-        for (int i = 1; i < 255; i++) {
-            value.append((char) i);
-        }
-
-        Map<String, String> values = new HashMap<String, String>();
-        values.put("field1", value.toString());
-        values.put("field2", value.toString());
-        values.put("field3", value.toString());
-
-        for (String charset : charsets) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"field1\"\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Type: text/plain; charset=\"utf-8\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(value.toString().getBytes("utf-8"));
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"field2\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(value.toString().getBytes(charset));
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"_charset_\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(charset.getBytes("ISO-8859-1"));
-            bos.write(("\r\n--" + boundary + "\r\n").getBytes("ISO-8859-1"));
-            bos.write(("Content-Disposition: form-data; name=\"field3\"\r\n\r\n").getBytes("ISO-8859-1"));
-            bos.write(value.toString().getBytes(charset));
-            bos.write(("\r\n--" + boundary + "--\r\n").getBytes("ISO-8859-1"));
-
-            MultipartParser parser = prepareParser(boundary, bos.toByteArray());
-
-            assertMultipartBasics(parser, 3, values, false, null, null, null);
-        }
-    }
-
-    @Test(expected = CmisInvalidArgumentException.class)
-    public void testNoBoundary() throws Exception {
-        String boundary = "";
-        byte[] formdata = ("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n"
-                + "\r\n" + "value1\r\n" + "--" + boundary + "--").getBytes();
-
-        prepareParser(boundary, formdata);
-    }
-
-    @Test(expected = CmisInvalidArgumentException.class)
-    public void testInvalidCharset() throws Exception {
-        String boundary = "15983409582340582340";
-        byte[] formdata = ("\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n"
-                + "Content-Type: text/plain; charset=xyz\r\n" + "\r\n" + "value1\r\n" + "--" + boundary + "--")
-                .getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        assertMultipartBasics(parser, 1, null, false, null, null, null);
-    }
-
-    @Test(expected = CmisInvalidArgumentException.class)
-    public void testTwoContentParts() throws Exception {
-        String boundary = "-?-";
-        byte[] content = "abc������".getBytes();
-        byte[] formdata = ("\r\n--" + boundary + "\r\n"
-                + "Content-Disposition: form-data; name=\"content1\"; filename=\"file1\"\r\n"
-                + "Content-Type: application/something\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n"
-                + new String(content) + "\r\n--" + boundary + "\r\n"
-                + "Content-Disposition: form-data; name=\"content2\"; filename=\"file2\"\r\n"
-                + "Content-Type: application/something\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n"
-                + new String(content) + "\r\n" + "--" + boundary + "--").getBytes();
-
-        MultipartParser parser = prepareParser(boundary, formdata);
-
-        assertMultipartBasics(parser, 2, null, true, "file1", "application/something", content);
-    }
-
-    // ---- helpers ----
-
-    private MultipartParser prepareParser(String boundary, byte[] content) throws Exception {
-        HttpServletRequest request = HttpRequestMockHelper.createMultipartRequest(boundary, content);
-
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, THRESHOLD,
-                MAX_SIZE, false);
-        return new MultipartParser(request, streamFactory);
-    }
-
-    private byte[] readBytesFromStream(InputStream is) throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-        byte[] buffer = new byte[4096];
-        int b;
-        while ((b = is.read(buffer)) > -1) {
-            bos.write(buffer, 0, b);
-        }
-
-        is.close();
-
-        return bos.toByteArray();
-    }
-
-    private void assertMultipartBasics(MultipartParser parser, int count, Map<String, String> values,
-            boolean hasContent, String filename, String contentType, byte[] content) throws Exception {
-        int counter = 0;
-
-        parser.parse();
-
-        if (parser.hasContent()) {
-            counter++;
-            assertTrue(hasContent);
-            assertEquals(filename, parser.getFilename());
-            assertEquals(contentType, parser.getContentType());
-            assertEquals(content.length, parser.getSize().intValue());
-            assertArrayEquals(content, readBytesFromStream(parser.getStream()));
-        } else {
-            assertFalse(hasContent);
-        }
-
-        Map<String, String[]> fields = parser.getFields();
-        for (Map.Entry<String, String[]> e : fields.entrySet()) {
-            assertNotNull(e.getValue());
-            assertEquals(1, e.getValue().length);
-
-            String fieldName = e.getKey();
-            String fieldValue = e.getValue()[0];
-
-            assertEquals(fieldValue, values.get(fieldName));
-
-            counter++;
-        }
-
-        assertEquals(count, counter);
-        assertEquals(counter - (hasContent ? 1 : 0), fields.size());
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/POSTHttpServletRequestWrapperTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/POSTHttpServletRequestWrapperTest.java
deleted file mode 100644
index 152a367..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/POSTHttpServletRequestWrapperTest.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URLEncoder;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.server.impl.browser.POSTHttpServletRequestWrapper;
-import org.junit.Test;
-
-public class POSTHttpServletRequestWrapperTest {
-
-    private static final String[] CHARSETS = new String[] { "utf-8", "utf-16", "ISO-8859-1", "Cp1252", "UTF-16BE",
-            "UTF-16LE" };
-
-    @Test
-    public void testSimple() throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        addNameValue(out, "name1", "value1", IOUtils.UTF8);
-        out.write('&');
-        addNameValue(out, "name2", "value2", IOUtils.UTF8);
-
-        HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-        POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-        assertParameter(postWrapper, "name1", "value1");
-        assertParameter(postWrapper, "name2", "value2");
-    }
-
-    @Test
-    public void testEmpty() throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-        POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-        assertEquals(0, postWrapper.getParameterMap().size());
-    }
-
-    @Test
-    public void testShort() throws IOException {
-        {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, "n", "v", IOUtils.UTF8);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "n", "v");
-        }
-        {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, "a", "1", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "b", "2", IOUtils.UTF8);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "a", "1");
-            assertParameter(postWrapper, "b", "2");
-        }
-    }
-
-    @Test
-    public void testMany() throws IOException {
-        int count = 100000;
-
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        for (int i = 0; i < count; i++) {
-            if (i > 0) {
-                out.write('&');
-            }
-            addNameValue(out, "name" + i, "välju" + i, IOUtils.UTF8);
-        }
-
-        HttpServletRequest request = HttpRequestMockHelper.createFormRequest(IOUtils.UTF8, out.toByteArray());
-        POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-        assertEquals(count, postWrapper.getParameterMap().size());
-
-        for (int i = 0; i < count; i++) {
-            assertParameter(postWrapper, "name" + i, "välju" + i);
-        }
-    }
-
-    @Test
-    public void testMultipleValues() throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        addNameValue(out, "name1", "value1a", IOUtils.UTF8);
-        out.write('&');
-        addNameValue(out, "name1", "value1b", IOUtils.UTF8);
-        out.write('&');
-        addNameValue(out, "name1", "value1c", IOUtils.UTF8);
-        out.write('&');
-        addNameValue(out, "name2", "value2", IOUtils.UTF8);
-
-        HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-        POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-        assertParameter(postWrapper, "name1", "value1a", "value1b", "value1c");
-        assertParameter(postWrapper, "name2", "value2");
-    }
-
-    @Test
-    public void testNull() throws IOException {
-        {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, "name1", "value1", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, null, "noame", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "novalue", null, IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "name2", "value2", IOUtils.UTF8);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "name1", "value1");
-            assertParameter(postWrapper, "name2", "value2");
-            assertParameter(postWrapper, "novalue", (String[]) null);
-            assertEquals(3, postWrapper.getParameterMap().size());
-        }
-        {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, null, "noame", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "novalue", null, IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "name2", "value2", IOUtils.UTF8);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "name2", "value2");
-            assertParameter(postWrapper, "novalue", (String[]) null);
-            assertEquals(2, postWrapper.getParameterMap().size());
-        }
-        {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, "name1", "value1", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, null, "noame", IOUtils.UTF8);
-            out.write('&');
-            addNameValue(out, "novalue", null, IOUtils.UTF8);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "name1", "value1");
-            assertParameter(postWrapper, "novalue", (String[]) null);
-            assertEquals(2, postWrapper.getParameterMap().size());
-        }
-    }
-
-    @Test
-    public void testUrlEncoded() throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        addNameValue(out, "n/a&m%e1", "v§a*l  #u+e1", IOUtils.UTF8);
-        out.write('&');
-        addNameValue(out, "n/ä&m%e2", "v§a*l#u+e2", IOUtils.UTF8);
-
-        HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-        POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-        assertParameter(postWrapper, "n/a&m%e1", "v§a*l  #u+e1");
-        assertParameter(postWrapper, "n/ä&m%e2", "v§a*l#u+e2");
-    }
-
-    @Test
-    public void testCharsetField() throws IOException {
-        for (String charset : CHARSETS) {
-            {
-                ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-                addNameValue(out, "n/a&m%e1", "v§a*l  #u+e1", charset);
-                out.write('&');
-                addNameValue(out, "_charset_", charset, IOUtils.ISO_8859_1);
-                out.write('&');
-                addNameValue(out, "n/ä&m%e2", "v§a*l#u+e2", charset);
-
-                HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-                POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-                assertParameter(postWrapper, "n/a&m%e1", "v§a*l  #u+e1");
-                assertParameter(postWrapper, "n/ä&m%e2", "v§a*l#u+e2");
-            }
-            {
-                ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-                addNameValue(out, "_charset_", charset, IOUtils.ISO_8859_1);
-                out.write('&');
-                addNameValue(out, "n/a&m%e1", "v§a*l  #u+e1", charset);
-                out.write('&');
-                addNameValue(out, "n/ä&m%e2", "v§a*l#u+e2", charset);
-
-                HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-                POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-                assertParameter(postWrapper, "n/a&m%e1", "v§a*l  #u+e1");
-                assertParameter(postWrapper, "n/ä&m%e2", "v§a*l#u+e2");
-            }
-            {
-                ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-                addNameValue(out, "n/a&m%e1", "v§a*l  #u+e1", charset);
-                out.write('&');
-                addNameValue(out, "n/ä&m%e2", "v§a*l#u+e2", charset);
-                out.write('&');
-                addNameValue(out, "_charset_", charset, IOUtils.ISO_8859_1);
-
-                HttpServletRequest request = HttpRequestMockHelper.createFormRequest(null, out.toByteArray());
-                POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-                assertParameter(postWrapper, "n/a&m%e1", "v§a*l  #u+e1");
-                assertParameter(postWrapper, "n/ä&m%e2", "v§a*l#u+e2");
-            }
-        }
-    }
-
-    @Test
-    public void testCharsetHeader() throws IOException {
-        for (String charset : CHARSETS) {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            addNameValue(out, "n/a&m%e1", "v§a*l  #u+e1", charset);
-            out.write('&');
-            addNameValue(out, "n/ä&m%e2", "v§a*l#u+e2", charset);
-
-            HttpServletRequest request = HttpRequestMockHelper.createFormRequest(charset, out.toByteArray());
-            POSTHttpServletRequestWrapper postWrapper = new POSTHttpServletRequestWrapper(request, null);
-
-            assertParameter(postWrapper, "n/a&m%e1", "v§a*l  #u+e1");
-            assertParameter(postWrapper, "n/ä&m%e2", "v§a*l#u+e2");
-        }
-    }
-
-    protected void addNameValue(OutputStream stream, String name, String value, String encoding) throws IOException {
-        if (name != null) {
-            stream.write(URLEncoder.encode(name, encoding).getBytes(IOUtils.ISO_8859_1));
-        }
-
-        stream.write('=');
-
-        if (value != null) {
-            stream.write(URLEncoder.encode(value, encoding).getBytes(IOUtils.ISO_8859_1));
-        }
-    }
-
-    protected void assertParameter(HttpServletRequestWrapper wrapper, String name, String... values) {
-        String[] pValues = wrapper.getParameterValues(name);
-        assertNotNull(pValues);
-
-        if (values == null) {
-            assertEquals(1, pValues.length);
-            assertEquals("", pValues[0]);
-        } else {
-            assertEquals(values.length, pValues.length);
-            for (int i = 0; i < values.length; i++) {
-                assertEquals(values[i], pValues[i]);
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ProxyRequestTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ProxyRequestTest.java
deleted file mode 100644
index fce077e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ProxyRequestTest.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.filter.ProxyHttpServletRequestWrapper;
-import org.apache.chemistry.opencmis.server.impl.atompub.AbstractAtomPubServiceCall;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-public class ProxyRequestTest {
-    private static final int FORWARDED_SERVER_PORT = 2443;
-    private static final String FORWARDED_SERVER_NAME = "www.frontend.org";
-    private static final String FORWARDED_HOST = FORWARDED_SERVER_NAME + ":" + FORWARDED_SERVER_PORT;
-    private static final String FORWARDED_HTTPS_PROTO = ProxyHttpServletRequestWrapper.HTTPS_SCHEME;
-    private static final String FORWARDED_HTTP_PROTO = ProxyHttpServletRequestWrapper.HTTP_SCHEME;
-    private static final String CONTEXT_PATH = "/context";
-    private static final String SERVLET_PATH = "cmisatom";
-    private static final String REPOSITORY_ID = "22d2880a- bae5-4cfc-a5a9-3b2618e6e11c";
-    private static final String EXPECTED_PATH = CONTEXT_PATH + "/" + SERVLET_PATH + "/" + REPOSITORY_ID;
-    private static final int BACKEND_SERVER_PORT = 8080;
-    private static final String BACKEND_SERVER_NAME = "www.backend.be";
-    private static final String BACKEND_SERVER_PROTO = ProxyHttpServletRequestWrapper.HTTP_SCHEME;
-
-    private static final UrlSerivceCall URL_SERVICE_CALL = new UrlSerivceCall();
-
-    @Mock
-    private HttpServletRequest request;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        when(this.request.getScheme()).thenReturn(BACKEND_SERVER_PROTO);
-        when(this.request.getServerName()).thenReturn(BACKEND_SERVER_NAME);
-        when(this.request.getServerPort()).thenReturn(BACKEND_SERVER_PORT);
-        when(this.request.getContextPath()).thenReturn(CONTEXT_PATH);
-        when(this.request.getServletPath()).thenReturn(SERVLET_PATH);
-        when(this.request.getRequestURI()).thenReturn(CONTEXT_PATH + "/" + SERVLET_PATH);
-    }
-
-    @Test
-    public void testGetProxiedProtoBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_PROTO_HEADER)).thenReturn(
-                FORWARDED_HTTPS_PROTO);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_HTTPS_PROTO, proxyRequest.getScheme());
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(FORWARDED_HTTPS_PROTO, baseUri.getScheme());
-        assertEquals(BACKEND_SERVER_NAME, baseUri.getHost());
-        assertEquals(BACKEND_SERVER_PORT, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostBaseAddressAndHttpsProto() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_PROTO_HEADER)).thenReturn(
-                FORWARDED_HTTPS_PROTO);
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(
-                FORWARDED_SERVER_NAME);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_HTTPS_PROTO, proxyRequest.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, proxyRequest.getServerName());
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(FORWARDED_HTTPS_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(-1, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(
-                FORWARDED_SERVER_NAME);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_SERVER_NAME, proxyRequest.getServerName());
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(BACKEND_SERVER_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(-1, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostBaseAddressAndPath() throws URISyntaxException {
-        String path = "/test";
-
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(
-                FORWARDED_SERVER_NAME);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, path);
-
-        assertEquals(FORWARDED_SERVER_NAME, proxyRequest.getServerName());
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(BACKEND_SERVER_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(-1, baseUri.getPort());
-        assertEquals(path + "/" + SERVLET_PATH + "/" + REPOSITORY_ID, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostAndPortBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(FORWARDED_HOST);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertTrue(FORWARDED_HOST.startsWith(proxyRequest.getServerName()));
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(BACKEND_SERVER_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(FORWARDED_SERVER_PORT, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostPortAndProtoBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_PROTO_HEADER)).thenReturn(
-                FORWARDED_HTTPS_PROTO);
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(FORWARDED_HOST);
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_HTTPS_PROTO, proxyRequest.getScheme());
-        assertTrue(FORWARDED_HOST.startsWith(proxyRequest.getServerName()));
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(FORWARDED_HTTPS_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(FORWARDED_SERVER_PORT, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostBadHttpPortAndProtoBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_PROTO_HEADER)).thenReturn(
-                FORWARDED_HTTP_PROTO);
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(
-                FORWARDED_SERVER_NAME + ":noportnumber");
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_HTTP_PROTO, proxyRequest.getScheme());
-        assertTrue(FORWARDED_HOST.startsWith(proxyRequest.getServerName()));
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(FORWARDED_HTTP_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(-1, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testGetProxiedHostBadHttpsPortAndProtoBaseAddress() throws URISyntaxException {
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_PROTO_HEADER)).thenReturn(
-                FORWARDED_HTTPS_PROTO);
-        when(this.request.getHeader(ProxyHttpServletRequestWrapper.FORWARDED_HOST_HEADER)).thenReturn(
-                FORWARDED_SERVER_NAME + ":noportnumber");
-
-        ProxyHttpServletRequestWrapper proxyRequest = new ProxyHttpServletRequestWrapper(request, null);
-
-        assertEquals(FORWARDED_HTTPS_PROTO, proxyRequest.getScheme());
-        assertTrue(FORWARDED_HOST.startsWith(proxyRequest.getServerName()));
-
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(proxyRequest, REPOSITORY_ID).toString());
-
-        assertEquals(FORWARDED_HTTPS_PROTO, baseUri.getScheme());
-        assertEquals(FORWARDED_SERVER_NAME, baseUri.getHost());
-        assertEquals(-1, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    @Test
-    public void testCompileBaseUrl() throws URISyntaxException {
-        URI baseUri = new URI(URL_SERVICE_CALL.compileBaseUrl(request, REPOSITORY_ID).toString());
-
-        assertEquals(BACKEND_SERVER_PROTO, baseUri.getScheme());
-        assertEquals(BACKEND_SERVER_NAME, baseUri.getHost());
-        assertEquals(BACKEND_SERVER_PORT, baseUri.getPort());
-        assertEquals(EXPECTED_PATH, baseUri.getPath());
-    }
-
-    static class UrlSerivceCall extends AbstractAtomPubServiceCall {
-        public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
-                HttpServletResponse response) throws Exception {
-            // no implementation
-
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ThresholdOutputStreamTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ThresholdOutputStreamTest.java
deleted file mode 100644
index 2c1b555..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/test/java/org/apache/chemistry/opencmis/server/impl/ThresholdOutputStreamTest.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.impl;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-
-import org.apache.chemistry.opencmis.commons.server.TempStoreOutputStream;
-import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
-import org.apache.chemistry.opencmis.server.shared.ThresholdOutputStream;
-import org.apache.chemistry.opencmis.server.shared.ThresholdOutputStream.ThresholdInputStream;
-import org.junit.Test;
-
-public class ThresholdOutputStreamTest {
-
-    private static final String MIME_TYPE_1 = "some/type";
-    private static final String MIME_TYPE_2 = "another/type";
-    private static final String FILE_NAME_1 = "file1.txt";
-    private static final String FILE_NAME_2 = "the_other_file";
-    private static final byte[] CONTENT = "Hello".getBytes();
-
-    @Test
-    public void testInMemory() throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, 1024, 1024, false);
-
-        TempStoreOutputStream tempStream = streamFactory.newOutputStream();
-        tempStream.setMimeType(MIME_TYPE_1);
-        tempStream.setFileName(FILE_NAME_1);
-        assertTrue(tempStream instanceof ThresholdOutputStream);
-
-        // set content
-        ThresholdOutputStream tos = (ThresholdOutputStream) tempStream;
-        tos.write(CONTENT);
-        tos.close();
-
-        // get and check input stream
-        ThresholdInputStream tis = (ThresholdInputStream) tos.getInputStream();
-
-        assertTrue(tis.isInMemory());
-        assertNull(tis.getTemporaryFile());
-        assertTrue(tis.markSupported());
-        assertEquals(CONTENT.length, tis.getLength());
-        assertArrayEquals(CONTENT, getBytesFromArray(tis.getBytes(), (int) tis.getLength()));
-        assertEquals(MIME_TYPE_1, tis.getMimeType());
-        assertEquals(FILE_NAME_1, tis.getFileName());
-
-        // read stream
-        byte[] buffer = new byte[CONTENT.length];
-        int len = tis.read(buffer);
-        assertEquals(CONTENT.length, len);
-        assertArrayEquals(CONTENT, buffer);
-
-        // rewind and read again
-        tis.rewind();
-        len = tis.read(buffer);
-        assertEquals(CONTENT.length, len);
-        assertArrayEquals(CONTENT, buffer);
-
-        // mark and reset
-        tis.rewind();
-        tis.read();
-        tis.mark(1024);
-        tis.read();
-        tis.read();
-        tis.reset();
-        len = tis.read(buffer);
-        assertEquals(CONTENT.length - 1, len);
-
-        // close and check
-        tis.close();
-
-        assertEquals(-1, tis.read());
-
-        try {
-            tis.getBytes();
-            fail("IllegalStateException expected!");
-        } catch (IllegalStateException e) {
-            // expected
-        }
-    }
-
-    @Test
-    public void testTempFile() throws Exception {
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, 0, 1024, false);
-
-        TempStoreOutputStream tempStream = streamFactory.newOutputStream();
-        tempStream.setMimeType(MIME_TYPE_2);
-        tempStream.setFileName(FILE_NAME_2);
-        assertTrue(tempStream instanceof ThresholdOutputStream);
-
-        // set content
-        ThresholdOutputStream tos = (ThresholdOutputStream) tempStream;
-        tos.write(CONTENT);
-        tos.close();
-
-        // get and check input stream
-        ThresholdInputStream tis = (ThresholdInputStream) tos.getInputStream();
-
-        assertFalse(tis.isInMemory());
-        assertTrue(tis.markSupported());
-        assertNull(tis.getBytes());
-        assertEquals(CONTENT.length, tis.getLength());
-        assertEquals(MIME_TYPE_2, tis.getMimeType());
-        assertEquals(FILE_NAME_2, tis.getFileName());
-
-        assertTrue(tis.getTemporaryFile().exists());
-        assertEquals(CONTENT.length, tis.getTemporaryFile().length());
-
-        // read stream
-        byte[] buffer = new byte[CONTENT.length];
-        int len = tis.read(buffer);
-        assertEquals(CONTENT.length, len);
-        assertArrayEquals(CONTENT, buffer);
-        assertTrue(tis.getTemporaryFile().exists());
-
-        // rewind and read again
-        tis.rewind();
-        len = tis.read(buffer);
-        assertEquals(CONTENT.length, len);
-        assertArrayEquals(CONTENT, buffer);
-        assertTrue(tis.getTemporaryFile().exists());
-
-        // mark and reset
-        tis.rewind();
-        tis.read();
-        tis.mark(1024);
-        tis.read();
-        tis.read();
-        tis.reset();
-        len = tis.read(buffer);
-        assertEquals(CONTENT.length - 1, len);
-
-        File tempFile = tis.getTemporaryFile();
-
-        // close and check
-        tis.close();
-
-        assertEquals(-1, tis.read());
-        assertFalse(tempFile.exists());
-
-        try {
-            tis.getTemporaryFile();
-            fail("IllegalStateException expected!");
-        } catch (IllegalStateException e) {
-            // expected
-        }
-    }
-
-    @Test
-    public void testThreshold() throws Exception {
-        int threshold = 8;
-
-        TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance(null, threshold, 1024,
-                false);
-
-        for (int i = 0; i < 20; i++) {
-            TempStoreOutputStream tempStream = streamFactory.newOutputStream();
-            assertTrue(tempStream instanceof ThresholdOutputStream);
-
-            ThresholdOutputStream tos = (ThresholdOutputStream) tempStream;
-            for (int j = 0; j < i; j++) {
-                tos.write('0' + j);
-            }
-            tos.close();
-
-            ThresholdInputStream tis = (ThresholdInputStream) tos.getInputStream();
-            if (i > threshold) {
-                assertFalse(tis.isInMemory());
-            } else {
-                assertTrue(tis.isInMemory());
-            }
-
-            File tempFile = tis.getTemporaryFile();
-
-            tis.close();
-
-            assertEquals(-1, tis.read());
-            if (tis.isInMemory()) {
-                assertNull(tempFile);
-            } else {
-                assertNotNull(tempFile);
-                assertFalse(tempFile.exists());
-            }
-        }
-    }
-
-    private byte[] getBytesFromArray(byte[] buffer, int len) {
-        byte[] result = new byte[len];
-
-        System.arraycopy(buffer, 0, result, 0, len);
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/pom.xml
deleted file mode 100644
index 6eae019..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
-        applicable law or agreed to in writing, software distributed
-        under the License is distributed on an "AS IS" BASIS, WITHOUT
-        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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-extension-archetype</artifactId>
-    <name>OpenCMIS Server Extension Archetype</name>
-    <packaging>maven-archetype</packaging>
-    <description>OpenCMIS Server Extension archetype</description>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-        <opencmisVersion>${project.version}</opencmisVersion>
-    </properties>
-
-    <build>   
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>archetype-resources/pom.xml</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>false</filtering>
-                <excludes>
-                    <exclude>archetype-resources/pom.xml</exclude>
-                </excludes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>2.2</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>integration-test</id>
-                        <goals>
-                            <goal>integration-test</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <version>2.6</version>
-                    <configuration>
-                         <escapeString>\</escapeString>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 509308b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
-        specific language governing permissions and limitations under the License.
-    -->
-
-<archetype-descriptor name="OpenCMIS Server Extension">
-
-    <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/main/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-    <requiredProperties>
-        <requiredProperty key="projectPrefix"/>
-    </requiredProperties>
-
-</archetype-descriptor>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index bd5fd89..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>\${groupId}</groupId>
-    <artifactId>\${artifactId}</artifactId>
-    <version>\${version}</version>
-
-    <properties>
-        <opencmis.version>${opencmisVersion}</opencmis.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <name>Your OpenCMIS Server Extension</name>
-
-    <build>
-        <plugins>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.0</version>
-                <configuration>
-                    <target>1.6</target>
-                    <source>1.6</source>
-                    <encoding>UTF-8</encoding>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>\${opencmis.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-            <version>\${opencmis.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceWrapper.java
deleted file mode 100644
index db454ff..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/main/resources/archetype-resources/src/main/java/__projectPrefix__CmisServiceWrapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package ${package};
-
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.AbstractCmisServiceWrapper;
-
-/**
- * CMIS Service Wrapper.
- */
-public class ${projectPrefix}CmisServiceWrapper extends AbstractCmisServiceWrapper {
-
-    public ${projectPrefix}CmisServiceWrapper(CmisService service) {
-        super(service);
-    }
-    
-    // @Override
-    // public void initialize(Object[] params) {
-    // }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/archetype.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/archetype.properties
deleted file mode 100644
index 8346cc8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/archetype.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-groupId=org.test.cmis
-artifactId=test-cmis-server-extension
-version=1.0-SNAPSHOT
-package=org.test.cmis.server.extension
-projectPrefix=TestExt
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/goal.txt b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/goal.txt
deleted file mode 100644
index 3f97023..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype/src/test/resources/projects/server/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/pom.xml
deleted file mode 100644
index b63f510..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/pom.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-fileshare</artifactId>
-    <name>OpenCMIS FileShare Server Implementation</name>
-    <packaging>war</packaging>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <!--
-                            OSGi Bundle Support
-                        -->
-                        <manifestEntries>
-                            <Bundle-Name>org.apache.chemistry.opencmis.server.fileshare</Bundle-Name>
-                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.server.fileshare</Bundle-SymbolicName>
-                            <Bundle-Version>${project.version}</Bundle-Version>
-                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
-                            <Bundle-Classpath>.</Bundle-Classpath>
-                            <Web-ContextPath>fileshare</Web-ContextPath>
-                        </manifestEntries>
-                    </archive>
-                    <overlays>
-                        <overlay>
-                        </overlay>
-                        <overlay>
-                            <groupId>${project.groupId}</groupId>
-                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-                            <excludes>
-                                <exclude>index.html</exclude> <!-- default index page -->
-                                <exclude>css/**</exclude> <!-- CSS for the default index page -->
-                                <exclude>images/**</exclude> <!-- images for the default index page -->
-                                <exclude>web/**</exclude> <!-- sample JavaScript application -->
-                                <exclude>WEB-INF/classes/sample-repository.properties</exclude> <!-- sample server properties file -->
-                                <exclude>WEB-INF/token/**</exclude>  <!-- sample Browser Binding token implementation -->
-                                <exclude>WEB-INF/websphere/**</exclude> <!-- WebSphere specfic files -->
-                            </excludes>
-                            <includes>
-                                <include>**</include>
-                                <include>META-INF/THIRD-PARTY-LICENSES</include>
-                            </includes>
-                        </overlay>
-                    </overlays>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>          
-        </dependency>
-        <!-- Uncomment for CORS support 
-        <dependency>
-            <groupId>com.thetransactioncompany</groupId>
-            <artifactId>cors-filter</artifactId>
-            <version>2.1.2</version>
-        </dependency>
-        -->
-        <dependency><!-- for development only -->
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency><!-- for development only -->
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/ContentRangeInputStream.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/ContentRangeInputStream.java
deleted file mode 100644
index 099256d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/ContentRangeInputStream.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-public class ContentRangeInputStream extends FilterInputStream {
-
-    private static final int BUFFER_SIZE = 4096;
-
-    private long offset;
-    private long length;
-    private long remaining;
-
-    public ContentRangeInputStream(InputStream stream, BigInteger offset, BigInteger length) {
-        super(stream);
-
-        this.offset = offset != null ? offset.longValue() : 0;
-        this.length = length != null ? length.longValue() : Long.MAX_VALUE;
-
-        this.remaining = this.length;
-
-        if (this.offset > 0) {
-            skipBytes();
-        }
-    }
-
-    private void skipBytes() {
-        long remainingSkipBytes = offset;
-
-        try {
-            while (remainingSkipBytes > 0) {
-                long skipped = super.skip(remainingSkipBytes);
-                remainingSkipBytes -= skipped;
-
-                if (skipped == 0) {
-                    // stream might not support skipping
-                    skipBytesByReading(remainingSkipBytes);
-                    break;
-                }
-            }
-        } catch (IOException e) {
-            throw new CmisRuntimeException("Skipping the stream failed!", e);
-        }
-    }
-
-    private void skipBytesByReading(long remainingSkipBytes) {
-        try {
-            final byte[] buffer = new byte[BUFFER_SIZE];
-            while (remainingSkipBytes > 0) {
-                long skipped = super.read(buffer, 0, (int) Math.min(buffer.length, remainingSkipBytes));
-                if (skipped == -1) {
-                    break;
-                }
-
-                remainingSkipBytes -= skipped;
-            }
-        } catch (IOException e) {
-            throw new CmisRuntimeException("Reading the stream failed!", e);
-        }
-    }
-
-    @Override
-    public boolean markSupported() {
-        return false;
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        if (remaining <= 0) {
-            return 0;
-        }
-
-        long skipped = super.skip(n);
-        remaining -= skipped;
-
-        return skipped;
-    }
-
-    @Override
-    public int available() throws IOException {
-        if (remaining <= 0) {
-            return 0;
-        }
-
-        int avail = super.available();
-
-        if (remaining < avail) {
-            return (int) remaining;
-        }
-
-        return avail;
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (remaining <= 0) {
-            return -1;
-        }
-
-        remaining--;
-
-        return super.read();
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        if (remaining <= 0) {
-            return -1;
-        }
-
-        int readBytes = super.read(b, off, (int) Math.min(len, remaining));
-        if (readBytes == -1) {
-            return -1;
-        }
-
-        remaining -= readBytes;
-
-        return readBytes;
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        return read(b, 0, b.length);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisService.java
deleted file mode 100644
index 83daf14..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisService.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
-
-/**
- * FileShare Service implementation.
- */
-public class FileShareCmisService extends AbstractCmisService implements CallContextAwareCmisService {
-
-    private final FileShareRepositoryManager repositoryManager;
-    private CallContext context;
-
-    public FileShareCmisService(final FileShareRepositoryManager repositoryManager) {
-        this.repositoryManager = repositoryManager;
-    }
-
-    // --- Call Context ---
-
-    /**
-     * Sets the call context.
-     * 
-     * This method should only be called by the service factory.
-     */
-    public void setCallContext(CallContext context) {
-        this.context = context;
-    }
-
-    /**
-     * Gets the call context.
-     */
-    public CallContext getCallContext() {
-        return context;
-    }
-
-    /**
-     * Gets the repository for the current call.
-     */
-    public FileShareRepository getRepository() {
-        return repositoryManager.getRepository(getCallContext().getRepositoryId());
-    }
-
-    // --- repository service ---
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        for (FileShareRepository fsr : repositoryManager.getRepositories()) {
-            if (fsr.getRepositoryId().equals(repositoryId)) {
-                return fsr.getRepositoryInfo(getCallContext());
-            }
-        }
-
-        throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
-    }
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        List<RepositoryInfo> result = new ArrayList<RepositoryInfo>();
-
-        for (FileShareRepository fsr : repositoryManager.getRepositories()) {
-            result.add(fsr.getRepositoryInfo(getCallContext()));
-        }
-
-        return result;
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getRepository().getTypeChildren(getCallContext(), typeId, includePropertyDefinitions, maxItems,
-                skipCount);
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return getRepository().getTypeDefinition(getCallContext(), typeId);
-    }
-
-    @Override
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        return getRepository().getTypeDescendants(getCallContext(), typeId, depth, includePropertyDefinitions);
-    }
-
-    // --- navigation service ---
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return getRepository().getChildren(getCallContext(), folderId, filter, includeAllowableActions,
-                includePathSegment, maxItems, skipCount, this);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return getRepository().getDescendants(getCallContext(), folderId, depth, filter, includeAllowableActions,
-                includePathSegment, this, false);
-    }
-
-    @Override
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        return getRepository().getFolderParent(getCallContext(), folderId, filter, this);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return getRepository().getDescendants(getCallContext(), folderId, depth, filter, includeAllowableActions,
-                includePathSegment, this, true);
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        return getRepository().getObjectParents(getCallContext(), objectId, filter, includeAllowableActions,
-                includeRelativePathSegment, this);
-    }
-
-    @Override
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        ObjectListImpl result = new ObjectListImpl();
-        result.setHasMoreItems(false);
-        result.setNumItems(BigInteger.ZERO);
-        List<ObjectData> emptyList = Collections.emptyList();
-        result.setObjects(emptyList);
-
-        return result;
-    }
-
-    // --- object service ---
-
-    @Override
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        ObjectData object = getRepository().create(getCallContext(), properties, folderId, contentStream,
-                versioningState, this);
-
-        return object.getId();
-    }
-
-    @Override
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return getRepository().createDocument(getCallContext(), properties, folderId, contentStream, versioningState);
-    }
-
-    @Override
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        return getRepository().createDocumentFromSource(getCallContext(), sourceId, properties, folderId,
-                versioningState);
-    }
-
-    @Override
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return getRepository().createFolder(getCallContext(), properties, folderId);
-    }
-
-    @Override
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        getRepository().deleteObject(getCallContext(), objectId);
-    }
-
-    @Override
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        return getRepository().deleteTree(getCallContext(), folderId, continueOnFailure);
-    }
-
-    @Override
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return getRepository().getAllowableActions(getCallContext(), objectId);
-    }
-
-    @Override
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        return getRepository().getContentStream(getCallContext(), objectId, offset, length);
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return getRepository().getObject(getCallContext(), objectId, null, filter, includeAllowableActions, includeAcl,
-                this);
-    }
-
-    @Override
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return getRepository().getObjectByPath(getCallContext(), path, filter, includeAllowableActions, includeAcl,
-                this);
-    }
-
-    @Override
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        ObjectData object = getRepository().getObject(getCallContext(), objectId, null, filter, false, false, this);
-        return object.getProperties();
-    }
-
-    @Override
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        getRepository().moveObject(getCallContext(), objectId, targetFolderId, this);
-    }
-
-    @Override
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        getRepository().changeContentStream(getCallContext(), objectId, overwriteFlag, contentStream, false);
-    }
-
-    @Override
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        getRepository().changeContentStream(getCallContext(), objectId, true, contentStream, true);
-    }
-
-    @Override
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        getRepository().changeContentStream(getCallContext(), objectId, true, null, false);
-    }
-
-    @Override
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        getRepository().updateProperties(getCallContext(), objectId, properties, this);
-    }
-
-    @Override
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        return getRepository().bulkUpdateProperties(getCallContext(), objectIdAndChangeToken, properties, this);
-    }
-
-    // --- versioning service ---
-
-    @Override
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        ObjectData theVersion = getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter,
-                includeAllowableActions, false, this);
-
-        return Collections.singletonList(theVersion);
-    }
-
-    @Override
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        return getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter, includeAllowableActions,
-                includeAcl, this);
-    }
-
-    @Override
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        ObjectData object = getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter, false,
-                false, null);
-
-        return object.getProperties();
-    }
-
-    // --- ACL service ---
-
-    @Override
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        return getRepository().getAcl(getCallContext(), objectId);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisServiceFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisServiceFactory.java
deleted file mode 100644
index a21cb66..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareCmisServiceFactory.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.CmisServiceWrapperManager;
-import org.apache.chemistry.opencmis.server.support.wrapper.ConformanceCmisServiceWrapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * FileShare Service Factory.
- */
-public class FileShareCmisServiceFactory extends AbstractServiceFactory {
-
-    private static final Logger LOG = LoggerFactory.getLogger(FileShareCmisServiceFactory.class);
-
-    private static final String PREFIX_LOGIN = "login.";
-    private static final String PREFIX_REPOSITORY = "repository.";
-    private static final String PREFIX_TYPE = "type.";
-    private static final String SUFFIX_READWRITE = ".readwrite";
-    private static final String SUFFIX_READONLY = ".readonly";
-
-    /** Default maxItems value for getTypeChildren()}. */
-    private static final BigInteger DEFAULT_MAX_ITEMS_TYPES = BigInteger.valueOf(50);
-
-    /** Default depth value for getTypeDescendants(). */
-    private static final BigInteger DEFAULT_DEPTH_TYPES = BigInteger.valueOf(-1);
-
-    /**
-     * Default maxItems value for getChildren() and other methods returning
-     * lists of objects.
-     */
-    private static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(200);
-
-    /** Default depth value for getDescendants(). */
-    private static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(10);
-
-    /** Each thread gets its own {@link FileShareCmisService} instance. */
-    private ThreadLocal<CallContextAwareCmisService> threadLocalService = new ThreadLocal<CallContextAwareCmisService>();
-
-    private FileShareRepositoryManager repositoryManager;
-    private FileShareUserManager userManager;
-    private FileShareTypeManager typeManager;
-    private CmisServiceWrapperManager wrapperManager;
-
-    public FileShareRepositoryManager getRepositoryManager() {
-        return repositoryManager;
-    }
-
-    public FileShareUserManager getUserManager() {
-        return userManager;
-    }
-
-    public FileShareTypeManager getTypeManager() {
-        return typeManager;
-    }
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        repositoryManager = new FileShareRepositoryManager();
-        userManager = new FileShareUserManager();
-        typeManager = new FileShareTypeManager();
-
-        wrapperManager = new CmisServiceWrapperManager();
-        wrapperManager.addWrappersFromServiceFactoryParameters(parameters);
-        wrapperManager.addOuterWrapper(ConformanceCmisServiceWrapper.class, DEFAULT_MAX_ITEMS_TYPES,
-                DEFAULT_DEPTH_TYPES, DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
-
-        readConfiguration(parameters);
-    }
-
-    @Override
-    public void destroy() {
-        threadLocalService = null;
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        // authenticate the user
-        // if the authentication fails, authenticate() throws a
-        // CmisPermissionDeniedException
-        userManager.authenticate(context);
-
-        // get service object for this thread
-        CallContextAwareCmisService service = threadLocalService.get();
-        if (service == null) {
-            // there is no service object for this thread -> create one
-            FileShareCmisService fileShareService = new FileShareCmisService(repositoryManager);
-
-            service = (CallContextAwareCmisService) wrapperManager.wrap(fileShareService);
-
-            threadLocalService.set(service);
-        }
-
-        // hand over the call context to the service object
-        service.setCallContext(context);
-
-        return service;
-    }
-
-    // ---- helpers ----
-
-    /**
-     * Reads the configuration and sets up the repositories, logins, and type
-     * definitions.
-     */
-    private void readConfiguration(Map<String, String> parameters) {
-        List<String> keys = new ArrayList<String>(parameters.keySet());
-        Collections.sort(keys);
-
-        for (String key : keys) {
-            if (key.startsWith(PREFIX_LOGIN)) {
-                // get logins
-                String usernameAndPassword = replaceSystemProperties(parameters.get(key));
-                if (usernameAndPassword == null) {
-                    continue;
-                }
-
-                String username = usernameAndPassword;
-                String password = "";
-
-                int x = usernameAndPassword.indexOf(':');
-                if (x > -1) {
-                    username = usernameAndPassword.substring(0, x);
-                    password = usernameAndPassword.substring(x + 1);
-                }
-
-                LOG.info("Adding login '{}'.", username);
-
-                userManager.addLogin(username, password);
-            } else if (key.startsWith(PREFIX_TYPE)) {
-                // load type definition
-                String typeFile = replaceSystemProperties(parameters.get(key).trim());
-                if (typeFile.length() == 0) {
-                    continue;
-                }
-
-                LOG.info("Loading type definition: {}", typeFile);
-
-                if (typeFile.charAt(0) == '/') {
-                    try {
-                        typeManager.loadTypeDefinitionFromResource(typeFile);
-                        continue;
-                    } catch (IllegalArgumentException e) {
-                        // resource not found -> try it as a regular file
-                    } catch (Exception e) {
-                        LOG.warn("Could not load type defintion from resource '{}': {}", typeFile, e.getMessage(), e);
-                        continue;
-                    }
-                }
-
-                try {
-                    typeManager.loadTypeDefinitionFromFile(typeFile);
-                } catch (Exception e) {
-                    LOG.warn("Could not load type defintion from file '{}': {}", typeFile, e.getMessage(), e);
-                }
-            } else if (key.startsWith(PREFIX_REPOSITORY)) {
-                // configure repositories
-                String repositoryId = key.substring(PREFIX_REPOSITORY.length()).trim();
-                int x = repositoryId.lastIndexOf('.');
-                if (x > 0) {
-                    repositoryId = repositoryId.substring(0, x);
-                }
-
-                if (repositoryId.length() == 0) {
-                    throw new IllegalArgumentException("No repository id!");
-                }
-
-                if (key.endsWith(SUFFIX_READWRITE)) {
-                    // read-write users
-                    FileShareRepository fsr = repositoryManager.getRepository(repositoryId);
-                    for (String user : split(parameters.get(key))) {
-                        fsr.setUserReadWrite(replaceSystemProperties(user));
-                    }
-                } else if (key.endsWith(SUFFIX_READONLY)) {
-                    // read-only users
-                    FileShareRepository fsr = repositoryManager.getRepository(repositoryId);
-                    for (String user : split(parameters.get(key))) {
-                        fsr.setUserReadOnly(replaceSystemProperties(user));
-                    }
-                } else {
-                    // new repository
-                    String root = replaceSystemProperties(parameters.get(key));
-
-                    LOG.info("Adding repository '{}': {}", repositoryId, root);
-
-                    FileShareRepository fsr = new FileShareRepository(repositoryId, root, typeManager);
-                    repositoryManager.addRepository(fsr);
-                }
-            }
-        }
-    }
-
-    /**
-     * Splits a string by comma.
-     */
-    private List<String> split(String csl) {
-        if (csl == null) {
-            return Collections.emptyList();
-        }
-
-        List<String> result = new ArrayList<String>();
-        for (String s : csl.split(",")) {
-            result.add(s.trim());
-        }
-
-        return result;
-    }
-
-    /**
-     * Finds all substrings in curly braces and replaces them with the value of
-     * the corresponding system property.
-     */
-    private String replaceSystemProperties(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        StringBuilder result = new StringBuilder();
-        StringBuilder property = null;
-        boolean inProperty = false;
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-
-            if (inProperty) {
-                if (c == '}') {
-                    String value = System.getProperty(property.toString());
-                    if (value != null) {
-                        result.append(value);
-                    }
-                    inProperty = false;
-                } else {
-                    property.append(c);
-                }
-            } else {
-                if (c == '{') {
-                    property = new StringBuilder();
-                    inProperty = true;
-                } else {
-                    result.append(c);
-                }
-            }
-        }
-
-        return result.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java
deleted file mode 100644
index 6fc95c4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java
+++ /dev/null
@@ -1,2149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.commons.BasicPermissions;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.Base64;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeTypes;
-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PartialContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.server.impl.ServerVersion;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implements all repository operations.
- */
-public class FileShareRepository {
-
-    private static final Logger LOG = LoggerFactory.getLogger(FileShareRepository.class);
-
-    private static final String ROOT_ID = "@root@";
-    private static final String SHADOW_EXT = ".cmis.xml";
-    private static final String SHADOW_FOLDER = "cmis.xml";
-
-    private static final String USER_UNKNOWN = "<unknown>";
-
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    /** Repository id. */
-    private final String repositoryId;
-    /** Root directory. */
-    private final File root;
-    /** Types. */
-    private final FileShareTypeManager typeManager;
-    /** Users. */
-    private final Map<String, Boolean> readWriteUserMap;
-
-    /** CMIS 1.0 repository info. */
-    private final RepositoryInfo repositoryInfo10;
-    /** CMIS 1.1 repository info. */
-    private final RepositoryInfo repositoryInfo11;
-
-    public FileShareRepository(final String repositoryId, final String rootPath, final FileShareTypeManager typeManager) {
-        // check repository id
-        if (repositoryId == null || repositoryId.trim().length() == 0) {
-            throw new IllegalArgumentException("Invalid repository id!");
-        }
-
-        this.repositoryId = repositoryId;
-
-        // check root folder
-        if (rootPath == null || rootPath.trim().length() == 0) {
-            throw new IllegalArgumentException("Invalid root folder!");
-        }
-
-        root = new File(rootPath);
-        if (!root.isDirectory()) {
-            throw new IllegalArgumentException("Root is not a directory!");
-        }
-
-        // set type manager objects
-        this.typeManager = typeManager;
-
-        // set up read-write user map
-        readWriteUserMap = new HashMap<String, Boolean>();
-
-        // set up repository infos
-        repositoryInfo10 = createRepositoryInfo(CmisVersion.CMIS_1_0);
-        repositoryInfo11 = createRepositoryInfo(CmisVersion.CMIS_1_1);
-    }
-
-    private RepositoryInfo createRepositoryInfo(CmisVersion cmisVersion) {
-        assert cmisVersion != null;
-
-        RepositoryInfoImpl repositoryInfo = new RepositoryInfoImpl();
-
-        repositoryInfo.setId(repositoryId);
-        repositoryInfo.setName(repositoryId);
-        repositoryInfo.setDescription(repositoryId);
-
-        repositoryInfo.setCmisVersionSupported(cmisVersion.value());
-
-        repositoryInfo.setProductName("OpenCMIS FileShare");
-        repositoryInfo.setProductVersion(ServerVersion.OPENCMIS_VERSION);
-        repositoryInfo.setVendorName("OpenCMIS");
-
-        repositoryInfo.setRootFolder(ROOT_ID);
-
-        repositoryInfo.setThinClientUri("");
-        repositoryInfo.setChangesIncomplete(true);
-
-        RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl();
-        capabilities.setCapabilityAcl(CapabilityAcl.DISCOVER);
-        capabilities.setAllVersionsSearchable(false);
-        capabilities.setCapabilityJoin(CapabilityJoin.NONE);
-        capabilities.setSupportsMultifiling(false);
-        capabilities.setSupportsUnfiling(false);
-        capabilities.setSupportsVersionSpecificFiling(false);
-        capabilities.setIsPwcSearchable(false);
-        capabilities.setIsPwcUpdatable(false);
-        capabilities.setCapabilityQuery(CapabilityQuery.NONE);
-        capabilities.setCapabilityChanges(CapabilityChanges.NONE);
-        capabilities.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
-        capabilities.setSupportsGetDescendants(true);
-        capabilities.setSupportsGetFolderTree(true);
-        capabilities.setCapabilityRendition(CapabilityRenditions.NONE);
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            capabilities.setCapabilityOrderBy(CapabilityOrderBy.NONE);
-
-            NewTypeSettableAttributesImpl typeSetAttributes = new NewTypeSettableAttributesImpl();
-            typeSetAttributes.setCanSetControllableAcl(false);
-            typeSetAttributes.setCanSetControllablePolicy(false);
-            typeSetAttributes.setCanSetCreatable(false);
-            typeSetAttributes.setCanSetDescription(false);
-            typeSetAttributes.setCanSetDisplayName(false);
-            typeSetAttributes.setCanSetFileable(false);
-            typeSetAttributes.setCanSetFulltextIndexed(false);
-            typeSetAttributes.setCanSetId(false);
-            typeSetAttributes.setCanSetIncludedInSupertypeQuery(false);
-            typeSetAttributes.setCanSetLocalName(false);
-            typeSetAttributes.setCanSetLocalNamespace(false);
-            typeSetAttributes.setCanSetQueryable(false);
-            typeSetAttributes.setCanSetQueryName(false);
-
-            capabilities.setNewTypeSettableAttributes(typeSetAttributes);
-
-            CreatablePropertyTypesImpl creatablePropertyTypes = new CreatablePropertyTypesImpl();
-            capabilities.setCreatablePropertyTypes(creatablePropertyTypes);
-        }
-
-        repositoryInfo.setCapabilities(capabilities);
-
-        AclCapabilitiesDataImpl aclCapability = new AclCapabilitiesDataImpl();
-        aclCapability.setSupportedPermissions(SupportedPermissions.BASIC);
-        aclCapability.setAclPropagation(AclPropagation.OBJECTONLY);
-
-        // permissions
-        List<PermissionDefinition> permissions = new ArrayList<PermissionDefinition>();
-        permissions.add(createPermission(BasicPermissions.READ, "Read"));
-        permissions.add(createPermission(BasicPermissions.WRITE, "Write"));
-        permissions.add(createPermission(BasicPermissions.ALL, "All"));
-        aclCapability.setPermissionDefinitionData(permissions);
-
-        // mapping
-        List<PermissionMapping> list = new ArrayList<PermissionMapping>();
-        list.add(createMapping(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_CREATE_FOLDER_FOLDER, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_DELETE_CONTENT_DOCUMENT, BasicPermissions.WRITE));
-        list.add(createMapping(PermissionMapping.CAN_DELETE_OBJECT, BasicPermissions.ALL));
-        list.add(createMapping(PermissionMapping.CAN_DELETE_TREE_FOLDER, BasicPermissions.ALL));
-        list.add(createMapping(PermissionMapping.CAN_GET_ACL_OBJECT, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_ALL_VERSIONS_VERSION_SERIES, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_CHILDREN_FOLDER, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_DESCENDENTS_FOLDER, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_FOLDER_PARENT_OBJECT, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_PARENTS_FOLDER, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_PROPERTIES_OBJECT, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_OBJECT, BasicPermissions.WRITE));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_SOURCE, BasicPermissions.READ));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_TARGET, BasicPermissions.WRITE));
-        list.add(createMapping(PermissionMapping.CAN_SET_CONTENT_DOCUMENT, BasicPermissions.WRITE));
-        list.add(createMapping(PermissionMapping.CAN_UPDATE_PROPERTIES_OBJECT, BasicPermissions.WRITE));
-        list.add(createMapping(PermissionMapping.CAN_VIEW_CONTENT_OBJECT, BasicPermissions.READ));
-        Map<String, PermissionMapping> map = new LinkedHashMap<String, PermissionMapping>();
-        for (PermissionMapping pm : list) {
-            map.put(pm.getKey(), pm);
-        }
-        aclCapability.setPermissionMappingData(map);
-
-        repositoryInfo.setAclCapabilities(aclCapability);
-
-        return repositoryInfo;
-    }
-
-    private PermissionDefinition createPermission(String permission, String description) {
-        PermissionDefinitionDataImpl pd = new PermissionDefinitionDataImpl();
-        pd.setId(permission);
-        pd.setDescription(description);
-
-        return pd;
-    }
-
-    private PermissionMapping createMapping(String key, String permission) {
-        PermissionMappingDataImpl pm = new PermissionMappingDataImpl();
-        pm.setKey(key);
-        pm.setPermissions(Collections.singletonList(permission));
-
-        return pm;
-    }
-
-    /**
-     * Returns the id of this repository.
-     */
-    public String getRepositoryId() {
-        return repositoryId;
-    }
-
-    /**
-     * Returns the root directory of this repository
-     */
-    public File getRootDirectory() {
-        return root;
-    }
-
-    /**
-     * Sets read-only flag for the given user.
-     */
-    public void setUserReadOnly(String user) {
-        if (user == null || user.length() == 0) {
-            return;
-        }
-
-        readWriteUserMap.put(user, true);
-    }
-
-    /**
-     * Sets read-write flag for the given user.
-     */
-    public void setUserReadWrite(String user) {
-        if (user == null || user.length() == 0) {
-            return;
-        }
-
-        readWriteUserMap.put(user, false);
-    }
-
-    // --- CMIS operations ---
-
-    /**
-     * CMIS getRepositoryInfo.
-     */
-    public RepositoryInfo getRepositoryInfo(CallContext context) {
-        debug("getRepositoryInfo");
-
-        checkUser(context, false);
-
-        if (context.getCmisVersion() == CmisVersion.CMIS_1_0) {
-            return repositoryInfo10;
-        } else {
-            return repositoryInfo11;
-        }
-    }
-
-    /**
-     * CMIS getTypesChildren.
-     */
-    public TypeDefinitionList getTypeChildren(CallContext context, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount) {
-        debug("getTypesChildren");
-        checkUser(context, false);
-
-        return typeManager.getTypeChildren(context, typeId, includePropertyDefinitions, maxItems, skipCount);
-    }
-
-    /**
-     * CMIS getTypesDescendants.
-     */
-    public List<TypeDefinitionContainer> getTypeDescendants(CallContext context, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions) {
-        debug("getTypesDescendants");
-        checkUser(context, false);
-
-        return typeManager.getTypeDescendants(context, typeId, depth, includePropertyDefinitions);
-    }
-
-    /**
-     * CMIS getTypeDefinition.
-     */
-    public TypeDefinition getTypeDefinition(CallContext context, String typeId) {
-        debug("getTypeDefinition");
-        checkUser(context, false);
-
-        return typeManager.getTypeDefinition(context, typeId);
-    }
-
-    /**
-     * Create* dispatch for AtomPub.
-     */
-    public ObjectData create(CallContext context, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, ObjectInfoHandler objectInfos) {
-        debug("create");
-        boolean userReadOnly = checkUser(context, true);
-
-        String typeId = FileShareUtils.getObjectTypeId(properties);
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        String objectId = null;
-        if (type.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-            objectId = createDocument(context, properties, folderId, contentStream, versioningState);
-        } else if (type.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-            objectId = createFolder(context, properties, folderId);
-        } else {
-            throw new CmisObjectNotFoundException("Cannot create object of type '" + typeId + "'!");
-        }
-
-        return compileObjectData(context, getFile(objectId), null, false, false, userReadOnly, objectInfos);
-    }
-
-    /**
-     * CMIS createDocument.
-     */
-    public String createDocument(CallContext context, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState) {
-        debug("createDocument");
-        checkUser(context, true);
-
-        // check properties
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        // check versioning state
-        if (!(VersioningState.NONE == versioningState || versioningState == null)) {
-            throw new CmisConstraintException("Versioning not supported!");
-        }
-
-        // check type
-        String typeId = FileShareUtils.getObjectTypeId(properties);
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-        if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-            throw new CmisInvalidArgumentException("Type must be a document type!");
-        }
-
-        // compile the properties
-        PropertiesImpl props = compileWriteProperties(typeId, context.getUsername(), context.getUsername(), properties);
-
-        // check the name
-        String name = FileShareUtils.getStringProperty(properties, PropertyIds.NAME);
-        if (!isValidName(name)) {
-            throw new CmisNameConstraintViolationException("Name is not valid!");
-        }
-
-        // get parent File
-        File parent = getFile(folderId);
-        if (!parent.isDirectory()) {
-            throw new CmisObjectNotFoundException("Parent is not a folder!");
-        }
-
-        // check the file
-        File newFile = new File(parent, name);
-        if (newFile.exists()) {
-            throw new CmisNameConstraintViolationException("Document already exists!");
-        }
-
-        // create the file
-        try {
-            newFile.createNewFile();
-        } catch (IOException e) {
-            throw new CmisStorageException("Could not create file: " + e.getMessage(), e);
-        }
-
-        // write content, if available
-        if (contentStream != null && contentStream.getStream() != null) {
-            writeContent(newFile, contentStream.getStream());
-        }
-
-        // set creation date
-        addPropertyDateTime(props, typeId, null, PropertyIds.CREATION_DATE,
-                FileShareUtils.millisToCalendar(newFile.lastModified()));
-
-        // write properties
-        writePropertiesFile(newFile, props);
-
-        return getId(newFile);
-    }
-
-    /**
-     * CMIS createDocumentFromSource.
-     */
-    public String createDocumentFromSource(CallContext context, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState) {
-        debug("createDocumentFromSource");
-        checkUser(context, true);
-
-        // check versioning state
-        if (!(VersioningState.NONE == versioningState || versioningState == null)) {
-            throw new CmisConstraintException("Versioning not supported!");
-        }
-
-        // get parent File
-        File parent = getFile(folderId);
-        if (!parent.isDirectory()) {
-            throw new CmisObjectNotFoundException("Parent is not a folder!");
-        }
-
-        // get source File
-        File source = getFile(sourceId);
-        if (!source.isFile()) {
-            throw new CmisObjectNotFoundException("Source is not a document!");
-        }
-
-        // file name
-        String name = source.getName();
-
-        // get properties
-        PropertiesImpl sourceProperties = new PropertiesImpl();
-        readCustomProperties(source, sourceProperties, null, new ObjectInfoImpl());
-
-        // get the type id
-        String typeId = FileShareUtils.getIdProperty(sourceProperties, PropertyIds.OBJECT_TYPE_ID);
-        if (typeId == null) {
-            typeId = BaseTypeId.CMIS_DOCUMENT.value();
-        }
-
-        // copy properties
-        PropertiesImpl newProperties = new PropertiesImpl();
-        for (PropertyData<?> prop : sourceProperties.getProperties().values()) {
-            if (prop.getId().equals(PropertyIds.OBJECT_TYPE_ID) || prop.getId().equals(PropertyIds.CREATED_BY)
-                    || prop.getId().equals(PropertyIds.CREATION_DATE)
-                    || prop.getId().equals(PropertyIds.LAST_MODIFIED_BY)) {
-                continue;
-            }
-
-            newProperties.addProperty(prop);
-        }
-
-        // replace properties
-        if (properties != null) {
-            // find new name
-            String newName = FileShareUtils.getStringProperty(properties, PropertyIds.NAME);
-            if (newName != null) {
-                if (!isValidName(newName)) {
-                    throw new CmisNameConstraintViolationException("Name is not valid!");
-                }
-                name = newName;
-            }
-
-            // get the property definitions
-            TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-            if (type == null) {
-                throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-            }
-            if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-                throw new CmisInvalidArgumentException("Type must be a document type!");
-            }
-
-            // replace with new values
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                PropertyDefinition<?> propType = type.getPropertyDefinitions().get(prop.getId());
-
-                // do we know that property?
-                if (propType == null) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' is unknown!");
-                }
-
-                // can it be set?
-                if (propType.getUpdatability() != Updatability.READWRITE) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' cannot be updated!");
-                }
-
-                // empty properties are invalid
-                if (isEmptyProperty(prop)) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' must not be empty!");
-                }
-
-                newProperties.addProperty(prop);
-            }
-        }
-
-        addPropertyId(newProperties, typeId, null, PropertyIds.OBJECT_TYPE_ID, typeId);
-        addPropertyString(newProperties, typeId, null, PropertyIds.CREATED_BY, context.getUsername());
-        addPropertyDateTime(newProperties, typeId, null, PropertyIds.CREATION_DATE,
-                FileShareUtils.millisToCalendar(System.currentTimeMillis()));
-        addPropertyString(newProperties, typeId, null, PropertyIds.LAST_MODIFIED_BY, context.getUsername());
-
-        // check the file
-        File newFile = new File(parent, name);
-        if (newFile.exists()) {
-            throw new CmisNameConstraintViolationException("Document already exists.");
-        }
-
-        // create the file
-        try {
-            newFile.createNewFile();
-        } catch (IOException e) {
-            throw new CmisStorageException("Could not create file: " + e.getMessage(), e);
-        }
-
-        // copy content
-        try {
-            writeContent(newFile, new FileInputStream(source));
-        } catch (IOException e) {
-            throw new CmisStorageException("Could not roead or write content: " + e.getMessage(), e);
-        }
-
-        // write properties
-        writePropertiesFile(newFile, newProperties);
-
-        return getId(newFile);
-    }
-
-    /**
-     * Writes the content to disc.
-     */
-    private void writeContent(File newFile, InputStream stream) {
-        OutputStream out = null;
-        try {
-            out = new FileOutputStream(newFile);
-            IOUtils.copy(stream, out, BUFFER_SIZE);
-        } catch (IOException e) {
-            throw new CmisStorageException("Could not write content: " + e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(out);
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    /**
-     * CMIS createFolder.
-     */
-    public String createFolder(CallContext context, Properties properties, String folderId) {
-        debug("createFolder");
-        checkUser(context, true);
-
-        // check properties
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        // check type
-        String typeId = FileShareUtils.getObjectTypeId(properties);
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-        if (type.getBaseTypeId() != BaseTypeId.CMIS_FOLDER) {
-            throw new CmisInvalidArgumentException("Type must be a folder type!");
-        }
-
-        // compile the properties
-        PropertiesImpl props = compileWriteProperties(typeId, context.getUsername(), context.getUsername(), properties);
-
-        // check the name
-        String name = FileShareUtils.getStringProperty(properties, PropertyIds.NAME);
-        if (!isValidName(name)) {
-            throw new CmisNameConstraintViolationException("Name is not valid.");
-        }
-
-        // get parent File
-        File parent = getFile(folderId);
-        if (!parent.isDirectory()) {
-            throw new CmisObjectNotFoundException("Parent is not a folder!");
-        }
-
-        // create the folder
-        File newFolder = new File(parent, name);
-        if (!newFolder.mkdir()) {
-            throw new CmisStorageException("Could not create folder!");
-        }
-
-        // set creation date
-        addPropertyDateTime(props, typeId, null, PropertyIds.CREATION_DATE,
-                FileShareUtils.millisToCalendar(newFolder.lastModified()));
-
-        // write properties
-        writePropertiesFile(newFolder, props);
-
-        return getId(newFolder);
-    }
-
-    /**
-     * CMIS moveObject.
-     */
-    public ObjectData moveObject(CallContext context, Holder<String> objectId, String targetFolderId,
-            ObjectInfoHandler objectInfos) {
-        debug("moveObject");
-        boolean userReadOnly = checkUser(context, true);
-
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        // get the file and parent
-        File file = getFile(objectId.getValue());
-        File parent = getFile(targetFolderId);
-
-        // build new path
-        File newFile = new File(parent, file.getName());
-        if (newFile.exists()) {
-            throw new CmisStorageException("Object already exists!");
-        }
-
-        // move it
-        if (!file.renameTo(newFile)) {
-            throw new CmisStorageException("Move failed!");
-        } else {
-            // set new id
-            objectId.setValue(getId(newFile));
-
-            // if it is a file, move properties file too
-            if (newFile.isFile()) {
-                File propFile = getPropertiesFile(file);
-                if (propFile.exists()) {
-                    File newPropFile = new File(parent, propFile.getName());
-                    propFile.renameTo(newPropFile);
-                }
-            }
-        }
-
-        return compileObjectData(context, newFile, null, false, false, userReadOnly, objectInfos);
-    }
-
-    /**
-     * CMIS setContentStream, deleteContentStream, and appendContentStream.
-     */
-    public void changeContentStream(CallContext context, Holder<String> objectId, Boolean overwriteFlag,
-            ContentStream contentStream, boolean append) {
-        debug("setContentStream or deleteContentStream or appendContentStream");
-        checkUser(context, true);
-
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        // get the file
-        File file = getFile(objectId.getValue());
-        if (!file.isFile()) {
-            throw new CmisStreamNotSupportedException("Not a file!");
-        }
-
-        // check overwrite
-        boolean owf = FileShareUtils.getBooleanParameter(overwriteFlag, true);
-        if (!owf && file.length() > 0) {
-            throw new CmisContentAlreadyExistsException("Content already exists!");
-        }
-
-        OutputStream out = null;
-        InputStream in = null;
-        try {
-            out = new FileOutputStream(file, append);
-
-            if (contentStream == null || contentStream.getStream() == null) {
-                // delete content
-                out.write(new byte[0]);
-            } else {
-                // set content
-                in = contentStream.getStream();
-                IOUtils.copy(in, out, BUFFER_SIZE);
-            }
-        } catch (Exception e) {
-            throw new CmisStorageException("Could not write content: " + e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(out);
-            IOUtils.closeQuietly(in);
-        }
-    }
-
-    /**
-     * CMIS deleteObject.
-     */
-    public void deleteObject(CallContext context, String objectId) {
-        debug("deleteObject");
-        checkUser(context, true);
-
-        // get the file or folder
-        File file = getFile(objectId);
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Object not found!");
-        }
-
-        // check if it is a folder and if it is empty
-        if (!isFolderEmpty(file)) {
-            throw new CmisConstraintException("Folder is not empty!");
-        }
-
-        // delete properties and actual file
-        getPropertiesFile(file).delete();
-        if (!file.delete()) {
-            throw new CmisStorageException("Deletion failed!");
-        }
-    }
-
-    /**
-     * CMIS deleteTree.
-     */
-    public FailedToDeleteData deleteTree(CallContext context, String folderId, Boolean continueOnFailure) {
-        debug("deleteTree");
-        checkUser(context, true);
-
-        boolean cof = FileShareUtils.getBooleanParameter(continueOnFailure, false);
-
-        // get the file or folder
-        File file = getFile(folderId);
-
-        FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-        result.setIds(new ArrayList<String>());
-
-        // if it is a folder, remove it recursively
-        if (file.isDirectory()) {
-            deleteFolder(file, cof, result);
-        } else {
-            throw new CmisConstraintException("Object is not a folder!");
-        }
-
-        return result;
-    }
-
-    /**
-     * Removes a folder and its content.
-     */
-    private boolean deleteFolder(File folder, boolean continueOnFailure, FailedToDeleteDataImpl ftd) {
-        boolean success = true;
-
-        for (File file : folder.listFiles()) {
-            if (file.isDirectory()) {
-                if (!deleteFolder(file, continueOnFailure, ftd)) {
-                    if (!continueOnFailure) {
-                        return false;
-                    }
-                    success = false;
-                }
-            } else {
-                if (!file.delete()) {
-                    ftd.getIds().add(getId(file));
-                    if (!continueOnFailure) {
-                        return false;
-                    }
-                    success = false;
-                }
-            }
-        }
-
-        if (!folder.delete()) {
-            ftd.getIds().add(getId(folder));
-            success = false;
-        }
-
-        return success;
-    }
-
-    /**
-     * CMIS updateProperties.
-     */
-    public ObjectData updateProperties(CallContext context, Holder<String> objectId, Properties properties,
-            ObjectInfoHandler objectInfos) {
-        debug("updateProperties");
-        boolean userReadOnly = checkUser(context, true);
-
-        if (objectId == null || objectId.getValue() == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        // get the file or folder
-        File file = getFile(objectId.getValue());
-
-        // get and check the new name
-        String newName = FileShareUtils.getStringProperty(properties, PropertyIds.NAME);
-        boolean isRename = (newName != null) && (!file.getName().equals(newName));
-        if (isRename && !isValidName(newName)) {
-            throw new CmisNameConstraintViolationException("Name is not valid!");
-        }
-
-        // get old properties
-        PropertiesImpl oldProperties = new PropertiesImpl();
-        readCustomProperties(file, oldProperties, null, new ObjectInfoImpl());
-
-        // get the type id
-        String typeId = FileShareUtils.getIdProperty(oldProperties, PropertyIds.OBJECT_TYPE_ID);
-        if (typeId == null) {
-            typeId = (file.isDirectory() ? BaseTypeId.CMIS_FOLDER.value() : BaseTypeId.CMIS_DOCUMENT.value());
-        }
-
-        // get the creator
-        String creator = FileShareUtils.getStringProperty(oldProperties, PropertyIds.CREATED_BY);
-        if (creator == null) {
-            creator = context.getUsername();
-        }
-
-        // get creation date
-        GregorianCalendar creationDate = FileShareUtils.getDateTimeProperty(oldProperties, PropertyIds.CREATION_DATE);
-        if (creationDate == null) {
-            creationDate = FileShareUtils.millisToCalendar(file.lastModified());
-        }
-
-        // compile the properties
-        Properties props = updateProperties(typeId, creator, creationDate, context.getUsername(), oldProperties,
-                properties);
-
-        // write properties
-        writePropertiesFile(file, props);
-
-        // rename file or folder if necessary
-        File newFile = file;
-        if (isRename) {
-            File parent = file.getParentFile();
-            File propFile = getPropertiesFile(file);
-            newFile = new File(parent, newName);
-            if (!file.renameTo(newFile)) {
-                // if something went wrong, throw an exception
-                throw new CmisUpdateConflictException("Could not rename object!");
-            } else {
-                // set new id
-                objectId.setValue(getId(newFile));
-
-                // if it is a file, rename properties file too
-                if (newFile.isFile()) {
-                    if (propFile.exists()) {
-                        File newPropFile = new File(parent, newName + SHADOW_EXT);
-                        propFile.renameTo(newPropFile);
-                    }
-                }
-            }
-        }
-
-        return compileObjectData(context, newFile, null, false, false, userReadOnly, objectInfos);
-    }
-
-    /**
-     * Checks and updates a property set that can be written to disc.
-     */
-    private Properties updateProperties(String typeId, String creator, GregorianCalendar creationDate, String modifier,
-            Properties oldProperties, Properties properties) {
-        PropertiesImpl result = new PropertiesImpl();
-
-        if (properties == null) {
-            throw new CmisConstraintException("No properties!");
-        }
-
-        // get the property definitions
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        // copy old properties
-        for (PropertyData<?> prop : oldProperties.getProperties().values()) {
-            PropertyDefinition<?> propType = type.getPropertyDefinitions().get(prop.getId());
-
-            // do we know that property?
-            if (propType == null) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' is unknown!");
-            }
-
-            // only add read/write properties
-            if (propType.getUpdatability() != Updatability.READWRITE) {
-                continue;
-            }
-
-            result.addProperty(prop);
-        }
-
-        // update properties
-        for (PropertyData<?> prop : properties.getProperties().values()) {
-            PropertyDefinition<?> propType = type.getPropertyDefinitions().get(prop.getId());
-
-            // do we know that property?
-            if (propType == null) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' is unknown!");
-            }
-
-            // can it be set?
-            if (propType.getUpdatability() == Updatability.READONLY) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' is readonly!");
-            }
-
-            if (propType.getUpdatability() == Updatability.ONCREATE) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' can only be set on create!");
-            }
-
-            // default or value
-            if (isEmptyProperty(prop)) {
-                addPropertyDefault(result, propType);
-            } else {
-                result.addProperty(prop);
-            }
-        }
-
-        addPropertyId(result, typeId, null, PropertyIds.OBJECT_TYPE_ID, typeId);
-        addPropertyString(result, typeId, null, PropertyIds.CREATED_BY, creator);
-        addPropertyDateTime(result, typeId, null, PropertyIds.CREATION_DATE, creationDate);
-        addPropertyString(result, typeId, null, PropertyIds.LAST_MODIFIED_BY, modifier);
-
-        return result;
-    }
-
-    /**
-     * CMIS bulkUpdateProperties.
-     */
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(CallContext context,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            ObjectInfoHandler objectInfos) {
-        debug("bulkUpdateProperties");
-        checkUser(context, true);
-
-        if (objectIdAndChangeToken == null) {
-            throw new CmisInvalidArgumentException("No object ids provided!");
-        }
-
-        List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-
-        for (BulkUpdateObjectIdAndChangeToken oid : objectIdAndChangeToken) {
-            if (oid == null) {
-                // ignore invalid ids
-                continue;
-            }
-            try {
-                Holder<String> oidHolder = new Holder<String>(oid.getId());
-                updateProperties(context, oidHolder, properties, objectInfos);
-
-                result.add(new BulkUpdateObjectIdAndChangeTokenImpl(oid.getId(), oidHolder.getValue(), null));
-            } catch (CmisBaseException e) {
-                // ignore exceptions - see specification
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * CMIS getObject.
-     */
-    public ObjectData getObject(CallContext context, String objectId, String versionServicesId, String filter,
-            Boolean includeAllowableActions, Boolean includeAcl, ObjectInfoHandler objectInfos) {
-        debug("getObject");
-        boolean userReadOnly = checkUser(context, false);
-
-        // check id
-        if (objectId == null && versionServicesId == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        if (objectId == null) {
-            // this works only because there are no versions in a file system
-            // and the object id and version series id are the same
-            objectId = versionServicesId;
-        }
-
-        // get the file or folder
-        File file = getFile(objectId);
-
-        // set defaults if values not set
-        boolean iaa = FileShareUtils.getBooleanParameter(includeAllowableActions, false);
-        boolean iacl = FileShareUtils.getBooleanParameter(includeAcl, false);
-
-        // split filter
-        Set<String> filterCollection = FileShareUtils.splitFilter(filter);
-
-        // gather properties
-        return compileObjectData(context, file, filterCollection, iaa, iacl, userReadOnly, objectInfos);
-    }
-
-    /**
-     * CMIS getAllowableActions.
-     */
-    public AllowableActions getAllowableActions(CallContext context, String objectId) {
-        debug("getAllowableActions");
-        boolean userReadOnly = checkUser(context, false);
-
-        File file = getFile(objectId);
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Object not found!");
-        }
-
-        return compileAllowableActions(file, userReadOnly);
-    }
-
-    /**
-     * CMIS getACL.
-     */
-    public Acl getAcl(CallContext context, String objectId) {
-        debug("getAcl");
-        checkUser(context, false);
-
-        // get the file or folder
-        File file = getFile(objectId);
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Object not found!");
-        }
-
-        return compileAcl(file);
-    }
-
-    /**
-     * CMIS getContentStream.
-     */
-    public ContentStream getContentStream(CallContext context, String objectId, BigInteger offset, BigInteger length) {
-        debug("getContentStream");
-        checkUser(context, false);
-
-        // get the file
-        final File file = getFile(objectId);
-        if (!file.isFile()) {
-            throw new CmisStreamNotSupportedException("Not a file!");
-        }
-
-        if (file.length() == 0) {
-            throw new CmisConstraintException("Document has no content!");
-        }
-
-        InputStream stream = null;
-        try {
-            stream = new BufferedInputStream(new FileInputStream(file), 64 * 1024);
-            if (offset != null || length != null) {
-                stream = new ContentRangeInputStream(stream, offset, length);
-            }
-        } catch (FileNotFoundException e) {
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        }
-
-        // compile data
-        ContentStreamImpl result;
-        if ((offset != null && offset.longValue() > 0) || length != null) {
-            result = new PartialContentStreamImpl();
-        } else {
-            result = new ContentStreamImpl();
-        }
-
-        result.setFileName(file.getName());
-        result.setLength(BigInteger.valueOf(file.length()));
-        result.setMimeType(MimeTypes.getMIMEType(file));
-        result.setStream(stream);
-
-        return result;
-    }
-
-    /**
-     * CMIS getChildren.
-     */
-    public ObjectInFolderList getChildren(CallContext context, String folderId, String filter,
-            Boolean includeAllowableActions, Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount,
-            ObjectInfoHandler objectInfos) {
-        debug("getChildren");
-        boolean userReadOnly = checkUser(context, false);
-
-        // split filter
-        Set<String> filterCollection = FileShareUtils.splitFilter(filter);
-
-        // set defaults if values not set
-        boolean iaa = FileShareUtils.getBooleanParameter(includeAllowableActions, false);
-        boolean ips = FileShareUtils.getBooleanParameter(includePathSegment, false);
-
-        // skip and max
-        int skip = (skipCount == null ? 0 : skipCount.intValue());
-        if (skip < 0) {
-            skip = 0;
-        }
-
-        int max = (maxItems == null ? Integer.MAX_VALUE : maxItems.intValue());
-        if (max < 0) {
-            max = Integer.MAX_VALUE;
-        }
-
-        // get the folder
-        File folder = getFile(folderId);
-        if (!folder.isDirectory()) {
-            throw new CmisObjectNotFoundException("Not a folder!");
-        }
-
-        // set object info of the the folder
-        if (context.isObjectInfoRequired()) {
-            compileObjectData(context, folder, null, false, false, userReadOnly, objectInfos);
-        }
-
-        // prepare result
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-        result.setObjects(new ArrayList<ObjectInFolderData>());
-        result.setHasMoreItems(false);
-        int count = 0;
-
-        // iterate through children
-        for (File child : folder.listFiles()) {
-            // skip hidden and shadow files
-            if (child.isHidden() || child.getName().equals(SHADOW_FOLDER) || child.getPath().endsWith(SHADOW_EXT)) {
-                continue;
-            }
-
-            count++;
-
-            if (skip > 0) {
-                skip--;
-                continue;
-            }
-
-            if (result.getObjects().size() >= max) {
-                result.setHasMoreItems(true);
-                continue;
-            }
-
-            // build and add child object
-            ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(compileObjectData(context, child, filterCollection, iaa, false, userReadOnly,
-                    objectInfos));
-            if (ips) {
-                objectInFolder.setPathSegment(child.getName());
-            }
-
-            result.getObjects().add(objectInFolder);
-        }
-
-        result.setNumItems(BigInteger.valueOf(count));
-
-        return result;
-    }
-
-    /**
-     * CMIS getDescendants.
-     */
-    public List<ObjectInFolderContainer> getDescendants(CallContext context, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, Boolean includePathSegment, ObjectInfoHandler objectInfos,
-            boolean foldersOnly) {
-        debug("getDescendants or getFolderTree");
-        boolean userReadOnly = checkUser(context, false);
-
-        // check depth
-        int d = (depth == null ? 2 : depth.intValue());
-        if (d == 0) {
-            throw new CmisInvalidArgumentException("Depth must not be 0!");
-        }
-        if (d < -1) {
-            d = -1;
-        }
-
-        // split filter
-        Set<String> filterCollection = FileShareUtils.splitFilter(filter);
-
-        // set defaults if values not set
-        boolean iaa = FileShareUtils.getBooleanParameter(includeAllowableActions, false);
-        boolean ips = FileShareUtils.getBooleanParameter(includePathSegment, false);
-
-        // get the folder
-        File folder = getFile(folderId);
-        if (!folder.isDirectory()) {
-            throw new CmisObjectNotFoundException("Not a folder!");
-        }
-
-        // set object info of the the folder
-        if (context.isObjectInfoRequired()) {
-            compileObjectData(context, folder, null, false, false, userReadOnly, objectInfos);
-        }
-
-        // get the tree
-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-        gatherDescendants(context, folder, result, foldersOnly, d, filterCollection, iaa, ips, userReadOnly,
-                objectInfos);
-
-        return result;
-    }
-
-    /**
-     * Gather the children of a folder.
-     */
-    private void gatherDescendants(CallContext context, File folder, List<ObjectInFolderContainer> list,
-            boolean foldersOnly, int depth, Set<String> filter, boolean includeAllowableActions,
-            boolean includePathSegments, boolean userReadOnly, ObjectInfoHandler objectInfos) {
-        assert folder != null;
-        assert list != null;
-
-        // iterate through children
-        for (File child : folder.listFiles()) {
-            // skip hidden and shadow files
-            if (child.isHidden() || child.getName().equals(SHADOW_FOLDER) || child.getPath().endsWith(SHADOW_EXT)) {
-                continue;
-            }
-
-            // folders only?
-            if (foldersOnly && !child.isDirectory()) {
-                continue;
-            }
-
-            // add to list
-            ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(compileObjectData(context, child, filter, includeAllowableActions, false,
-                    userReadOnly, objectInfos));
-            if (includePathSegments) {
-                objectInFolder.setPathSegment(child.getName());
-            }
-
-            ObjectInFolderContainerImpl container = new ObjectInFolderContainerImpl();
-            container.setObject(objectInFolder);
-
-            list.add(container);
-
-            // move to next level
-            if (depth != 1 && child.isDirectory()) {
-                container.setChildren(new ArrayList<ObjectInFolderContainer>());
-                gatherDescendants(context, child, container.getChildren(), foldersOnly, depth - 1, filter,
-                        includeAllowableActions, includePathSegments, userReadOnly, objectInfos);
-            }
-        }
-    }
-
-    /**
-     * CMIS getFolderParent.
-     */
-    public ObjectData getFolderParent(CallContext context, String folderId, String filter, ObjectInfoHandler objectInfos) {
-        List<ObjectParentData> parents = getObjectParents(context, folderId, filter, false, false, objectInfos);
-
-        if (parents.isEmpty()) {
-            throw new CmisInvalidArgumentException("The root folder has no parent!");
-        }
-
-        return parents.get(0).getObject();
-    }
-
-    /**
-     * CMIS getObjectParents.
-     */
-    public List<ObjectParentData> getObjectParents(CallContext context, String objectId, String filter,
-            Boolean includeAllowableActions, Boolean includeRelativePathSegment, ObjectInfoHandler objectInfos) {
-        debug("getObjectParents");
-        boolean userReadOnly = checkUser(context, false);
-
-        // split filter
-        Set<String> filterCollection = FileShareUtils.splitFilter(filter);
-
-        // set defaults if values not set
-        boolean iaa = FileShareUtils.getBooleanParameter(includeAllowableActions, false);
-        boolean irps = FileShareUtils.getBooleanParameter(includeRelativePathSegment, false);
-
-        // get the file or folder
-        File file = getFile(objectId);
-
-        // don't climb above the root folder
-        if (root.equals(file)) {
-            return Collections.emptyList();
-        }
-
-        // set object info of the the object
-        if (context.isObjectInfoRequired()) {
-            compileObjectData(context, file, null, false, false, userReadOnly, objectInfos);
-        }
-
-        // get parent folder
-        File parent = file.getParentFile();
-        ObjectData object = compileObjectData(context, parent, filterCollection, iaa, false, userReadOnly, objectInfos);
-
-        ObjectParentDataImpl result = new ObjectParentDataImpl();
-        result.setObject(object);
-        if (irps) {
-            result.setRelativePathSegment(file.getName());
-        }
-
-        return Collections.<ObjectParentData> singletonList(result);
-    }
-
-    /**
-     * CMIS getObjectByPath.
-     */
-    public ObjectData getObjectByPath(CallContext context, String folderPath, String filter,
-            boolean includeAllowableActions, boolean includeACL, ObjectInfoHandler objectInfos) {
-        debug("getObjectByPath");
-        boolean userReadOnly = checkUser(context, false);
-
-        // split filter
-        Set<String> filterCollection = FileShareUtils.splitFilter(filter);
-
-        // check path
-        if (folderPath == null || folderPath.length() == 0 || folderPath.charAt(0) != '/') {
-            throw new CmisInvalidArgumentException("Invalid folder path!");
-        }
-
-        // get the file or folder
-        File file = null;
-        if (folderPath.length() == 1) {
-            file = root;
-        } else {
-            String path = folderPath.replace('/', File.separatorChar).substring(1);
-            file = new File(root, path);
-        }
-
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Path doesn't exist.");
-        }
-
-        return compileObjectData(context, file, filterCollection, includeAllowableActions, includeACL, userReadOnly,
-                objectInfos);
-    }
-
-    // --- helpers ---
-
-    /**
-     * Compiles an object type object from a file or folder.
-     */
-    private ObjectData compileObjectData(CallContext context, File file, Set<String> filter,
-            boolean includeAllowableActions, boolean includeAcl, boolean userReadOnly, ObjectInfoHandler objectInfos) {
-        ObjectDataImpl result = new ObjectDataImpl();
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-
-        result.setProperties(compileProperties(context, file, filter, objectInfo));
-
-        if (includeAllowableActions) {
-            result.setAllowableActions(compileAllowableActions(file, userReadOnly));
-        }
-
-        if (includeAcl) {
-            result.setAcl(compileAcl(file));
-            result.setIsExactAcl(true);
-        }
-
-        if (context.isObjectInfoRequired()) {
-            objectInfo.setObject(result);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return result;
-    }
-
-    /**
-     * Gathers all base properties of a file or folder.
-     */
-    private Properties compileProperties(CallContext context, File file, Set<String> orgfilter,
-            ObjectInfoImpl objectInfo) {
-        if (file == null) {
-            throw new IllegalArgumentException("File must not be null!");
-        }
-
-        // we can't gather properties if the file or folder doesn't exist
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Object not found!");
-        }
-
-        // copy filter
-        Set<String> filter = (orgfilter == null ? null : new HashSet<String>(orgfilter));
-
-        // find base type
-        String typeId = null;
-
-        if (file.isDirectory()) {
-            typeId = BaseTypeId.CMIS_FOLDER.value();
-            objectInfo.setBaseType(BaseTypeId.CMIS_FOLDER);
-            objectInfo.setTypeId(typeId);
-            objectInfo.setContentType(null);
-            objectInfo.setFileName(null);
-            objectInfo.setHasAcl(true);
-            objectInfo.setHasContent(false);
-            objectInfo.setVersionSeriesId(null);
-            objectInfo.setIsCurrentVersion(true);
-            objectInfo.setRelationshipSourceIds(null);
-            objectInfo.setRelationshipTargetIds(null);
-            objectInfo.setRenditionInfos(null);
-            objectInfo.setSupportsDescendants(true);
-            objectInfo.setSupportsFolderTree(true);
-            objectInfo.setSupportsPolicies(false);
-            objectInfo.setSupportsRelationships(false);
-            objectInfo.setWorkingCopyId(null);
-            objectInfo.setWorkingCopyOriginalId(null);
-        } else {
-            typeId = BaseTypeId.CMIS_DOCUMENT.value();
-            objectInfo.setBaseType(BaseTypeId.CMIS_DOCUMENT);
-            objectInfo.setTypeId(typeId);
-            objectInfo.setHasAcl(true);
-            objectInfo.setHasContent(true);
-            objectInfo.setHasParent(true);
-            objectInfo.setVersionSeriesId(null);
-            objectInfo.setIsCurrentVersion(true);
-            objectInfo.setRelationshipSourceIds(null);
-            objectInfo.setRelationshipTargetIds(null);
-            objectInfo.setRenditionInfos(null);
-            objectInfo.setSupportsDescendants(false);
-            objectInfo.setSupportsFolderTree(false);
-            objectInfo.setSupportsPolicies(false);
-            objectInfo.setSupportsRelationships(false);
-            objectInfo.setWorkingCopyId(null);
-            objectInfo.setWorkingCopyOriginalId(null);
-        }
-
-        // let's do it
-        try {
-            PropertiesImpl result = new PropertiesImpl();
-
-            // id
-            String id = fileToId(file);
-            addPropertyId(result, typeId, filter, PropertyIds.OBJECT_ID, id);
-            objectInfo.setId(id);
-
-            // name
-            String name = file.getName();
-            addPropertyString(result, typeId, filter, PropertyIds.NAME, name);
-            objectInfo.setName(name);
-
-            // created and modified by
-            addPropertyString(result, typeId, filter, PropertyIds.CREATED_BY, USER_UNKNOWN);
-            addPropertyString(result, typeId, filter, PropertyIds.LAST_MODIFIED_BY, USER_UNKNOWN);
-            objectInfo.setCreatedBy(USER_UNKNOWN);
-
-            // creation and modification date
-            GregorianCalendar lastModified = FileShareUtils.millisToCalendar(file.lastModified());
-            addPropertyDateTime(result, typeId, filter, PropertyIds.CREATION_DATE, lastModified);
-            addPropertyDateTime(result, typeId, filter, PropertyIds.LAST_MODIFICATION_DATE, lastModified);
-            objectInfo.setCreationDate(lastModified);
-            objectInfo.setLastModificationDate(lastModified);
-
-            // change token - always null
-            addPropertyString(result, typeId, filter, PropertyIds.CHANGE_TOKEN, null);
-
-            // CMIS 1.1 properties
-            if (context.getCmisVersion() != CmisVersion.CMIS_1_0) {
-                addPropertyString(result, typeId, filter, PropertyIds.DESCRIPTION, null);
-                addPropertyIdList(result, typeId, filter, PropertyIds.SECONDARY_OBJECT_TYPE_IDS, null);
-            }
-
-            // directory or file
-            if (file.isDirectory()) {
-                // base type and type name
-                addPropertyId(result, typeId, filter, PropertyIds.BASE_TYPE_ID, BaseTypeId.CMIS_FOLDER.value());
-                addPropertyId(result, typeId, filter, PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_FOLDER.value());
-                String path = getRepositoryPath(file);
-                addPropertyString(result, typeId, filter, PropertyIds.PATH, path);
-
-                // folder properties
-                if (!root.equals(file)) {
-                    addPropertyId(result, typeId, filter, PropertyIds.PARENT_ID,
-                            (root.equals(file.getParentFile()) ? ROOT_ID : fileToId(file.getParentFile())));
-                    objectInfo.setHasParent(true);
-                } else {
-                    addPropertyId(result, typeId, filter, PropertyIds.PARENT_ID, null);
-                    objectInfo.setHasParent(false);
-                }
-
-                addPropertyIdList(result, typeId, filter, PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, null);
-            } else {
-                // base type and type name
-                addPropertyId(result, typeId, filter, PropertyIds.BASE_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
-                addPropertyId(result, typeId, filter, PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
-
-                // file properties
-                addPropertyBoolean(result, typeId, filter, PropertyIds.IS_IMMUTABLE, false);
-                addPropertyBoolean(result, typeId, filter, PropertyIds.IS_LATEST_VERSION, true);
-                addPropertyBoolean(result, typeId, filter, PropertyIds.IS_MAJOR_VERSION, true);
-                addPropertyBoolean(result, typeId, filter, PropertyIds.IS_LATEST_MAJOR_VERSION, true);
-                addPropertyString(result, typeId, filter, PropertyIds.VERSION_LABEL, file.getName());
-                addPropertyId(result, typeId, filter, PropertyIds.VERSION_SERIES_ID, fileToId(file));
-                addPropertyBoolean(result, typeId, filter, PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, false);
-                addPropertyString(result, typeId, filter, PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, null);
-                addPropertyString(result, typeId, filter, PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, null);
-                addPropertyString(result, typeId, filter, PropertyIds.CHECKIN_COMMENT, "");
-                if (context.getCmisVersion() != CmisVersion.CMIS_1_0) {
-                    addPropertyBoolean(result, typeId, filter, PropertyIds.IS_PRIVATE_WORKING_COPY, false);
-                }
-
-                if (file.length() == 0) {
-                    addPropertyBigInteger(result, typeId, filter, PropertyIds.CONTENT_STREAM_LENGTH, null);
-                    addPropertyString(result, typeId, filter, PropertyIds.CONTENT_STREAM_MIME_TYPE, null);
-                    addPropertyString(result, typeId, filter, PropertyIds.CONTENT_STREAM_FILE_NAME, null);
-
-                    objectInfo.setHasContent(false);
-                    objectInfo.setContentType(null);
-                    objectInfo.setFileName(null);
-                } else {
-                    addPropertyInteger(result, typeId, filter, PropertyIds.CONTENT_STREAM_LENGTH, file.length());
-                    addPropertyString(result, typeId, filter, PropertyIds.CONTENT_STREAM_MIME_TYPE,
-                            MimeTypes.getMIMEType(file));
-                    addPropertyString(result, typeId, filter, PropertyIds.CONTENT_STREAM_FILE_NAME, file.getName());
-
-                    objectInfo.setHasContent(true);
-                    objectInfo.setContentType(MimeTypes.getMIMEType(file));
-                    objectInfo.setFileName(file.getName());
-                }
-
-                addPropertyId(result, typeId, filter, PropertyIds.CONTENT_STREAM_ID, null);
-            }
-
-            // read custom properties
-            readCustomProperties(file, result, filter, objectInfo);
-
-            if (filter != null) {
-                if (!filter.isEmpty()) {
-                    debug("Unknown filter properties: " + filter.toString());
-                }
-            }
-
-            return result;
-        } catch (CmisBaseException cbe) {
-            throw cbe;
-        } catch (Exception e) {
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Reads and adds properties.
-     */
-    private void readCustomProperties(File file, PropertiesImpl properties, Set<String> filter,
-            ObjectInfoImpl objectInfo) {
-        File propFile = getPropertiesFile(file);
-
-        // if it doesn't exists, ignore it
-        if (!propFile.exists()) {
-            return;
-        }
-
-        // parse it
-        ObjectData obj = null;
-        InputStream stream = null;
-        try {
-            stream = new BufferedInputStream(new FileInputStream(propFile), 64 * 1024);
-            XMLStreamReader parser = XMLUtils.createParser(stream);
-            XMLUtils.findNextStartElemenet(parser);
-            obj = XMLConverter.convertObject(parser);
-            parser.close();
-        } catch (Exception e) {
-            LOG.warn("Unvalid CMIS properties: {}", propFile.getAbsolutePath(), e);
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-
-        if (obj == null || obj.getProperties() == null) {
-            return;
-        }
-
-        // add it to properties
-        for (PropertyData<?> prop : obj.getProperties().getPropertyList()) {
-            // overwrite object info
-            if (prop instanceof PropertyString) {
-                String firstValueStr = ((PropertyString) prop).getFirstValue();
-                if (PropertyIds.NAME.equals(prop.getId())) {
-                    objectInfo.setName(firstValueStr);
-                } else if (PropertyIds.OBJECT_TYPE_ID.equals(prop.getId())) {
-                    objectInfo.setTypeId(firstValueStr);
-                } else if (PropertyIds.CREATED_BY.equals(prop.getId())) {
-                    objectInfo.setCreatedBy(firstValueStr);
-                } else if (PropertyIds.CONTENT_STREAM_MIME_TYPE.equals(prop.getId())) {
-                    objectInfo.setContentType(firstValueStr);
-                } else if (PropertyIds.CONTENT_STREAM_FILE_NAME.equals(prop.getId())) {
-                    objectInfo.setFileName(firstValueStr);
-                }
-            }
-
-            if (prop instanceof PropertyDateTime) {
-                GregorianCalendar firstValueCal = ((PropertyDateTime) prop).getFirstValue();
-                if (PropertyIds.CREATION_DATE.equals(prop.getId())) {
-                    objectInfo.setCreationDate(firstValueCal);
-                } else if (PropertyIds.LAST_MODIFICATION_DATE.equals(prop.getId())) {
-                    objectInfo.setLastModificationDate(firstValueCal);
-                }
-            }
-
-            // check filter
-            if (filter != null) {
-                if (!filter.contains(prop.getQueryName())) {
-                    continue;
-                } else {
-                    filter.remove(prop.getQueryName());
-                }
-            }
-
-            // don't overwrite id
-            if (PropertyIds.OBJECT_ID.equals(prop.getId())) {
-                continue;
-            }
-
-            // don't overwrite base type
-            if (PropertyIds.BASE_TYPE_ID.equals(prop.getId())) {
-                continue;
-            }
-
-            // add it
-            properties.replaceProperty(prop);
-        }
-    }
-
-    /**
-     * Checks and compiles a property set that can be written to disc.
-     */
-    private PropertiesImpl compileWriteProperties(String typeId, String creator, String modifier, Properties properties) {
-        PropertiesImpl result = new PropertiesImpl();
-        Set<String> addedProps = new HashSet<String>();
-
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisConstraintException("No properties!");
-        }
-
-        // get the property definitions
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        // check if all required properties are there
-        for (PropertyData<?> prop : properties.getProperties().values()) {
-            PropertyDefinition<?> propType = type.getPropertyDefinitions().get(prop.getId());
-
-            // do we know that property?
-            if (propType == null) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' is unknown!");
-            }
-
-            // can it be set?
-            if (propType.getUpdatability() == Updatability.READONLY) {
-                throw new CmisConstraintException("Property '" + prop.getId() + "' is readonly!");
-            }
-
-            // empty properties are invalid
-            // TODO: check
-            // if (isEmptyProperty(prop)) {
-            // throw new CmisConstraintException("Property '" + prop.getId() +
-            // "' must not be empty!");
-            // }
-
-            // add it
-            result.addProperty(prop);
-            addedProps.add(prop.getId());
-        }
-
-        // check if required properties are missing
-        for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-            if (!addedProps.contains(propDef.getId()) && propDef.getUpdatability() != Updatability.READONLY) {
-                if (!addPropertyDefault(result, propDef) && propDef.isRequired()) {
-                    throw new CmisConstraintException("Property '" + propDef.getId() + "' is required!");
-                }
-            }
-        }
-
-        addPropertyId(result, typeId, null, PropertyIds.OBJECT_TYPE_ID, typeId);
-        addPropertyString(result, typeId, null, PropertyIds.CREATED_BY, creator);
-        addPropertyString(result, typeId, null, PropertyIds.LAST_MODIFIED_BY, modifier);
-
-        return result;
-    }
-
-    /**
-     * Writes the properties for a document or folder.
-     */
-    private void writePropertiesFile(File file, Properties properties) {
-        File propFile = getPropertiesFile(file);
-
-        // if no properties set delete the properties file
-        if (properties == null || properties.getProperties() == null || properties.getProperties().size() == 0) {
-            propFile.delete();
-            return;
-        }
-
-        // create object
-        ObjectDataImpl object = new ObjectDataImpl();
-        object.setProperties(properties);
-
-        OutputStream stream = null;
-        try {
-            stream = new BufferedOutputStream(new FileOutputStream(propFile));
-            XMLStreamWriter writer = XMLUtils.createWriter(stream);
-            XMLUtils.startXmlDocument(writer);
-            XMLConverter.writeObject(writer, CmisVersion.CMIS_1_1, true, "object", XMLConstants.NAMESPACE_CMIS, object);
-            XMLUtils.endXmlDocument(writer);
-            writer.close();
-        } catch (Exception e) {
-            throw new CmisStorageException("Couldn't store properties!", e);
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    private boolean isEmptyProperty(PropertyData<?> prop) {
-        if (prop == null || prop.getValues() == null) {
-            return true;
-        }
-
-        return prop.getValues().isEmpty();
-    }
-
-    private void addPropertyId(PropertiesImpl props, String typeId, Set<String> filter, String id, String value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyIdImpl(id, value));
-    }
-
-    private void addPropertyIdList(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            List<String> value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyIdImpl(id, value));
-    }
-
-    private void addPropertyString(PropertiesImpl props, String typeId, Set<String> filter, String id, String value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyStringImpl(id, value));
-    }
-
-    private void addPropertyInteger(PropertiesImpl props, String typeId, Set<String> filter, String id, long value) {
-        addPropertyBigInteger(props, typeId, filter, id, BigInteger.valueOf(value));
-    }
-
-    private void addPropertyBigInteger(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            BigInteger value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyIntegerImpl(id, value));
-    }
-
-    private void addPropertyBoolean(PropertiesImpl props, String typeId, Set<String> filter, String id, boolean value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyBooleanImpl(id, value));
-    }
-
-    private void addPropertyDateTime(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            GregorianCalendar value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        props.addProperty(new PropertyDateTimeImpl(id, value));
-    }
-
-    private boolean checkAddProperty(Properties properties, String typeId, Set<String> filter, String id) {
-        if (properties == null || properties.getProperties() == null) {
-            throw new IllegalArgumentException("Properties must not be null!");
-        }
-
-        if (id == null) {
-            throw new IllegalArgumentException("Id must not be null!");
-        }
-
-        TypeDefinition type = typeManager.getInternalTypeDefinition(typeId);
-        if (type == null) {
-            throw new IllegalArgumentException("Unknown type: " + typeId);
-        }
-        if (!type.getPropertyDefinitions().containsKey(id)) {
-            throw new IllegalArgumentException("Unknown property: " + id);
-        }
-
-        String queryName = type.getPropertyDefinitions().get(id).getQueryName();
-
-        if (queryName != null && filter != null) {
-            if (!filter.contains(queryName)) {
-                return false;
-            } else {
-                filter.remove(queryName);
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Adds the default value of property if defined.
-     */
-    @SuppressWarnings("unchecked")
-    private boolean addPropertyDefault(PropertiesImpl props, PropertyDefinition<?> propDef) {
-        if (props == null || props.getProperties() == null) {
-            throw new IllegalArgumentException("Props must not be null!");
-        }
-
-        if (propDef == null) {
-            return false;
-        }
-
-        List<?> defaultValue = propDef.getDefaultValue();
-        if (defaultValue != null && !defaultValue.isEmpty()) {
-            switch (propDef.getPropertyType()) {
-            case BOOLEAN:
-                props.addProperty(new PropertyBooleanImpl(propDef.getId(), (List<Boolean>) defaultValue));
-                break;
-            case DATETIME:
-                props.addProperty(new PropertyDateTimeImpl(propDef.getId(), (List<GregorianCalendar>) defaultValue));
-                break;
-            case DECIMAL:
-                props.addProperty(new PropertyDecimalImpl(propDef.getId(), (List<BigDecimal>) defaultValue));
-                break;
-            case HTML:
-                props.addProperty(new PropertyHtmlImpl(propDef.getId(), (List<String>) defaultValue));
-                break;
-            case ID:
-                props.addProperty(new PropertyIdImpl(propDef.getId(), (List<String>) defaultValue));
-                break;
-            case INTEGER:
-                props.addProperty(new PropertyIntegerImpl(propDef.getId(), (List<BigInteger>) defaultValue));
-                break;
-            case STRING:
-                props.addProperty(new PropertyStringImpl(propDef.getId(), (List<String>) defaultValue));
-                break;
-            case URI:
-                props.addProperty(new PropertyUriImpl(propDef.getId(), (List<String>) defaultValue));
-                break;
-            default:
-                assert false;
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Compiles the allowable actions for a file or folder.
-     */
-    private AllowableActions compileAllowableActions(File file, boolean userReadOnly) {
-        if (file == null) {
-            throw new IllegalArgumentException("File must not be null!");
-        }
-
-        // we can't gather allowable actions if the file or folder doesn't exist
-        if (!file.exists()) {
-            throw new CmisObjectNotFoundException("Object not found!");
-        }
-
-        boolean isReadOnly = !file.canWrite();
-        boolean isFolder = file.isDirectory();
-        boolean isRoot = root.equals(file);
-
-        Set<Action> aas = EnumSet.noneOf(Action.class);
-
-        addAction(aas, Action.CAN_GET_OBJECT_PARENTS, !isRoot);
-        addAction(aas, Action.CAN_GET_PROPERTIES, true);
-        addAction(aas, Action.CAN_UPDATE_PROPERTIES, !userReadOnly && !isReadOnly);
-        addAction(aas, Action.CAN_MOVE_OBJECT, !userReadOnly && !isRoot);
-        addAction(aas, Action.CAN_DELETE_OBJECT, !userReadOnly && !isReadOnly && !isRoot);
-        addAction(aas, Action.CAN_GET_ACL, true);
-
-        if (isFolder) {
-            addAction(aas, Action.CAN_GET_DESCENDANTS, true);
-            addAction(aas, Action.CAN_GET_CHILDREN, true);
-            addAction(aas, Action.CAN_GET_FOLDER_PARENT, !isRoot);
-            addAction(aas, Action.CAN_GET_FOLDER_TREE, true);
-            addAction(aas, Action.CAN_CREATE_DOCUMENT, !userReadOnly);
-            addAction(aas, Action.CAN_CREATE_FOLDER, !userReadOnly);
-            addAction(aas, Action.CAN_DELETE_TREE, !userReadOnly && !isReadOnly);
-        } else {
-            addAction(aas, Action.CAN_GET_CONTENT_STREAM, file.length() > 0);
-            addAction(aas, Action.CAN_SET_CONTENT_STREAM, !userReadOnly && !isReadOnly);
-            addAction(aas, Action.CAN_DELETE_CONTENT_STREAM, !userReadOnly && !isReadOnly);
-            addAction(aas, Action.CAN_GET_ALL_VERSIONS, true);
-        }
-
-        AllowableActionsImpl result = new AllowableActionsImpl();
-        result.setAllowableActions(aas);
-
-        return result;
-    }
-
-    private void addAction(Set<Action> aas, Action action, boolean condition) {
-        if (condition) {
-            aas.add(action);
-        }
-    }
-
-    /**
-     * Compiles the ACL for a file or folder.
-     */
-    private Acl compileAcl(File file) {
-        AccessControlListImpl result = new AccessControlListImpl();
-        result.setAces(new ArrayList<Ace>());
-
-        for (Map.Entry<String, Boolean> ue : readWriteUserMap.entrySet()) {
-            // create principal
-            AccessControlPrincipalDataImpl principal = new AccessControlPrincipalDataImpl(ue.getKey());
-
-            // create ACE
-            AccessControlEntryImpl entry = new AccessControlEntryImpl();
-            entry.setPrincipal(principal);
-            entry.setPermissions(new ArrayList<String>());
-            entry.getPermissions().add(BasicPermissions.READ);
-            if (!ue.getValue().booleanValue() && file.canWrite()) {
-                entry.getPermissions().add(BasicPermissions.WRITE);
-                entry.getPermissions().add(BasicPermissions.ALL);
-            }
-
-            entry.setDirect(true);
-
-            // add ACE
-            result.getAces().add(entry);
-        }
-
-        return result;
-    }
-
-    /**
-     * Checks if the given name is valid for a file system.
-     * 
-     * @param name
-     *            the name to check
-     * 
-     * @return <code>true</code> if the name is valid, <code>false</code>
-     *         otherwise
-     */
-    private boolean isValidName(String name) {
-        if (name == null || name.length() == 0 || name.indexOf(File.separatorChar) != -1
-                || name.indexOf(File.pathSeparatorChar) != -1) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Checks if a folder is empty. A folder is considered as empty if no files
-     * or only the shadow file reside in the folder.
-     * 
-     * @param folder
-     *            the folder
-     * 
-     * @return <code>true</code> if the folder is empty.
-     */
-    private boolean isFolderEmpty(File folder) {
-        if (!folder.isDirectory()) {
-            return true;
-        }
-
-        String[] fileNames = folder.list();
-
-        if (fileNames == null || fileNames.length == 0) {
-            return true;
-        }
-
-        if (fileNames.length == 1 && fileNames[0].equals(SHADOW_FOLDER)) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Checks if the user in the given context is valid for this repository and
-     * if the user has the required permissions.
-     */
-    private boolean checkUser(CallContext context, boolean writeRequired) {
-        if (context == null) {
-            throw new CmisPermissionDeniedException("No user context!");
-        }
-
-        Boolean readOnly = readWriteUserMap.get(context.getUsername());
-        if (readOnly == null) {
-            throw new CmisPermissionDeniedException("Unknown user!");
-        }
-
-        if (readOnly.booleanValue() && writeRequired) {
-            throw new CmisPermissionDeniedException("No write permission!");
-        }
-
-        return readOnly.booleanValue();
-    }
-
-    /**
-     * Returns the properties file of the given file.
-     */
-    private File getPropertiesFile(File file) {
-        if (file.isDirectory()) {
-            return new File(file, SHADOW_FOLDER);
-        }
-
-        return new File(file.getAbsolutePath() + SHADOW_EXT);
-    }
-
-    /**
-     * Returns the File object by id or throws an appropriate exception.
-     */
-    private File getFile(String id) {
-        try {
-            return idToFile(id);
-        } catch (Exception e) {
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Converts an id to a File object. A simple and insecure implementation,
-     * but good enough for now.
-     */
-    private File idToFile(String id) throws IOException {
-        if (id == null || id.length() == 0) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        if (id.equals(ROOT_ID)) {
-            return root;
-        }
-
-        return new File(root, (new String(Base64.decode(id.getBytes("US-ASCII")), "UTF-8")).replace('/',
-                File.separatorChar));
-    }
-
-    /**
-     * Returns the id of a File object or throws an appropriate exception.
-     */
-    private String getId(File file) {
-        try {
-            return fileToId(file);
-        } catch (Exception e) {
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Creates a File object from an id. A simple and insecure implementation,
-     * but good enough for now.
-     */
-    private String fileToId(File file) throws IOException {
-        if (file == null) {
-            throw new IllegalArgumentException("File is not valid!");
-        }
-
-        if (root.equals(file)) {
-            return ROOT_ID;
-        }
-
-        String path = getRepositoryPath(file);
-
-        return Base64.encodeBytes(path.getBytes("UTF-8"));
-    }
-
-    private String getRepositoryPath(File file) {
-        String path = file.getAbsolutePath().substring(root.getAbsolutePath().length())
-                .replace(File.separatorChar, '/');
-        if (path.length() == 0) {
-            path = "/";
-        } else if (path.charAt(0) != '/') {
-            path = "/" + path;
-        }
-        return path;
-    }
-
-    private void debug(String msg) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("<{}> {}", repositoryId, msg);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepositoryManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepositoryManager.java
deleted file mode 100644
index 102f61c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepositoryManager.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-
-/**
- * Manages all repositories.
- */
-public class FileShareRepositoryManager {
-
-    private final Map<String, FileShareRepository> repositories;
-
-    public FileShareRepositoryManager() {
-        repositories = new HashMap<String, FileShareRepository>();
-    }
-
-    /**
-     * Adds a repository object.
-     */
-    public void addRepository(FileShareRepository fsr) {
-        if (fsr == null || fsr.getRepositoryId() == null) {
-            return;
-        }
-
-        repositories.put(fsr.getRepositoryId(), fsr);
-    }
-
-    /**
-     * Gets a repository object by id.
-     */
-    public FileShareRepository getRepository(String repositoryId) {
-        FileShareRepository result = repositories.get(repositoryId);
-        if (result == null) {
-            throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns all repository objects.
-     */
-    public Collection<FileShareRepository> getRepositories() {
-        return repositories.values();
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        for (FileShareRepository repository : repositories.values()) {
-            sb.append('[');
-            sb.append(repository.getRepositoryId());
-            sb.append(" -> ");
-            sb.append(repository.getRootDirectory().getAbsolutePath());
-            sb.append(']');
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareTypeManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareTypeManager.java
deleted file mode 100644
index b73baa2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareTypeManager.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Manages the type definitions for all FileShare repositories.
- */
-public class FileShareTypeManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(FileShareTypeManager.class);
-
-    private static final String NAMESPACE = "http://chemistry.apache.org/opencmis/fileshare";
-
-    private final TypeDefinitionFactory typeDefinitionFactory;
-    private final Map<String, TypeDefinition> typeDefinitions;
-
-    public FileShareTypeManager() {
-        // set up TypeDefinitionFactory
-        typeDefinitionFactory = TypeDefinitionFactory.newInstance();
-        typeDefinitionFactory.setDefaultNamespace(NAMESPACE);
-        typeDefinitionFactory.setDefaultControllableAcl(false);
-        typeDefinitionFactory.setDefaultControllablePolicy(false);
-        typeDefinitionFactory.setDefaultQueryable(false);
-        typeDefinitionFactory.setDefaultFulltextIndexed(false);
-        typeDefinitionFactory.setDefaultTypeMutability(typeDefinitionFactory.createTypeMutability(false, false, false));
-
-        // set up definitions map
-        typeDefinitions = new HashMap<String, TypeDefinition>();
-
-        // add base folder type
-        MutableFolderTypeDefinition folderType = typeDefinitionFactory
-                .createBaseFolderTypeDefinition(CmisVersion.CMIS_1_1);
-        removeQueryableAndOrderableFlags(folderType);
-        typeDefinitions.put(folderType.getId(), folderType);
-
-        // add base document type
-        MutableDocumentTypeDefinition documentType = typeDefinitionFactory
-                .createBaseDocumentTypeDefinition(CmisVersion.CMIS_1_1);
-        removeQueryableAndOrderableFlags(documentType);
-        typeDefinitions.put(documentType.getId(), documentType);
-    }
-
-    /**
-     * Adds a type definition.
-     */
-    public synchronized void addTypeDefinition(TypeDefinition type) {
-        if (type == null) {
-            throw new IllegalArgumentException("Type must be set!");
-        }
-
-        if (type.getId() == null || type.getId().trim().length() == 0) {
-            throw new IllegalArgumentException("Type must have a valid id!");
-        }
-
-        if (type.getParentTypeId() == null || type.getParentTypeId().trim().length() == 0) {
-            throw new IllegalArgumentException("Type must have a valid parent id!");
-        }
-
-        TypeDefinition parentType = typeDefinitions.get(type.getParentTypeId());
-        if (parentType == null) {
-            throw new IllegalArgumentException("Parent type doesn't exist!");
-        }
-
-        MutableTypeDefinition newType = typeDefinitionFactory.copy(type, true);
-
-        // copy parent type property definitions and mark them as inherited
-        for (PropertyDefinition<?> propDef : parentType.getPropertyDefinitions().values()) {
-            MutablePropertyDefinition<?> basePropDef = typeDefinitionFactory.copy(propDef);
-            basePropDef.setIsInherited(true);
-            newType.addPropertyDefinition(basePropDef);
-        }
-
-        typeDefinitions.put(newType.getId(), newType);
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Added type '{}'.", type.getId());
-        }
-    }
-
-    /**
-     * Removes the queryable and orderable flags from the property definitions
-     * of a type definition because this implementations does neither support
-     * queries nor can order objects.
-     */
-    private void removeQueryableAndOrderableFlags(MutableTypeDefinition type) {
-        for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-            MutablePropertyDefinition<?> mutablePropDef = (MutablePropertyDefinition<?>) propDef;
-            mutablePropDef.setIsQueryable(false);
-            mutablePropDef.setIsOrderable(false);
-        }
-    }
-
-    public void loadTypeDefinitionFromFile(String filename) throws IOException, XMLStreamException {
-        loadTypeDefinitionFromStream(new BufferedInputStream(new FileInputStream(filename), 64 * 1024));
-    }
-
-    public void loadTypeDefinitionFromResource(String name) throws IOException, XMLStreamException {
-        loadTypeDefinitionFromStream(this.getClass().getResourceAsStream(name));
-    }
-
-    public void loadTypeDefinitionFromStream(InputStream stream) throws IOException, XMLStreamException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream is null!");
-        }
-
-        TypeDefinition type = null;
-
-        XMLStreamReader parser = null;
-        try {
-            parser = XMLUtils.createParser(stream);
-            if (!XMLUtils.findNextStartElemenet(parser)) {
-                return;
-            }
-
-            type = XMLConverter.convertTypeDefinition(parser);
-        } finally {
-            if (parser != null) {
-                parser.close();
-            }
-            IOUtils.closeQuietly(stream);
-        }
-
-        addTypeDefinition(type);
-    }
-
-    /**
-     * Returns the internal type definition.
-     */
-    public synchronized TypeDefinition getInternalTypeDefinition(String typeId) {
-        return typeDefinitions.get(typeId);
-    }
-
-    /**
-     * Returns all internal type definitions.
-     */
-    public synchronized Collection<TypeDefinition> getInternalTypeDefinitions() {
-        return typeDefinitions.values();
-    }
-
-    // --- service methods ---
-
-    public TypeDefinition getTypeDefinition(CallContext context, String typeId) {
-        TypeDefinition type = typeDefinitions.get(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        return typeDefinitionFactory.copy(type, true, context.getCmisVersion());
-    }
-
-    public TypeDefinitionList getTypeChildren(CallContext context, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount) {
-        return typeDefinitionFactory.createTypeDefinitionList(typeDefinitions, typeId, includePropertyDefinitions,
-                maxItems, skipCount, context.getCmisVersion());
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(CallContext context, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions) {
-        return typeDefinitionFactory.createTypeDescendants(typeDefinitions, typeId, depth, includePropertyDefinitions,
-                context.getCmisVersion());
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        for (TypeDefinition type : typeDefinitions.values()) {
-            sb.append('[');
-            sb.append(type.getId());
-            sb.append(" (");
-            sb.append(type.getBaseTypeId().value());
-            sb.append(")]");
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUserManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUserManager.java
deleted file mode 100644
index 6c96dd0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUserManager.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-/**
- * Manages users for the FileShare repository.
- */
-public class FileShareUserManager {
-
-    private final Map<String, String> logins;
-
-    public FileShareUserManager() {
-        logins = new HashMap<String, String>();
-    }
-
-    /**
-     * Returns all logins.
-     */
-    public synchronized Collection<String> getLogins() {
-        return logins.keySet();
-    }
-
-    /**
-     * Adds a login.
-     */
-    public synchronized void addLogin(String username, String password) {
-        if (username == null || password == null) {
-            return;
-        }
-
-        logins.put(username.trim(), password);
-    }
-
-    /**
-     * Takes user and password from the CallContext and checks them.
-     */
-    public synchronized String authenticate(CallContext context) {
-        // try to get the remote user first
-        // HttpServletRequest request = (HttpServletRequest)
-        // context.get(CallContext.HTTP_SERVLET_REQUEST);
-        // if (request != null && request.getRemoteUser() != null) {
-        // return request.getRemoteUser();
-        // }
-
-        // check user and password
-        if (!authenticate(context.getUsername(), context.getPassword())) {
-            throw new CmisPermissionDeniedException("Invalid username or password.");
-        }
-
-        return context.getUsername();
-    }
-
-    /**
-     * Authenticates a user against the configured logins.
-     */
-    private synchronized boolean authenticate(String username, String password) {
-        String pwd = logins.get(username);
-        if (pwd == null) {
-            return false;
-        }
-
-        return pwd.equals(password);
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        for (String user : logins.keySet()) {
-            sb.append('[');
-            sb.append(user);
-            sb.append(']');
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUtils.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUtils.java
deleted file mode 100644
index ae63af5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareUtils.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fileshare;
-
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-
-public final class FileShareUtils {
-
-    private FileShareUtils() {
-    }
-
-    /**
-     * Returns the boolean value of the given value or the default value if the
-     * given value is <code>null</code>.
-     */
-    public static boolean getBooleanParameter(Boolean value, boolean def) {
-        if (value == null) {
-            return def;
-        }
-
-        return value.booleanValue();
-    }
-
-    /**
-     * Converts milliseconds into a {@link GregorianCalendar} object, setting
-     * the timezone to GMT and cutting milliseconds off.
-     */
-    public static GregorianCalendar millisToCalendar(long millis) {
-        GregorianCalendar result = new GregorianCalendar();
-        result.setTimeZone(TimeZone.getTimeZone("GMT"));
-        result.setTimeInMillis((long) (Math.ceil((double) millis / 1000) * 1000));
-
-        return result;
-    }
-
-    /**
-     * Splits a filter statement into a collection of properties. If
-     * <code>filter</code> is <code>null</code>, empty or one of the properties
-     * is '*' , an empty collection will be returned.
-     */
-    public static Set<String> splitFilter(String filter) {
-        if (filter == null) {
-            return null;
-        }
-
-        if (filter.trim().length() == 0) {
-            return null;
-        }
-
-        Set<String> result = new HashSet<String>();
-        for (String s : filter.split(",")) {
-            s = s.trim();
-            if (s.equals("*")) {
-                return null;
-            } else if (s.length() > 0) {
-                result.add(s);
-            }
-        }
-
-        // set a few base properties
-        // query name == id (for base type properties)
-        result.add(PropertyIds.OBJECT_ID);
-        result.add(PropertyIds.OBJECT_TYPE_ID);
-        result.add(PropertyIds.BASE_TYPE_ID);
-
-        return result;
-    }
-
-    /**
-     * Gets the type id from a set of properties.
-     */
-    public static String getObjectTypeId(Properties properties) {
-        PropertyData<?> typeProperty = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        if (!(typeProperty instanceof PropertyId)) {
-            throw new CmisInvalidArgumentException("Type Id must be set!");
-        }
-
-        String typeId = ((PropertyId) typeProperty).getFirstValue();
-        if (typeId == null) {
-            throw new CmisInvalidArgumentException("Type Id must be set!");
-        }
-
-        return typeId;
-    }
-
-    /**
-     * Returns the first value of an id property.
-     */
-    public static String getIdProperty(Properties properties, String name) {
-        PropertyData<?> property = properties.getProperties().get(name);
-        if (!(property instanceof PropertyId)) {
-            return null;
-        }
-
-        return ((PropertyId) property).getFirstValue();
-    }
-
-    /**
-     * Returns the first value of a string property.
-     */
-    public static String getStringProperty(Properties properties, String name) {
-        PropertyData<?> property = properties.getProperties().get(name);
-        if (!(property instanceof PropertyString)) {
-            return null;
-        }
-
-        return ((PropertyString) property).getFirstValue();
-    }
-
-    /**
-     * Returns the first value of a datetime property.
-     */
-    public static GregorianCalendar getDateTimeProperty(Properties properties, String name) {
-        PropertyData<?> property = properties.getProperties().get(name);
-        if (!(property instanceof PropertyDateTime)) {
-            return null;
-        }
-
-        return ((PropertyDateTime) property).getFirstValue();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/example-type.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/example-type.xml
deleted file mode 100644
index d0cc0ad..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/example-type.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<cmisra:type xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
-	xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-	xsi:type="cmis:cmisTypeDocumentDefinitionType">
-	<cmis:id>myTestDocumentType</cmis:id>
-	<cmis:localName>myTestDocumentType</cmis:localName>
-	<cmis:localNamespace>http://chemistry.apache.org/opencmis/demo/</cmis:localNamespace>
-	<cmis:parentId>cmis:document</cmis:parentId>
-	<cmis:displayName>My Test Document Type</cmis:displayName>
-	<cmis:queryName>TESTDOCTYPE</cmis:queryName>
-	<cmis:description>My Test Document Type</cmis:description>
-	<cmis:baseId>cmis:document</cmis:baseId>
-	<cmis:creatable>true</cmis:creatable>
-	<cmis:fileable>true</cmis:fileable>
-	<cmis:queryable>false</cmis:queryable>
-	<cmis:fulltextIndexed>false</cmis:fulltextIndexed>
-	<cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
-	<cmis:controllablePolicy>false</cmis:controllablePolicy>
-	<cmis:controllableACL>false</cmis:controllableACL>
-	<cmis:versionable>false</cmis:versionable>
-	<cmis:contentStreamAllowed>required</cmis:contentStreamAllowed>
-	<cmis:propertyStringDefinition>
-		<cmis:id>testProperty</cmis:id>
-		<cmis:localName>testProperty</cmis:localName>
-		<cmis:displayName>A test property</cmis:displayName>
-		<cmis:queryName>testProperty</cmis:queryName>
-		<cmis:description>Just a string</cmis:description>
-		<cmis:propertyType>string</cmis:propertyType>
-		<cmis:cardinality>single</cmis:cardinality>
-		<cmis:updatability>readwrite</cmis:updatability>
-		<cmis:inherited>false</cmis:inherited>
-		<cmis:required>false</cmis:required>
-		<cmis:queryable>false</cmis:queryable>
-		<cmis:orderable>false</cmis:orderable>
-	</cmis:propertyStringDefinition>
-	<cmis:propertyStringDefinition>
-		<cmis:id>testProperty2</cmis:id>
-		<cmis:localName>testProperty2</cmis:localName>
-		<cmis:displayName>Another test property</cmis:displayName>
-		<cmis:queryName>testProperty2</cmis:queryName>
-		<cmis:description>Another string</cmis:description>
-		<cmis:propertyType>string</cmis:propertyType>
-		<cmis:cardinality>single</cmis:cardinality>
-		<cmis:updatability>readwrite</cmis:updatability>
-		<cmis:inherited>false</cmis:inherited>
-		<cmis:required>true</cmis:required>
-		<cmis:queryable>false</cmis:queryable>
-		<cmis:orderable>false</cmis:orderable>
-		<cmis:defaultValue>
-			<cmis:value>default value</cmis:value>
-		</cmis:defaultValue>
-	</cmis:propertyStringDefinition>			
-</cmisra:type>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/log4j.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/log4j.properties
deleted file mode 100644
index c89e8d7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.chemistry.opencmis.fileshare=INFO
-# log4j.logger.org.apache.chemistry.opencmis.server.support.filter=INFO
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/LICENSE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/LICENSE
deleted file mode 100644
index 7890389..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/LICENSE
+++ /dev/null
@@ -1,234 +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.
-
-=======================================================================
-
-Please see also THRID-PARTY-LICENSES.
-
-=======================================================================
-- SLF4J LOG4J-12 Binding (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/NOTICE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/NOTICE
deleted file mode 100644
index 0c709fe..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS FileShare Repository
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index da44f95..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class=org.apache.chemistry.opencmis.fileshare.FileShareCmisServiceFactory
-
-login.1 = test:test
-login.2 = cmisuser:password
-login.3 = reader:reader
-
-type.1 = /example-type.xml
-#type.2 = {user.home}{file.separator}type1.xml
-#type.3 = {user.home}{file.separator}type2.xml
-
-repository.test = {user.home}
-repository.test.readwrite = test, cmisuser
-repository.test.readonly = reader
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/index.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/index.jsp
deleted file mode 100644
index dafa341..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,107 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
-<%@ page import="org.apache.chemistry.opencmis.fileshare.*" %>
-<%@ page import="org.apache.chemistry.opencmis.commons.definitions.*" %>
-<%
-   FileShareCmisServiceFactory factory = (FileShareCmisServiceFactory) application.getAttribute("org.apache.chemistry.opencmis.servicesfactory");
-%>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-  <link rel="stylesheet" type="text/css" href="css/opencmis.css">
-  <title>OpenCMIS FileShare Server</title>
-  <style type="text/css">
-  <!--
-  body {
-    font-family: Verdana, arial, sans-serif;
-    color: black;
-    font-size: 12px;
-  }
-
-  h1 {
-    font-size: 24px;
-    line-height: normal;
-    font-weight: bold;
-    background-color: #f0f0f0;
-    color: #003366;
-    border-bottom: 1px solid #3c78b5;
-    padding: 2px;
-    margin: 4px 0px 4px 0px;
-  }
-
-  h2 {
-    font-size: 18px;
-    line-height: normal;
-    font-weight: bold;
-    background-color: #f0f0f0;
-    border-bottom: 1px solid #3c78b5;
-    padding: 2px;
-    margin: 4px 0px 4px 0px;
-  }
-
-  hr {
-    color: 3c78b5;
-    height: 1;
-  }
-  
-  td {
-    border: 1px solid #dddddd; 
-    padding: 2px;
-  }
-  -->
-  </style>
-</head>
-<body>
-
-<h1>OpenCMIS FileShare Server</h1>
-
-<p style="font-weight: bold">The OpenCMIS FileShare server is up and running.</p>
-<p>You need a CMIS client to access this server. Download the <a href="http://chemistry.apache.org/java/developing/tools/dev-tools-workbench.html">CMIS Workbench</a>.</p>
-
-<h2>Access Information</h2>
-
-<h3>CMIS 1.1</h3>
-
-<p>Web Services Binding: <a href="services11/cmis?wsdl">WSDL</a></p>
-<p>AtomPub Binding: <a href="atom11">Service Document</a></p>
-<p>Browser Binding: <a href="browser">Service Document</a></p>
-
-<h3>CMIS 1.0</h3>
-
-<p>Web Services Binding: <a href="services/cmis?wsdl">WSDL</a></p>
-<p>AtomPub Binding: <a href="atom">Service Document</a></p>
-
-
-<h2>Configured Repositories</h2>
-
-<table>
-<tr><th>Repository Id</th><th>Root Directory</th></tr>
-<% for (FileShareRepository fsr: factory.getRepositoryManager().getRepositories()) { %>
-<tr><td><%= fsr.getRepositoryId() %></td><td><%= fsr.getRootDirectory() %></td></tr>
-<% } %>
-</table>
-
-
-<h2>Users</h2>
-
-<table>
-<tr><th>Login</th></tr>
-<% for (String login: factory.getUserManager().getLogins()) { %>
-<tr><td><%= login %></td></tr>
-<% } %>
-</table>
-
-
-<h2>Types</h2>
-
-<table>
-<tr><th>Type Id</th><th>Name</th><th>Base Type Id</th></tr>
-<% for (TypeDefinition type: factory.getTypeManager().getInternalTypeDefinitions()) { %>
-<tr><td><%= type.getId() %></td><td><%= type.getDisplayName() %></td><td><%= type.getBaseTypeId().value() %></td></tr>
-<% } %>
-</table>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/pom.xml
deleted file mode 100644
index 49a25b4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/pom.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-inmemory</artifactId>
-    <name>OpenCMIS InMemory Server WAR packaging</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Bundle-Name>org.apache.chemistry.opencmis.server.inmemory</Bundle-Name>
-                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.server.inmemory</Bundle-SymbolicName>
-                            <Bundle-Version>0.0.1</Bundle-Version>
-                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
-                            <Bundle-Classpath>.</Bundle-Classpath>
-                            <Web-ContextPath>inmemory</Web-ContextPath>
-                        </manifestEntries>
-                    </archive>
-                    <overlays>
-                        <overlay>
-                        </overlay>
-                        <overlay>
-                            <groupId>${project.groupId}</groupId>
-                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-                            <includes>
-                                <include>**</include>
-                                <include>META-INF/THIRD-PARTY-LICENSES</include>
-                            </includes>
-                        </overlay>
-                    </overlays>
-                    <archiveClasses>true</archiveClasses>
-                    <attachClasses>true</attachClasses>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-eclipse-plugin</artifactId>
-                <version>2.9</version>
-                <configuration>
-                    <useProjectReferences>true</useProjectReferences>
-                    <wtpversion>2.0</wtpversion>
-                    <wtpContextName>inmemory</wtpContextName>
-                    <linkedResources>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/sun-jaxws.xml</name>
-                            <type>1</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/sun-jaxws.xml</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/web.xml</name>
-                            <type>1</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/web.xml</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/wsdl</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/wsdl</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/cmis10</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis10</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/WEB-INF/cmis11</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/WEB-INF/cmis11</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/css</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/css</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/images</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/images</location>
-                        </linkedResource>
-                        <linkedResource>
-                            <name>src/main/webapp/web</name>
-                            <type>2</type>
-                            <location>WORKSPACE_LOC/chemistry-opencmis-server/chemistry-opencmis-server-bindings-war/src/main/webapp/web</location>
-                        </linkedResource>
-                    </linkedResources>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-test-util</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-            <type>war</type>
-        </dependency>
-        <!-- Uncomment for CORS support 
-        <dependency>
-            <groupId>com.thetransactioncompany</groupId>
-            <artifactId>cors-filter</artifactId>
-            <version>2.1.2</version>
-        </dependency>
-        -->
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigConstants.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigConstants.java
deleted file mode 100644
index ef8bf64..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigConstants.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-public final class ConfigConstants {
-    public static final String REPOSITORY_ID = "InMemoryServer.RepositoryId";
-    public static final String TYPE_XML = "InMemoryServer.TypeDefinitionsFile";
-    public static final String TYPE_CREATOR_CLASS = "InMemoryServer.TypesCreatorClass";
-    public static final String REPOSITORY_INFO_CREATOR_CLASS = "InMemoryServer.RepositoryInfoCreatorClass";
-    public static final String REPOSITORY_CLASS = "InMemoryServer.Class";
-    public static final String OVERRIDE_CALL_CONTEXT = "InMemoryServer.OverrideCallContext";
-    public static final String MEMORY_THRESHOLD = "InMemoryServer.MemoryThreshold";
-    public static final String TEMP_DIR = "InMemoryServer.TempDir";
-    public static final String MAX_CONTENT_SIZE = "InMemoryServer.MaxContentSize";
-    public static final String ENCRYPT_TEMP_FILES = "InMemoryServer.EncryptTempFiles";
-
-    // Helper constants that allow to fill a repository with data on
-    // initialization
-    public static final String USE_REPOSITORY_FILER = "RepositoryFiller.Enable";
-    public static final String FILLER_DOCUMENT_TYPE_ID = "RepositoryFiller.DocumentTypeId";
-    public static final String FILLER_FOLDER_TYPE_ID = "RepositoryFiller.FolderTypeId";
-    public static final String FILLER_DOCS_PER_FOLDER = "RepositoryFiller.DocsPerFolder";
-    public static final String FILLER_FOLDERS_PER_FOLDER = "RepositoryFiller.FolderPerFolder";
-    public static final String FILLER_DEPTH = "RepositoryFiller.Depth";
-    public static final String FILLER_CONTENT_SIZE = "RepositoryFiller.ContentSizeInKB";
-    public static final String FILLER_DOCUMENT_PROPERTY = "RepositoryFiller.DocumentProperty.";
-    public static final String FILLER_FOLDER_PROPERTY = "RepositoryFiller.FolderProperty.";
-    public static final String CONTENT_KIND = "RepositoryFiller.ContentKind";
-
-    // runtime configuration values
-    public static final String MAX_CONTENT_SIZE_KB = "InMemoryServer.MaxContentSizeKB";
-    public static final String CLEAN_REPOSITORY_INTERVAL = "InMemoryServer.CleanIntervalMinutes";
-    public static final String DEPLOYMENT_TIME = "InMemoryServer.DeploymentTime";
-
-    private ConfigConstants() {
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigurationSettings.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigurationSettings.java
deleted file mode 100644
index c4ed896..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ConfigurationSettings.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class ConfigurationSettings {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ConfigurationSettings.class.getName());
-
-    private static ConfigurationSettings singleInstance;
-
-    private final Map<String, String> parameters;
-
-    private ConfigurationSettings(Map<String, String> parameters) {
-        this.parameters = parameters;
-    }
-
-    private String getConfigurationValueIntern(String key) {
-        return parameters.get(key);
-    }
-
-    public static String getConfigurationValueAsString(String key) {
-        if (null == singleInstance) {
-            LOG.error("ConfigurationSettings are not initialized. Initialize before reading values");
-            throw new CmisRuntimeException("ConfigurationSettings are not initialized.");
-        }
-        return singleInstance.getConfigurationValueIntern(key);
-    }
-
-    public static Long getConfigurationValueAsLong(String key) {
-        String str = getConfigurationValueAsString(key);
-        if (null != str) {
-            return Long.valueOf(str);
-        } else {
-            return null;
-        }
-    }
-
-    public static void init(Map<String, String> parameters) {
-        singleInstance = new ConfigurationSettings(parameters);
-    }
-
-    public static Map<String, String> getParameters() {
-        return singleInstance.parameters;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
deleted file mode 100644
index b56a3bc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Version;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * A collection of utility functions to fill the data objects used
- *         as return values for the service object calls
- */
-public final class DataObjectCreator {
-
-    // Utility class
-    private DataObjectCreator() {
-    }
-
-    public static AllowableActions fillAllowableActions(StoredObject so, String user) {
-
-        boolean isFolder = so instanceof Folder;
-        boolean isDocument = so instanceof Content;
-        boolean isItem = so instanceof Item;
-        boolean isRelationship = so instanceof Relationship;
-        boolean isFileable = isFolder || isDocument || isItem;
-        boolean isPolicy = so instanceof Policy;
-        boolean isCheckedOut = false;
-        boolean canCheckOut = false;
-        boolean canCheckIn = false;
-        boolean isVersioned = so instanceof Version || so instanceof VersionedDocument;
-        boolean hasContent = so instanceof Content && ((Content) so).hasContent();
-        boolean isRootFolder = isFolder && ((Folder) so).getParentId() == null;
-        boolean hasRendition = so.hasRendition(user);
-        boolean canGetAcl = user != null && (isDocument || isFolder || isItem);
-        boolean canSetAcl = canGetAcl;
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-
-        if (so instanceof Version) {
-            isCheckedOut = ((Version) so).isPwc();
-            canCheckIn = isCheckedOut && ((Version) so).getParentDocument().getCheckedOutBy().equals(user);
-            canCheckOut = !((Version) so).getParentDocument().isCheckedOut();
-        } else if (so instanceof VersionedDocument) {
-            isCheckedOut = ((VersionedDocument) so).isCheckedOut();
-            canCheckOut = !((VersionedDocument) so).isCheckedOut();
-            canCheckIn = isCheckedOut && ((VersionedDocument) so).getCheckedOutBy().equals(user);
-        }
-
-        AllowableActionsImpl allowableActions = new AllowableActionsImpl();
-        Set<Action> set = allowableActions.getAllowableActions();
-
-        if (!isRootFolder) {
-            set.add(Action.CAN_DELETE_OBJECT);
-            set.add(Action.CAN_UPDATE_PROPERTIES);
-            set.add(Action.CAN_APPLY_POLICY);
-            set.add(Action.CAN_GET_APPLIED_POLICIES);
-        }
-
-        if (isFolder || isDocument || isItem || isRelationship || isPolicy) {
-            set.add(Action.CAN_GET_PROPERTIES);
-            if (!isRootFolder && isFileable) {
-                set.add(Action.CAN_GET_OBJECT_PARENTS);
-                set.add(Action.CAN_MOVE_OBJECT);
-            }
-        }
-
-        if (isFolder) {
-            if (!isRootFolder) {
-                set.add(Action.CAN_GET_FOLDER_PARENT);
-                set.add(Action.CAN_DELETE_TREE);
-            }
-            set.add(Action.CAN_GET_FOLDER_TREE);
-            set.add(Action.CAN_GET_DESCENDANTS);
-
-            set.add(Action.CAN_CREATE_DOCUMENT);
-            set.add(Action.CAN_CREATE_FOLDER);
-            if (cmis11) {
-                set.add(Action.CAN_CREATE_ITEM);
-            }
-            set.add(Action.CAN_GET_CHILDREN);
-        }
-
-        if (hasContent) {
-            set.add(Action.CAN_DELETE_CONTENT_STREAM);
-            set.add(Action.CAN_GET_CONTENT_STREAM);
-        }
-
-        if (isVersioned) {
-            if (canCheckOut) {
-                set.add(Action.CAN_CHECK_OUT);
-            }
-            if (canCheckIn) {
-                set.add(Action.CAN_CANCEL_CHECK_OUT);
-                set.add(Action.CAN_CHECK_IN);
-            }
-            set.add(Action.CAN_GET_ALL_VERSIONS);
-        }
-
-        if (isDocument || isItem) {
-            if (so instanceof Filing && ((Filing) so).hasParent()) {
-                set.add(Action.CAN_ADD_OBJECT_TO_FOLDER);
-                set.add(Action.CAN_REMOVE_OBJECT_FROM_FOLDER);
-            }
-            if (isDocument) {
-                if (isVersioned) {
-                    if (canCheckIn) {
-                        set.add(Action.CAN_SET_CONTENT_STREAM);
-                    }
-                } else {
-                    set.add(Action.CAN_SET_CONTENT_STREAM);
-                }
-            }
-        }
-
-        if (hasRendition) {
-            set.add(Action.CAN_GET_RENDITIONS);
-        }
-
-        if (canSetAcl) {
-            set.add(Action.CAN_APPLY_ACL);
-        }
-        if (canGetAcl) {
-            set.add(Action.CAN_GET_ACL);
-        }
-
-        allowableActions.setAllowableActions(set);
-        return allowableActions;
-    }
-
-    public static Acl fillACL(StoredObject so) {
-        AccessControlListImpl acl = new AccessControlListImpl();
-        List<Ace> aces = new ArrayList<Ace>();
-        acl.setAces(aces);
-        return acl;
-    }
-
-    public static PolicyIdList fillPolicyIds(StoredObject so) {
-        PolicyIdListImpl polIds = new PolicyIdListImpl();
-        List<String> pols = so.getAppliedPolicies();
-        polIds.setPolicyIds(pols);
-        return polIds;
-    }
-
-    public static List<ObjectData> fillRelationships(TypeManager tm, ObjectStore objStore,
-            IncludeRelationships includeRelationships, StoredObject so, String user) {
-        return getRelationships(tm, objStore, includeRelationships, so, user);
-    }
-
-    public static ChangeEventInfo fillChangeEventInfo(StoredObject so) {
-        // TODO: to be completed if change information is implemented
-        ChangeEventInfo changeEventInfo = new ChangeEventInfoDataImpl();
-        return changeEventInfo;
-    }
-
-    public static List<ObjectData> getRelationships(TypeManager tm, ObjectStore objStore,
-            IncludeRelationships includeRelationships, StoredObject spo, String user) {
-        if (includeRelationships != IncludeRelationships.NONE) {
-            RelationshipDirection relationshipDirection = RelationshipDirection.SOURCE;
-            // source is default
-            if (includeRelationships == IncludeRelationships.TARGET) {
-                relationshipDirection = RelationshipDirection.TARGET;
-            } else if (includeRelationships == IncludeRelationships.BOTH) {
-                relationshipDirection = RelationshipDirection.EITHER;
-            }
-
-            List<StoredObject> relationships = objStore.getRelationships(spo.getId(), null, relationshipDirection);
-            List<ObjectData> res = new ArrayList<ObjectData>(relationships.size());
-            for (StoredObject so : relationships) {
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, user, false,
-                        IncludeRelationships.NONE, null, false, false, null);
-                res.add(od);
-            }
-            return res;
-        }
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DummyCallContext.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DummyCallContext.java
deleted file mode 100644
index e11c97d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DummyCallContext.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-public class DummyCallContext implements CallContext {
-    private static final int FOUR_M = 4;
-    private static final int SIZE_KB = 1024;
-    private final Map<String, Object> fParameter = new HashMap<String, Object>();
-
-    public DummyCallContext() {
-        fParameter.put(USERNAME, "Admin");
-        fParameter.put(PASSWORD, "secret");
-        fParameter.put(LOCALE, "en");
-    }
-
-    public DummyCallContext(String principalId) {
-        fParameter.put(USERNAME, principalId);
-        fParameter.put(PASSWORD, "secret");
-        fParameter.put(LOCALE, "en");
-    }
-
-    @Override
-    public boolean isObjectInfoRequired() {
-        return false;
-    }
-
-    @Override
-    public Object get(String key) {
-        return fParameter.get(key);
-    }
-
-    @Override
-    public String getBinding() {
-        return BINDING_ATOMPUB;
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    @Override
-    public String getRepositoryId() {
-        return (String) get(REPOSITORY_ID);
-    }
-
-    @Override
-    public String getLocale() {
-        return (String) get(LOCALE);
-    }
-
-    @Override
-    public BigInteger getOffset() {
-        return (BigInteger) get(OFFSET);
-    }
-
-    @Override
-    public BigInteger getLength() {
-        return (BigInteger) get(LENGTH);
-    }
-
-    @Override
-    public String getPassword() {
-        return (String) get(PASSWORD);
-    }
-
-    @Override
-    public String getUsername() {
-        return (String) get(USERNAME);
-    }
-
-    public void put(String key, String value) {
-        fParameter.put(key, value);
-    }
-
-    @Override
-    public File getTempDirectory() {
-        return null;
-    }
-
-    @Override
-    public boolean encryptTempFiles() {
-        return false;
-    }
-
-    @Override
-    public int getMemoryThreshold() {
-        return FOUR_M * SIZE_KB * SIZE_KB;
-    }
-
-    @Override
-    public long getMaxContentSize() {
-        return FOUR_M * SIZE_KB * SIZE_KB * SIZE_KB;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/FilterParser.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/FilterParser.java
deleted file mode 100644
index f56f39b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/FilterParser.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-
-public final class FilterParser {
-
-    // Utility class
-    private FilterParser() {
-    }
-
-    public static boolean isContainedInFilter(String propertyId, List<String> requestedIds) {
-        if (requestedIds.contains("*")) {
-            return true;
-        }
-        return requestedIds.contains(propertyId);
-    }
-
-    public static List<String> getRequestedIdsFromFilter(String filter) {
-        if (filter == null || filter.length() == 0) {
-            return Collections.singletonList("*");
-        } else {
-            List<String> requestedIds = Arrays.asList(filter.split(",\\s*")); // comma
-            // plus
-            // whitespace
-
-            // add object id because this is always needed in AtomPub binding:
-            if (!(requestedIds.contains(PropertyIds.OBJECT_ID))) {
-                requestedIds = new ArrayList<String>(requestedIds); // copy
-                                                                    // immutable
-                                                                    // list
-                requestedIds.add(PropertyIds.OBJECT_ID);
-            }
-
-            if (requestedIds.contains("*")) {
-                requestedIds = Collections.singletonList("*");
-            }
-            return requestedIds;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java
deleted file mode 100644
index 228afd7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.inmemory;
-
-public final class NameValidator {
-
-    public static final String ERROR_ILLEGAL_ID = "Id contains illegal characters, allowed are "
-            + "'a'..'z', 'A'..'Z', '0'..'9', '-', '_'";
-    public static final String ERROR_ILLEGAL_NAME = "Name contains illegal characters, not allowed are "
-            + "'/', '\\', ':', '\"', '*'. '?', '<','>', '|'";
-
-    // Utility class
-    private NameValidator() {
-    }
-
-    /**
-     * check whether id contains only valid characters Allowed are 'a'..'z',
-     * 'A'..'Z', '0'..'9', '.', '-', ' ', '_'.
-     * 
-     * @param s
-     *            string to verify
-     * @return true if valid name, false otherwise
-     */
-    public static boolean isValidId(String s) {
-        if (null == s || s.length() == 0) {
-            return false;
-        }
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == ':' || c == '.'
-                    || c == '-' || c == '_' || c == ' ')) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public static boolean isValidLocalName(String s) {
-        return isValidId(s);
-    }
-
-    /**
-     * check whether id contains only valid characters. Not allowed are '/',
-     * '\\', ':', '\"', '*'. '?', '<','>', '|'"
-     * 
-     * @param s
-     *            string to verify
-     * @return true if valid name, false otherwise
-     */
-    public static boolean isValidName(String s) {
-        if (null == s || s.length() == 0) {
-            return false;
-        }
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            if (c == '\\' || c == '/' || c == '\"' || c == ':' || c == '*' || c == '?' || c == '<' || c == '>'
-                    && c == '|') {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public static boolean isValidNamespace(String s) {
-        return isValidId(s);
-    }
-
-    public static boolean isValidQueryName(String s) {
-        return isValidId(s);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/RepositoryInfoCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/RepositoryInfoCreator.java
deleted file mode 100644
index 36a3db8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/RepositoryInfoCreator.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-
-/**
- * A simple interface to create the repository info. This needs to be
- * implemented by a client (like a unit test) in class and the name of the class
- * is passed to the session. The in-memory repository creates an instance of
- * this class to generate the repository info for its instance.
- */
-public interface RepositoryInfoCreator {
-    RepositoryInfo createRepositoryInfo();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeCreator.java
deleted file mode 100644
index ed11abb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeCreator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-/**
- * A simple interface to create a type system. This needs to be implemented by a
- * client (like a unit test) in class and the name of the class is passed to the
- * session. The in-memory repository creates an instance of this class to
- * generate the type system for this instance
- */
-public interface TypeCreator {
-
-    List<TypeDefinition> createTypesList();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java
deleted file mode 100644
index 3ce8a24..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.TypeUtil;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class that manages a type system for a repository types can be added, the
- * inheritance can be managed and type can be retrieved for a given type id.
- */
-public class TypeManagerImpl implements TypeManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TypeManagerImpl.class.getName());
-    /**
-     * map from repository id to a types map.
-     */
-    private final Map<String, TypeDefinitionContainer> fTypesMap = new HashMap<String, TypeDefinitionContainer>();
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.TypeManager#getTypeById(java.lang
-     * .String)
-     */
-    @Override
-    public TypeDefinitionContainer getTypeById(String typeId) {
-        return fTypesMap.get(typeId);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.TypeManager#getTypeByQueryName
-     * (java.lang.String)
-     */
-    @Override
-    public TypeDefinition getTypeByQueryName(String typeQueryName) {
-        for (Entry<String, TypeDefinitionContainer> entry : fTypesMap.entrySet()) {
-            if (entry.getValue().getTypeDefinition().getQueryName().equals(typeQueryName)) {
-                return entry.getValue().getTypeDefinition();
-            }
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.TypeManager#getTypeDefinitionList
-     * ()
-     */
-    @Override
-    public Collection<TypeDefinitionContainer> getTypeDefinitionList() {
-        return Collections.unmodifiableCollection(fTypesMap.values());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.chemistry.opencmis.inmemory.TypeManager#getRootTypes()
-     */
-    @Override
-    public List<TypeDefinitionContainer> getRootTypes() {
-        // just take first repository
-        List<TypeDefinitionContainer> rootTypes = new ArrayList<TypeDefinitionContainer>();
-
-        for (TypeDefinitionContainer type : fTypesMap.values()) {
-            if (isRootType(type)) {
-                rootTypes.add(type);
-            }
-        }
-
-        return rootTypes;
-    }
-
-    /**
-     * Initialize the type system with the given types. This list must not
-     * contain the CMIS default types. The default type are always contained by
-     * default.
-     * 
-     * @param typesList
-     *            list of types to add to the repository
-     * 
-     * @param createCmisDefaultTypes
-     *            indicates if CMIS base types should be added to list
-     */
-    public void initTypeSystem(List<TypeDefinition> typesList, boolean createCmisDefaultTypes) {
-
-        if (createCmisDefaultTypes) {
-            createCmisDefaultTypes();
-        }
-
-        // merge all types from the list and build the correct hierachy with
-        // children and property lists
-        if (null != typesList) {
-            for (TypeDefinition typeDef : typesList) {
-                addTypeDefinition(typeDef, true);
-            }
-        }
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.storedobj.api.TypeManagerCreatable
-     * #addTypeDefinition(org.apache.chemistry.opencmis.commons.definitions.
-     * TypeDefinition, boolean)
-     */
-    @Override
-    public void addTypeDefinition(TypeDefinition cmisType, boolean addInheritedProperties) {
-
-        LOG.info("Adding type definition with name " + cmisType.getLocalName() + " and id " + cmisType.getId()
-                + " to repository.");
-        TypeDefinitionContainerImpl typeContainer = new TypeDefinitionContainerImpl(cmisType);
-
-        if (null != cmisType.getParentTypeId()) {
-            // add new type to children of parent types
-            TypeDefinitionContainer parentTypeContainer = fTypesMap.get(cmisType.getParentTypeId());
-            parentTypeContainer.getChildren().add(typeContainer);
-
-            if (addInheritedProperties) {
-                // recursively add inherited properties
-                Map<String, PropertyDefinition<?>> propDefs = typeContainer.getTypeDefinition()
-                        .getPropertyDefinitions();
-                addInheritedProperties(propDefs, parentTypeContainer.getTypeDefinition());
-            }
-        }
-        // add type to type map
-        fTypesMap.put(cmisType.getId(), typeContainer);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.storedobj.api.TypeManagerCreatable
-     * #updateTypeDefinition(org.apache.chemistry.opencmis.commons.definitions.
-     * TypeDefinition)
-     */
-    @Override
-    public void updateTypeDefinition(TypeDefinition typeDefinition) {
-        throw new CmisNotSupportedException("updating a type definition is not supported.");
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.storedobj.api.TypeManagerCreatable
-     * #deleteTypeDefinition(java.lang.String)
-     */
-    @Override
-    public void deleteTypeDefinition(String typeId) {
-        TypeDefinitionContainer typeDef = fTypesMap.remove(typeId);
-        // remove type from children of parent types
-        TypeDefinitionContainer parentTypeContainer = fTypesMap.get(typeDef.getTypeDefinition().getParentTypeId());
-        parentTypeContainer.getChildren().remove(typeDef);
-        fTypesMap.remove(typeId);
-    }
-
-    /**
-     * Remove all types from the type system. After this call only the default
-     * CMIS types are present in the type system. Use this method with care, its
-     * mainly intended for unit tests
-     * 
-     * @param repositoryId
-     */
-    public void clearTypeSystem() {
-        fTypesMap.clear();
-        createCmisDefaultTypes();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.chemistry.opencmis.inmemory.TypeManager#getPropertyIdForQueryName
-     * (org.apache.chemistry.opencmis.commons.definitions.TypeDefinition,
-     * java.lang.String)
-     */
-    @Override
-    public String getPropertyIdForQueryName(TypeDefinition typeDefinition, String propQueryName) {
-        for (PropertyDefinition<?> pd : typeDefinition.getPropertyDefinitions().values()) {
-            if (pd.getQueryName().equals(propQueryName)) {
-                return pd.getId();
-            }
-        }
-        return null;
-    }
-
-    private void addInheritedProperties(Map<String, PropertyDefinition<?>> propDefs, TypeDefinition typeDefinition) {
-
-        if (null == typeDefinition) {
-            return;
-        }
-
-        if (null != typeDefinition.getPropertyDefinitions()) {
-            addInheritedPropertyDefinitions(propDefs, typeDefinition.getPropertyDefinitions());
-        }
-
-        TypeDefinitionContainer parentTypeContainer = fTypesMap.get(typeDefinition.getParentTypeId());
-        TypeDefinition parentType = (null == parentTypeContainer ? null : parentTypeContainer.getTypeDefinition());
-        addInheritedProperties(propDefs, parentType);
-    }
-
-    private static void addInheritedPropertyDefinitions(Map<String, PropertyDefinition<?>> propDefs,
-            Map<String, PropertyDefinition<?>> superPropDefs) {
-
-        for (Entry<String, PropertyDefinition<?>> superProp : superPropDefs.entrySet()) {
-            PropertyDefinition<?> superPropDef = superProp.getValue();
-            PropertyDefinition<?> clone = clonePropertyDefinition(superPropDef);
-            ((AbstractPropertyDefinition<?>) clone).setIsInherited(true);
-            propDefs.put(superProp.getKey(), clone);
-        }
-    }
-
-    private void createCmisDefaultTypes() {
-        List<TypeDefinition> typesList = DocumentTypeCreationHelper.createDefaultTypes();
-        for (TypeDefinition typeDef : typesList) {
-            TypeDefinitionContainerImpl typeContainer = new TypeDefinitionContainerImpl(typeDef);
-            fTypesMap.put(typeDef.getId(), typeContainer);
-        }
-    }
-
-    private static boolean isRootType(TypeDefinitionContainer c) {
-        return (c.getTypeDefinition().getId().equals(c.getTypeDefinition().getBaseTypeId().value()));
-    }
-
-    private static PropertyDefinition<?> clonePropertyDefinition(PropertyDefinition<?> src) {
-        PropertyDefinition<?> clone = TypeUtil.clonePropertyDefinition(src);
-        return clone;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeValidator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeValidator.java
deleted file mode 100644
index e535de5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeValidator.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory;

-

-import java.util.ArrayList;

-import java.util.Collection;

-import java.util.LinkedHashMap;

-import java.util.List;

-import java.util.Map;

-import java.util.UUID;

-

-import org.apache.chemistry.opencmis.commons.data.Ace;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;

-import org.apache.chemistry.opencmis.commons.enums.Cardinality;

-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;

-import org.apache.chemistry.opencmis.commons.enums.Updatability;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;

-import org.apache.chemistry.opencmis.inmemory.types.TypeUtil;

-import org.apache.chemistry.opencmis.server.support.TypeManager;

-

-/**

- * A helper class doing some consistency checks when new type definitions are

- * added to the system.

- */

-public final class TypeValidator {

-

-    private static final Object CMIS_USER = "cmis:user";

-

-    private TypeValidator() {

-    }

-

-    public static void checkType(TypeManager tm, TypeDefinition td) {

-

-        if (null == td) {

-            throw new CmisInvalidArgumentException("Cannot add type, because the type defintion is null.");

-        }

-

-        if (null == tm.getTypeById(td.getParentTypeId())) {

-            throw new CmisInvalidArgumentException("Cannot add type, because parent with id " + td.getParentTypeId()

-                    + " does not exist.");

-        }

-

-        if (null != tm.getTypeById(td.getId())) {

-            throw new CmisInvalidArgumentException("Cannot add type, because type with id " + td.getId()

-                    + " already exists.");

-        }

-

-        checkTypeId(tm, td.getId());

-        checkTypeQueryName(tm, td.getQueryName());

-        checkTypeLocalName(tm, td.getLocalName());

-        checkBaseAndParentType(td);

-

-        if (null != td.getPropertyDefinitions()) {

-            TypeValidator.checkProperties(tm, td.getPropertyDefinitions().values());

-        }

-    }

-

-    public static AbstractTypeDefinition completeType(TypeDefinition type) {

-        if (type instanceof DocumentTypeDefinition) {

-            return completeTypeDoc((DocumentTypeDefinition) type);

-        } else if (type instanceof FolderTypeDefinition) {

-            return completeTypeFolder((FolderTypeDefinition) type);

-        } else if (type instanceof PolicyTypeDefinition) {

-            return completeTypePolicy((PolicyTypeDefinition) type);

-        } else if (type instanceof ItemTypeDefinition) {

-            return completeTypeItem((ItemTypeDefinition) type);

-        } else if (type instanceof RelationshipTypeDefinition) {

-            return completeTypeRelationship((RelationshipTypeDefinition) type);

-        } else if (type instanceof SecondaryTypeDefinition) {

-            return completeTypeSecondary((SecondaryTypeDefinition) type);

-        } else {

-            return null;

-        }

-    }

-

-    public static void adjustTypeNamesAndId(AbstractTypeDefinition typeDef) {

-        if (null == typeDef.getId()) {

-            typeDef.setId(UUID.randomUUID().toString());

-        } else {

-            if (!NameValidator.isValidId(typeDef.getId())) {

-                // if there are illegal characters adjust them

-                String newId = replaceInvalidCharacters(typeDef.getId());

-                typeDef.setId(newId);

-            }

-        }

-        if (!NameValidator.isValidQueryName(typeDef.getQueryName())) {

-            typeDef.setQueryName(typeDef.getId());

-        }

-        if (!NameValidator.isValidLocalName(typeDef.getLocalName())) {

-            typeDef.setLocalName(typeDef.getId());

-        }

-    }

-

-    private static void completeAbstractTypeDefinition(AbstractTypeDefinition td) {

-        if (td.isControllableAcl() == null) {

-            td.setIsControllableAcl(true);

-        }

-        if (td.isControllablePolicy() == null) {

-            td.setIsControllablePolicy(false);

-        }

-        if (td.isCreatable() == null) {

-            td.setIsCreatable(true);

-        }

-        if (td.isFileable() == null) {

-            td.setIsFileable(true);

-        }

-        td.setIsFulltextIndexed(false);

-        td.setIsIncludedInSupertypeQuery(false);

-        if (td.isQueryable() == null) {

-            td.setIsQueryable(true);

-        }

-        td.setParentTypeId(td.getParentTypeId());

-        TypeMutabilityImpl tm = new TypeMutabilityImpl();

-        tm.setCanCreate(true);

-        tm.setCanDelete(true);

-        tm.setCanUpdate(true);

-        td.setTypeMutability(tm);

-        td.setExtensions(td.getExtensions());

-

-        Map<String, PropertyDefinition<?>> propDefsNew = new LinkedHashMap<String, PropertyDefinition<?>>();

-        if (null != td.getPropertyDefinitions()) {

-            Map<String, PropertyDefinition<?>> propDefs = td.getPropertyDefinitions();

-            for (PropertyDefinition<?> pd : propDefs.values()) {

-                AbstractPropertyDefinition<?> pdNew = completePropertyDef(pd);

-                adjustPropertyNamesAndId(pdNew);

-                propDefsNew.put(pdNew.getId(), pd);

-            }

-        }

-        td.setPropertyDefinitions(propDefsNew);

-    }

-

-    private static void checkProperties(TypeManager tm, Collection<PropertyDefinition<?>> pds) {

-

-        Collection<TypeDefinitionContainer> tdl = tm.getTypeDefinitionList();

-        for (PropertyDefinition<?> pd2 : pds) {

-            // check id syntax

-            if (null == pd2.getId()) {

-                throw new CmisInvalidArgumentException("property id cannot be null.");

-            }

-            if (!NameValidator.isValidId(pd2.getId())) {

-                throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);

-            }

-

-            // check query name syntax

-            if (null == pd2.getQueryName()) {

-                throw new CmisInvalidArgumentException("property query name cannot be null.");

-            }

-            if (!NameValidator.isValidQueryName(pd2.getQueryName())) {

-                throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);

-            }

-

-            // check local name syntax

-            if (null == pd2.getLocalName()) {

-                throw new CmisInvalidArgumentException("property local name cannot be null.");

-            }

-            if (!NameValidator.isValidLocalName(pd2.getLocalName())) {

-                throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);

-            }

-

-            for (TypeDefinitionContainer tdc : tdl) {

-                TypeDefinition td = tdc.getTypeDefinition();

-                if (null != td.getPropertyDefinitions()) {

-                    for (PropertyDefinition<?> pd1 : td.getPropertyDefinitions().values()) {

-                        // check if id is used

-                        if (pd1.getId().equals(pd2.getId())) {

-                            throw new CmisConstraintException("Property id " + pd2.getId() + " already in use in type "

-                                    + td.getId());

-                        }

-                        // check if query name is used

-                        if (pd1.getQueryName().equals(pd2.getQueryName())) {

-                            throw new CmisConstraintException("Property query name " + pd2.getQueryName()

-                                    + " already in use in type " + td.getQueryName());

-                        }

-                        // check if local name is used

-                        if (pd1.getLocalName().equals(pd2.getLocalName())) {

-                            throw new CmisConstraintException("Property local name " + pd2.getLocalName()

-                                    + " already in use in type " + td.getId());

-                        }

-                    }

-                }

-            }

-        }

-    }

-

-    private static void adjustPropertyNamesAndId(AbstractPropertyDefinition<?> propDef) {

-        if (null == propDef.getId()) {

-            propDef.setId(UUID.randomUUID().toString());

-        } else {

-            if (!NameValidator.isValidId(propDef.getId())) {

-                String newId = replaceInvalidCharacters(propDef.getId());

-                propDef.setId(newId);

-            }

-        }

-        if (!NameValidator.isValidQueryName(propDef.getQueryName())) {

-            propDef.setQueryName(propDef.getId());

-        }

-        if (!NameValidator.isValidLocalName(propDef.getLocalName())) {

-            propDef.setLocalName(propDef.getId());

-        }

-    }

-

-    private static String replaceInvalidCharacters(String id) {

-        // if there are illegal characters adjust them

-        StringBuilder sb = new StringBuilder();

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

-            if (NameValidator.isValidId(id.substring(i, i + 1))) {

-                sb.append(id.charAt(i));

-            } else {

-                sb.append('_');

-            }

-        }

-        return sb.toString();

-    }

-

-    private static DocumentTypeDefinitionImpl completeTypeDoc(DocumentTypeDefinition type) {

-        DocumentTypeDefinitionImpl td = TypeUtil.cloneTypeDoc(type);

-        completeAbstractTypeDefinition(td);

-        td.setIsVersionable(type.isVersionable());

-        td.setContentStreamAllowed(type.getContentStreamAllowed());

-        if (td.isVersionable() == null) {

-            td.setIsVersionable(false);

-        }

-        if (td.getContentStreamAllowed() == null) {

-            td.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);

-        }

-        return td;

-    }

-

-    private static FolderTypeDefinitionImpl completeTypeFolder(FolderTypeDefinition type) {

-        FolderTypeDefinitionImpl td = TypeUtil.cloneTypeFolder(type);

-        completeAbstractTypeDefinition(td);

-        return td;

-    }

-

-    private static RelationshipTypeDefinitionImpl completeTypeRelationship(RelationshipTypeDefinition type) {

-        RelationshipTypeDefinitionImpl td = TypeUtil.cloneTypeRelationship(type);

-        completeAbstractTypeDefinition(td);

-        td.setAllowedSourceTypes(type.getAllowedSourceTypeIds());

-        td.setAllowedTargetTypes(type.getAllowedTargetTypeIds());

-        return td;

-    }

-

-    private static ItemTypeDefinitionImpl completeTypeItem(ItemTypeDefinition type) {

-        ItemTypeDefinitionImpl td = TypeUtil.cloneTypeItem(type);

-        td.initialize(type);

-        completeAbstractTypeDefinition(td);

-        return td;

-    }

-

-    private static SecondaryTypeDefinitionImpl completeTypeSecondary(SecondaryTypeDefinition type) {

-        SecondaryTypeDefinitionImpl td = TypeUtil.cloneTypeSecondary(type);

-        completeAbstractTypeDefinition(td);

-        return td;

-    }

-

-    private static PolicyTypeDefinitionImpl completeTypePolicy(PolicyTypeDefinition type) {

-        PolicyTypeDefinitionImpl td = TypeUtil.cloneTypePolicy(type);

-        completeAbstractTypeDefinition(td);

-        return null;

-    }

-

-    // When creating types PropertyDefinitions may only be partially filled,

-    // fill all fields

-    // to make a complete definition

-    private static AbstractPropertyDefinition<?> completePropertyDef(PropertyDefinition<?> pdSrc) {

-        AbstractPropertyDefinition<?> newPropDef = TypeUtil.clonePropertyDefinition(pdSrc);

-

-        if (null == newPropDef.getPropertyType()) {

-            throw new CmisInvalidArgumentException("Property " + pdSrc.getId() + "has no property type.");

-        }

-        if (null == newPropDef.getId()) {

-            newPropDef.setId(UUID.randomUUID().toString());

-        }

-        if (null == newPropDef.getQueryName()) {

-            newPropDef.setQueryName(pdSrc.getId());

-        }

-        if (null == newPropDef.getLocalName()) {

-            newPropDef.setLocalName(pdSrc.getId());

-        }

-

-        if (null == newPropDef.getCardinality()) {

-            newPropDef.setCardinality(Cardinality.SINGLE);

-        }

-        if (null == newPropDef.isOrderable()) {

-            newPropDef.setIsOrderable(true);

-        }

-        if (null == newPropDef.isQueryable()) {

-            newPropDef.setIsQueryable(true);

-        }

-        if (null == newPropDef.isRequired()) {

-            newPropDef.setIsRequired(false);

-        }

-        if (null == newPropDef.getUpdatability()) {

-            newPropDef.setUpdatability(Updatability.READWRITE);

-        }

-

-        return newPropDef;

-    }

-

-    public static Acl expandAclMakros(String user, Acl acl) {

-        boolean mustCopy = false;

-

-        if (user == null || acl == null || acl.getAces() == null) {

-            return acl;

-        }

-

-        for (Ace ace : acl.getAces()) {

-            String principal = ace.getPrincipalId();

-            if (principal != null && principal.equals(CMIS_USER)) {

-                mustCopy = true;

-            }

-        }

-

-        if (mustCopy) {

-            AccessControlListImpl result = new AccessControlListImpl();

-            List<Ace> list = new ArrayList<Ace>(acl.getAces().size());

-            for (Ace ace : acl.getAces()) {

-                String principal = ace.getPrincipalId();

-                if (principal != null && principal.equals(CMIS_USER)) {

-                    AccessControlEntryImpl ace2 = new AccessControlEntryImpl();

-                    ace2.setPermissions(ace.getPermissions());

-                    ace2.setExtensions(ace.getExtensions());

-                    ace2.setPrincipal(new AccessControlPrincipalDataImpl(user));

-                    list.add(ace2);

-                } else {

-                    list.add(ace);

-                }

-            }

-            result.setAces(list);

-            return result;

-        } else {

-            return acl;

-        }

-    }

-

-    private static void checkTypeId(TypeManager tm, String typeId) {

-

-        if (null == typeId) {

-            throw new CmisInvalidArgumentException("Type id cannot be null.");

-        }

-

-        // check name syntax

-        if (!NameValidator.isValidId(typeId)) {

-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_ID);

-        }

-

-        if (null != tm.getTypeById(typeId)) {

-            throw new CmisInvalidArgumentException("You cannot add type with id " + typeId

-                    + " because it already exists.");

-        }

-    }

-

-    private static void checkTypeQueryName(TypeManager tm, String queryName) {

-

-        if (null == queryName) {

-            throw new CmisInvalidArgumentException("Query name cannot be null.");

-        }

-

-        if (!NameValidator.isValidQueryName(queryName)) {

-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);

-        }

-

-        // check set query name is unique in the type system

-        if (null != tm.getTypeByQueryName(queryName)) {

-            throw new CmisInvalidArgumentException("You cannot add type with query name " + queryName

-                    + " because it already exists.");

-        }

-    }

-

-    private static void checkTypeLocalName(TypeManager tm, String localName) {

-

-        if (null == localName) {

-            throw new CmisInvalidArgumentException("Local name cannot be null.");

-        }

-

-        if (!NameValidator.isValidLocalName(localName)) {

-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);

-        }

-

-        for (TypeDefinitionContainer tdc : tm.getTypeDefinitionList()) {

-            if (tdc.getTypeDefinition().getLocalName().equals(localName)) {

-                throw new CmisConstraintException("You cannot add type with local name " + localName

-                        + " because it already exists.");

-            }

-        }

-    }

-

-    private static void checkBaseAndParentType(TypeDefinition td) {

-        if (null == td.getBaseTypeId()) {

-            throw new CmisInvalidArgumentException("You cannot create a type without a base type id: " + td.getId());

-        }

-        if (null == td.getParentTypeId()) {

-            throw new CmisInvalidArgumentException("You cannot create a type without a parent type id: " + td.getId());

-        }

-

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
deleted file mode 100644
index 20e6639..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
+++ /dev/null
@@ -1,867 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Jens Huebel
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import java.io.UnsupportedEncodingException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ObjectStoreImpl;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.query.AbstractPredicateWalker;
-import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
-import org.apache.chemistry.opencmis.server.support.query.CmisSelector;
-import org.apache.chemistry.opencmis.server.support.query.ColumnReference;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.JoinSpec;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-import org.apache.chemistry.opencmis.server.support.query.StringUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A processor for a CMIS query for the In-Memory server. During tree traversal
- * conditions are checked against the data contained in the central hash map
- * with all objects. In a first pass one time setup is performed, in a custom
- * walk across the query expression tree an object is checked if it matches. In
- * case of a match it is appended to a list of matching objects.
- */
-public class InMemoryQueryProcessor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryQueryProcessor.class);
-
-    private List<StoredObject> matches = new ArrayList<StoredObject>();
-    private QueryObject queryObj;
-    private Tree whereTree;
-    private ObjectStoreImpl objStore;
-    private List<TypeDefinition> secondaryTypeIds;
-
-    public InMemoryQueryProcessor(ObjectStoreImpl objStore) {
-        this.objStore = objStore;
-    }
-
-    /**
-     * Main entry function to process a query from discovery service.
-     * 
-     * @param tm
-     *            type manager for the given repository
-     * @param objectStore
-     *            object store to gets object from
-     * @param user
-     *            user execuing the query
-     * @param repositoryId
-     *            id of repository
-     * @param statement
-     *            query statement
-     * @param searchAllVersions
-     *            search in all versions of objects
-     * @param includeAllowableActions
-     *            include allowable actions
-     * @param includeRelationships
-     *            include relationships
-     * @param renditionFilter
-     *            include renditions
-     * @param maxItems
-     *            max number of items to return
-     * @param skipCount
-     *            items to skip
-     * @return list of objects matching the query
-     */
-    public ObjectList query(TypeManager tm, ObjectStore objectStore, String user, String repositoryId,
-            String statement, Boolean searchAllVersions, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems, 
-            BigInteger skipCount) {
-
-        processQueryAndCatchExc(statement, tm); // calls query processor
-
-        // iterate over all the objects and check for each if the query matches
-        for (String objectId : ((ObjectStoreImpl) objectStore).getIds()) {
-            StoredObject so = objectStore.getObjectById(objectId);
-            match(so, user, searchAllVersions == null ? true : searchAllVersions.booleanValue());
-        }
-
-        ObjectList objList = buildResultList(tm, user, includeAllowableActions, includeRelationships, renditionFilter,
-                maxItems, skipCount);
-        LOG.debug("Query result, number of matching objects: " + objList.getNumItems());
-        return objList;
-    }
-
-    /**
-     * Process a query.
-     * @param statement
-     *      CMISQL statement to execute
-     * @param tm
-     *      type manager for the repository
-     */
-    public void processQueryAndCatchExc(String statement, TypeManager tm) {
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, tm, null);
-        queryUtil.processStatementUsingCmisExceptions();
-        CmisQueryWalker walker = queryUtil.getWalker();
-        queryObj = queryUtil.getQueryObject();
-        whereTree = walker.getWherePredicateTree();
-        secondaryTypeIds = queryObj.getJoinedSecondaryTypes();
-        doAdditionalChecks(walker);
-    }
-
-    /**
-     * Create the list of matching objects for this query. 
-     * @param tm
-     *  type manager for the given repository
-     * @param user
-     *  user execuing the query
-     * @param includeAllowableActions
-     *   include allowable actions
-     * @param includeRelationships
-     *  include relationships
-     * @param renditionFilter
-     *  include renditions
-     * @param maxItems
-     *  max number of items to return
-     * @param skipCount
-     *  items to skip
-     * @return
-     *  list of objects matching the query
-     */
-    public ObjectList buildResultList(TypeManager tm, String user, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems, 
-            BigInteger skipCount) {
-
-        sortMatches();
-
-        ObjectListImpl res = new ObjectListImpl();
-        res.setNumItems(BigInteger.valueOf(matches.size()));
-        int start = 0;
-        if (skipCount != null) {
-            start = (int) skipCount.longValue();
-        }
-        if (start < 0) {
-            start = 0;
-        }
-        if (start > matches.size()) {
-            start = matches.size();
-        }
-        int stop = 0;
-        if (maxItems != null) {
-            stop = start + (int) maxItems.longValue();
-        }
-        if (stop <= 0 || stop > matches.size()) {
-            stop = matches.size();
-        }
-        res.setHasMoreItems(stop < matches.size());
-        if (start > 0 || stop > 0) {
-            matches = matches.subList(start, stop);
-        }
-
-        List<ObjectData> objDataList = new ArrayList<ObjectData>();
-        Map<String, String> props = queryObj.getRequestedPropertiesByAlias();
-        Map<String, String> funcs = queryObj.getRequestedFuncsByAlias();
-
-        for (StoredObject so : matches) {
-            String queryName = queryObj.getTypes().values().iterator().next();
-            TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
-
-            ObjectData od = PropertyCreationHelper.getObjectDataQueryResult(tm, objStore, td, so, user, props, funcs,
-                    secondaryTypeIds, includeAllowableActions, includeRelationships, renditionFilter);
-            objDataList.add(od);
-        }
-        res.setObjects(objDataList);
-        return res;
-    }
-
-    private boolean typeMatches(TypeDefinition td, StoredObject so) {
-        String typeId = so.getTypeId();
-        while (typeId != null) {
-            if (typeId.equals(td.getId())) {
-                return true;
-            }
-            // check secondary types
-            List<String> secTypeIds = so.getSecondaryTypeIds();
-            for (String secTypeId : secTypeIds) {
-                if (secTypeId.equals(td.getId())) {
-                    return true;
-                }
-            }
-            // check parent type
-            TypeDefinition parentTD = queryObj.getParentType(typeId);
-            typeId = parentTD == null ? null : parentTD.getId();
-        }
-        return false;
-    }
-
-    private void sortMatches() {
-        final List<SortSpec> orderBy = queryObj.getOrderBys();
-        if (orderBy.size() > 1) {
-            LOG.warn("ORDER BY has more than one sort criterium, all but the first are ignored.");
-        }
-        class ResultComparator implements Comparator<StoredObject> {
-
-            @Override
-            @SuppressWarnings("unchecked")
-            public int compare(StoredObject so1, StoredObject so2) {
-                SortSpec s = orderBy.get(0);
-                CmisSelector sel = s.getSelector();
-                int result;
-
-                if (queryObj.isPredfinedQueryName(sel.getName())) {
-                    // must be SEARCH_SCORE which is currently ignored
-                    result = 0;
-                } else if (sel instanceof ColumnReference) {
-                    String propId = ((ColumnReference) sel).getPropertyId();
-                    PropertyDefinition<?> pd = ((ColumnReference) sel).getPropertyDefinition();
-
-                    Object propVal1 = PropertyQueryUtil.getProperty(so1, propId, pd);
-                    Object propVal2 = PropertyQueryUtil.getProperty(so2, propId, pd);
-
-                    if (propVal1 == null && propVal2 == null) {
-                        result = 0;
-                    } else if (propVal1 == null) {
-                        result = -1;
-                    } else if (propVal2 == null) {
-                        result = 1;
-                    } else {
-                        result = ((Comparable<Object>) propVal1).compareTo(propVal2);
-                    }
-                } else {
-                    // evaluate function here, currently ignore
-                    result = 0;
-                }
-                if (!s.isAscending()) {
-                    result = -result;
-                }
-                return result;
-            }
-        }
-
-        if (orderBy.size() > 0) {
-            Collections.sort(matches, new ResultComparator());
-        }
-
-    }
-
-    /*
-     * Check for each object contained in the in-memory repository if it matches
-     * the current query expression. If yes add it to the list of matched
-     * objects.
-     */
-    private void match(StoredObject so, String user, boolean searchAllVersions) {
-        // first check if type is matching...
-        // as we don't support joins take first type
-        String queryName = queryObj.getTypes().values().iterator().next();
-
-        TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
-
-        // we are only interested in versions not in the series
-        boolean skip = so instanceof VersionedDocument;
-
-        boolean typeMatches = typeMatches(td, so);
-        if (!searchAllVersions && so instanceof DocumentVersion
-                && ((DocumentVersion) so).getParentDocument().getLatestVersion(false) != so) {
-            skip = true;
-        }
-        // ... then check expression...
-        if (typeMatches && !skip) {
-            evalWhereTree(whereTree, user, so);
-        }
-    }
-
-    private void evalWhereTree(Tree node, String user, StoredObject so) {
-        boolean match = true;
-        if (null != node) {
-            match = evalWhereNode(so, user, node);
-        }
-        if (match && objStore.hasReadAccess(user, so)) {
-            matches.add(so); // add to list
-        }
-    }
-
-    /*
-     * For each object check if it matches and append it to match-list if it
-     * does. We do here our own walking mechanism so that we can pass additional
-     * parameters and define the return types.
-     */
-    private boolean evalWhereNode(StoredObject so, String user, Tree node) {
-        return new InMemoryWhereClauseWalker(so, user).walkPredicate(node);
-    }
-
-    public class InMemoryWhereClauseWalker extends AbstractPredicateWalker {
-
-        protected final StoredObject so;
-        protected final String user;
-
-        public InMemoryWhereClauseWalker(StoredObject so, String user) {
-            this.so = so;
-            this.user = user;
-        }
-
-        @Override
-        public Boolean walkNot(Tree opNode, Tree node) {
-            boolean hasMatched = walkPredicate(node);
-            return !hasMatched;
-        }
-
-        @Override
-        public Boolean walkAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-            boolean matches1 = walkPredicate(leftNode);
-            boolean matches2 = walkPredicate(rightNode);
-            return matches1 && matches2;
-        }
-
-        @Override
-        public Boolean walkOr(Tree opNode, Tree leftNode, Tree rightNode) {
-            boolean matches1 = walkPredicate(leftNode);
-            boolean matches2 = walkPredicate(rightNode);
-            return matches1 || matches2;
-        }
-
-        @Override
-        public Boolean walkEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp == 0;
-        }
-
-        @Override
-        public Boolean walkNotEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp != 0;
-        }
-
-        @Override
-        public Boolean walkGreaterThan(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp > 0;
-        }
-
-        @Override
-        public Boolean walkGreaterOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp >= 0;
-        }
-
-        @Override
-        public Boolean walkLessThan(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp < 0;
-        }
-
-        @Override
-        public Boolean walkLessOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-            Integer cmp = compareTo(leftNode, rightNode);
-            return cmp == null ? false : cmp <= 0;
-        }
-
-        @Override
-        public Boolean walkIn(Tree opNode, Tree colNode, Tree listNode) {
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            List<Object> literals = onLiteralList(listNode);
-            Object prop = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-
-            if (pd.getCardinality() != Cardinality.SINGLE) {
-                throw new IllegalStateException("Operator IN only is allowed on single-value properties ");
-            } else if (prop == null) {
-                return false;
-            } else {
-                return literals.contains(prop);
-            }
-        }
-
-        @Override
-        public Boolean walkNotIn(Tree opNode, Tree colNode, Tree listNode) {
-            // Note just return !walkIn(node, colNode, listNode) is wrong,
-            // because
-            // then it evaluates to true for null values (not set properties).
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object prop = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-            List<Object> literals = onLiteralList(listNode);
-            if (pd.getCardinality() != Cardinality.SINGLE) {
-                throw new IllegalStateException("Operator IN only is allowed on single-value properties ");
-            } else if (prop == null) {
-                return false;
-            } else {
-                return !literals.contains(prop);
-            }
-        }
-
-        @Override
-        public Boolean walkInAny(Tree opNode, Tree colNode, Tree listNode) {
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            PropertyData<?> lVal = so.getProperties().get(colRef.getPropertyId());
-            List<Object> literals = onLiteralList(listNode);
-            if (pd.getCardinality() != Cardinality.MULTI) {
-                throw new IllegalStateException("Operator ANY...IN only is allowed on multi-value properties ");
-            } else if (lVal == null) {
-                return false;
-            } else {
-                List<?> props = lVal.getValues();
-                for (Object prop : props) {
-                    LOG.debug("comparing with: " + prop);
-                    if (literals.contains(prop)) {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        }
-
-        @Override
-        public Boolean walkNotInAny(Tree opNode, Tree colNode, Tree listNode) {
-            // Note just return !walkNotInAny(node, colNode, listNode) is
-            // wrong, because
-            // then it evaluates to true for null values (not set properties).
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            PropertyData<?> lVal = so.getProperties().get(colRef.getPropertyId());
-            List<Object> literals = onLiteralList(listNode);
-            if (pd.getCardinality() != Cardinality.MULTI) {
-                throw new IllegalStateException("Operator ANY...IN only is allowed on multi-value properties ");
-            } else if (lVal == null) {
-                return false;
-            } else {
-                List<?> props = lVal.getValues();
-                for (Object prop : props) {
-                    LOG.debug("comparing with: " + prop);
-                    if (literals.contains(prop)) {
-                        return false;
-                    }
-                }
-                return true;
-            }
-        }
-
-        @Override
-        public Boolean walkEqAny(Tree opNode, Tree literalNode, Tree colNode) {
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            PropertyData<?> lVal = so.getProperties().get(colRef.getPropertyId());
-            Object literal = walkExpr(literalNode);
-            if (pd.getCardinality() != Cardinality.MULTI) {
-                throw new IllegalStateException("Operator = ANY only is allowed on multi-value properties ");
-            } else if (lVal == null) {
-                return false;
-            } else {
-                List<?> props = lVal.getValues();
-                return props.contains(literal);
-            }
-        }
-
-        @Override
-        public Boolean walkIsNull(Tree opNode, Tree colNode) {
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object propVal = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-            return propVal == null;
-        }
-
-        @Override
-        public Boolean walkIsNotNull(Tree opNode, Tree colNode) {
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object propVal = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-            return propVal != null;
-        }
-
-        @Override
-        public Boolean walkLike(Tree opNode, Tree colNode, Tree stringNode) {
-            Object rVal = walkExpr(stringNode);
-            if (!(rVal instanceof String)) {
-                throw new IllegalStateException("LIKE operator requires String literal on right hand side.");
-            }
-
-            ColumnReference colRef = getColumnReference(colNode);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            PropertyType propType = pd.getPropertyType();
-            if (propType != PropertyType.STRING && propType != PropertyType.HTML && propType != PropertyType.ID
-                    && propType != PropertyType.URI) {
-                throw new IllegalStateException("Property type " + propType.value() + " is not allowed FOR LIKE");
-            }
-            if (pd.getCardinality() != Cardinality.SINGLE) {
-                throw new IllegalStateException("LIKE is not allowed for multi-value properties ");
-            }
-
-            String propVal = (String) PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-
-            if (null == propVal) {
-                return false;
-            } else {
-                String pattern = translatePattern((String) rVal); // SQL to Java
-                // regex
-                // syntax
-                Pattern p = Pattern.compile(pattern);
-                return p.matcher(propVal).matches();
-            }
-        }
-
-        @Override
-        public Boolean walkNotLike(Tree opNode, Tree colNode, Tree stringNode) {
-            return !walkLike(opNode, colNode, stringNode);
-        }
-
-        @Override
-        public Boolean walkInFolder(Tree opNode, Tree qualNode, Tree paramNode) {
-            if (null != qualNode) {
-                getTableReference(qualNode);
-                // just for error checking we do not evaluate this, there is
-                // only one from without join support
-            }
-            Object lit = walkExpr(paramNode);
-            if (!(lit instanceof String)) {
-                throw new IllegalStateException("Folder id in IN_FOLDER must be of type String");
-            }
-            String folderId = (String) lit;
-
-            // check if object is in folder
-            if (so instanceof Filing) {
-                return hasParent(so, folderId, user);
-            } else {
-                return false;
-            }
-        }
-
-        @Override
-        public Boolean walkInTree(Tree opNode, Tree qualNode, Tree paramNode) {
-            if (null != qualNode) {
-                getTableReference(qualNode);
-                // just for error checking we do not evaluate this, there is
-                // only one from without join support
-            }
-            Object lit = walkExpr(paramNode);
-            if (!(lit instanceof String)) {
-                throw new IllegalStateException("Folder id in IN_FOLDER must be of type String");
-            }
-            String folderId = (String) lit;
-
-            // check if object is in folder
-            if (so instanceof Filing) {
-                return hasAncestor(so, folderId, user);
-            } else {
-                return false;
-            }
-        }
-
-        protected Integer compareTo(Tree leftChild, Tree rightChild) {
-            Object rVal = walkExpr(rightChild);
-
-            ColumnReference colRef = getColumnReference(leftChild);
-            PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object val = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
-            if (val == null) {
-                return null;
-            } else if (val instanceof List<?>) {
-                throw new IllegalStateException(
-                        "You can't query operators <, <=, ==, !=, >=, > on multi-value properties ");
-            } else {
-                return InMemoryQueryProcessor.this.compareTo(pd, val, rVal);
-            }
-        }
-
-        @SuppressWarnings("unchecked")
-        public List<Object> onLiteralList(Tree node) {
-            return (List<Object>) walkExpr(node);
-        }
-
-        @Override
-        protected Boolean walkTextAnd(Tree node) {
-            List<Tree> terms = getChildrenAsList(node);
-            for (Tree term : terms) {
-                Boolean foundOnce = walkSearchExpr(term);
-                if (foundOnce == null || !foundOnce) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        @Override
-        protected Boolean walkTextOr(Tree node) {
-            List<Tree> terms = getChildrenAsList(node);
-            for (Tree term : terms) {
-                Boolean foundOnce = walkSearchExpr(term);
-                if (foundOnce != null && foundOnce) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        protected Boolean walkTextMinus(Tree node) {
-            return !findText(node.getChild(0).getText());
-        }
-
-        @Override
-        protected Boolean walkTextWord(Tree node) {
-            return findText(node.getText());
-        }
-
-        @Override
-        protected Boolean walkTextPhrase(Tree node) {
-            String phrase = node.getText();
-            return findText(phrase.substring(1, phrase.length() - 1));
-        }
-
-        private List<Tree> getChildrenAsList(Tree node) {
-            List<Tree> res = new ArrayList<Tree>(node.getChildCount());
-            for (int i = 0; i < node.getChildCount(); i++) {
-                Tree childNnode = node.getChild(i);
-                res.add(childNnode);
-            }
-            return res;
-        }
-
-        private boolean findText(String nodeText) {
-            Content cont = (Content) so;
-            String pattern = StringUtil.unescape(nodeText, "\\'-");
-            if (null == pattern) {
-                throw new CmisInvalidArgumentException("Illegal Escape sequence in text search expression " + nodeText);
-            }
-
-            if (so instanceof Content && cont.hasContent()) {
-                ContentStreamDataImpl cdi = (ContentStreamDataImpl) cont.getContent();
-                if (cdi.getMimeType().startsWith("text/")) {
-                    byte[] ba = cdi.getBytes();
-                    String text;
-                    try {
-                        text = new String(ba, "UTF-8");
-                    } catch (UnsupportedEncodingException e) {
-                        throw new CmisRuntimeException("Internal error: Unsupported encoding UTF-8", e);
-                    }
-                    int match = text.indexOf(pattern);
-                    return match >= 0;
-                } else {
-                    return false;
-                }
-            }
-            return false;
-        }
-
-    }
-
-    private boolean hasParent(StoredObject objInFolder, String folderId, String user) {
-        List<String> parents = objStore.getParentIds(objInFolder, user);
-
-        for (String parentId : parents) {
-            if (folderId.equals(parentId)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean hasAncestor(StoredObject objInFolder, String folderId, String user) {
-        List<String> parents = objStore.getParentIds(objInFolder, user);
-
-        for (String parentId : parents) {
-            if (folderId.equals(parentId)) {
-                return true;
-            }
-        }
-        for (String parentId : parents) {
-            Folder parentFolder = (Folder) objStore.getObjectById(parentId);
-            if (hasAncestor(parentFolder, folderId, user)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    protected int compareTo(PropertyDefinition<?> td, Object lValue, Object rVal) {
-        switch (td.getPropertyType()) {
-        case BOOLEAN:
-            if (rVal instanceof Boolean) {
-                return ((Boolean) lValue).compareTo((Boolean) rVal);
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        case INTEGER:
-            Long lLongValue = ((BigInteger) lValue).longValue();
-            if (rVal instanceof Long) {
-                return (lLongValue).compareTo((Long) rVal);
-            } else if (rVal instanceof Double) {
-                return Double.valueOf(((Integer) lValue).doubleValue()).compareTo((Double) rVal);
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        case DATETIME:
-            if (rVal instanceof GregorianCalendar) {
-                return ((GregorianCalendar) lValue).compareTo((GregorianCalendar) rVal);
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        case DECIMAL:
-            Double lDoubleValue = ((BigDecimal) lValue).doubleValue();
-            if (rVal instanceof Double) {
-                return lDoubleValue.compareTo((Double) rVal);
-            } else if (rVal instanceof Long) {
-                return lDoubleValue.compareTo(Double.valueOf(((Long) rVal)));
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        case HTML:
-        case URI:
-        case ID:
-            if (rVal instanceof String) {
-                LOG.debug("compare strings: " + lValue + " with " + rVal);
-                return ((String) lValue).compareTo((String) rVal);
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        case STRING:
-            if (rVal instanceof String) {
-            	String unesc = StringUtil.unescape((String) rVal, null);
-                LOG.debug("compare strings: " + lValue + " with " + unesc);
-                return ((String) lValue).compareTo(unesc);
-            } else {
-                throwIncompatibleTypesException(lValue, rVal);
-            }
-            break;
-        }
-        return 0;
-    }
-
-    private ColumnReference getColumnReference(Tree columnNode) {
-        CmisSelector sel = queryObj.getColumnReference(columnNode.getTokenStartIndex());
-        if (null == sel) {
-            throw new IllegalStateException("Unknown property query name " + columnNode.getChild(0));
-        } else if (sel instanceof ColumnReference) {
-            return (ColumnReference) sel;
-        } else {
-            throw new IllegalStateException("Unexpected numerical value function in where clause");
-        }
-    }
-
-    private String getTableReference(Tree tableNode) {
-        String typeQueryName = queryObj.getTypeQueryName(tableNode.getText());
-        if (null == typeQueryName) {
-            throw new IllegalStateException("Inavlid type in IN_FOLDER() or IN_TREE(), must be in FROM list: "
-                    + tableNode.getText());
-        }
-        return typeQueryName;
-    }
-
-    private void doAdditionalChecks(CmisQueryWalker walker) {
-        if (walker.getNumberOfContainsClauses() > 1) {
-            throw new CmisInvalidArgumentException("More than one CONTAINS clause is not allowed");
-        }
-        List<JoinSpec> joins = queryObj.getJoins();
-        if (null == secondaryTypeIds && joins.size() > 0) {
-            throw new CmisInvalidArgumentException(
-                    "JOINs are not supported with the exception of secondary types and a LEFT OUTER JOIN");
-        } else if (null != secondaryTypeIds) {
-            for (JoinSpec join : joins) {
-                if (!join.kind.equals("LEFT")) {
-                    throw new CmisInvalidArgumentException(
-                            "JOINs are not supported with the exception of secondary types and a LEFT OUTER JOIN");
-                }
-            }
-        }
-    }
-
-    /**
-     * Translate SQL wildcards %, _ to Java regex syntax.
-     * 
-     * @param wildcardString
-     *     string to process
-     * @return
-     *      string with replaced characters
-     */
-    public static String translatePattern(String wildcardString) {
-        int index = 0;
-        int start = 0;
-        String wildcard = wildcardString;
-
-        StringBuilder res = new StringBuilder();
-
-        while (index >= 0) {
-            index = wildcard.indexOf('%', start);
-            if (index < 0) {
-                res.append(wildcard.substring(start));
-            } else if (index == 0 || index > 0 && wildcard.charAt(index - 1) != '\\') {
-                res.append(wildcard.substring(start, index));
-                res.append(".*");
-            } else {
-                res.append(wildcard.substring(start, index + 1));
-            }
-            start = index + 1;
-        }
-        wildcard = res.toString();
-
-        index = 0;
-        start = 0;
-        res = new StringBuilder();
-
-        while (index >= 0) {
-            index = wildcard.indexOf('_', start);
-            if (index < 0) {
-                res.append(wildcard.substring(start));
-            } else if (index == 0 || index > 0 && wildcard.charAt(index - 1) != '\\') {
-                res.append(wildcard.substring(start, index));
-                res.append(".");
-            } else {
-                res.append(wildcard.substring(start, index + 1));
-            }
-            start = index + 1;
-        }
-        return res.toString();
-    }
-
-    private static void throwIncompatibleTypesException(Object o1, Object o2) {
-        throw new CmisInvalidArgumentException("Incompatible Types to compare: " + o1 + " and " + o2);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/PropertyQueryUtil.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/PropertyQueryUtil.java
deleted file mode 100644
index b1f594f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/PropertyQueryUtil.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.query;

-

-import org.apache.chemistry.opencmis.commons.PropertyIds;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.data.PropertyData;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;

-import org.apache.chemistry.opencmis.commons.enums.Cardinality;

-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;

-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;

-

-public final class PropertyQueryUtil {

-

-    private PropertyQueryUtil() {

-    }

-

-    public static Object getProperty(StoredObject so, String propertyId, PropertyDefinition<?> pd) {

-        ContentStream content = null;

-        DocumentVersion ver = null;

-        VersionedDocument verDoc = null;

-        Folder folder = null;

-        Document doc = null;

-        Relationship rel = null;

-        Policy pol = null;

-

-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;

-

-        if (so instanceof Content) {

-            content = ((Content) so).getContent();

-        }

-        if (so instanceof DocumentVersion) {

-            ver = (DocumentVersion) so;

-        }

-        if (so instanceof VersionedDocument) {

-            verDoc = (VersionedDocument) so;

-        }

-        if (so instanceof Folder) {

-            folder = (Folder) so;

-        }

-        if (so instanceof Document) {

-            doc = (Document) so;

-        }

-        if (so instanceof Relationship) {

-            rel = (Relationship) so;

-        }

-        if (so instanceof Policy) {

-            pol = (Policy) so;

-        }

-

-        // generic properties:

-        if (propertyId.equals(PropertyIds.NAME)) {

-            return so.getName();

-        }

-        if (propertyId.equals(PropertyIds.OBJECT_ID)) {

-            return so.getId();

-        }

-        if (propertyId.equals(PropertyIds.OBJECT_TYPE_ID)) {

-            return so.getTypeId();

-        }

-        if (propertyId.equals(PropertyIds.BASE_TYPE_ID)) {

-            return null; // base type id not available from so

-        }

-        if (propertyId.equals(PropertyIds.CREATED_BY)) {

-            return so.getCreatedBy();

-        }

-        if (propertyId.equals(PropertyIds.CREATION_DATE)) {

-            return so.getCreatedAt();

-        }

-        if (propertyId.equals(PropertyIds.LAST_MODIFIED_BY)) {

-            return so.getModifiedBy();

-        }

-        if (propertyId.equals(PropertyIds.LAST_MODIFICATION_DATE)) {

-            return so.getModifiedAt();

-        }

-        if (propertyId.equals(PropertyIds.CHANGE_TOKEN)) {

-            return so.getChangeToken();

-        }

-        if (cmis11 && propertyId.equals(PropertyIds.DESCRIPTION)) {

-            return so.getDescription();

-        }

-

-        if (ver != null) {

-            // get version related properties

-            // not support on a version, only on a versioned document:

-            // VERSION_SERIES_ID, IS_VERSION_SERIES_CHECKED_OUT,

-            // VERSION_SERIES_CHECKED_OUT_BY,

-            // VERSION_SERIES_CHECKED_OUT_ID, IS_LATEST_MAJOR_VERSION,

-            // IS_LATEST_VERSION

-            if (propertyId.equals(PropertyIds.IS_MAJOR_VERSION)) {

-                return ver.isMajor();

-            }

-

-            if (propertyId.equals(PropertyIds.CHECKIN_COMMENT)) {

-                return ver.getCheckinComment();

-            }

-            if (propertyId.equals(PropertyIds.VERSION_LABEL)) {

-                return ver.getVersionLabel();

-            }

-            if (propertyId.equals(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID)) {

-                return ver.isPwc() ? ver.getId() : null;

-            }

-        }

-

-        // get versioned document related properties

-        if (verDoc != null) {

-            if (propertyId.equals(PropertyIds.VERSION_SERIES_ID)) {

-                return verDoc.getId();

-            }

-            if (propertyId.equals(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT)) {

-                return verDoc.isCheckedOut();

-            }

-            if (propertyId.equals(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY)) {

-                return verDoc.getCheckedOutBy();

-            }

-        }

-

-        // Set the content related properties

-        if (null != content) {

-            // omit: PropertyIds.CMIS_CONTENT_STREAM_ID

-            if (propertyId.equals(PropertyIds.CONTENT_STREAM_FILE_NAME)) {

-                return content.getFileName();

-            }

-

-            if (propertyId.equals(PropertyIds.CONTENT_STREAM_LENGTH)) {

-                return content.getBigLength();

-            }

-            if (propertyId.equals(PropertyIds.CONTENT_STREAM_MIME_TYPE)) {

-                return content.getMimeType();

-            }

-        }

-

-        if (folder != null && propertyId.equals(PropertyIds.PARENT_ID)) {

-            return folder.getParentId();

-        }

-

-        if (doc != null && propertyId.equals(PropertyIds.IS_IMMUTABLE)) {

-            return false;

-        }

-

-        if (rel != null) {

-            if (propertyId.equals(PropertyIds.SOURCE_ID)) {

-                return rel.getSourceObjectId();

-            }

-            if (propertyId.equals(PropertyIds.TARGET_ID)) {

-                return rel.getTargetObjectId();

-            }

-        }

-

-        if (pol != null && propertyId.equals(PropertyIds.POLICY_TEXT)) {

-            return pol.getPolicyText();

-        }

-

-        // try custom property:

-        PropertyData<?> lVal = so.getProperties().get(propertyId);

-        if (null == lVal) {

-            return null;

-        } else if (pd.getCardinality() == Cardinality.SINGLE) {

-            return lVal.getFirstValue();

-        } else {

-            return lVal.getValues();

-        }

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AbstractServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AbstractServiceImpl.java
deleted file mode 100644
index acc231f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AbstractServiceImpl.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-
-/**
- * Common functionality for all service implementations.
- */
-public class AbstractServiceImpl {
-
-    protected final StoreManager fStoreManager;
-
-    protected AbstractServiceImpl(StoreManager storeManager) {
-        fStoreManager = storeManager;
-    }
-
-    /**
-     * check if repository is known and that object exists. To avoid later calls
-     * to again retrieve the object from the id return the retrieved object for
-     * later use.
-     * 
-     * @param repositoryId
-     *            repository id
-     * @param objectId
-     *            object id
-     * @return object for objectId
-     */
-    protected StoredObject checkStandardParameters(String repositoryId, String objectId) {
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (objStore == null) {
-            throw new CmisObjectNotFoundException("Unknown repository id: " + repositoryId);
-        }
-
-        StoredObject so = objStore.getObjectById(objectId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
-        }
-
-        return so;
-    }
-
-    protected StoredObject checkExistingObjectId(ObjectStore objStore, String objectId) {
-        StoredObject so = objStore.getObjectById(objectId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
-        }
-
-        return so;
-    }
-
-    protected void checkRepositoryId(String repositoryId) {
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (objStore == null) {
-            throw new CmisObjectNotFoundException("Unknown repository id: " + repositoryId);
-        }
-    }
-
-    protected TypeDefinition getTypeDefinition(String repositoryId, Properties properties) {
-        String typeId = (String) properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID).getFirstValue();
-        TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
-        if (typeDefC == null) {
-            throw new CmisInvalidArgumentException("Cannot create object, a type with id " + typeId + " is unknown");
-        }
-
-        return typeDefC.getTypeDefinition();
-    }
-
-    protected TypeDefinition getTypeDefinition(String repositoryId, StoredObject obj) {
-
-        TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, obj.getTypeId());
-        return typeDefC.getTypeDefinition();
-    }
-
-    /**
-     * We allow checkin, cancel, checkout operations on a single version as well
-     * as on a version series This method returns the versioned document
-     * (version series) in each case.
-     * 
-     * @param so
-     *            version or versioned document
-     * @return versioned document
-     */
-    protected VersionedDocument getVersionedDocumentOfObjectId(StoredObject so) {
-        VersionedDocument verDoc;
-        if (so instanceof DocumentVersion) {
-            // get document the version is contained in to c
-            verDoc = ((DocumentVersion) so).getParentDocument();
-        } else {
-            verDoc = (VersionedDocument) so;
-        }
-
-        return verDoc;
-    }
-
-    protected VersionedDocument testIsNotCheckedOutBySomeoneElse(StoredObject so, String user) {
-        checkIsVersionableObject(so);
-        VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-        if (verDoc.isCheckedOut()) {
-            testCheckedOutByCurrentUser(user, verDoc);
-        }
-
-        return verDoc;
-    }
-
-    protected VersionedDocument testHasProperCheckedOutStatus(StoredObject so, String user) {
-        checkIsVersionableObject(so);
-        VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-
-        checkHasUser(user);
-
-        testIsCheckedOut(verDoc);
-        testCheckedOutByCurrentUser(user, verDoc);
-
-        return verDoc;
-    }
-
-    protected void checkIsVersionableObject(StoredObject so) {
-        if (!(so instanceof VersionedDocument || so instanceof DocumentVersion)) {
-            throw new CmisInvalidArgumentException("Object " + so.getId() + " must of a versionable type.");
-        }
-    }
-
-    protected void checkHasUser(String user) {
-        if (null == user || user.length() == 0) {
-            throw new CmisUpdateConflictException("Object can't be checked-in, no user is given.");
-        }
-    }
-
-    protected void testCheckedOutByCurrentUser(String user, VersionedDocument verDoc) {
-        if (!user.equals(verDoc.getCheckedOutBy())) {
-            throw new CmisUpdateConflictException("Object can't be checked-in, user " + verDoc.getCheckedOutBy()
-                    + " has checked out the document.");
-        }
-    }
-
-    protected void testIsCheckedOut(VersionedDocument verDoc) {
-        if (!verDoc.isCheckedOut()) {
-            throw new CmisUpdateConflictException("Canot check-in: Document " + verDoc.getId()
-                    + " is not checked out.");
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
deleted file mode 100644
index 44d3355..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.RenditionInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * For the Atom binding more information might be required than the result of a
- * service call provides (mainly to fill all the links). This class fills the
- * objectInfoHolder that was introduced for this purpose
- * 
- */
-public class AtomLinkInfoProvider {
-
-    private final StoreManager fStoreManager;
-
-    public AtomLinkInfoProvider(StoreManager storeManager) {
-        fStoreManager = storeManager;
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for a single object.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param so
-     *            object to retrieve information for
-     * @param od
-     *            object data
-     * @param objInfo
-     *            Holder to fill with information
-     */
-    public void fillInformationForAtomLinks(String repositoryId, StoredObject so, ObjectData od, 
-            ObjectInfoImpl objInfo) {
-        if (null == objInfo || null == so) {
-            return;
-        }
-        TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        // Fill all setters:
-        objInfo.setId(so.getId());
-        objInfo.setName(so.getName());
-        objInfo.setCreatedBy(so.getCreatedBy()); // !
-        objInfo.setCreationDate(so.getCreatedAt()); // !
-        objInfo.setLastModificationDate(so.getModifiedAt());
-        objInfo.setTypeId(so.getTypeId());
-        objInfo.setBaseType(typeDef.getBaseTypeId());
-        objInfo.setObject(od);
-
-        // versioning information:
-        if (so instanceof DocumentVersion) {
-            DocumentVersion ver = (DocumentVersion) so;
-            DocumentVersion pwc = ver.getParentDocument().getPwc();
-            objInfo.setIsCurrentVersion(ver == ver.getParentDocument().getLatestVersion(false));
-            objInfo.setVersionSeriesId(ver.getParentDocument().getId());
-            objInfo.setWorkingCopyId(pwc == null ? null : pwc.getId());
-            objInfo.setWorkingCopyOriginalId(pwc == ver && ver.getParentDocument().getLatestVersion(false) != null ? ver
-                    .getParentDocument().getLatestVersion(false).getId()
-                    : null);
-        } else if (so instanceof VersionedDocument) {
-            VersionedDocument doc = (VersionedDocument) so;
-            DocumentVersion pwc = doc.getPwc();
-            objInfo.setIsCurrentVersion(false);
-            objInfo.setVersionSeriesId(doc.getId());
-            objInfo.setWorkingCopyId(pwc == null ? null : pwc.getId());
-            objInfo.setWorkingCopyOriginalId(null);
-        } else { // unversioned document
-            objInfo.setIsCurrentVersion(true);
-            objInfo.setVersionSeriesId(null);
-            objInfo.setWorkingCopyId(null);
-            objInfo.setWorkingCopyOriginalId(null);
-        }
-
-        if (so instanceof Content) {
-            ContentStream contentStream = ((Content) so).getContent();
-            objInfo.setHasContent(contentStream != null);
-            objInfo.setContentType(contentStream != null ? contentStream.getMimeType() : null);
-            objInfo.setFileName(contentStream != null ? contentStream.getFileName() : null);
-        } else {
-            objInfo.setHasContent(false);
-            objInfo.setContentType(null);
-            objInfo.setFileName(null);
-        }
-
-        // Filing
-        if (so instanceof Filing) {
-            Filing sop = ((Filing) so);
-            objInfo.setHasParent(sop.hasParent());
-        } else {
-            objInfo.setHasParent(false);
-        }
-
-        List<RenditionData> renditions = objStore.getRenditions(so, "*", 0, 0);
-        if (renditions == null || renditions.size() == 0) {
-            objInfo.setRenditionInfos(null);
-        } else {
-            List<RenditionInfo> infos = new ArrayList<RenditionInfo>();
-            for (RenditionData rendition : renditions) {
-                RenditionInfoImpl info = new RenditionInfoImpl();
-                info.setKind(rendition.getKind());
-                info.setId(rendition.getStreamId());
-                info.setContentType(rendition.getMimeType());
-                info.setLength(rendition.getBigLength());
-                info.setTitle(rendition.getTitle());
-                infos.add(info);
-            }
-            objInfo.setRenditionInfos(infos);
-        }
-
-        // Relationships
-        objInfo.setSupportsRelationships(true);
-        List<StoredObject> rels = objStore.getRelationships(so.getId(), null, RelationshipDirection.SOURCE);
-        List<String> srcIds = new ArrayList<String>(rels.size());
-        for (StoredObject rel : rels) {
-            srcIds.add(rel.getId());
-        }
-
-        rels = objStore.getRelationships(so.getId(), null, RelationshipDirection.TARGET);
-        List<String> targetIds = new ArrayList<String>(rels.size());
-        for (StoredObject rel : rels) {
-            targetIds.add(rel.getId());
-        }
-        objInfo.setRelationshipSourceIds(srcIds);
-        objInfo.setRelationshipTargetIds(targetIds);
-
-        objInfo.setSupportsPolicies(true);
-
-        objInfo.setHasAcl(true);
-
-        objInfo.setSupportsDescendants(true);
-        objInfo.setSupportsFolderTree(true);
-
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for a single object.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param so
-     *            object to retrieve information for
-     * @param objectInfo
-     *            Holder to fill with information
-     */
-    public void fillInformationForAtomLinks(String repositoryId, StoredObject so, ObjectInfoImpl objectInfo) {
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, null, false,
-                IncludeRelationships.NONE, null, false, false, null);
-        fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for a single object.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectId
-     *            object to retrieve information for
-     * @param objectInfo
-     *            Holder to fill with information
-     */
-    public void fillInformationForAtomLinks(String repositoryId, String objectId, ObjectInfoImpl objectInfo) {
-        if (null == objectInfo || null == objectId) {
-            return;
-        }
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject so = objectStore.getObjectById(objectId);
-        fillInformationForAtomLinks(repositoryId, so, objectInfo);
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding after a getChildren() call in navigation service.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectId
-     *            object to retrieve information for
-     * @param objectInfos
-     *            Holder to fill with information
-     * @param objList
-     *            result of getChildren call
-     */
-    public void fillInformationForAtomLinks(String repositoryId, String objectId, ObjectInfoHandler objectInfos,
-            ObjectInFolderList objList) {
-
-        if (null == objectInfos || null == objList || null == objectId) {
-            return;
-        }
-
-        // Fill object information for requested object
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-        fillInformationForAtomLinks(repositoryId, objectId, objectInfo);
-        objectInfos.addObjectInfo(objectInfo);
-
-        // Fill object information for all children in result list
-        for (ObjectInFolderData object : objList.getObjects()) {
-            objectInfo = new ObjectInfoImpl();
-            fillInformationForAtomLinks(repositoryId, object.getObject().getId(), objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for an object list.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectId
-     *            object to retrieve information for
-     * @param objectInfos
-     *            Holder to fill with information
-     * @param objList
-     *            result of getChildren call
-     */
-    public void fillInformationForAtomLinks(String repositoryId, String objectId, ObjectInfoHandler objectInfos,
-            ObjectList objList) {
-
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-        if (null != objectId) {
-            // Fill object information for requested object
-            fillInformationForAtomLinks(repositoryId, objectId, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        if (null != objList && null != objList.getObjects()) {
-            // Fill object information for all children in result list
-            List<ObjectData> listObjects = objList.getObjects();
-            if (null != listObjects) {
-                for (ObjectData object : listObjects) {
-                    objectInfo = new ObjectInfoImpl();
-                    fillInformationForAtomLinks(object, objectInfo);
-                    objectInfos.addObjectInfo(objectInfo);
-                }
-            }
-        }
-
-    }
-
-    private void fillInformationForAtomLinks(ObjectData od, ObjectInfoImpl objectInfo) {
-        objectInfo.setObject(od);
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for an ObjectInFolderContainer.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectInfos
-     *            Holder to fill with information
-     * @param oifc
-     *            result of previous call
-     */
-    private void fillInformationForAtomLinks(String repositoryId, ObjectInfoHandler objectInfos,
-            ObjectInFolderContainer oifc) {
-
-        if (null == objectInfos || null == oifc) {
-            return;
-        }
-
-        // Fill object information for all elements in result list
-        fillInformationForAtomLinks(repositoryId, objectInfos, oifc.getObject());
-
-        if (null != oifc.getChildren()) {
-            for (ObjectInFolderContainer object : oifc.getChildren()) {
-                // call recursively
-                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                fillInformationForAtomLinks(repositoryId, objectInfos, object);
-                objectInfos.addObjectInfo(objectInfo);
-            }
-        }
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for a list with ObjectInFolderContainers.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectId
-     *            object to retrieve information for
-     * @param objectInfos
-     *            Holder to fill with information
-     * @param oifcList
-     *            result of getDescendants call
-     */
-    public void fillInformationForAtomLinks(String repositoryId, String objectId, ObjectInfoHandler objectInfos,
-            List<ObjectInFolderContainer> oifcList) {
-
-        if (null == objectInfos || null == oifcList || null == objectId) {
-            return;
-        }
-
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-        // Fill object information for requested object
-        fillInformationForAtomLinks(repositoryId, objectId, objectInfo);
-        objectInfos.addObjectInfo(objectInfo);
-
-        for (ObjectInFolderContainer object : oifcList) {
-            fillInformationForAtomLinks(repositoryId, objectInfos, object);
-        }
-    }
-
-    private void fillInformationForAtomLinks(String repositoryId, ObjectInfoHandler objectInfos,
-            ObjectInFolderData object) {
-
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-        fillInformationForAtomLinks(repositoryId, object.getObject().getId(), objectInfo);
-        objectInfos.addObjectInfo(objectInfo);
-    }
-
-    /**
-     * FillObjectInfoHolder object with required information needed for Atom
-     * binding for a list with ObjectParentData objects.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param objectId
-     *            object to retrieve information for
-     * @param objectInfos
-     *            Holder to fill with information
-     * @param objParents
-     *            result of getObjectParents call
-     */
-    public void fillInformationForAtomLinksGetParents(String repositoryId, String objectId,
-            ObjectInfoHandler objectInfos, List<ObjectParentData> objParents) {
-
-        if (null == objectInfos || null == objParents || null == objectId) {
-            return;
-        }
-
-        // Fill object information for requested object
-        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-        fillInformationForAtomLinks(repositoryId, objectId, objectInfo);
-
-        for (ObjectParentData object : objParents) {
-            objectInfo = new ObjectInfoImpl();
-            fillInformationForAtomLinks(repositoryId, object.getObject().getId(), objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java
deleted file mode 100644
index c0f6701..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java
+++ /dev/null
@@ -1,880 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.server;

-

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.util.Collection;

-import java.util.List;

-import java.util.ListIterator;

-import java.util.Map;

-import java.util.Set;

-

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.definitions.Choice;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;

-import org.apache.chemistry.opencmis.commons.enums.PropertyType;

-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;

-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

-import org.apache.chemistry.opencmis.commons.server.CallContext;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.CmisServiceValidator;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;

-

-public class BaseServiceValidatorImpl implements CmisServiceValidator {

-

-    protected static final String UNKNOWN_OBJECT_ID = "Unknown object id: ";

-    protected static final String UNKNOWN_REPOSITORY_ID = "Unknown repository id: ";

-    protected static final String OBJECT_ID_CANNOT_BE_NULL = "Object Id cannot be null.";

-    protected static final String REPOSITORY_ID_CANNOT_BE_NULL = "Repository Id cannot be null.";

-    protected static final String UNKNOWN_TYPE_ID = "Unknown type id: ";

-    protected static final String TYPE_ID_CANNOT_BE_NULL = "Type Id cannot be null.";

-    protected final StoreManager fStoreManager;

-

-    public BaseServiceValidatorImpl(StoreManager sm) {

-        fStoreManager = sm;

-    }

-

-    /**

-     * Check if repository is known and that object exists. To avoid later calls

-     * to again retrieve the object from the id return the retrieved object for

-     * later use.

-     * 

-     * @param repositoryId

-     *            repository id

-     * @param objectId

-     *            object id

-     * @return object for objectId

-     */

-    protected StoredObject checkStandardParameters(String repositoryId, String objectId) {

-        if (null == repositoryId) {

-            throw new CmisInvalidArgumentException(REPOSITORY_ID_CANNOT_BE_NULL);

-        }

-

-        if (null == objectId) {

-            throw new CmisInvalidArgumentException(OBJECT_ID_CANNOT_BE_NULL);

-        }

-

-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);

-

-        if (objStore == null) {

-            throw new CmisObjectNotFoundException(UNKNOWN_REPOSITORY_ID + repositoryId);

-        }

-

-        StoredObject so = objStore.getObjectById(objectId);

-

-        if (so == null) {

-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);

-        }

-

-        return so;

-    }

-

-    protected StoredObject checkStandardParametersByPath(String repositoryId, String path, String user) {

-        if (null == repositoryId) {

-            throw new CmisInvalidArgumentException(REPOSITORY_ID_CANNOT_BE_NULL);

-        }

-

-        if (null == path) {

-            throw new CmisInvalidArgumentException("Path parameter cannot be null.");

-        }

-

-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);

-

-        if (objStore == null) {

-            throw new CmisObjectNotFoundException(UNKNOWN_REPOSITORY_ID + repositoryId);

-        }

-

-        StoredObject so = objStore.getObjectByPath(path, user);

-

-        if (so == null) {

-            throw new CmisObjectNotFoundException("Unknown path: " + path);

-        }

-

-        return so;

-    }

-

-    protected StoredObject checkStandardParametersAllowNull(String repositoryId, String objectId) {

-

-        StoredObject so = null;

-

-        if (null == repositoryId) {

-            throw new CmisInvalidArgumentException(REPOSITORY_ID_CANNOT_BE_NULL);

-        }

-

-        if (null != objectId) {

-

-            ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);

-

-            if (objStore == null) {

-                throw new CmisObjectNotFoundException(UNKNOWN_REPOSITORY_ID + repositoryId);

-            }

-

-            so = objStore.getObjectById(objectId);

-

-            if (so == null) {

-                throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);

-            }

-        }

-

-        return so;

-    }

-

-    protected StoredObject checkExistingObjectId(ObjectStore objStore, String objectId) {

-

-        if (null == objectId) {

-            throw new CmisInvalidArgumentException(OBJECT_ID_CANNOT_BE_NULL);

-        }

-

-        StoredObject so = objStore.getObjectById(objectId);

-

-        if (so == null) {

-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);

-        }

-

-        return so;

-    }

-

-    protected void checkRepositoryId(String repositoryId) {

-        if (null == repositoryId) {

-            throw new CmisInvalidArgumentException(REPOSITORY_ID_CANNOT_BE_NULL);

-        }

-

-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);

-

-        if (objStore == null) {

-            throw new CmisInvalidArgumentException(UNKNOWN_REPOSITORY_ID + repositoryId);

-        }

-    }

-

-    protected StoredObject[] checkParams(String repositoryId, String objectId1, String objectId2) {

-        StoredObject[] so = new StoredObject[2];

-        checkRepositoryId(repositoryId);

-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);

-        so[0] = checkExistingObjectId(objectStore, objectId1);

-        so[1] = checkExistingObjectId(objectStore, objectId2);

-        return so;

-    }

-

-    protected void checkPolicies(String repositoryId, List<String> policyIds) {

-        if (policyIds != null && policyIds.size() > 0) {

-            for (String policyId : policyIds) {

-                TypeDefinitionContainer tdc = fStoreManager.getTypeById(repositoryId, policyId);

-                if (tdc == null) {

-                    throw new CmisInvalidArgumentException("Unknown policy type: " + policyId);

-                }

-                if (tdc.getTypeDefinition().getBaseTypeId() != BaseTypeId.CMIS_POLICY) {

-                    throw new CmisInvalidArgumentException(policyId + " is not a policy type");

-                }

-            }

-        }

-    }

-

-    protected void checkCreatablePropertyTypes(String repositoryId,

-            Collection<PropertyDefinition<?>> propertyDefinitions )

-    {

-        RepositoryInfo repositoryInfo = fStoreManager.getRepositoryInfo(repositoryId);

-        RepositoryCapabilities repositoryCapabilities = repositoryInfo.getCapabilities();

-        CreatablePropertyTypes creatablePropertyTypes = repositoryCapabilities.getCreatablePropertyTypes();

-        

-        Set<PropertyType> creatablePropertyTypeSet = creatablePropertyTypes.canCreate();

-        for (PropertyDefinition<?> propertyDefinition : propertyDefinitions)

-        {

-            if (!creatablePropertyTypeSet.contains(propertyDefinition.getPropertyType()))

-                throw new CmisConstraintException("propertyDefinition " + propertyDefinition.getId() +

-                        "is of not creatable type " + propertyDefinition.getPropertyType());

-            

-            // mandatory properties must have a default value

-            if (propertyDefinition.isRequired() && 

-                    (propertyDefinition.getDefaultValue() == null))

-            {

-                throw new CmisConstraintException("property: " + propertyDefinition.getId() + 

-                        "required properties must have a default value");

-            }

-        }

-    }

-    

-    protected void checkSettableAttributes(String repositoryId, TypeDefinition oldTypeDefinition,

-            TypeDefinition newTypeDefinition )

-    {

-        RepositoryInfo repositoryInfo = fStoreManager.getRepositoryInfo(repositoryId);

-        RepositoryCapabilities repositoryCapabilities = repositoryInfo.getCapabilities();

-        NewTypeSettableAttributes newTypeSettableAttributes = repositoryCapabilities.getNewTypeSettableAttributes();

-        

-        if (null == newTypeSettableAttributes)

-            return; // no restrictions defined

-        if (newTypeSettableAttributes.canSetControllableAcl() &&

-                newTypeSettableAttributes.canSetControllablePolicy() &&

-                newTypeSettableAttributes.canSetCreatable() &&

-                newTypeSettableAttributes.canSetDescription() &&

-                newTypeSettableAttributes.canSetDisplayName() &&

-                newTypeSettableAttributes.canSetFileable() &&

-                newTypeSettableAttributes.canSetFulltextIndexed() &&

-                newTypeSettableAttributes.canSetId() &&

-                newTypeSettableAttributes.canSetIncludedInSupertypeQuery() &&

-                newTypeSettableAttributes.canSetLocalName() &&

-                newTypeSettableAttributes.canSetLocalNamespace() &&

-                newTypeSettableAttributes.canSetQueryable() &&

-                newTypeSettableAttributes.canSetQueryName())

-            return;  // all is allowed

-        if (!newTypeSettableAttributes.canSetControllableAcl() && 

-                oldTypeDefinition.isControllableAcl() != newTypeDefinition.isControllableAcl())

-            throw new CmisConstraintException("controllableAcl is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in controllableAcl");

-        if (!newTypeSettableAttributes.canSetControllablePolicy() && 

-                oldTypeDefinition.isControllablePolicy() != newTypeDefinition.isControllablePolicy())

-            throw new CmisConstraintException("controllablePolicy is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in controllablePolicy");

-        if (!newTypeSettableAttributes.canSetCreatable() && 

-                oldTypeDefinition.isCreatable() != newTypeDefinition.isCreatable())

-            throw new CmisConstraintException("isCreatable is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in isCreatable");

-        if (!newTypeSettableAttributes.canSetDescription() && 

-                oldTypeDefinition.getDescription() != newTypeDefinition.getDescription())

-            throw new CmisConstraintException("description is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their description");

-        if (!newTypeSettableAttributes.canSetDisplayName() && 

-                oldTypeDefinition.getDisplayName() != newTypeDefinition.getDisplayName())

-            throw new CmisConstraintException("displayName is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their displayName");

-        if (!newTypeSettableAttributes.canSetFileable() && 

-                oldTypeDefinition.isFileable() != newTypeDefinition.isFileable())

-            throw new CmisConstraintException("fileable is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in isFileable");

-        if (!newTypeSettableAttributes.canSetFulltextIndexed() && 

-                oldTypeDefinition.isFulltextIndexed() != newTypeDefinition.isFulltextIndexed())

-            throw new CmisConstraintException("fulltextIndexed is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in isFulltextIndexed");

-        // TODO  how can the ids differ?

-        if (!newTypeSettableAttributes.canSetId() && 

-                oldTypeDefinition.getId() != newTypeDefinition.getId())

-            throw new CmisConstraintException("id is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their id");

-        if (!newTypeSettableAttributes.canSetIncludedInSupertypeQuery() && 

-                oldTypeDefinition.isIncludedInSupertypeQuery() != newTypeDefinition.isIncludedInSupertypeQuery())

-            throw new CmisConstraintException("includedInSupertypeQuery is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their isIncludedInSupertypeQuery");

-        if (!newTypeSettableAttributes.canSetLocalName() && 

-                oldTypeDefinition.getLocalName() != newTypeDefinition.getLocalName())

-            throw new CmisConstraintException("localName is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their localName");

-        if (!newTypeSettableAttributes.canSetLocalNamespace() && 

-                oldTypeDefinition.getLocalNamespace() != newTypeDefinition.getLocalNamespace())

-            throw new CmisConstraintException("localNamespace is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their localNamespace");

-        if (!newTypeSettableAttributes.canSetQueryable() && 

-                oldTypeDefinition.isQueryable() != newTypeDefinition.isQueryable())

-            throw new CmisConstraintException("queryable is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their isQueryable");

-        if (!newTypeSettableAttributes.canSetQueryName() && 

-                oldTypeDefinition.getQueryName() != newTypeDefinition.getQueryName())

-            throw new CmisConstraintException("queryName is not settable in repository " + repositoryId + ", but " +

-                     oldTypeDefinition.getId() + " and " + newTypeDefinition.getId() + " differ in their queryName");

-    }

-

-    protected void checkUpdatePropertyDefinitions(Map<String,PropertyDefinition<?>> oldPropertyDefinitions,

-            Map<String,PropertyDefinition<?>> newPropertyDefinitions)

-    {

-        for(PropertyDefinition<?> newPropertyDefinition : newPropertyDefinitions.values())

-        {                   

-            PropertyDefinition<?> oldPropertyDefinition = oldPropertyDefinitions.get(newPropertyDefinition.getId());

-        

-            if (oldPropertyDefinition.isInherited())

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " update of inherited properties is not allowed");

-            if (!(oldPropertyDefinition.isRequired()) && newPropertyDefinition.isRequired())

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " optional properties must not be changed to required");    

-            if (oldPropertyDefinition.getPropertyType() != newPropertyDefinition.getPropertyType())

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " cannot update the propertyType (" + oldPropertyDefinition.getPropertyType() + ")");   

-            if (oldPropertyDefinition.getCardinality() != newPropertyDefinition.getCardinality())

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " cannot update the cardinality (" + oldPropertyDefinition.getCardinality() + ")"); 

-            

-            if (oldPropertyDefinition.isOpenChoice() && !newPropertyDefinition.isOpenChoice() )

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " open choice cannot change from true to false");

-            

-            // check choices

-            if (!oldPropertyDefinition.isOpenChoice())

-            {

-                List<?> oldChoices = oldPropertyDefinition.getChoices();

-                if (null == oldChoices)

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " there should be any choices when it's no open choice");

-                List<?> newChoices = newPropertyDefinition.getChoices();

-                if (null == newChoices)

-                throw new CmisConstraintException("property: " + newPropertyDefinition.getId() + 

-                        " there should be any choices when it's no open choice");

-                ListIterator<?> newChoicesIterator = newChoices.listIterator();

-                for (Object oldChoiceObject : oldChoices)

-                {

-                    Object newChoiceObject = newChoicesIterator.next();

-                    if (!(oldChoiceObject instanceof Choice))

-                        throw new CmisConstraintException("property: " + newPropertyDefinition.getId() + 

-                                " old choice object is not of class Choice: " + oldChoiceObject.toString());

-                    if (!(newChoiceObject instanceof Choice))

-                        throw new CmisConstraintException("property: " + newPropertyDefinition.getId() + 

-                                " new choice object is not of class Choice: " + newChoiceObject.toString());

-                    Choice<?> oldChoice = (Choice<?>) oldChoiceObject;

-                    Choice<?> newChoice = (Choice<?>) newChoiceObject;

-                    List<?> oldValues = oldChoice.getValue();

-                    List<?> newValues = newChoice.getValue();

-                    for (Object oldValue : oldValues)

-                    {                       

-                        if (! newValues.contains(oldValue))

-                            throw new CmisConstraintException("property: " + newPropertyDefinition.getId() + 

-                                    " value: " + oldValue.toString() + " is not in new values of the new choice");

-                    }       

-                }   

-            }

-        

-            // check restrictions

-            if (oldPropertyDefinition instanceof PropertyDecimalDefinition)

-            {

-                PropertyDecimalDefinition oldPropertyDecimalDefinition = (PropertyDecimalDefinition) oldPropertyDefinition;

-                PropertyDecimalDefinition newPropertyDecimalDefinition = (PropertyDecimalDefinition) newPropertyDefinition;

-                

-                BigDecimal oldMinValue = oldPropertyDecimalDefinition.getMinValue();

-                BigDecimal newMinValue = newPropertyDecimalDefinition.getMinValue();

-                if (null != newMinValue &&

-                        (oldMinValue == null || (newMinValue.compareTo( oldMinValue) > 0)))

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " minValue " + oldMinValue + " cannot be further restricted to " + newMinValue);

-                

-                BigDecimal oldMaxValue = oldPropertyDecimalDefinition.getMaxValue();

-                BigDecimal newMaxValue = newPropertyDecimalDefinition.getMaxValue();

-                if (null != newMaxValue &&

-                        (oldMaxValue == null || (newMaxValue.compareTo( oldMaxValue) < 0)))

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " maxValue " + oldMaxValue + " cannot be further restricted to " + newMaxValue);

-            }

-            if (oldPropertyDefinition instanceof PropertyIntegerDefinition)

-            {

-                PropertyIntegerDefinition oldPropertyIntegerDefinition = (PropertyIntegerDefinition) oldPropertyDefinition;

-                PropertyIntegerDefinition newPropertyIntegerDefinition = (PropertyIntegerDefinition) newPropertyDefinition;

-                

-                BigInteger oldMinValue = oldPropertyIntegerDefinition.getMinValue();

-                BigInteger newMinValue = newPropertyIntegerDefinition.getMinValue();

-                if (null != newMinValue &&

-                        (oldMinValue == null || (newMinValue.compareTo( oldMinValue) > 0)))

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " minValue " + oldMinValue + " cannot be further restricted to " + newMinValue);

-                

-                BigInteger oldMaxValue = oldPropertyIntegerDefinition.getMaxValue();

-                BigInteger newMaxValue = newPropertyIntegerDefinition.getMaxValue();

-                if (null != newMaxValue &&

-                        (oldMaxValue == null || (newMaxValue.compareTo( oldMaxValue) < 0)))

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " maxValue " + oldMaxValue + " cannot be further restricted to " + newMaxValue);

-            }

-            if (oldPropertyDefinition instanceof PropertyStringDefinition)

-            {

-                PropertyStringDefinition oldPropertyStringDefinition = (PropertyStringDefinition) oldPropertyDefinition;

-                PropertyStringDefinition newPropertyStringDefinition = (PropertyStringDefinition) newPropertyDefinition;

-                

-                BigInteger oldMaxValue = oldPropertyStringDefinition.getMaxLength();

-                BigInteger newMaxValue = newPropertyStringDefinition.getMaxLength();

-                if (null != newMaxValue &&

-                        (oldMaxValue == null || (newMaxValue.compareTo( oldMaxValue) < 0)))

-                    throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                            " maxValue " + oldMaxValue + " cannot be further restricted to " + newMaxValue);

-            }

-        }

-        

-        // check for removed properties

-        for(PropertyDefinition<?> oldPropertyDefinition : oldPropertyDefinitions.values())

-        {

-            PropertyDefinition<?> newPropertyDefinition = newPropertyDefinitions.get(oldPropertyDefinition.getId());

-            if (null == newPropertyDefinition)

-            {

-                throw new CmisConstraintException("property: " + oldPropertyDefinition.getId() + 

-                        " cannot remove that property");    

-            }

-        }

-    }

-    

-    protected void checkUpdateType (TypeDefinition updateType, TypeDefinition type)

-    {

-        if (updateType.getId() != type.getId())

-            throw new CmisConstraintException("type to update must be of the same id: " + updateType.getId() + ", " + type.getId());

-        if (updateType.getBaseTypeId() != type.getBaseTypeId())

-            throw new CmisConstraintException("base type to update must be the same: " + updateType.getBaseTypeId() + ", " + type.getBaseTypeId());

-        // anything else should be ignored          

-    }

-    

-    protected TypeDefinition checkExistingTypeId(String repositoryId, String typeId) {

-

-        if (null == typeId) {

-            throw new CmisInvalidArgumentException(TYPE_ID_CANNOT_BE_NULL);

-        }

-

-        TypeDefinitionContainer tdc = fStoreManager.getTypeById(repositoryId, typeId);

-        if (tdc == null) {

-            throw new CmisObjectNotFoundException(UNKNOWN_TYPE_ID + typeId);

-        }

-

-        return tdc.getTypeDefinition();

-    }

-

-

-    protected void checkBasicType(TypeDefinition type)

-    {

-        if (type.getId() == type.getBaseTypeId().value())       

-            throw new CmisInvalidArgumentException("type " + type.getId() + " is a basic type, basic types are read-only");  

-    }

-    

-    @Override

-    public void getRepositoryInfos(CallContext context, ExtensionsData extension) {

-    }

-

-    @Override

-    public void getRepositoryInfo(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public void getTypeChildren(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public void getTypeDescendants(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public void getTypeDefinition(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public StoredObject getChildren(CallContext context, String repositoryId, String folderId, 

-                ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject getDescendants(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject getFolderTree(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject getObjectParents(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject getFolderParent(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject getCheckedOutDocs(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        if (null != folderId) {

-            return checkStandardParameters(repositoryId, folderId);

-        } else {

-            checkRepositoryId(repositoryId);

-            return null;

-        }

-

-    }

-

-    @Override

-    public StoredObject createDocument(CallContext context, String repositoryId, String folderId,

-            List<String> policyIds, ExtensionsData extension) {

-        return checkStandardParametersAllowNull(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject createDocumentFromSource(CallContext context, String repositoryId, String sourceId,

-            String folderId, List<String> policyIds, ExtensionsData extension) {

-

-        return checkStandardParametersAllowNull(repositoryId, sourceId);

-    }

-

-    @Override

-    public StoredObject createFolder(CallContext context, String repositoryId, String folderId, List<String> policyIds,

-            ExtensionsData extension) {

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject[] createRelationship(CallContext context, String repositoryId, String sourceId,

-            String targetId, List<String> policyIds, ExtensionsData extension) {

-        checkRepositoryId(repositoryId);

-        checkStandardParametersAllowNull(repositoryId, null);

-        return checkParams(repositoryId, sourceId, targetId);

-    }

-

-    @Override

-    public StoredObject createPolicy(CallContext context, String repositoryId, String folderId, Acl addAces,

-            Acl removeAces, List<String> policyIds, ExtensionsData extension) {

-

-        return checkStandardParametersAllowNull(repositoryId, folderId);

-    }

-

-    // CMIS 1.1

-    @Override

-    public StoredObject createItem(CallContext context, String repositoryId, Properties properties, String folderId,

-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {

-        return checkStandardParametersAllowNull(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject getAllowableActions(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-        //

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject getObject(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {

-

-        StoredObject so = checkStandardParameters(repositoryId, objectId);

-        return so;

-    }

-

-    @Override

-    public StoredObject getProperties(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject getRenditions(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject getObjectByPath(CallContext context, String repositoryId, String path, 

-            ExtensionsData extension) {

-

-        return checkStandardParametersByPath(repositoryId, path, context.getUsername());

-    }

-

-    @Override

-    public StoredObject getContentStream(CallContext context, String repositoryId, String objectId, String streamId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject updateProperties(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject[] moveObject(CallContext context, String repositoryId, Holder<String> objectId,

-            String targetFolderId, String sourceFolderId, ExtensionsData extension) {

-

-        StoredObject[] res = new StoredObject[3];

-        res[0] = checkStandardParameters(repositoryId, objectId.getValue());

-        res[1] = checkExistingObjectId(fStoreManager.getObjectStore(repositoryId), sourceFolderId);

-        res[2] = checkExistingObjectId(fStoreManager.getObjectStore(repositoryId), targetFolderId);

-        return res;

-    }

-

-    @Override

-    public StoredObject deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject deleteTree(CallContext context, String repositoryId, String folderId, Boolean allVersions,

-            UnfileObject unfileObjects, ExtensionsData extension) {

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    @Override

-    public StoredObject setContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            Boolean overwriteFlag, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject appendContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension) {

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject deleteContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension) {

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject checkOut(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension, Holder<Boolean> contentCopied) {

-

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject cancelCheckOut(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId, Acl addAces,

-            Acl removeAces, List<String> policyIds, ExtensionsData extension) {

-        return checkStandardParameters(repositoryId, objectId.getValue());

-    }

-

-    @Override

-    public StoredObject getObjectOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, versionSeriesId == null ? objectId : versionSeriesId);

-    }

-

-    @Override

-    public StoredObject getPropertiesOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, versionSeriesId == null ? objectId : versionSeriesId);

-    }

-

-    @Override

-    public StoredObject getAllVersions(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, versionSeriesId == null ? objectId : versionSeriesId);

-    }

-

-    @Override

-    public void query(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public void getContentChanges(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        checkRepositoryId(repositoryId);

-    }

-

-    @Override

-    public StoredObject[] addObjectToFolder(CallContext context, String repositoryId, String objectId, String folderId,

-            Boolean allVersions, ExtensionsData extension) {

-

-        return checkParams(repositoryId, objectId, folderId);

-    }

-

-    @Override

-    public StoredObject[] removeObjectFromFolder(CallContext context, String repositoryId, String objectId,

-            String folderId, ExtensionsData extension) {

-

-        if (folderId != null) {

-            return checkParams(repositoryId, objectId, folderId);

-        } else {

-            StoredObject[] so = new StoredObject[1];

-            checkRepositoryId(repositoryId);

-            ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);

-            so[0] = checkExistingObjectId(objectStore, objectId);

-            return so;

-        }

-    }

-

-    @Override

-    public StoredObject getObjectRelationships(CallContext context, String repositoryId, String objectId,

-            RelationshipDirection relationshipDirection, String typeId, ExtensionsData extension) {

-

-        StoredObject so = checkStandardParameters(repositoryId, objectId);

-

-        if (relationshipDirection == null) {

-            throw new CmisInvalidArgumentException("Relationship direction cannot be null.");

-        }

-

-        if (typeId != null) {

-            TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, typeId).getTypeDefinition();

-            if (typeDef == null) {

-                throw new CmisInvalidArgumentException("Type Id " + typeId + " is not known in repository "

-                        + repositoryId);

-            }

-

-            if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_RELATIONSHIP)) {

-                throw new CmisInvalidArgumentException("Type Id " + typeId + " is not a relationship type.");

-            }

-        }

-        return so;

-    }

-

-    @Override

-    public StoredObject getAcl(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject applyAcl(CallContext context, String repositoryId, String objectId,

-            AclPropagation aclPropagation, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject[] applyPolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension) {

-

-        return checkParams(repositoryId, policyId, objectId);

-    }

-

-    @Override

-    public StoredObject[] removePolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject[] sos = checkParams(repositoryId, policyId, objectId);

-        StoredObject pol = sos[0];

-        if (!(pol instanceof Policy)) {

-            throw new CmisInvalidArgumentException("Id " + policyId + " is not a policy object.");

-        }

-        return sos;

-    }

-

-    @Override

-    public StoredObject getAppliedPolicies(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject create(CallContext context, String repositoryId, String folderId, ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, folderId);

-    }

-

-    public StoredObject deleteObjectOrCancelCheckOut(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-

-    @Override

-    public StoredObject applyAcl(CallContext context, String repositoryId, String objectId) {

-

-        return checkStandardParameters(repositoryId, objectId);

-    }

-    

-    @Override

-    public void createType(CallContext callContext, String repositoryId, TypeDefinition type, ExtensionsData extension) {

-        checkRepositoryId(repositoryId);

-

-        if (null == type) {

-            throw new CmisInvalidArgumentException("Type cannot be null.");

-        }

-        String parentTypeId = type.getParentTypeId();

-        TypeDefinitionContainer parentTypeContainer = fStoreManager.getTypeById(repositoryId, parentTypeId);

-        if (null == parentTypeContainer) {

-            throw new CmisInvalidArgumentException(UNKNOWN_TYPE_ID + parentTypeId);

-        }

-        TypeDefinition parentType = parentTypeContainer.getTypeDefinition();

-        // check if type can be created

-        if (!(parentType.getTypeMutability().canCreate())) {

-            throw new CmisConstraintException("parent type: " + parentTypeId + " does not allow mutability create");

-        }

-        checkCreatablePropertyTypes(repositoryId, type.getPropertyDefinitions().values());

-    }

-

-    @Override

-    public TypeDefinition updateType(CallContext callContext,

-            String repositoryId, TypeDefinition type, ExtensionsData extension) {

-        checkRepositoryId(repositoryId);

-        

-        TypeDefinition updateType = checkExistingTypeId(repositoryId, type.getId());

-        checkUpdateType(updateType, type);

-        checkBasicType(type);

-        // check if type can be updated

-        if (!(updateType.getTypeMutability().canUpdate())) {

-            throw new CmisConstraintException("type: " + type.getId() + " does not allow mutability update");

-        }

-        checkCreatablePropertyTypes(repositoryId, type.getPropertyDefinitions().values());

-        checkSettableAttributes(repositoryId, updateType, type );

-        checkUpdatePropertyDefinitions(updateType.getPropertyDefinitions(), type.getPropertyDefinitions());

-        return updateType;

-    }

-

-    @Override

-    public TypeDefinition deleteType(CallContext callContext, String repositoryId,

-            String typeId, ExtensionsData extension) {

-        checkRepositoryId(repositoryId);

-        

-        TypeDefinition deleteType =  checkExistingTypeId(repositoryId, typeId);

-        checkBasicType(deleteType);

-        // check if type can be deleted

-        if (!(deleteType.getTypeMutability().canDelete())) {

-            throw new CmisConstraintException("type: " + typeId + " does not allow mutability delete");

-        }

-        return deleteType;

-    }

-    

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ExtensionSample.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ExtensionSample.java
deleted file mode 100644
index 9a931e0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ExtensionSample.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import javax.xml.bind.annotation.XmlType;
-
-@XmlType(name = "cmisExtensionType", propOrder = { "s", "i", "f" })
-public class ExtensionSample {
-    private static final int MAGIC_NUMBER = 42;
-    private final String s;
-    private final int i;
-    private final double f;
-
-    public ExtensionSample() {
-        s = "This is an example for a CMIS extension.";
-        i = MAGIC_NUMBER;
-        f = Math.PI;
-    }
-
-    public String getString() {
-        return s;
-    }
-
-    public int getInt() {
-        return i;
-    }
-
-    public double getDouble() {
-        return f;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAbstractServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAbstractServiceImpl.java
deleted file mode 100644
index 112f82c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAbstractServiceImpl.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.CmisServiceValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-
-/**
- * Common functionality for all service implementations
- * 
- */
-public class InMemoryAbstractServiceImpl {
-
-    protected final StoreManager fStoreManager;
-    protected final CmisServiceValidator validator;
-    protected final AtomLinkInfoProvider fAtomLinkProvider;
-
-    protected InMemoryAbstractServiceImpl(StoreManager storeManager, CmisServiceValidator validator) {
-        this.fStoreManager = storeManager;
-        this.validator = validator;
-        this.fAtomLinkProvider = new AtomLinkInfoProvider(fStoreManager);
-    }
-
-    protected InMemoryAbstractServiceImpl(StoreManager storeManager) {
-        this.fStoreManager = storeManager;
-        this.validator = storeManager.getServiceValidator();
-        this.fAtomLinkProvider = new AtomLinkInfoProvider(fStoreManager);
-    }
-
-    protected TypeDefinition getTypeDefinition(String repositoryId, Properties properties) {
-        if (null == properties) {
-            return null;
-        }
-
-        String typeId = (String) properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID).getFirstValue();
-        TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
-        if (typeDefC == null) {
-            throw new CmisInvalidArgumentException("Cannot create object, a type with id " + typeId + " is unknown");
-        }
-
-        return typeDefC.getTypeDefinition();
-    }
-
-    protected List<TypeDefinition> getTypeDefinition(String repositoryId, List<String> typeIds) {
-        if (null == typeIds || typeIds.isEmpty()) {
-            return null;
-        }
-
-        List<TypeDefinition> result = new ArrayList<TypeDefinition>(typeIds.size());
-        for (String typeId : typeIds) {
-            TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
-            if (typeDefC == null) {
-                throw new CmisInvalidArgumentException("Cannot create object, a type with id " + typeId
-                        + " is unknown");
-            }
-            result.add(typeDefC.getTypeDefinition());
-        }
-
-        return result;
-    }
-
-    protected TypeDefinition getTypeDefinition(String repositoryId, StoredObject obj) {
-
-        TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, obj.getTypeId());
-        return typeDefC == null ? null : typeDefC.getTypeDefinition();
-    }
-
-    /**
-     * We allow checkin, cancel, checkout operations on a single version as well
-     * as on a version series This method returns the versioned document
-     * (version series) in each case.
-     * 
-     * @param so
-     *            version or versioned document
-     * @return versioned document
-     */
-    protected VersionedDocument getVersionedDocumentOfObjectId(StoredObject so) {
-
-        VersionedDocument verDoc;
-        if (so instanceof DocumentVersion) {
-            // get document the version is contained in to c
-            verDoc = ((DocumentVersion) so).getParentDocument();
-        } else {
-            verDoc = (VersionedDocument) so;
-        }
-
-        return verDoc;
-    }
-
-    protected VersionedDocument testIsNotCheckedOutBySomeoneElse(StoredObject so, String user) {
-        checkIsVersionableObject(so);
-        VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-        if (verDoc.isCheckedOut()) {
-            testCheckedOutByCurrentUser(user, verDoc);
-        }
-
-        return verDoc;
-    }
-
-    protected VersionedDocument testHasProperCheckedOutStatus(StoredObject so, String user) {
-
-        checkIsVersionableObject(so);
-        VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-
-        checkHasUser(user);
-
-        testIsCheckedOut(verDoc);
-        testCheckedOutByCurrentUser(user, verDoc);
-
-        return verDoc;
-    }
-
-    protected void checkIsVersionableObject(StoredObject so) {
-        if (!(so instanceof VersionedDocument || so instanceof DocumentVersion)) {
-            throw new CmisInvalidArgumentException(
-                    "Object is of a versionable type but not instance of VersionedDocument or DocumentVersion.");
-        }
-    }
-
-    protected void checkHasUser(String user) {
-        if (null == user || user.length() == 0) {
-            throw new CmisPermissionDeniedException("Object can't be checked-in, no user is given.");
-        }
-    }
-
-    protected void testCheckedOutByCurrentUser(String user, VersionedDocument verDoc) {
-        if (!user.equals(verDoc.getCheckedOutBy())) {
-            throw new CmisUpdateConflictException("User " + verDoc.getCheckedOutBy()
-                    + " has checked out the document.");
-        }
-    }
-
-    protected void testIsCheckedOut(VersionedDocument verDoc) {
-        if (!verDoc.isCheckedOut()) {
-            throw new CmisUpdateConflictException("Document " + verDoc.getId() + " is not checked out.");
-        }
-    }
-
-    protected boolean isCheckedOut(StoredObject so, String user) {
-        if (so instanceof VersionedDocument || so instanceof DocumentVersion) {
-            VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-            return verDoc.isCheckedOut() && user.equals(verDoc.getCheckedOutBy());
-        } else {
-            return false;
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java
deleted file mode 100644
index 83f1c9a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.inmemory.TypeValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryAclService extends InMemoryAbstractServiceImpl {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryAclService.class.getName());
-
-    public InMemoryAclService(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public Acl getAcl(CallContext context, String repositoryId, String objectId, Boolean onlyBasicPermissions,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-        LOG.debug("start getAcl()");
-        int aclId;
-        StoredObject so = validator.getAcl(context, repositoryId, objectId, extension);
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        if (so instanceof DocumentVersion) {
-            aclId = ((DocumentVersion) so).getParentDocument().getAclId();
-        } else {
-            aclId = so.getAclId();
-        }
-
-        Acl acl = objectStore.getAcl(aclId);
-
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return acl;
-    }
-
-    public Acl applyAcl(CallContext context, String repositoryId, String objectId, Acl aclAdd, Acl aclRemove,
-            AclPropagation aclPropagation, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        Acl addAces = TypeValidator.expandAclMakros(context.getUsername(), aclAdd);
-        Acl removeAces = TypeValidator.expandAclMakros(context.getUsername(), aclRemove);
-
-        StoredObject so = validator.applyAcl(context, repositoryId, objectId, aclPropagation, extension);
-        Acl acl = fStoreManager.getObjectStore(repositoryId).applyAcl(so, addAces, removeAces, aclPropagation,
-                context.getUsername());
-
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-        return acl;
-    }
-
-    public Acl applyAcl(CallContext context, String repositoryId, String objectId, Acl acesParam,
-            AclPropagation aclPropagation) {
-
-        Acl aces = TypeValidator.expandAclMakros(context.getUsername(), acesParam);
-
-        StoredObject so = validator.applyAcl(context, repositoryId, objectId);
-        return fStoreManager.getObjectStore(repositoryId).applyAcl(so, aces, aclPropagation, context.getUsername());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java
deleted file mode 100644
index 8289ab2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChangeEventInfoDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryDiscoveryServiceImpl extends InMemoryAbstractServiceImpl {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryDiscoveryServiceImpl.class);
-
-    public InMemoryDiscoveryServiceImpl(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public ObjectList getContentChanges(CallContext context, String repositoryId, Holder<String> changeLogToken,
-            Boolean includeProperties, String filter, Boolean includePolicyIds, Boolean includeAcl,
-            BigInteger maxItems, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-        // dummy implementation using hard coded values
-        final int ITEMS_AVAILABLE = 25;
-
-        int token = 0;
-        if (changeLogToken != null && changeLogToken.getValue() != null) {
-            if (!changeLogToken.getValue().startsWith("token-")) {
-                throw new CmisInvalidArgumentException("Unknown change log token!");
-            }
-
-            try {
-                token = Integer.parseInt(changeLogToken.getValue().substring(6));
-            } catch (NumberFormatException nfe) {
-                throw new CmisInvalidArgumentException("Unknown change log token!", nfe);
-            }
-
-            if (token < 0 || token > ITEMS_AVAILABLE) {
-                throw new CmisInvalidArgumentException("Unknown change log token!");
-            }
-        }
-
-        ObjectListImpl objList = new ObjectListImpl();
-        long timestamp = System.currentTimeMillis() - 60 * 1000;
-        // convert ObjectInFolderContainerList to objectList
-        List<ObjectData> lod = new ArrayList<ObjectData>();
-        if (null == maxItems) {
-            maxItems = BigInteger.valueOf(ITEMS_AVAILABLE);
-        }
-        int last = Math.min(ITEMS_AVAILABLE, token + maxItems.intValue());
-
-        for (int i = token; i < last; i++) {
-            // add a dummy delete event
-            ObjectDataImpl odImpl = new ObjectDataImpl();
-            PropertiesImpl props = new PropertiesImpl();
-            props.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_ID, "cl-" + i));
-            props.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value()));
-            props.addProperty(new PropertyIdImpl(PropertyIds.BASE_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value()));
-            odImpl.setProperties(props);
-            ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-            changeEventInfo.setChangeType(ChangeType.DELETED);
-            GregorianCalendar eventTimestamp = new GregorianCalendar();
-            eventTimestamp.setTimeInMillis(timestamp + i * 1000);
-            changeEventInfo.setChangeTime(eventTimestamp);
-            odImpl.setChangeEventInfo(changeEventInfo);
-            if (includePolicyIds != null && includePolicyIds) {
-                PolicyIdList policies = new PolicyIdListImpl();
-                odImpl.setPolicyIds(policies);
-            }
-            lod.add(odImpl);
-        }
-
-        objList.setObjects(lod);
-        objList.setNumItems(BigInteger.valueOf(ITEMS_AVAILABLE - token));
-        objList.setHasMoreItems(false);
-
-        String changeToken = "token-" + (token + lod.size() - 1);
-        changeLogToken.setValue(changeToken);
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (objectInfos != null) {
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, null, objectInfos, objList);
-        }
-        return objList;
-    }
-
-    private void convertList(List<ObjectData> lod, ObjectInFolderContainer obj) {
-        lod.add(obj.getObject().getObject());
-        // add dummy event info
-        ObjectData oif = obj.getObject().getObject();
-        ObjectDataImpl oifImpl = (ObjectDataImpl) oif;
-        ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-        changeEventInfo.setChangeType(ChangeType.UPDATED);
-        changeEventInfo.setChangeTime(new GregorianCalendar());
-        oifImpl.setChangeEventInfo(changeEventInfo);
-        if (null != obj.getChildren()) {
-            for (ObjectInFolderContainer oifc : obj.getChildren()) {
-                convertList(lod, oifc);
-            }
-        }
-    }
-
-    public ObjectList query(CallContext context, String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        LOG.debug("start query()");
-        validator.query(context, repositoryId, extension);
-
-        String user = context.getUsername();
-        ObjectList res;
-
-        res = fStoreManager.query(user, repositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount);
-        LOG.debug("stop query()");
-        return res;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
deleted file mode 100644
index e493d0c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryMultiFilingServiceImpl extends InMemoryAbstractServiceImpl {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryMultiFilingServiceImpl.class.getName());
-
-    public InMemoryMultiFilingServiceImpl(StoreManager storeMgr) {
-        super(storeMgr);
-    }
-
-    public void addObjectToFolder(CallContext context, String repositoryId, String objectId, String folderId,
-            Boolean allVersions, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("Begin addObjectToFolder()");
-
-        if (allVersions != null && !allVersions.booleanValue()) {
-            throw new CmisNotSupportedException(
-                    "Cannot add object to folder, version specific filing is not supported.");
-        }
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject[] sos = validator.addObjectToFolder(context, repositoryId, objectId, folderId, allVersions,
-                extension);
-
-        StoredObject so = sos[0];
-        StoredObject folder = sos[1];
-        checkObjects(repositoryId, so, folder);
-
-        Folder newParent = (Folder) folder;
-        objStore.addParent(so, newParent);
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        LOG.debug("End addObjectToFolder()");
-    }
-
-    public void removeObjectFromFolder(CallContext context, String repositoryId, String objectId, String folderId,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("Begin removeObjectFromFolder()");
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject[] sos = validator.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);
-        StoredObject so = sos[0];
-        if (null != folderId) {
-            StoredObject folder = sos[1];
-            checkObjects(repositoryId, so, folder);
-            Folder parent = (Folder) folder;
-
-            objStore.removeParent(so, parent);
-
-            // To be able to provide all Atom links in the response we need
-            // additional information:
-            if (context.isObjectInfoRequired()) {
-                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfo);
-                objectInfos.addObjectInfo(objectInfo);
-            }
-        } else {
-            checkObjects(repositoryId, so, null);
-            List<String> parentIds = objStore.getParentIds(so, context.getUsername());
-            for (String parentId : parentIds) {
-                Folder parent = (Folder) objStore.getObjectById(parentId);
-                objStore.removeParent(so, parent);
-            }
-
-            // To be able to provide all Atom links in the response we need
-            // additional information:
-            if (context.isObjectInfoRequired()) {
-                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-                objectInfos.addObjectInfo(objectInfo);
-            }
-        }
-
-        LOG.debug("End removeObjectFromFolder()");
-    }
-
-    private void checkObjects(String repositoryId, StoredObject so, StoredObject folder) {
-        if ((so instanceof Folder)) {
-            throw new CmisConstraintException("Cannot add object to folder, object id " + folder.getId()
-                    + " is a folder and folders are not multi-filed.");
-        }
-
-        if (folder != null && !(folder instanceof Folder)) {
-            throw new CmisConstraintException("Cannot add object to folder, folder id " + folder.getId()
-                    + " does not refer to a folder.");
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
deleted file mode 100644
index ae5dcd7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.inmemory.DataObjectCreator;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryNavigationServiceImpl extends InMemoryAbstractServiceImpl {
-
-    private static final int MAX_FOLDERS_IN_GET_DESC = 1000;
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryNavigationServiceImpl.class);
-
-    public InMemoryNavigationServiceImpl(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public ObjectList getCheckedOutDocs(CallContext context, String repositoryId, String folderId, String filter,
-            String orderBy, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension,
-            ObjectInfoHandler objectInfos) {
-
-        validator.getCheckedOutDocs(context, repositoryId, folderId, extension);
-        ObjectListImpl res = new ObjectListImpl();
-        List<ObjectData> odList = new ArrayList<ObjectData>();
-
-        LOG.debug("start getCheckedOutDocs()");
-
-        String user = context.getUsername();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        if (null == folderId) {
-            List<StoredObject> checkedOuts = fStoreManager.getObjectStore(repositoryId).getCheckedOutDocuments(orderBy,
-                    context.getUsername(), includeRelationships);
-            for (StoredObject checkedOut : checkedOuts) {
-                TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, checkedOut, filter, user,
-                        includeAllowableActions, includeRelationships, renditionFilter, false, false, extension);
-                if (context.isObjectInfoRequired()) {
-                    ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                    fAtomLinkProvider
-                            .fillInformationForAtomLinks(repositoryId, /* workingCopy */checkedOut, objectInfo);
-                    objectInfos.addObjectInfo(objectInfo);
-                }
-                odList.add(od);
-            }
-        } else {
-            LOG.debug("getting checked-out documents for folder: " + folderId);
-            ObjectInFolderList children = getChildrenIntern(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, false, -1, -1, false, true,
-                    context.isObjectInfoRequired() ? objectInfos : null, user);
-            for (ObjectInFolderData child : children.getObjects()) {
-                ObjectData obj = child.getObject();
-                StoredObject so = fStoreManager.getObjectStore(repositoryId).getObjectById(obj.getId());
-                LOG.debug("Checked out: children:" + obj.getId());
-                if (so instanceof DocumentVersion && ((DocumentVersion) so).getParentDocument().isCheckedOut()) {
-                    odList.add(obj);
-                    if (context.isObjectInfoRequired()) {
-                        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                        fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-                        objectInfos.addObjectInfo(objectInfo);
-                    }
-                }
-            }
-        }
-        res.setObjects(odList);
-        res.setNumItems(BigInteger.valueOf(odList.size()));
-        res.setHasMoreItems(false);
-
-        LOG.debug("end getCheckedOutDocs()");
-        return res;
-    }
-
-    public ObjectInFolderList getChildren(CallContext context, String repositoryId, String folderId, String filter,
-            String orderBy, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getChildren()");
-
-        validator.getChildren(context, repositoryId, folderId, extension);
-
-        int maxItemsInt = maxItems == null ? -1 : maxItems.intValue();
-        int skipCountInt = skipCount == null ? 0 : skipCount.intValue();
-        String user = context.getUsername();
-        ObjectInFolderList res = getChildrenIntern(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, maxItemsInt, skipCountInt, false, false,
-                context.isObjectInfoRequired() ? objectInfos : null, user);
-        LOG.debug("stop getChildren()");
-        return res;
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(CallContext context, String repositoryId, String folderId,
-            BigInteger depth, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePathSegment,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getDescendants()");
-
-        validator.getDescendants(context, repositoryId, folderId, extension);
-
-        int levels;
-        if (depth == null) {
-            levels = 2; // one of the recommended defaults (should it be
-        } else if (depth.intValue() == 0) {
-            throw new CmisInvalidArgumentException("A zero depth is not allowed for getDescendants().");
-        } else {
-            levels = depth.intValue();
-        }
-
-        int level = 0;
-        String user = context.getUsername();
-        List<ObjectInFolderContainer> result = getDescendantsIntern(repositoryId, folderId, filter,
-                includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, level, levels,
-                false, objectInfos, user);
-
-        LOG.debug("stop getDescendants()");
-        return result;
-    }
-
-    public ObjectData getFolderParent(CallContext context, String repositoryId, String folderId, String filter,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getFolderParent()");
-
-        StoredObject so = validator.getFolderParent(context, repositoryId, folderId, extension);
-
-        Folder folder = null;
-        if (so instanceof Folder) {
-            folder = (Folder) so;
-        } else {
-            throw new CmisInvalidArgumentException("Can't get folder parent, id does not refer to a folder: "
-                    + folderId);
-        }
-
-        ObjectData res = getFolderParentIntern(repositoryId, folder, filter, false, IncludeRelationships.NONE,
-                context.getUsername(), context.isObjectInfoRequired() ? objectInfos : null);
-        if (res == null) {
-            throw new CmisInvalidArgumentException("Cannot get parent of a root folder");
-        }
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        LOG.debug("stop getFolderParent()");
-        return res;
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(CallContext context, String repositoryId, String folderId,
-            BigInteger depth, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePathSegment,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getFolderTree()");
-
-        validator.getFolderTree(context, repositoryId, folderId, extension);
-
-        if (depth != null && depth.intValue() == 0) {
-            throw new CmisInvalidArgumentException("A zero depth is not allowed for getFolderTree().");
-        }
-
-        int levels = depth == null ? 2 : depth.intValue();
-        int level = 0;
-        String user = context.getUsername();
-        List<ObjectInFolderContainer> result = getDescendantsIntern(repositoryId, folderId, filter,
-                includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, level, levels,
-                true, objectInfos, user);
-
-        LOG.debug("stop getFolderTree()");
-        return result;
-    }
-
-    public List<ObjectParentData> getObjectParents(CallContext context, String repositoryId, String objectId,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includeRelativePathSegment, ExtensionsData extension,
-            ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getObjectParents()");
-
-        StoredObject so = validator.getObjectParents(context, repositoryId, objectId, extension);
-
-        // for now we have only folders that have a parent and the in-memory
-        // provider only has one
-        // parent for each object (no multi-filing)
-        List<ObjectParentData> result = null;
-
-        Filing spo = null;
-        if (!(so instanceof Filing)) {
-            return Collections.emptyList();
-        }
-
-        result = getObjectParentsIntern(repositoryId, so, filter, context.isObjectInfoRequired() ? objectInfos : null,
-                includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment,
-                context.getUsername());
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        LOG.debug("stop getObjectParents()");
-        return result;
-    }
-
-    // private helpers
-
-    private ObjectInFolderList getChildrenIntern(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegments, int maxItems, int skipCount, boolean folderOnly, boolean includePwc,
-            ObjectInfoHandler objectInfos, String user) {
-
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-        List<ObjectInFolderData> folderList = new ArrayList<ObjectInFolderData>();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject so = objStore.getObjectById(folderId);
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Unknown object id: " + folderId);
-        }
-
-        if (!(so instanceof Folder)) {
-            return null; // it is a document and has no children
-        }
-
-        ObjectStore.ChildrenResult children = folderOnly ? objStore.getFolderChildren((Folder) so, maxItems, skipCount,
-                user) : objStore.getChildren((Folder) so, maxItems, skipCount, user, includePwc);
-
-        for (Fileable child : children.getChildren()) {
-
-            if (!cmis11 && child instanceof Item) {
-                continue; // ignore items for CMIS 1.0
-            }
-
-            ObjectInFolderDataImpl oifd = new ObjectInFolderDataImpl();
-            if (includePathSegments != null && includePathSegments) {
-                oifd.setPathSegment(child.getName());
-            }
-
-            TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-            ObjectData objectData = PropertyCreationHelper.getObjectData(tm, objStore, child, filter, user,
-                    includeAllowableActions, includeRelationships, renditionFilter, false, false, null);
-
-            oifd.setObject(objectData);
-            folderList.add(oifd);
-            // add additional information for Atom
-            if (objectInfos != null) {
-                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, child, objectInfo);
-                objectInfos.addObjectInfo(objectInfo);
-            }
-        }
-        result.setObjects(folderList);
-        result.setNumItems(BigInteger.valueOf(children.getNoItems()));
-        result.setHasMoreItems(children.getNoItems() > skipCount + folderList.size());
-
-        if (objectInfos != null) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-        return result;
-    }
-
-    private List<ObjectInFolderContainer> getDescendantsIntern(String repositoryId, String folderId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegments, int level, int maxLevels, boolean folderOnly, ObjectInfoHandler objectInfos,
-            String user) {
-
-        List<ObjectInFolderContainer> childrenOfFolderId = null;
-        if (maxLevels == -1 || level < maxLevels) {
-            String orderBy = PropertyIds.NAME;
-            ObjectInFolderList children = getChildrenIntern(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePathSegments,
-                    MAX_FOLDERS_IN_GET_DESC, 0, folderOnly, false, objectInfos, user);
-            childrenOfFolderId = new ArrayList<ObjectInFolderContainer>();
-            if (null != children) {
-
-                for (ObjectInFolderData child : children.getObjects()) {
-                    ObjectInFolderContainerImpl oifc = new ObjectInFolderContainerImpl();
-                    String childId = child.getObject().getId();
-                    List<ObjectInFolderContainer> subChildren = getDescendantsIntern(repositoryId, childId, filter,
-                            includeAllowableActions, includeRelationships, renditionFilter, includePathSegments,
-                            level + 1, maxLevels, folderOnly, objectInfos, user);
-
-                    oifc.setObject(child);
-                    if (null != subChildren) {
-                        oifc.setChildren(subChildren);
-                    }
-                    childrenOfFolderId.add(oifc);
-                }
-            }
-        }
-        return childrenOfFolderId;
-    }
-
-    private List<ObjectParentData> getObjectParentsIntern(String repositoryId, StoredObject so, String filter,
-            ObjectInfoHandler objectInfos, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includeRelativePathSegment, String user) {
-
-        List<ObjectParentData> result = null;
-        result = new ArrayList<ObjectParentData>();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        List<String> parentIds = objStore.getParentIds(so, user);
-        if (null != parentIds) {
-            for (String parentId : parentIds) {
-                ObjectParentDataImpl parentData = new ObjectParentDataImpl();
-                TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-                Folder parent = (Folder) objStore.getObjectById(parentId);
-                ObjectData objData = PropertyCreationHelper.getObjectData(tm, objStore, parent, filter, user,
-                        includeAllowableActions, includeRelationships, renditionFilter, false, true, null);
-                parentData.setObject(objData);
-                if (null != includeRelativePathSegment && includeRelativePathSegment && so instanceof Fileable) {
-                    parentData.setRelativePathSegment(((Fileable) so).getPathSegment());
-                }
-                result.add(parentData);
-                if (objectInfos != null) {
-                    ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-                    fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, parent, objectInfo);
-                    objectInfos.addObjectInfo(objectInfo);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private ObjectData getFolderParentIntern(String repositoryId, StoredObject so, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String user,
-            ObjectInfoHandler objectInfos) {
-
-        ObjectDataImpl parent = new ObjectDataImpl();
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        List<String> parents = objStore.getParentIds(so, user);
-        if (null == parents || parents.isEmpty()) {
-            return null;
-        }
-        String parentId = parents.get(0);
-
-        Folder parentFolder = (Folder) objStore.getObjectById(parentId);
-
-        copyFilteredProperties(repositoryId, parentFolder, filter, parent);
-
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        parent.setRelationships(DataObjectCreator.getRelationships(tm, objStore, includeRelationships, parentFolder,
-                user));
-
-        if (includeAllowableActions != null && includeAllowableActions) {
-            AllowableActions allowableActions = parentFolder.getAllowableActions(user);
-            parent.setAllowableActions(allowableActions);
-        }
-
-        if (objectInfos != null) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, parentFolder, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return parent;
-    }
-
-    void copyFilteredProperties(String repositoryId, StoredObject so, String filter, ObjectDataImpl objData) {
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
-        objData.setProperties(props);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
deleted file mode 100644
index 06495be..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
+++ /dev/null
@@ -1,1354 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.NameValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.TypeValidator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryObjectServiceImpl extends InMemoryAbstractServiceImpl {
-    private static final String UNKNOWN_USER = "unknown";
-    private static final String UNKNOWN_OBJECT_ID = "Unknown object id: ";
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryServiceFactoryImpl.class.getName());
-
-    public InMemoryObjectServiceImpl(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public String createDocument(CallContext context, String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-
-        LOG.debug("start createDocument()");
-        // Attach the CallContext to a thread local context that can be
-        // accessed from everywhere
-
-        StoredObject so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream,
-                versioningState, policies, addAces, removeAces, extension);
-        LOG.debug("stop createDocument()");
-        return so.getId();
-    }
-
-    public String createDocumentFromSource(CallContext context, String repositoryId, String sourceId,
-            Properties properties, String folderId, VersioningState versioningState, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        LOG.debug("start createDocumentFromSource()");
-        StoredObject so = validator.createDocumentFromSource(context, repositoryId, sourceId, folderId, policies,
-                extension);
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-
-        ContentStream content = getContentStream(context, repositoryId, sourceId, null, BigInteger.valueOf(-1),
-                BigInteger.valueOf(-1), null);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + sourceId);
-        }
-
-        // build properties collection
-        List<String> requestedIds = FilterParser.getRequestedIdsFromFilter("*");
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties existingProps = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds,
-                true);
-
-        PropertiesImpl newPD = new PropertiesImpl();
-        // copy all existing properties
-        for (PropertyData<?> prop : existingProps.getProperties().values()) {
-            newPD.addProperty(prop);
-        }
-
-        if (null != properties) {
-            // overwrite all new properties
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                newPD.addProperty(prop);
-            }
-        }
-
-        String res = createDocument(context, repositoryId, newPD, folderId, content, versioningState, policies,
-                addAces, removeAces, null);
-        LOG.debug("stop createDocumentFromSource()");
-        return res;
-    }
-
-    public String createFolder(CallContext context, String repositoryId, Properties properties, String folderId,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-        LOG.debug("start createFolder()");
-
-        Folder folder = createFolderIntern(context, repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-        LOG.debug("stop createFolder()");
-        return folder.getId();
-    }
-
-    public String createPolicy(CallContext context, String repositoryId, Properties properties, String folderId,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        LOG.debug("start createPolicy()");
-        StoredObject so = createPolicyIntern(context, repositoryId, properties, folderId, policies, addAces,
-                removeAces, extension);
-        LOG.debug("stop createPolicy()");
-        return so == null ? null : so.getId();
-    }
-
-    public String createRelationship(CallContext context, String repositoryId, Properties properties,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        LOG.debug("start createRelationship()");
-        StoredObject so = createRelationshipIntern(context, repositoryId, properties, policies, addAces, removeAces,
-                extension);
-        LOG.debug("stop createRelationship()");
-        return so == null ? null : so.getId();
-    }
-
-    // CMIS 1.1
-    public String createItem(CallContext context, String repositoryId, Properties properties, String folderId,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-        StoredObject so = createItemIntern(context, repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-        return so.getId();
-    }
-
-    @SuppressWarnings("unchecked")
-    public String create(CallContext context, String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        if (null == properties || null == properties.getProperties()) {
-            throw new CmisInvalidArgumentException("Cannot create object, without properties.");
-        }
-
-        // Find out what kind of object needs to be created
-        PropertyData<String> pd = (PropertyData<String>) properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        String typeId = pd == null ? null : pd.getFirstValue();
-        if (null == typeId) {
-            throw new CmisInvalidArgumentException(
-                    "Cannot create object, without a type (no property with id CMIS_OBJECT_TYPE_ID).");
-        }
-
-        TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
-        if (typeDefC == null) {
-            throw new CmisInvalidArgumentException("Cannot create object, a type with id " + typeId + " is unknown");
-        }
-
-        // check if the given type is a document type
-        BaseTypeId typeBaseId = typeDefC.getTypeDefinition().getBaseTypeId();
-        StoredObject so = null;
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (typeBaseId.equals(DocumentTypeCreationHelper.getCmisDocumentType().getBaseTypeId())) {
-            so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream, versioningState,
-                    null, null, null, null);
-        } else if (typeBaseId.equals(DocumentTypeCreationHelper.getCmisFolderType().getBaseTypeId())) {
-            so = createFolderIntern(context, repositoryId, properties, folderId, null, null, null, null);
-        } else if (typeBaseId.equals(DocumentTypeCreationHelper.getCmisPolicyType().getBaseTypeId())) {
-            so = createPolicyIntern(context, repositoryId, properties, folderId, null, null, null, null);
-        } else if (typeBaseId.equals(DocumentTypeCreationHelper.getCmisRelationshipType().getBaseTypeId())) {
-            so = createRelationshipIntern(context, repositoryId, properties, null, null, null, null);
-        } else if (typeBaseId.equals(DocumentTypeCreationHelper.getCmisItemType().getBaseTypeId())) {
-            so = createItemIntern(context, repositoryId, properties, folderId, null, null, null, null);
-        } else {
-            LOG.error("The type contains an unknown base object id, object can't be created");
-        }
-
-        // Make a call to getObject to convert the resulting id into an
-        // ObjectData
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, context.getUsername(), false,
-                IncludeRelationships.NONE, null, false, false, extension);
-
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-        return so != null ? so.getId() : null;
-    }
-
-    public void deleteContentStream(CallContext context, String repositoryId, Holder<String> objectId,
-            Holder<String> changeToken, ExtensionsData extension) {
-
-        LOG.debug("start deleteContentStream()");
-        StoredObject so = validator.deleteContentStream(context, repositoryId, objectId, extension);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        if (so.getChangeToken() != null && (changeToken == null
-                || !so.getChangeToken().equals(changeToken.getValue()))) {
-            throw new CmisUpdateConflictException("deleteContentStream failed, ChangeToken does not match.");
-        }
-
-        if (!(so instanceof Content)) {
-            throw new CmisObjectNotFoundException("Id" + objectId
-                    + " does not refer to a document, but only documents can have content");
-        }
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        objectStore.setContent(so, null);
-        LOG.debug("stop deleteContentStream()");
-    }
-
-    public void deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-
-        LOG.debug("start deleteObject()");
-        validator.deleteObject(context, repositoryId, objectId, allVersions, extension);
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        LOG.debug("delete object for id: " + objectId);
-
-        // check if it is the root folder
-        if (objectId.equals(objectStore.getRootFolder().getId())) {
-            throw new CmisNotSupportedException("You can't delete a root folder");
-        }
-
-        objectStore.deleteObject(objectId, allVersions, context.getUsername());
-        LOG.debug("stop deleteObject()");
-    }
-
-    public FailedToDeleteData deleteTree(CallContext context, String repositoryId, String folderId, Boolean allVers,
-            UnfileObject unfile, Boolean continueOnFail, ExtensionsData extension) {
-
-        LOG.debug("start deleteTree()");
-        boolean allVersions = (null == allVers ? true : allVers);
-        UnfileObject unfileObjects = (null == unfile ? UnfileObject.DELETE : unfile);
-        boolean continueOnFailure = (null == continueOnFail ? false : continueOnFail);
-        StoredObject so = validator.deleteTree(context, repositoryId, folderId, allVersions, unfileObjects, extension);
-        List<String> failedToDeleteIds = new ArrayList<String>();
-        FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (null == so) {
-            throw new CmisInvalidArgumentException("Cannot delete object with id  " + folderId
-                    + ". Object does not exist.");
-        }
-
-        if (!(so instanceof Folder)) {
-            throw new CmisInvalidArgumentException("deleteTree can only be invoked on a folder, but id " + folderId
-                    + " does not refer to a folder");
-        }
-
-        if (unfileObjects == UnfileObject.UNFILE) {
-            throw new CmisNotSupportedException("This repository does not support unfile operations.");
-        }
-
-        // check if it is the root folder
-        if (folderId.equals(objectStore.getRootFolder().getId())) {
-            throw new CmisNotSupportedException("You can't delete a root folder");
-        }
-
-        // recursively delete folder
-        deleteRecursive(objectStore, (Folder) so, continueOnFailure, allVersions, failedToDeleteIds,
-                context.getUsername());
-
-        result.setIds(failedToDeleteIds);
-        LOG.debug("stop deleteTree()");
-        return result;
-    }
-
-    public AllowableActions getAllowableActions(CallContext context, String repositoryId, String objectId,
-            ExtensionsData extension) {
-
-        LOG.debug("start getAllowableActions()");
-        StoredObject so = validator.getAllowableActions(context, repositoryId, objectId, extension);
-
-        fStoreManager.getObjectStore(repositoryId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        String user = context.getUsername();
-        AllowableActions allowableActions = so.getAllowableActions(user);
-        LOG.debug("stop getAllowableActions()");
-        return allowableActions;
-    }
-
-    public ContentStream getContentStream(CallContext context, String repositoryId, String objectId, String streamId,
-            BigInteger offset, BigInteger length, ExtensionsData extension) {
-
-        LOG.debug("start getContentStream()");
-        StoredObject so = validator.getContentStream(context, repositoryId, objectId, streamId, extension);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        if (!(so instanceof Content) && objectId.endsWith("-rendition")) {
-            throw new CmisConstraintException("Id" + objectId
-                    + " does not refer to a document or version, but only those can have content");
-        }
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        ContentStream csd = getContentStream(objStore, so, streamId, offset, length);
-
-        if (null == csd) {
-            throw new CmisConstraintException("Object " + so.getId() + " does not have content.");
-        }
-
-        LOG.debug("stop getContentStream()");
-        return csd;
-    }
-
-    public ObjectData getObject(CallContext context, String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getObject()");
-
-        StoredObject so = validator.getObject(context, repositoryId, objectId, extension);
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        String user = context.getUsername();
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, filter, user, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        // fill an example extension
-        String ns = "http://apache.org/opencmis/inmemory";
-        List<CmisExtensionElement> extElements = new ArrayList<CmisExtensionElement>();
-
-        Map<String, String> attr = new HashMap<String, String>();
-        attr.put("type", so.getTypeId());
-
-        extElements.add(new CmisExtensionElementImpl(ns, "objectId", attr, objectId));
-        extElements.add(new CmisExtensionElementImpl(ns, "name", null, so.getName()));
-        od.setExtensions(Collections.singletonList((CmisExtensionElement) new CmisExtensionElementImpl(ns,
-                "exampleExtension", null, extElements)));
-
-        LOG.debug("stop getObject()");
-
-        return od;
-    }
-
-    public ObjectData getObjectByPath(CallContext context, String repositoryId, String path, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start getObjectByPath()");
-        StoredObject so = validator.getObjectByPath(context, repositoryId, path, extension);
-        if (so instanceof VersionedDocument) {
-            VersionedDocument verDoc = (VersionedDocument) so;
-            so = verDoc.getLatestVersion(false);
-        }
-
-        String user = context.getUsername();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, filter, user, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-
-        LOG.debug("stop getObjectByPath()");
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return od;
-    }
-
-    public Properties getProperties(CallContext context, String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-
-        LOG.debug("start getProperties()");
-        StoredObject so = validator.getProperties(context, repositoryId, objectId, extension);
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        // build properties collection
-        List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
-        LOG.debug("stop getProperties()");
-        return props;
-    }
-
-    public List<RenditionData> getRenditions(CallContext context, String repositoryId, String objectId,
-            String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        LOG.debug("start getRenditions()");
-        StoredObject so = validator.getRenditions(context, repositoryId, objectId, extension);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException(UNKNOWN_OBJECT_ID + objectId);
-        }
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        List<RenditionData> renditions = objStore.getRenditions(so, renditionFilter, maxItems == null ? 0 : maxItems.longValue(),
-                skipCount == null ? 0 : skipCount.longValue());
-        LOG.debug("stop getRenditions()");
-        return renditions;
-    }
-
-    public ObjectData moveObject(CallContext context, String repositoryId, Holder<String> objectId,
-            String targetFolderId, String sourceFolderId, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start moveObject()");
-        StoredObject[] sos = validator.moveObject(context, repositoryId, objectId, targetFolderId, sourceFolderId,
-                extension);
-        StoredObject so = sos[0];
-        Folder targetFolder = null;
-        Folder sourceFolder = null;
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        String user = context.getUsername();
-
-        if (null == so) {
-            throw new CmisObjectNotFoundException("Unknown object: " + objectId.getValue());
-        } else if (!(so instanceof Filing)) {
-            throw new CmisInvalidArgumentException("Object must be fileable: " + objectId.getValue());
-        }
-
-        StoredObject soTarget = objectStore.getObjectById(targetFolderId);
-        if (null == soTarget) {
-            throw new CmisObjectNotFoundException("Unknown target folder: " + targetFolderId);
-        } else if (soTarget instanceof Folder) {
-            targetFolder = (Folder) soTarget;
-        } else {
-            throw new CmisNotSupportedException("Destination " + targetFolderId
-                    + " of a move operation must be a folder");
-        }
-
-        StoredObject soSource = objectStore.getObjectById(sourceFolderId);
-        if (null == soSource) {
-            throw new CmisObjectNotFoundException("Unknown source folder: " + sourceFolderId);
-        } else if (soSource instanceof Folder) {
-            sourceFolder = (Folder) soSource;
-        } else {
-            throw new CmisNotSupportedException("Source " + sourceFolderId + " of a move operation must be a folder");
-        }
-
-        boolean foundOldParent = false;
-        for (String parentId : objectStore.getParentIds(so, user)) {
-            if (parentId.equals(soSource.getId())) {
-                foundOldParent = true;
-                break;
-            }
-        }
-        if (!foundOldParent) {
-            throw new CmisNotSupportedException("Cannot move object, source folder " + sourceFolderId
-                    + "is not a parent of object " + objectId.getValue());
-        }
-
-        if (so instanceof Folder && hasDescendant(context.getUsername(), objectStore, (Folder) so, targetFolder)) {
-            throw new CmisNotSupportedException("Destination of a move cannot be a subfolder of the source");
-        }
-
-        objectStore.move(so, sourceFolder, targetFolder, user);
-        objectId.setValue(so.getId());
-
-        LOG.debug("stop moveObject()");
-
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objectStore, so, null, user, false,
-                IncludeRelationships.NONE, null, false, false, extension);
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return od;
-    }
-
-    public void setContentStream(CallContext context, String repositoryId, Holder<String> objectId, Boolean overwrite,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-
-        LOG.debug("start setContentStream()");
-        boolean overwriteFlag = (overwrite == null ? true : overwrite);
-        Content content;
-
-        StoredObject so = validator.setContentStream(context, repositoryId, objectId, overwriteFlag, extension);
-
-        if (changeToken != null && changeToken.getValue() != null
-                && Long.valueOf(so.getChangeToken()) > Long.valueOf(changeToken.getValue())) {
-            throw new CmisUpdateConflictException("setContentStream failed: changeToken does not match");
-        }
-
-        if (!(so instanceof Document || so instanceof VersionedDocument || so instanceof DocumentVersion)) {
-            throw new CmisObjectNotFoundException("Id" + objectId
-                    + " does not refer to a document, but only documents can have content");
-        }
-
-        // validate content allowed
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
-        if (!(typeDef instanceof DocumentTypeDefinition)) {
-            throw new CmisInvalidArgumentException("Object does not refer to a document, can't set content");
-        }
-        TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef, null != contentStream);
-
-        if (so instanceof Document) {
-            content = ((Document) so);
-        } else if (so instanceof DocumentVersion) {
-            // something that is versionable check the proper status of the
-            // object
-            String user = context.getUsername();
-            testHasProperCheckedOutStatus(so, user);
-            content = (DocumentVersion) so;
-        } else {
-            throw new IllegalArgumentException("Content cannot be set on this object (must be document or version)");
-        }
-
-        if (!overwriteFlag && content.hasContent()) {
-            throw new CmisContentAlreadyExistsException(
-                    "cannot overwrite existing content if overwrite flag is not set");
-        }
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        objStore.setContent(so, contentStream);
-        so.updateSystemBasePropertiesWhenModified(null, context.getUsername());
-        LOG.debug("stop setContentStream()");
-    }
-
-    public void updateProperties(CallContext context, String repositoryId, Holder<String> objectId,
-            Holder<String> changeToken, Properties properties, Acl acl, ExtensionsData extension,
-            ObjectInfoHandler objectInfos) {
-
-        LOG.debug("start updateProperties()");
-        if (properties == null) {
-            throw new CmisRuntimeException("update properties: no properties given for object id: "
-                    + objectId.getValue());
-        }
-        StoredObject so = validator.updateProperties(context, repositoryId, objectId, extension);
-        String user = context.getUsername();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        // Validation
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
-        boolean isCheckedOut = false;
-
-        isCheckedOut = isCheckedOut(so, user);
-
-        Map<String, PropertyData<?>> oldProperties = new HashMap<String, PropertyData<?>>();
-
-        // check properties for validity
-        boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
-        validateProperties(repositoryId, so, properties, false, cmis11);
-
-        if (changeToken != null && changeToken.getValue() != null
-                && Long.valueOf(so.getChangeToken()) > Long.valueOf(changeToken.getValue())) {
-            throw new CmisUpdateConflictException("updateProperties failed: changeToken does not match");
-        }
-
-        // update properties
-        boolean hasUpdatedProp = false;
-
-        // Find secondary type definitions to consider for update
-        List<String> existingSecondaryTypeIds = so.getSecondaryTypeIds();
-        @SuppressWarnings("unchecked")
-        PropertyData<String> pdSec = (PropertyData<String>) properties.getProperties().get(
-                PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        List<String> newSecondaryTypeIds = pdSec == null ? null : pdSec.getValues();
-        Set<String> secondaryTypeIds = new HashSet<String>();
-        if (null != existingSecondaryTypeIds) {
-            secondaryTypeIds.addAll(existingSecondaryTypeIds);
-        }
-        if (null != newSecondaryTypeIds) {
-            secondaryTypeIds.addAll(newSecondaryTypeIds);
-        }
-
-        // Find secondary type definitions to delete (null means not set --> do
-        // not change, empty --> remove all secondary types)
-        if (null != newSecondaryTypeIds) {
-            List<String> propertiesIdToDelete = getListOfPropertiesToDeleteFromRemovedSecondaryTypes(repositoryId, so,
-                    newSecondaryTypeIds);
-            for (String propIdToRemove : propertiesIdToDelete) {
-                oldProperties.put(propIdToRemove, null);
-            }
-        }
-
-        // update properties:
-        for (String key : properties.getProperties().keySet()) {
-            if (key.equals(PropertyIds.NAME)) {
-                continue; // ignore here
-            }
-
-            PropertyData<?> value = properties.getProperties().get(key);
-            PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(key);
-            if (cmis11 && null == propDef) {
-                TypeDefinition typeDefSecondary = getSecondaryTypeDefinition(repositoryId, secondaryTypeIds, key);
-                if (null == typeDefSecondary) {
-                    throw new CmisInvalidArgumentException("Cannot update property " + key + ": not contained in type");
-                }
-                propDef = typeDefSecondary.getPropertyDefinitions().get(key);
-            }
-
-            if (null == propDef) {
-                throw new CmisInvalidArgumentException("Unknown property " + key
-                        + ": not contained in type (or any secondary type)");
-            }
-
-            if (value.getValues() == null || value.getFirstValue() == null) {
-                // delete property
-                // check if a required a property
-                if (propDef.isRequired()) {
-                    throw new CmisConstraintException(
-                            "updateProperties failed, following property can't be deleted, because it is required: "
-                                    + key);
-                }
-                oldProperties.put(key, null);
-                hasUpdatedProp = true;
-            } else {
-                if (propDef.getUpdatability() == Updatability.WHENCHECKEDOUT) {
-                    if (!isCheckedOut) {
-                        throw new CmisUpdateConflictException(
-                                "updateProperties failed, following property can't be updated, because it is not "
-                                + "checked-out: " + key);
-                    }
-                } else if (propDef.getUpdatability() != Updatability.READWRITE) {
-                    throw new CmisConstraintException(
-                            "updateProperties failed, following property can't be updated, because it is not writable: "
-                                    + key);
-                }
-                oldProperties.put(key, value);
-                hasUpdatedProp = true;
-            }
-        }
-        
-        // get name from properties and perform special rename to check if
-        // path already exists
-        PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
-        if (pd != null && so instanceof Filing) {
-            String newName = (String) pd.getFirstValue();
-            boolean hasParent = ((Filing) so).hasParent();
-            if (so instanceof Folder && !hasParent) {
-                throw new CmisConstraintException("updateProperties failed, you cannot rename the root folder");
-            }
-            if (newName == null || newName.equals("")) {
-                throw new CmisConstraintException("updateProperties failed, name must not be empty.");
-            }
-            if (!NameValidator.isValidName(newName)) {
-                throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-            }
-            // Note: the test for duplicated name in folder is left to the
-            // object store
-            objStore.rename((Fileable) so, (String) pd.getFirstValue(), user);
-            hasUpdatedProp = true;
-        }
-
-        objStore.updateObject(so, oldProperties, user);
-
-        if (hasUpdatedProp) {
-            objectId.setValue(so.getId()); // might have a new id
-            if (null != changeToken) {
-                String changeTokenVal = so.getChangeToken();
-                LOG.debug("updateProperties(), new change token is: " + changeTokenVal);
-                changeToken.setValue(changeTokenVal);
-            }
-        }
-
-        if (null != acl) {
-            objStore.applyAcl(so, acl, AclPropagation.OBJECTONLY, user);
-        }
-
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, user, false,
-                IncludeRelationships.NONE, null, false, false, extension);
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        LOG.debug("stop updateProperties()");
-    }
-
-    // CMIS 1.1
-    public void appendContentStream(CallContext context, String repositoryId, Holder<String> objectId,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-
-        Content content;
-
-        LOG.debug("start appendContentStream()");
-        StoredObject so = validator.appendContentStream(context, repositoryId, objectId, extension);
-
-        if (changeToken != null && changeToken.getValue() != null
-                && Long.valueOf(so.getChangeToken()) > Long.valueOf(changeToken.getValue())) {
-            throw new CmisUpdateConflictException("updateProperties failed: changeToken does not match");
-        }
-
-        if (!(so instanceof Document || so instanceof VersionedDocument || so instanceof DocumentVersion)) {
-            throw new CmisObjectNotFoundException("Id" + objectId
-                    + " does not refer to a document, but only documents can have content");
-        }
-
-        // validate content allowed
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
-        if (!(typeDef instanceof DocumentTypeDefinition)) {
-            throw new CmisInvalidArgumentException("Object does not refer to a document, can't set content");
-        }
-        TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef, null != contentStream);
-
-        if (so instanceof Document) {
-            content = ((Document) so);
-        } else if (so instanceof DocumentVersion) {
-            // something that is versionable check the proper status of the
-            // object
-            String user = context.getUsername();
-            testHasProperCheckedOutStatus(so, user);
-            content = (DocumentVersion) so;
-        } else {
-            throw new IllegalArgumentException("Content cannot be set on this object (must be document or version)");
-        }
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        objStore.appendContent(so, contentStream);
-        so.updateSystemBasePropertiesWhenModified(null, context.getUsername());
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(CallContext context, String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension,
-            ObjectInfoHandler objectInfos) {
-
-        List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-        for (BulkUpdateObjectIdAndChangeToken obj : objectIdAndChangeToken) {
-            Holder<String> objId = new Holder<String>(obj.getId());
-            Holder<String> changeToken = new Holder<String>(obj.getChangeToken());
-            try {
-                updateProperties(context, repositoryId, objId, changeToken, properties, null, null, objectInfos);
-                result.add(new BulkUpdateObjectIdAndChangeTokenImpl(obj.getId(), changeToken.getValue()));
-            } catch (Exception e) {
-                LOG.error("updating properties in bulk upadate failed for object" + obj.getId() + ": ", e);
-            }
-        }
-        return result;
-    }
-
-    // ///////////////////////////////////////////////////////
-    // private helper methods
-
-    private StoredObject createDocumentIntern(CallContext context, String repositoryId, Properties properties,
-            String folderId, ContentStream contentStream, VersioningState versioningState, List<String> policies,
-            Acl addACEs, Acl removeACEs, ExtensionsData extension) {
-
-        Acl aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                addACEs);
-        Acl aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                removeACEs);
-
-        StoredObject so = validator.createDocument(context, repositoryId, folderId, policies, extension);
-
-        // Validation stuff
-        TypeValidator.validateRequiredSystemProperties(properties);
-
-        String user = context.getUsername();
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        Map<String, PropertyData<?>> propMap = properties.getProperties();
-        // get name from properties
-        PropertyData<?> pd = propMap.get(PropertyIds.NAME);
-        String name = (String) pd.getFirstValue();
-
-        // validate ACL
-        TypeValidator.validateAcl(typeDef, aclAdd, aclRemove);
-
-        Folder folder = null;
-        if (null != folderId) {
-            if (null == so) {
-                throw new CmisInvalidArgumentException(" Cannot create document, folderId: " + folderId 
-                        + " is invalid");
-            }
-
-            if (so instanceof Folder) {
-                folder = (Folder) so;
-            } else {
-                throw new CmisInvalidArgumentException("Can't creat document, folderId does not refer to a folder: "
-                        + folderId);
-            }
-
-            TypeValidator.validateAllowedChildObjectTypes(typeDef, folder.getAllowedChildObjectTypeIds());
-        }
-
-        // check if the given type is a document type
-        if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT)) {
-            throw new CmisInvalidArgumentException("Cannot create a document, with a non-document type: "
-                    + typeDef.getId());
-        }
-
-        // check name syntax
-        if (!NameValidator.isValidName(name)) {
-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME + " Name is: " + name);
-        }
-
-        // validate content allowed
-        TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef, null != contentStream);
-
-        TypeValidator.validateVersionStateForCreate((DocumentTypeDefinition) typeDef, versioningState);
-
-        // set properties that are not set but have a default:
-        Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
-        if (propMapNew != propMap) {
-            properties = new PropertiesImpl(propMapNew.values());
-            propMap = propMapNew;
-        }
-
-        boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
-        validateProperties(repositoryId, null, properties, false, cmis11);
-
-        // set user, creation date, etc.
-        if (user == null) {
-            user = UNKNOWN_USER;
-        }
-
-        StoredObject createdDoc = null;
-        ContentStream contentStreamNew = contentStream;
-        // check if content stream parameters are set and if not set some
-        // defaults
-        if (null != contentStream
-                && (contentStream.getFileName() == null || contentStream.getFileName().length() == 0
-                        || contentStream.getMimeType() == null || contentStream.getMimeType().length() == 0)) {
-            ContentStreamImpl cs = new ContentStreamImpl();
-            cs.setStream(contentStream.getStream());
-            if (contentStream.getFileName() == null || contentStream.getFileName().length() == 0) {
-                cs.setFileName(name);
-            } else {
-                cs.setFileName(contentStream.getFileName());
-            }
-            cs.setLength(contentStream.getBigLength());
-            if (contentStream.getMimeType() == null || contentStream.getMimeType().length() == 0) {
-                cs.setMimeType("application/octet-stream");
-            } else {
-                cs.setMimeType(contentStream.getMimeType());
-            }
-            cs.setExtensions(contentStream.getExtensions());
-            contentStreamNew = cs;
-        }
-
-        // Now we are sure to have document type definition:
-        if (((DocumentTypeDefinition) typeDef).isVersionable()) {
-            DocumentVersion version = objectStore.createVersionedDocument(name, propMap, user, folder, policies,
-                    aclAdd, aclRemove, contentStreamNew, versioningState);
-            createdDoc = version; // return the version and not the version series to
-                          // caller
-        } else {
-            Document doc = objectStore.createDocument(propMap, user, folder, contentStreamNew, policies, aclAdd, aclRemove);
-            createdDoc = doc;
-        }
-
-        return createdDoc;
-    }
-
-    private Folder createFolderIntern(CallContext context, String repositoryId, Properties properties, String folderId,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        Acl aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                addAces);
-        Acl aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                removeAces);
-        Properties propertiesNew = properties;
-
-        validator.createFolder(context, repositoryId, folderId, policies, extension);
-        TypeValidator.validateRequiredSystemProperties(properties);
-        String user = context.getUsername();
-
-        ObjectStore fs = fStoreManager.getObjectStore(repositoryId);
-        Folder parent = null;
-
-        // get required properties
-        PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
-        String folderName = (String) pd.getFirstValue();
-        if (null == folderName || folderName.length() == 0) {
-            throw new CmisInvalidArgumentException("Cannot create a folder without a name.");
-        }
-
-        // check name syntax
-        if (!NameValidator.isValidName(folderName)) {
-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME + " Name is: " + folderName);
-        }
-
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
-
-        // check if the given type is a folder type
-        if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_FOLDER)) {
-            throw new CmisInvalidArgumentException("Cannot create a folder, with a non-folder type: "
-                    + typeDef.getId());
-        }
-
-        Map<String, PropertyData<?>> propMap = propertiesNew.getProperties();
-        Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
-        if (propMapNew != propMap) { // NOSONAR
-            propertiesNew = new PropertiesImpl(propMapNew.values());
-        }
-
-        boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
-        validateProperties(repositoryId, null, propertiesNew, false, cmis11);
-
-        // validate ACL
-        TypeValidator.validateAcl(typeDef, aclAdd, aclRemove);
-
-        StoredObject so = null;
-        // create folder
-        try {
-            LOG.debug("get folder for id: " + folderId);
-            so = fs.getObjectById(folderId);
-        } catch (Exception e) {
-            throw new CmisObjectNotFoundException("Failed to retrieve folder.", e);
-        }
-
-        if (so instanceof Folder) {
-            parent = (Folder) so;
-        } else {
-            throw new CmisInvalidArgumentException("Can't create folder, folderId does not refer to a folder: "
-                    + folderId);
-        }
-
-        if (user == null) {
-            user = UNKNOWN_USER;
-        }
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        Folder newFolder = objStore.createFolder(folderName, propertiesNew.getProperties(), user, parent, policies,
-                aclAdd, aclRemove);
-        LOG.debug("stop createFolder()");
-        return newFolder;
-    }
-
-    private StoredObject createPolicyIntern(CallContext context, String repositoryId, Properties properties,
-            String folderId, List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        Acl aclAdd = addAces;
-        Acl aclRemove = removeAces;
-
-        validator.createPolicy(context, repositoryId, folderId, aclAdd, aclRemove, policies, extension);
-
-        aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), aclAdd);
-        aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                aclRemove);
-
-        String user = context.getUsername();
-        Map<String, PropertyData<?>> propMap = properties.getProperties();
-        // get name from properties
-        PropertyData<?> pd = propMap.get(PropertyIds.NAME);
-        String name = (String) pd.getFirstValue();
-        pd = propMap.get(PropertyIds.POLICY_TEXT);
-        String policyText = (String) pd.getFirstValue();
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject storedObject = objStore.createPolicy(name, policyText, propMap, user, aclAdd, aclRemove);
-
-        return storedObject;
-    }
-
-    private StoredObject createRelationshipIntern(CallContext context, String repositoryId, Properties properties,
-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        TypeValidator.validateRequiredSystemProperties(properties);
-
-        String user = context.getUsername();
-
-        Acl aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                addAces);
-        Acl aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                removeAces);
-
-        // get required properties
-        PropertyData<?> pd = properties.getProperties().get(PropertyIds.SOURCE_ID);
-        String sourceId = (String) pd.getFirstValue();
-        if (null == sourceId || sourceId.length() == 0) {
-            throw new CmisInvalidArgumentException("Cannot create a relationship without a sourceId.");
-        }
-
-        pd = properties.getProperties().get(PropertyIds.TARGET_ID);
-        String targetId = (String) pd.getFirstValue();
-        if (null == targetId || targetId.length() == 0) {
-            throw new CmisInvalidArgumentException("Cannot create a relationship without a targetId.");
-        }
-
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
-
-        // check if the given type is a relationship type
-        if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_RELATIONSHIP)) {
-            throw new CmisInvalidArgumentException("Cannot create a relationship, with a non-relationship type: "
-                    + typeDef.getId());
-        }
-
-        StoredObject[] relationObjects = validator.createRelationship(context, repositoryId, sourceId, targetId,
-                policies, extension);
-
-        // set default properties
-        Properties propertiesNew;
-        Map<String, PropertyData<?>> propMap = properties.getProperties();
-        Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
-        if (propMapNew != propMap) { // NOSONAR
-            propertiesNew = new PropertiesImpl(propMapNew.values());
-        } else {
-            propertiesNew = properties;
-        }
-
-        boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
-        validateProperties(repositoryId, null, propertiesNew, false, cmis11);
-
-        // validate ACL
-        TypeValidator.validateAcl(typeDef, aclAdd, aclRemove);
-
-        // validate the allowed types of the relationship
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        TypeDefinition sourceTypeDef = fStoreManager.getTypeById(repositoryId,
-                objStore.getObjectById(sourceId).getTypeId()).getTypeDefinition();
-        TypeDefinition targetTypeDef = fStoreManager.getTypeById(repositoryId,
-                objStore.getObjectById(targetId).getTypeId()).getTypeDefinition();
-        TypeValidator.validateAllowedRelationshipTypes((RelationshipTypeDefinition) typeDef, sourceTypeDef,
-                targetTypeDef);
-
-        // get name from properties
-        pd = propMap.get(PropertyIds.NAME);
-        String name = (String) pd.getFirstValue();
-
-        StoredObject storedObject = objStore.createRelationship(name, relationObjects[0], relationObjects[1],
-                propMapNew, user, aclAdd, aclRemove);
-        return storedObject;
-    }
-
-    private StoredObject createItemIntern(CallContext context, String repositoryId, Properties properties,
-            String folderId, List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        StoredObject so = validator.createItem(context, repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-
-        Acl aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                addAces);
-        Acl aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                removeAces);
-
-        validator.createDocument(context, repositoryId, folderId, policies, extension);
-
-        // Validation stuff
-        TypeValidator.validateRequiredSystemProperties(properties);
-
-        String user = context.getUsername();
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        Map<String, PropertyData<?>> propMap = properties.getProperties();
-        // get name from properties
-        PropertyData<?> pd = propMap.get(PropertyIds.NAME);
-        String name = (String) pd.getFirstValue();
-
-        // validate ACL
-        TypeValidator.validateAcl(typeDef, aclAdd, aclRemove);
-
-        Folder folder = null;
-        if (null != folderId) {
-            if (null == so) {
-                throw new CmisInvalidArgumentException(" Cannot create item, folderId: " + folderId + " is invalid");
-            }
-
-            if (so instanceof Folder) {
-                folder = (Folder) so;
-            } else {
-                throw new CmisInvalidArgumentException("Can't create item, folderId does not refer to a folder: "
-                        + folderId);
-            }
-
-            TypeValidator.validateAllowedChildObjectTypes(typeDef, folder.getAllowedChildObjectTypeIds());
-        }
-
-        // check if the given type is an item type
-        if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_ITEM)) {
-            throw new CmisInvalidArgumentException("Cannot create an item, with a non-item type: " + typeDef.getId());
-        }
-
-        // check name syntax
-        if (!NameValidator.isValidName(name)) {
-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME + " Name is: " + name);
-        }
-
-        Properties propertiesNew = properties;
-        // set properties that are not set but have a default:
-        Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
-        if (propMapNew != propMap) { // NOSONAR
-            propertiesNew = new PropertiesImpl(propMapNew.values());
-        }
-
-        boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
-        validateProperties(repositoryId, null, propertiesNew, false, cmis11);
-
-        // set user, creation date, etc.
-        if (user == null) {
-            user = UNKNOWN_USER;
-        }
-
-        StoredObject item = null;
-
-        // Now we are sure to have document type definition:
-        item = objectStore.createItem(name, propMapNew, user, folder, policies, aclAdd, aclRemove);
-        return item;
-    }
-
-    private boolean hasDescendant(String user, ObjectStore objStore, Folder sourceFolder, Folder targetFolder) {
-        String sourceId = sourceFolder.getId();
-        String targetId = targetFolder.getId();
-
-        Folder folder = targetFolder;
-        while (targetId != null) {
-            if (targetId.equals(sourceId)) {
-                return true;
-            }
-            List<String> parentIds = objStore.getParentIds(folder, user);
-            targetId = parentIds == null || parentIds.isEmpty() ? null : parentIds.get(0);
-            if (null != targetId) {
-                folder = (Folder) objStore.getObjectById(targetId);
-            }
-        }
-        return false;
-    }
-
-    /*
-     * Recursively delete a tree by traversing it and first deleting all
-     * children and then the object itself.
-     * 
-     * returns true if operation should continue, false if it should
-     *         stop
-     */
-    private boolean deleteRecursive(ObjectStore objStore, Folder parentFolder, boolean continueOnFailure,
-            boolean allVersions, List<String> failedToDeleteIds, String user) {
-
-        ObjectStore.ChildrenResult childrenResult = objStore.getChildren(parentFolder, -1, -1, "Admin", true);
-        List<Fileable> children = childrenResult.getChildren();
-
-        if (null == children) {
-            return true;
-        }
-
-        for (Fileable child : children) {
-            if (child instanceof Folder) {
-                boolean mustContinue = deleteRecursive(objStore, (Folder) child, continueOnFailure, allVersions,
-                        failedToDeleteIds, user);
-                if (!mustContinue && !continueOnFailure) {
-                    return false; // stop further deletions
-                }
-            } else {
-                try {
-                    objStore.deleteObject(child.getId(), allVersions, user);
-                } catch (Exception e) {
-                    failedToDeleteIds.add(child.getId());
-                }
-            }
-        }
-        objStore.deleteObject(parentFolder.getId(), allVersions, user);
-        return true;
-    }
-
-    private static ContentStream getContentStream(ObjectStore objStore, StoredObject so, String streamId, BigInteger offset, 
-            BigInteger length) {
-        ContentStream csd = null;
-        long lOffset = offset == null ? 0 : offset.longValue();
-        long lLength = length == null ? -1 : length.longValue();
-
-        if (streamId == null) {
-            csd =  objStore.getContent(so, lOffset, lLength);
-        } else if (streamId.endsWith("-rendition")) {
-            csd = objStore.getRenditionContent(so, streamId, lOffset, lLength);
-        }
-
-        return csd;
-    }
-
-    private Map<String, PropertyData<?>> setDefaultProperties(TypeDefinition typeDef,
-            Map<String, PropertyData<?>> properties) {
-        Map<String, PropertyData<?>> propertiesReturn = properties;
-        Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-        boolean hasCopied = false;
-
-        for (PropertyDefinition<?> propDef : propDefs.values()) {
-            String propId = propDef.getId();
-            List<?> defaultVal = propDef.getDefaultValue();
-            if (defaultVal != null && !defaultVal.isEmpty() && null == properties.get(propId)) {
-                if (!hasCopied) {
-                    // copy because it is an unmodified collection
-                    propertiesReturn = new HashMap<String, PropertyData<?>>(properties);
-                    hasCopied = true;
-                }
-                Object value = propDef.getCardinality() == Cardinality.SINGLE ? defaultVal.get(0) : defaultVal;
-                PropertyData<?> pd = fStoreManager.getObjectFactory().createPropertyData(propDef, value);
-                // set property:
-                propertiesReturn.put(propId, pd);
-            }
-        }
-        return propertiesReturn;
-    }
-
-    private void validateProperties(String repositoryId, StoredObject so, Properties properties,
-            boolean checkMandatory, boolean cmis11) {
-        TypeDefinition typeDef;
-
-        if (null != so) {
-            typeDef = getTypeDefinition(repositoryId, so);
-        } else {
-            typeDef = getTypeDefinition(repositoryId, properties);
-        }
-
-        // check properties for validity
-        if (!cmis11) {
-            TypeValidator.validateProperties(typeDef, properties, checkMandatory, cmis11);
-            return;
-        }
-
-        // CMIS 1.1 secondary types
-        PropertyData<?> pd = properties.getProperties().get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-
-        @SuppressWarnings("unchecked")
-        List<String> secondaryTypeIds = (List<String>) (pd == null ? null : pd.getValues());
-        // if no secondary types are passed use the existing ones:
-        if (null != so && (null == secondaryTypeIds || secondaryTypeIds.size() == 0)) {
-            secondaryTypeIds = so.getSecondaryTypeIds();
-        }
-
-        if (null != secondaryTypeIds && secondaryTypeIds.size() != 0) {
-            List<String> allTypeIds = new ArrayList<String>(secondaryTypeIds);
-            allTypeIds.add(typeDef.getId());
-            List<TypeDefinition> typeDefs = getTypeDefinition(repositoryId, allTypeIds);
-            TypeValidator.validateProperties(typeDefs, properties, checkMandatory);
-        } else {
-            TypeValidator.validateProperties(typeDef, properties, checkMandatory, true);
-        }
-    }
-
-    private TypeDefinition getSecondaryTypeDefinition(String repositoryId, Set<String> secondaryTypeIds,
-            String propertyId) {
-        if (null == secondaryTypeIds || secondaryTypeIds.isEmpty()) {
-            return null;
-        }
-
-        for (String typeId : secondaryTypeIds) {
-            TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
-            TypeDefinition typeDef = typeDefC.getTypeDefinition();
-
-            if (TypeValidator.typeContainsProperty(typeDef, propertyId)) {
-                return typeDef;
-            }
-        }
-
-        return null;
-    }
-
-    private List<String> getListOfPropertiesToDeleteFromRemovedSecondaryTypes(String repositoryId, StoredObject so,
-            List<String> newSecondaryTypeIds) {
-
-        List<String> propertiesToDelete = new ArrayList<String>(); // properties
-                                                                   // id to be
-                                                                   // removed
-
-        // calculate delta to be removed
-        List<String> existingSecondaryTypeIds = so.getSecondaryTypeIds();
-        List<String> delta = new ArrayList<String>(existingSecondaryTypeIds);
-        delta.removeAll(newSecondaryTypeIds);
-        for (String typeDefId : delta) {
-            TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeDefId);
-            TypeDefinition typeDef = typeDefC.getTypeDefinition();
-            propertiesToDelete.addAll(typeDef.getPropertyDefinitions().keySet());
-        }
-
-        // TODO: the list may contain too many properties, if the same property
-        // is also in a type not to be removed
-        return propertiesToDelete;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java
deleted file mode 100644
index 2924679..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-public class InMemoryPolicyServiceImpl extends InMemoryAbstractServiceImpl {
-
-    protected InMemoryPolicyServiceImpl(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public List<ObjectData> getAppliedPolicies(CallContext context, String repositoryId, String objectId,
-            String filter, ExtensionsData extension) {
-
-        StoredObject so = validator.getAppliedPolicies(context, repositoryId, objectId, extension);
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
-        }
-
-        String user = context.getUsername();
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-
-        List<String> polIds = so.getAppliedPolicies();
-        List<ObjectData> res = new ArrayList<ObjectData>();
-        if (null != polIds && polIds.size() > 0) {
-            ObjectStore os = super.fStoreManager.getObjectStore(repositoryId);
-            for (String polId : polIds) {
-                StoredObject pol = os.getObjectById(polId);
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, pol, filter, user, false,
-                        IncludeRelationships.NONE, null, false, false, null);
-                res.add(od);
-            }
-        }
-        return res;
-    }
-
-    public void removePolicy(CallContext context, String repositoryId, String policyId, String objectId,
-            ExtensionsData extension) {
-
-        StoredObject so = validator.getAppliedPolicies(context, repositoryId, objectId, extension);
-
-        List<String> polIds = so.getAppliedPolicies();
-        if (null == polIds || !(polIds.contains(policyId))) {
-            throw new CmisInvalidArgumentException("Policy id " + policyId
-                    + "cannot be removed, because it is not applied to object " + objectId);
-        }
-        so.removePolicy(policyId);
-    }
-
-    public void applyPolicy(CallContext context, String repositoryId, String policyId, String objectId,
-            ExtensionsData extension) {
-        StoredObject[] sos = validator.applyPolicy(context, repositoryId, policyId, objectId, extension);
-        StoredObject so = sos[1];
-
-        List<String> polIds = so.getAppliedPolicies();
-        if (null != polIds && polIds.contains(policyId)) {
-            throw new CmisInvalidArgumentException("Policy id " + policyId
-                    + "cannot be added, because it is already applied to object " + objectId);
-        }
-        so.addAppliedPolicy(policyId);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java
deleted file mode 100644
index eaadc04..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-public class InMemoryRelationshipServiceImpl extends InMemoryAbstractServiceImpl {
-
-    private InMemoryRepositoryServiceImpl repSvc;
-
-    protected InMemoryRelationshipServiceImpl(StoreManager storeManager, InMemoryRepositoryServiceImpl repSvc) {
-        super(storeManager);
-        this.repSvc = repSvc;
-    }
-
-    public ObjectList getObjectRelationships(CallContext context, String repositoryId, String objectId,
-            Boolean includeSubRelationshipTypes, RelationshipDirection relationshipDirection, String typeId,
-            String filter, Boolean includeAllowableActions, BigInteger maxItems, BigInteger skipCount,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        int skip = null == skipCount ? 0 : skipCount.intValue();
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-
-        StoredObject so = validator.getObjectRelationships(context, repositoryId, objectId, relationshipDirection,
-                typeId, extension);
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
-        }
-
-        String user = context.getUsername();
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        List<String> typeIds = null;
-        if (null != typeId) {
-            typeIds = new ArrayList<String>();
-            typeIds.add(typeId);
-            if (includeSubRelationshipTypes) {
-                List<TypeDefinitionContainer> typeDescs = repSvc.getTypeDescendants(context, repositoryId, typeId,
-                        null, true, null);
-                if (null != typeDescs) {
-                    for (TypeDefinitionContainer t : typeDescs) {
-                        typeIds.add(t.getTypeDefinition().getId());
-                    }
-                }
-            }
-        }
-        List<StoredObject> rels = objStore.getRelationships(objectId, typeIds, relationshipDirection);
-        ObjectListImpl result = new ObjectListImpl();
-        List<ObjectData> odList = new ArrayList<ObjectData>();
-
-        for (StoredObject rel : rels) {
-            ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, rel, filter, user,
-                    includeAllowableActions, IncludeRelationships.NONE, null, false, false, extension);
-            odList.add(od);
-        }
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        result.setObjects(odList);
-        result.setNumItems(BigInteger.valueOf(rels.size()));
-        result.setHasMoreItems(rels.size() > skip + rels.size());
-
-        return result;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
deleted file mode 100644
index de006bc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.inmemory.TypeValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-public class InMemoryRepositoryServiceImpl extends InMemoryAbstractServiceImpl {
-
-    public InMemoryRepositoryServiceImpl(StoreManager storeManager) {
-        super(storeManager);
-    }
-
-    public RepositoryInfo getRepositoryInfo(CallContext context, String repositoryId, ExtensionsData extension) {
-
-        validator.getRepositoryInfo(context, repositoryId, extension);
-
-        RepositoryInfo repoInfo = getRepositoryInfoFromStoreManager(repositoryId);
-
-        return repoInfo;
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(CallContext context, ExtensionsData extension) {
-
-        validator.getRepositoryInfos(context, extension);
-        List<RepositoryInfo> res = new ArrayList<RepositoryInfo>();
-        List<String> repIds = fStoreManager.getAllRepositoryIds();
-        for (String repId : repIds) {
-            res.add(fStoreManager.getRepositoryInfo(repId));
-        }
-        return res;
-    }
-
-    public TypeDefinitionList getTypeChildren(CallContext context, String repositoryId, String typeId,
-            Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        validator.getTypeChildren(context, repositoryId, typeId, extension);
-
-        boolean inclPropDefs = includePropertyDefinitions == null ? false : includePropertyDefinitions;
-        getRepositoryInfoFromStoreManager(repositoryId); // just to check if
-        // repository exists
-
-        int skip = skipCount == null ? 0 : skipCount.intValue();
-        int max = maxItems == null ? -1 : maxItems.intValue();
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl();
-        List<TypeDefinitionContainer> children;
-        if (typeId == null) {
-            // spec says that base types must be returned in this case
-            children = fStoreManager.getRootTypes(repositoryId, inclPropDefs);
-        } else {
-            children = getTypeDescendants(context, repositoryId, typeId, BigInteger.valueOf(1), inclPropDefs, null);
-        }
-        result.setNumItems(BigInteger.valueOf(children.size()));
-        result.setHasMoreItems(children.size() > max - skip);
-        List<TypeDefinition> childrenTypes = new ArrayList<TypeDefinition>();
-        ListIterator<TypeDefinitionContainer> it = children.listIterator(skip);
-        if (max < 0) {
-            max = children.size();
-        }
-        for (int i = skip; i < max + skip && it.hasNext(); i++) {
-            childrenTypes.add(it.next().getTypeDefinition());
-        }
-
-        result.setList(childrenTypes);
-
-        return result;
-    }
-
-    public TypeDefinition getTypeDefinition(CallContext context, String repositoryId, String typeId,
-            ExtensionsData extension) {
-
-        validator.getTypeDefinition(context, repositoryId, typeId, extension);
-
-        TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId);
-        if (tc != null) {
-            return tc.getTypeDefinition();
-        } else {
-            throw new CmisObjectNotFoundException("unknown type id: " + typeId);
-        }
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(CallContext context, String repositoryId, String typeId,
-            BigInteger depth, Boolean includePropertyDefinitions, ExtensionsData extension) {
-
-        validator.getTypeDescendants(context, repositoryId, typeId, extension);
-
-        boolean inclPropDefs = includePropertyDefinitions == null ? false : includePropertyDefinitions;
-
-        if (depth != null && depth.intValue() == 0) {
-            throw new CmisInvalidArgumentException("depth == 0 is illegal in getTypeDescendants");
-        }
-
-        List<TypeDefinitionContainer> result = null;
-        if (typeId == null) {
-            // spec says that depth must be ignored in this case
-            Collection<TypeDefinitionContainer> tmp = fStoreManager.getTypeDefinitionList(repositoryId, inclPropDefs);
-            result = new ArrayList<TypeDefinitionContainer>(tmp);
-        } else {
-            TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId, inclPropDefs,
-                    depth == null ? -1 : depth.intValue());
-            if (tc == null) {
-                throw new CmisInvalidArgumentException("unknown type id: " + typeId);
-            } else {
-                result = tc.getChildren();
-            }
-        }
-
-        return result;
-    }
-
-    public TypeDefinition createType(CallContext context, String repositoryId, TypeDefinition type, ExtensionsData extension) {
-
-        validator.createType(context, repositoryId, type, extension);        
-        TypeManager typeManager = fStoreManager.getTypeManager(repositoryId);
-        AbstractTypeDefinition newType = TypeValidator.completeType(type);
-        TypeValidator.adjustTypeNamesAndId(newType);
-        TypeValidator.checkType(typeManager, newType);
-        typeManager.addTypeDefinition(newType, true);
-        return newType;
-    }
-
-    public TypeDefinition updateType(CallContext context, String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        validator.updateType(context, repositoryId, type, extension);        
-        String typeId = type.getId();
-        TypeManager typeManager = fStoreManager.getTypeManager(repositoryId);
-        if (null == typeManager) {
-            throw new CmisInvalidArgumentException("Unknown repository " + repositoryId);
-        }
-
-        TypeDefinitionContainer typeDefC = typeManager.getTypeById(typeId);
-        if (null == typeDefC) {
-            throw new CmisInvalidArgumentException("Cannot update type unknown type id: " + typeId);
-        }
-
-        typeManager.updateTypeDefinition(type);
-        return type;
-    }
-
-    public void deleteType(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
-
-        validator.deleteType(context, repositoryId, typeId, extension);        
-        TypeManager typeManager = fStoreManager.getTypeManager(repositoryId);
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        if (objectStore.isTypeInUse(typeId)) {
-            throw new CmisInvalidArgumentException("type definition " + typeId + " cannot be deleted, type is in use.");
-        }
-
-        typeManager.deleteTypeDefinition(typeId);
-    }
-
-    private RepositoryInfo getRepositoryInfoFromStoreManager(String repositoryId) {
-        RepositoryInfo repoInfo = fStoreManager.getRepositoryInfo(repositoryId);
-        if (null == repoInfo || !repoInfo.getId().equals(repositoryId)) {
-            throw new CmisInvalidArgumentException("Unknown repository: " + repositoryId);
-        }
-        return repoInfo;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
deleted file mode 100644
index e0cdd27..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-
-public class InMemoryService extends AbstractCmisService {
-
-    private final StoreManager storeManager; // singleton root of everything
-
-    private final InMemoryRepositoryServiceImpl fRepSvc;
-    private final InMemoryObjectServiceImpl fObjSvc;
-    private final InMemoryNavigationServiceImpl fNavSvc;
-    private final InMemoryVersioningServiceImpl fVerSvc;
-    private final InMemoryDiscoveryServiceImpl fDisSvc;
-    private final InMemoryMultiFilingServiceImpl fMultiSvc;
-    private final InMemoryRelationshipServiceImpl fRelSvc;
-    private final InMemoryPolicyServiceImpl fPolSvc;
-    private final InMemoryAclService fAclSvc;
-
-    public StoreManager getStoreManager() {
-        return storeManager;
-    }
-
-    public InMemoryService(StoreManager sm) {
-        storeManager = sm;
-        fRepSvc = new InMemoryRepositoryServiceImpl(storeManager);
-        fNavSvc = new InMemoryNavigationServiceImpl(storeManager);
-        fObjSvc = new InMemoryObjectServiceImpl(storeManager);
-        fVerSvc = new InMemoryVersioningServiceImpl(storeManager, fObjSvc);
-        fDisSvc = new InMemoryDiscoveryServiceImpl(storeManager);
-        fMultiSvc = new InMemoryMultiFilingServiceImpl(storeManager);
-        fRelSvc = new InMemoryRelationshipServiceImpl(storeManager, fRepSvc);
-        fPolSvc = new InMemoryPolicyServiceImpl(storeManager);
-        fAclSvc = new InMemoryAclService(storeManager);
-    }
-
-    public CallContext getCallContext() {
-        return InMemoryServiceContext.getCallContext();
-    }
-
-    public void setCallContext(CallContext context) {
-        InMemoryServiceContext.setCallContext(context);
-    }
-
-    // --- repository service ---
-
-    @Override
-    public void close() {
-        super.close();
-        setCallContext(null);
-    }
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return fRepSvc.getRepositoryInfos(getCallContext(), extension);
-    }
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        return fRepSvc.getRepositoryInfo(getCallContext(), repositoryId, extension);
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fRepSvc.getTypeChildren(getCallContext(), repositoryId, typeId, includePropertyDefinitions, maxItems,
-                skipCount, extension);
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return fRepSvc.getTypeDefinition(getCallContext(), repositoryId, typeId, extension);
-    }
-
-    @Override
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        return fRepSvc.createType(getCallContext(), repositoryId, type, extension);
-    }
-
-    @Override
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        return fRepSvc.updateType(getCallContext(), repositoryId, type, extension);
-    }
-
-    @Override
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        fRepSvc.deleteType(getCallContext(), repositoryId, typeId, extension);
-    }
-
-    @Override
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        return fRepSvc.getTypeDescendants(getCallContext(), repositoryId, typeId, depth, includePropertyDefinitions,
-                extension);
-    }
-
-    // --- navigation service ---
-
-    @Override
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fNavSvc.getCheckedOutDocs(getCallContext(), repositoryId, folderId, filter, orderBy,
-                includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension, this);
-    }
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fNavSvc.getChildren(getCallContext(), repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension, this);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return fNavSvc.getDescendants(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension, this);
-    }
-
-    @Override
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        return fNavSvc.getFolderParent(getCallContext(), repositoryId, folderId, filter, extension, this);
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return fNavSvc.getFolderTree(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension, this);
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        return fNavSvc.getObjectParents(getCallContext(), repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includeRelativePathSegment, extension, this);
-    }
-
-    // --- object service ---
-
-    @Override
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        String id = fObjSvc.create(getCallContext(), repositoryId, properties, folderId, contentStream,
-                versioningState, policies, extension, this);
-        return id;
-
-    }
-
-    @Override
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return fObjSvc.createDocument(getCallContext(), repositoryId, properties, folderId, contentStream,
-                versioningState, policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        return fObjSvc.createDocumentFromSource(getCallContext(), repositoryId, sourceId, properties, folderId,
-                versioningState, policies, addAces, removeAces, extension);
-    }
-
-    @Override
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return fObjSvc.createFolder(getCallContext(), repositoryId, properties, folderId, policies, addAces,
-                removeAces, extension);
-    }
-
-    @Override
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return fObjSvc.createPolicy(getCallContext(), repositoryId, properties, folderId, policies, addAces,
-                removeAces, extension);
-    }
-
-    @Override
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return fObjSvc.createRelationship(getCallContext(), repositoryId, properties, policies, addAces, removeAces,
-                extension);
-    }
-
-    @Override
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return fObjSvc.createItem(getCallContext(), repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    @Override
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        fObjSvc.deleteContentStream(getCallContext(), repositoryId, objectId, changeToken, extension);
-    }
-
-    @Override
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        fObjSvc.deleteObject(getCallContext(), repositoryId, objectId, allVersions, extension);
-    }
-
-    @Override
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        fObjSvc.deleteObject(getCallContext(), repositoryId, objectId, allVersions, extension);
-    }
-
-    @Override
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        return fObjSvc.deleteTree(getCallContext(), repositoryId, folderId, allVersions, unfileObjects,
-                continueOnFailure, extension);
-    }
-
-    @Override
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return fObjSvc.getAllowableActions(getCallContext(), repositoryId, objectId, extension);
-    }
-
-    @Override
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        return fObjSvc.getContentStream(getCallContext(), repositoryId, objectId, streamId, offset, length, extension);
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return fObjSvc.getObject(getCallContext(), repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, this);
-    }
-
-    @Override
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return fObjSvc.getObjectByPath(getCallContext(), repositoryId, path, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, this);
-    }
-
-    @Override
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        return fObjSvc.getProperties(getCallContext(), repositoryId, objectId, filter, extension);
-    }
-
-    @Override
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fObjSvc.getRenditions(getCallContext(), repositoryId, objectId, renditionFilter, maxItems, skipCount,
-                extension);
-    }
-
-    @Override
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        fObjSvc.moveObject(getCallContext(), repositoryId, objectId, targetFolderId, sourceFolderId, extension, this);
-    }
-
-    @Override
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        fObjSvc.setContentStream(getCallContext(), repositoryId, objectId, overwriteFlag, changeToken, contentStream,
-                extension);
-    }
-
-    @Override
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        fObjSvc.updateProperties(getCallContext(), repositoryId, objectId, changeToken, properties, null, extension,
-                this);
-    }
-
-    // CMIS 1.1
-    @Override
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        fObjSvc.appendContentStream(getCallContext(), repositoryId, objectId, changeToken, contentStream, extension);
-    }
-
-    // CMIS 1.1
-    @Override
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        return fObjSvc.bulkUpdateProperties(getCallContext(), repositoryId, objectIdAndChangeToken, properties,
-                addSecondaryTypeIds, removeSecondaryTypeIds, extension, this);
-    }
-
-    // --- versioning service ---
-
-    @Override
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        fVerSvc.cancelCheckOut(getCallContext(), repositoryId, objectId, extension);
-    }
-
-    @Override
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        fVerSvc.checkIn(getCallContext(), repositoryId, objectId, major, properties, contentStream, checkinComment,
-                policies, addAces, removeAces, extension, this);
-    }
-
-    @Override
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        fVerSvc.checkOut(getCallContext(), repositoryId, objectId, extension, contentCopied, this);
-    }
-
-    @Override
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        return fVerSvc.getObjectOfLatestVersion(getCallContext(), repositoryId, objectId, versionSeriesId, major,
-                filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
-                extension, this);
-    }
-
-    @Override
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        return fVerSvc.getPropertiesOfLatestVersion(getCallContext(), repositoryId, objectId, versionSeriesId, major,
-                filter, extension);
-    }
-
-    @Override
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        return fVerSvc.getAllVersions(getCallContext(), repositoryId, objectId, versionSeriesId, filter,
-                includeAllowableActions, extension, this);
-    }
-
-    // --- discovery service ---
-
-    @Override
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, 
-            ExtensionsData extension) {
-        return fDisSvc.getContentChanges(getCallContext(), repositoryId, changeLogToken, includeProperties, filter,
-                includePolicyIds, includeAcl, maxItems, extension, this);
-    }
-
-    @Override
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fDisSvc.query(getCallContext(), repositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    // --- multi filing service ---
-
-    @Override
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        fMultiSvc.addObjectToFolder(getCallContext(), repositoryId, objectId, folderId, allVersions, extension, this);
-    }
-
-    @Override
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, 
-            ExtensionsData extension) {
-        fMultiSvc.removeObjectFromFolder(getCallContext(), repositoryId, objectId, folderId, extension, this);
-    }
-
-    // --- relationship service ---
-
-    @Override
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return fRelSvc.getObjectRelationships(getCallContext(), repositoryId, objectId, includeSubRelationshipTypes,
-                relationshipDirection, typeId, filter, includeAllowableActions, maxItems, skipCount, extension, this);
-    }
-
-    // --- ACL service ---
-
-    @Override
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        return fAclSvc.applyAcl(getCallContext(), repositoryId, objectId, aces, aclPropagation);
-    }
-
-    @Override
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        return fAclSvc.applyAcl(getCallContext(), repositoryId, objectId, addAces, removeAces, aclPropagation,
-                extension, this);
-    }
-
-    @Override
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        return fAclSvc.getAcl(getCallContext(), repositoryId, objectId, onlyBasicPermissions, extension, this);
-    }
-
-    // --- policy service ---
-
-    @Override
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        fPolSvc.applyPolicy(getCallContext(), repositoryId, policyId, objectId, extension);
-    }
-
-    @Override
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        return fPolSvc.getAppliedPolicies(getCallContext(), repositoryId, objectId, filter, extension);
-    }
-
-    @Override
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        fPolSvc.removePolicy(getCallContext(), repositoryId, policyId, objectId, extension);
-    }
-
-    // /////////////
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java
deleted file mode 100644
index fe87463..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.server.support.CmisServiceWrapper;
-
-/**
- * Helper class to associate context information with each incoming call.
- * 
- */
-public final class InMemoryServiceContext {
-
-    private static final class ContextHolder {
-        private CmisServiceWrapper<InMemoryService> wrapper;
-        private CallContext callContext;
-
-        private ContextHolder(CmisServiceWrapper<InMemoryService> wrapper) {
-            this.wrapper = wrapper;
-        }
-
-        public CmisServiceWrapper<InMemoryService> getServiceWrapper() {
-            return wrapper;
-        }
-
-        public void setCallContext(CallContext context) {
-            this.callContext = context;
-        }
-
-        public CallContext getCallContext() {
-            return callContext;
-        }
-    }
-
-    private static ThreadLocal<ContextHolder> threadLocalService = new ThreadLocal<ContextHolder>();
-
-    private InMemoryServiceContext() {
-    }
-
-    public static synchronized void setWrapperService(CmisServiceWrapper<InMemoryService> wrapperService) {
-        threadLocalService.remove();
-        if (null != wrapperService) {
-            ContextHolder holder = new ContextHolder(wrapperService);
-            threadLocalService.set(holder);
-        }
-    }
-
-    public static synchronized InMemoryService getCmisService() {
-        ContextHolder holder = threadLocalService.get();
-        if (null == holder) {
-            return null;
-        } else {
-            CmisServiceWrapper<InMemoryService> wrapperService = holder.getServiceWrapper();
-            return wrapperService == null ? null : wrapperService.getWrappedService();
-        }
-    }
-
-    public static synchronized void setCallContext(CallContext context) {
-        ContextHolder holder = threadLocalService.get();
-        if (null == holder) {
-            throw new IllegalStateException("Cannot store call context, no service wrapper set.");
-        } else {
-            holder.setCallContext(context);
-        }
-    }
-
-    public static CallContext getCallContext() {
-        ContextHolder holder = threadLocalService.get();
-        return null == holder ? null : holder.getCallContext();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
deleted file mode 100644
index f3fea33..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.next;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
-import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
-import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
-import org.apache.chemistry.opencmis.server.support.CmisServiceWrapper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InMemoryServiceFactoryImpl extends AbstractServiceFactory {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InMemoryServiceFactoryImpl.class.getName());
-    private static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(1000);
-    private static final BigInteger DEFAULT_MAX_ITEMS_TYPES = BigInteger.valueOf(100);
-    private static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(2);
-    private static final BigInteger DEFAULT_DEPTH_TYPES = BigInteger.valueOf(-1);
-    private static CallContext overrideCtx;
-
-    private boolean fUseOverrideCtx = false;
-    private StoreManager storeManager; // singleton root of everything
-    private CleanManager cleanManager = null;
-
-    private File tempDir;
-    private int memoryThreshold;
-    private long maxContentSize;
-    private boolean encrypt;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        LOG.info("Initializing in-memory repository...");
-        LOG.debug("Init paramaters: " + parameters);
-
-        String overrideCtxParam = parameters.get(ConfigConstants.OVERRIDE_CALL_CONTEXT);
-        if (null != overrideCtxParam) {
-            fUseOverrideCtx = true;
-        }
-
-        ConfigurationSettings.init(parameters);
-
-        String repositoryClassName = parameters.get(ConfigConstants.REPOSITORY_CLASS);
-        if (null == repositoryClassName) {
-            repositoryClassName = StoreManagerImpl.class.getName();
-        }
-
-        if (null == storeManager) {
-            storeManager = StoreManagerFactory.createInstance(repositoryClassName);
-        }
-
-        String tempDirStr = parameters.get(ConfigConstants.TEMP_DIR);
-        tempDir = (tempDirStr == null ? super.getTempDirectory() : new File(tempDirStr));
-
-        String memoryThresholdStr = parameters.get(ConfigConstants.MEMORY_THRESHOLD);
-        memoryThreshold = (memoryThresholdStr == null ? super.getMemoryThreshold() : Integer
-                .parseInt(memoryThresholdStr));
-
-        String maxContentSizeStr = parameters.get(ConfigConstants.MAX_CONTENT_SIZE);
-        maxContentSize = (maxContentSizeStr == null ? super.getMaxContentSize() : Long.parseLong(maxContentSizeStr));
-
-        String encryptTempFilesStr = parameters.get(ConfigConstants.ENCRYPT_TEMP_FILES);
-        encrypt = (encryptTempFilesStr == null ? super.encryptTempFiles() : Boolean.parseBoolean(encryptTempFilesStr));
-
-        Date deploymentTime = new Date();
-        String strDate = new SimpleDateFormat("EEE MMM dd hh:mm:ss a z yyyy", Locale.US).format(deploymentTime);
-
-        parameters.put(ConfigConstants.DEPLOYMENT_TIME, strDate);
-
-        boolean created = initStorageManager(parameters);
-
-        if (created) {
-            fillRepositoryIfConfigured(parameters);
-        }
-
-        Long cleanInterval = ConfigurationSettings
-                .getConfigurationValueAsLong(ConfigConstants.CLEAN_REPOSITORY_INTERVAL);
-        if (null != cleanInterval && cleanInterval > 0) {
-            scheduleCleanRepositoryJob(cleanInterval);
-        }
-
-        LOG.info("...initialized in-memory repository.");
-    }
-
-    public static void setOverrideCallContext(CallContext ctx) {
-        overrideCtx = ctx;
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        LOG.debug("start getService()");
-        CallContext contextToUse = context;
-        // Attach the CallContext to a thread local context that can be
-        // accessed from everywhere
-        // Some unit tests set their own context. So if we find one then we use
-        // this one and ignore the provided one. Otherwise we set a new context.
-        if (fUseOverrideCtx && null != overrideCtx) {
-            contextToUse = overrideCtx;
-        }
-
-        InMemoryService inMemoryService = InMemoryServiceContext.getCmisService();
-        if (inMemoryService == null) {
-            LOG.debug("Creating new InMemoryService instance!");
-            CmisServiceWrapper<InMemoryService> wrapperService;
-            inMemoryService = new InMemoryService(storeManager);
-            wrapperService = new CmisServiceWrapper<InMemoryService>(inMemoryService, DEFAULT_MAX_ITEMS_TYPES,
-                    DEFAULT_DEPTH_TYPES, DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
-            InMemoryServiceContext.setWrapperService(wrapperService);
-        }
-
-        inMemoryService.setCallContext(contextToUse);
-
-        LOG.debug("stop getService()");
-        return inMemoryService;
-    }
-
-    @Override
-    public File getTempDirectory() {
-        return tempDir;
-    }
-
-    @Override
-    public boolean encryptTempFiles() {
-        return encrypt;
-    }
-
-    @Override
-    public int getMemoryThreshold() {
-        return memoryThreshold;
-    }
-
-    @Override
-    public long getMaxContentSize() {
-        return maxContentSize;
-    }
-
-    @Override
-    public void destroy() {
-        LOG.debug("Destroying InMemory service instance.");
-        if (null != cleanManager) {
-            cleanManager.stopCleanRepositoryJob();
-        }
-        InMemoryServiceContext.setWrapperService(null);
-    }
-
-    public StoreManager getStoreManger() {
-        return storeManager;
-    }
-
-    private boolean initStorageManager(Map<String, String> parameters) {
-        // initialize in-memory management
-        boolean created = false;
-        String repositoryClassName = parameters.get(ConfigConstants.REPOSITORY_CLASS);
-        if (null == repositoryClassName) {
-            repositoryClassName = StoreManagerImpl.class.getName();
-        }
-
-        if (null == storeManager) {
-            storeManager = StoreManagerFactory.createInstance(repositoryClassName);
-        }
-
-        String repositoryId = parameters.get(ConfigConstants.REPOSITORY_ID);
-
-        List<String> allAvailableRepositories = storeManager.getAllRepositoryIds();
-
-        // init existing repositories
-        for (String existingRepId : allAvailableRepositories) {
-            storeManager.initRepository(existingRepId);
-        }
-
-        // create repository if configured as a startup parameter
-        if (null != repositoryId) {
-            if (allAvailableRepositories.contains(repositoryId)) {
-                LOG.warn("Repostory " + repositoryId + " already exists and will not be created.");
-            } else {
-                String typeCreatorClassName = parameters.get(ConfigConstants.TYPE_CREATOR_CLASS);
-                storeManager.createAndInitRepository(repositoryId, typeCreatorClassName);
-                created = true;
-            }
-        }
-
-        // check if a type definitions XML file is configured. if yes import
-        // type definitions
-        String typeDefsFileName = parameters.get(ConfigConstants.TYPE_XML);
-        if (null == typeDefsFileName) {
-            LOG.info("No file name for type definitions given, no types will be created.");
-        } else {
-            TypeManager typeManager = storeManager.getTypeManager(repositoryId);
-            TypeManager tmc = typeManager;
-            importTypesFromFile(tmc, typeDefsFileName);
-        }
-        return created;
-    }
-
-    private void importTypesFromFile(TypeManager tmc, String typeDefsFileName) {
-
-        BufferedInputStream stream = null;
-        TypeDefinition typeDef = null;
-        File f = new File(typeDefsFileName);
-        InputStream typesStream = null;
-
-        if (!f.isFile()) {
-            typesStream = this.getClass().getResourceAsStream("/" + typeDefsFileName);
-        } else if (f.canRead()) {
-            try {
-                typesStream = new FileInputStream(f);
-            } catch (Exception e) {
-                LOG.error("Could not load type definitions from file '" + typeDefsFileName + "': " + e);
-            }
-        }
-
-        if (typesStream == null) {
-            LOG.warn("Resource file with type definitions " + typeDefsFileName
-                    + " could not be found, no types will be created.");
-            return;
-        }
-
-        try {
-            stream = new BufferedInputStream(typesStream);
-            XMLStreamReader parser = XMLUtils.createParser(stream);
-            XMLUtils.findNextStartElemenet(parser);
-
-            // walk through all nested tags in top element
-            while (true) {
-                int event = parser.getEventType();
-                if (event == XMLStreamConstants.START_ELEMENT) {
-                    QName name = parser.getName();
-                    if (name.getLocalPart().equals("type")) {
-                        typeDef = XMLConverter.convertTypeDefinition(parser);
-                        LOG.debug("Found type in file: " + typeDef.getLocalName());
-                        if (typeDef.getPropertyDefinitions() == null) {
-                            ((AbstractTypeDefinition) typeDef)
-                                    .setPropertyDefinitions(new LinkedHashMap<String, PropertyDefinition<?>>());
-                        }
-                        tmc.addTypeDefinition(typeDef, true);
-                    }
-                    XMLUtils.next(parser);
-                } else if (event == XMLStreamConstants.END_ELEMENT) {
-                    break;
-                } else {
-                    if (!next(parser)) {
-                        break;
-                    }
-                }
-            }
-            parser.close();
-        } catch (Exception e) {
-            LOG.error("Could not load type definitions from file '" + typeDefsFileName + "': " + e);
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    private static List<String> readPropertiesToSetFromConfig(Map<String, String> parameters, String keyPrefix) {
-        List<String> propsToSet = new ArrayList<String>();
-        for (int i = 0;; ++i) {
-            String propertyKey = keyPrefix + Integer.toString(i);
-            String propertyToAdd = parameters.get(propertyKey);
-            if (null == propertyToAdd) {
-                break;
-            } else {
-                propsToSet.add(propertyToAdd);
-            }
-        }
-        return propsToSet;
-    }
-
-    private void fillRepositoryIfConfigured(Map<String, String> parameters) {
-
-        class DummyCallContext implements CallContext {
-
-            @Override
-            public String get(String key) {
-                return null;
-            }
-
-            @Override
-            public String getBinding() {
-                return null;
-            }
-
-            @Override
-            public boolean isObjectInfoRequired() {
-                return false;
-            }
-
-            @Override
-            public CmisVersion getCmisVersion() {
-                return CmisVersion.CMIS_1_1;
-            }
-
-            @Override
-            public String getRepositoryId() {
-                return null;
-            }
-
-            @Override
-            public String getLocale() {
-                return null;
-            }
-
-            @Override
-            public BigInteger getOffset() {
-                return null;
-            }
-
-            @Override
-            public BigInteger getLength() {
-                return null;
-            }
-
-            @Override
-            public String getPassword() {
-                return null;
-            }
-
-            @Override
-            public String getUsername() {
-                return null;
-            }
-
-            @Override
-            public File getTempDirectory() {
-
-                return tempDir;
-            }
-
-            @Override
-            public boolean encryptTempFiles() {
-                return encrypt;
-            }
-
-            @Override
-            public int getMemoryThreshold() {
-                return memoryThreshold;
-            }
-
-            @Override
-            public long getMaxContentSize() {
-                return maxContentSize;
-            }
-        }
-
-        String repositoryId = parameters.get(ConfigConstants.REPOSITORY_ID);
-        String doFillRepositoryStr = parameters.get(ConfigConstants.USE_REPOSITORY_FILER);
-        String contentKindStr = parameters.get(ConfigConstants.CONTENT_KIND);
-        boolean doFillRepository = doFillRepositoryStr == null ? false : Boolean.parseBoolean(doFillRepositoryStr);
-
-        if (doFillRepository) {
-
-            // create an initial temporary service instance to fill the
-            // repository
-
-            InMemoryService svc = new InMemoryService(storeManager);
-
-            BindingsObjectFactory objectFactory = new BindingsObjectFactoryImpl();
-
-            String levelsStr = parameters.get(ConfigConstants.FILLER_DEPTH);
-            int levels = 1;
-            if (null != levelsStr) {
-                levels = Integer.parseInt(levelsStr);
-            }
-
-            String docsPerLevelStr = parameters.get(ConfigConstants.FILLER_DOCS_PER_FOLDER);
-            int docsPerLevel = 1;
-            if (null != docsPerLevelStr) {
-                docsPerLevel = Integer.parseInt(docsPerLevelStr);
-            }
-
-            String childrenPerLevelStr = parameters.get(ConfigConstants.FILLER_FOLDERS_PER_FOLDER);
-            int childrenPerLevel = 2;
-            if (null != childrenPerLevelStr) {
-                childrenPerLevel = Integer.parseInt(childrenPerLevelStr);
-            }
-
-            String documentTypeId = parameters.get(ConfigConstants.FILLER_DOCUMENT_TYPE_ID);
-            if (null == documentTypeId) {
-                documentTypeId = BaseTypeId.CMIS_DOCUMENT.value();
-            }
-
-            String folderTypeId = parameters.get(ConfigConstants.FILLER_FOLDER_TYPE_ID);
-            if (null == folderTypeId) {
-                folderTypeId = BaseTypeId.CMIS_FOLDER.value();
-            }
-
-            int contentSizeKB = 0;
-            String contentSizeKBStr = parameters.get(ConfigConstants.FILLER_CONTENT_SIZE);
-            if (null != contentSizeKBStr) {
-                contentSizeKB = Integer.parseInt(contentSizeKBStr);
-            }
-
-            ObjectGenerator.ContentKind contentKind;
-            if (null == contentKindStr) {
-                contentKind = ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT;
-            } else {
-                if (contentKindStr.equals("static/text")) {
-                    contentKind = ObjectGenerator.ContentKind.STATIC_TEXT;
-                } else if (contentKindStr.equals("lorem/text")) {
-                    contentKind = ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT;
-                } else if (contentKindStr.equals("lorem/html")) {
-                    contentKind = ObjectGenerator.ContentKind.LOREM_IPSUM_HTML;
-                } else if (contentKindStr.equals("fractal/jpeg")) {
-                    contentKind = ObjectGenerator.ContentKind.IMAGE_FRACTAL_JPEG;
-                } else {
-                    contentKind = ObjectGenerator.ContentKind.STATIC_TEXT;
-                }
-            }
-            // Create a hierarchy of folders and fill it with some documents
-            ObjectGenerator gen = new ObjectGenerator(objectFactory, svc, svc, svc, repositoryId, contentKind);
-
-            gen.setNumberOfDocumentsToCreatePerFolder(docsPerLevel);
-
-            // Set the type id for all created documents:
-            gen.setDocumentTypeId(documentTypeId);
-
-            // Set the type id for all created folders:
-            gen.setFolderTypeId(folderTypeId);
-
-            // Set contentSize
-            gen.setContentSizeInKB(contentSizeKB);
-
-            // set properties that need to be filled
-            // set the properties the generator should fill with values for
-            // documents:
-            // Note: must be valid properties in configured document and folder
-            // type
-
-            List<String> propsToSet = readPropertiesToSetFromConfig(parameters,
-                    ConfigConstants.FILLER_DOCUMENT_PROPERTY);
-            if (null != propsToSet) {
-                gen.setDocumentPropertiesToGenerate(propsToSet);
-            }
-
-            propsToSet = readPropertiesToSetFromConfig(parameters, ConfigConstants.FILLER_FOLDER_PROPERTY);
-            if (null != propsToSet) {
-                gen.setFolderPropertiesToGenerate(propsToSet);
-            }
-
-            // Simulate a runtime context with configuration parameters
-            // Attach the CallContext to a thread local context that can be
-            // accessed from everywhere
-            DummyCallContext ctx = new DummyCallContext();
-            // create thread local storage and attach call context
-            getService(ctx);
-
-            // Build the tree
-            RepositoryInfo rep = svc.getRepositoryInfo(repositoryId, null);
-            String rootFolderId = rep.getRootFolderId();
-
-            try {
-                gen.createFolderHierachy(levels, childrenPerLevel, rootFolderId);
-                // Dump the tree
-                gen.dumpFolder(rootFolderId, "*");
-            } catch (Exception e) {
-                LOG.error("Could not create folder hierarchy with documents. ", e);
-            }
-            destroy();
-        } // if
-
-    } // fillRepositoryIfConfigured
-
-    class CleanManager {
-
-        private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-        private ScheduledFuture<?> cleanerHandle = null;
-
-        public void startCleanRepositoryJob(long intervalInMinutes) {
-
-            final Runnable cleaner = new Runnable() {
-                @Override
-                public void run() {
-                    LOG.info("Cleaning repository as part of a scheduled maintenance job.");
-                    for (String repositoryId : storeManager.getAllRepositoryIds()) {
-                        ObjectStore store = storeManager.getObjectStore(repositoryId);
-                        store.clear();
-                        fillRepositoryIfConfigured(ConfigurationSettings.getParameters());
-                    }
-                    LOG.info("Repository cleaned. Freeing memory.");
-                    System.gc();
-                }
-            };
-
-            LOG.info("Repository Clean Job starting clean job, interval " + intervalInMinutes + " min");
-            cleanerHandle = scheduler.scheduleAtFixedRate(cleaner, intervalInMinutes, intervalInMinutes,
-                    TimeUnit.MINUTES);
-        }
-
-        public void stopCleanRepositoryJob() {
-            LOG.info("Repository Clean Job cancelling clean job.");
-            boolean ok = cleanerHandle.cancel(true);
-            LOG.info("Repository Clean Job cancelled with result: " + ok);
-            scheduler.shutdownNow();
-        }
-    }
-
-    private void scheduleCleanRepositoryJob(long minutes) {
-        cleanManager = new CleanManager();
-        cleanManager.startCleanRepositoryJob(minutes);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
deleted file mode 100644
index 3952844..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.server;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.NameValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-public class InMemoryVersioningServiceImpl extends InMemoryAbstractServiceImpl {
-
-    private InMemoryObjectServiceImpl fObjectService;
-    private AtomLinkInfoProvider fAtomLinkProvider;
-
-    public InMemoryVersioningServiceImpl(StoreManager storeManager, InMemoryObjectServiceImpl objectService) {
-        super(storeManager);
-        fObjectService = objectService;
-        fAtomLinkProvider = new AtomLinkInfoProvider(fStoreManager);
-    }
-
-    public void cancelCheckOut(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
-
-        StoredObject so = validator.cancelCheckOut(context, repositoryId, objectId, extension);
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        String user = context.getUsername();
-        VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
-        DocumentVersion pwc = verDoc.getPwc();
-        verDoc.cancelCheckOut(user);
-        objStore.deleteVersion(pwc);
-
-        // if this is the last version delete the document itself
-        if (verDoc.getAllVersions().size() == 0) {
-            fStoreManager.getObjectStore(repositoryId).deleteObject(verDoc.getId(), true, user);
-        }
-    }
-
-    public void checkIn(CallContext context, String repositoryId, Holder<String> objectId, Boolean majorParam,
-            Properties properties, ContentStream contentStreamParam, String checkinComment, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        Acl aclAdd = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                addAces);
-        Acl aclRemove = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
-                removeAces);
-
-        StoredObject so = validator.checkIn(context, repositoryId, objectId, aclAdd, aclRemove, policies, extension);
-
-        String user = context.getUsername();
-        VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
-
-        // check if the contentStream is a usable object or ignore it otherwise
-        // Note Browser binding sets an empty object
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        ContentStream contentStream = contentStreamParam;
-        if (contentStream != null) {
-            if (contentStream.getStream() == null) {
-                contentStream = null;
-            } else {
-                objStore.setContent(so, contentStream);
-            }
-        }
-
-        boolean major = (null == majorParam ? true : majorParam);
-
-        verDoc.checkIn(major, properties, ((Content)so).getContent(), checkinComment, policies, user);
-        if (null != properties && null != properties.getProperties()) {
-            // rename:
-            PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
-            if (pd != null) {
-                String newName = (String) pd.getFirstValue();
-                if (newName == null || newName.equals("")) {
-                    throw new CmisConstraintException("updateProperties failed, name must not be empty.");
-                }
-                if (!NameValidator.isValidName(newName)) {
-                    throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-                }
-                // Note: the test for duplicated name in folder is left to the
-                // object store
-                objStore.rename(so, (String) pd.getFirstValue(), user);
-            }
-        }
-        so.updateSystemBasePropertiesWhenModified(null, context.getUsername());
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-    }
-
-    public void checkOut(CallContext context, String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied, ObjectInfoHandler objectInfos) {
-
-        StoredObject so = validator.checkOut(context, repositoryId, objectId, extension, contentCopied);
-
-        TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
-        if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT)) {
-            throw new CmisNotSupportedException("Only documents can be checked-out.");
-        } else if (!((DocumentTypeDefinition) typeDef).isVersionable()) {
-            throw new CmisNotSupportedException("Object can't be checked-out, type is not versionable.");
-        }
-
-        checkIsVersionableObject(so);
-
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
-
-        ContentStream content = null;
-
-        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
-        if (so instanceof DocumentVersion) {
-            content = objStore.getContent(so, 0, -1);
-        } else {
-            DocumentVersion latestVer = ((VersionedDocument) so).getLatestVersion(false);
-            content = objStore.getContent(latestVer, 0, -1);
-        }
-
-        if (verDoc.isCheckedOut()) {
-            throw new CmisUpdateConflictException("Document " + objectId.getValue() + " is already checked out.");
-        }
-
-        String user = context.getUsername();
-        checkHasUser(user);
-
-        DocumentVersion pwc = verDoc.checkOut(user);
-        objectStore.setContent(pwc, content);
-        objectStore.storeVersion(pwc);
-        objectId.setValue(pwc.getId()); // return the id of the created pwc
-        if (null != contentCopied) {
-            contentCopied.setValue(true);
-        }
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, pwc, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-    }
-
-    public List<ObjectData> getAllVersions(CallContext context, String repositoryId, String objectId,
-            String versionSeriesId, String filter, Boolean includeAllowableActions, ExtensionsData extension,
-            ObjectInfoHandler objectInfos) {
-
-        // Note that in AtomPub object id is null and versionSeriesId is set and
-        // in SOAP bindinf versionSeriesId is set
-        // and objectId is null
-        StoredObject so;
-        List<ObjectData> res = new ArrayList<ObjectData>();
-        String id = versionSeriesId;
-        if (null == versionSeriesId) {
-            if (null == objectId) {
-                throw new CmisInvalidArgumentException("getAllVersions requires a version series id, but it was null.");
-            }
-            id = objectId;
-        }
-        so = validator.getAllVersions(context, repositoryId, objectId, id, extension);
-
-        if (!(so instanceof VersionedDocument)) {
-            if (!(so instanceof DocumentVersion)) {
-                throw new CmisInvalidArgumentException("getAllVersions requires an id of a versioned document.");
-            }
-            so = ((DocumentVersion) so).getParentDocument();
-        }
-
-        VersionedDocument verDoc = (VersionedDocument) so;
-        List<DocumentVersion> versions = verDoc.getAllVersions();
-        for (DocumentVersion version : versions) {
-            ObjectData objData = getObject(context, repositoryId, version.getId(), filter, includeAllowableActions,
-                    IncludeRelationships.NONE, false, extension, objectInfos);
-            res.add(objData);
-        }
-
-        // reverse list of versions because spec expects latest version first
-        List<ObjectData> temp = new ArrayList<ObjectData>(res.size());
-        for (ObjectData ver : res) {
-            temp.add(0, ver);
-        }
-        res = temp;
-
-        // provide information for Atom links for version series:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return res;
-    }
-
-    public ObjectData getObjectOfLatestVersion(CallContext context, String repositoryId, String objectId,
-            String versionSeriesId, Boolean major, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        StoredObject so = validator.getObjectOfLatestVersion(context, repositoryId, objectId, versionSeriesId,
-                extension);
-
-        ObjectData objData = null;
-
-        // In AtomPu8b you do not get the version series id, only the object id
-        if (so instanceof DocumentVersion) {
-            so = ((DocumentVersion) so).getParentDocument();
-        }
-
-        if (so instanceof VersionedDocument) {
-            VersionedDocument verDoc = (VersionedDocument) so;
-            DocumentVersion latestVersion = verDoc.getLatestVersion(major);
-            objData = getObject(context, repositoryId, latestVersion.getId(), filter, includeAllowableActions,
-                    includeRelationships, includePolicyIds, extension, objectInfos);
-        } else if (so instanceof Document) {
-            objData = getObject(context, repositoryId, so.getId(), filter, includeAllowableActions,
-                    includeRelationships, includePolicyIds, extension, objectInfos);
-        } else {
-            throw new CmisInvalidArgumentException("Object is not instance of a document (version series)");
-        }
-
-        // provide information for Atom links for version series:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
-        }
-
-        return objData;
-    }
-
-    public Properties getPropertiesOfLatestVersion(CallContext context, String repositoryId, String objectId,
-            String versionSeriesId, Boolean major, String filter, ExtensionsData extension) {
-
-        StoredObject so = validator.getPropertiesOfLatestVersion(context, repositoryId, objectId, versionSeriesId,
-                extension);
-        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-        StoredObject latestVersionObject = null;
-
-        // In AtomPu8b you do not get the version series id, only the object id
-        if (so instanceof DocumentVersion) {
-            so = ((DocumentVersion) so).getParentDocument();
-        }
-
-        if (so instanceof VersionedDocument) {
-            VersionedDocument verDoc = (VersionedDocument) so;
-            latestVersionObject = verDoc.getLatestVersion(major);
-        } else if (so instanceof Document) {
-            latestVersionObject = so;
-        } else {
-            throw new CmisInvalidArgumentException("Object is not instance of a document (version series)");
-        }
-
-        List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-
-        TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(latestVersionObject, objectStore, tm,
-                requestedIds, true);
-
-        return props;
-    }
-
-    private ObjectData getObject(CallContext context, String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, Boolean includePolicies,
-            ExtensionsData extension, ObjectInfoHandler objectInfos) {
-
-        return fObjectService.getObject(context, repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, null, includePolicies, includeAllowableActions, extension, objectInfos);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java
deleted file mode 100644
index 0ab142e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.List;
-
-/**
- * A folder is a StoredObject that that has a path and children. Children can be
- * folder or documents
- */
-public interface Children {
-
-    /**
-     * Class to represent a result of get children calls
-     *
-     */
-    public final class ChildrenResult {
-        private int noItems;
-        private List<? extends StoredObject> children;
-
-        private ChildrenResult(List<? extends StoredObject> children, int noItems) {
-            this.children = children;
-            this.noItems = noItems;
-        }
-
-        /**
-         * Get number of items in this result.
-         * @return
-         *  number of items
-         */
-        public int getNoItems() {
-            return noItems;
-        }
-
-        /**
-         * Get the children objects.
-         * @return
-         *      list of children
-         */
-        public List<? extends StoredObject> getChildren() {
-            return children;
-        }
-    }
-
-    /**
-     * get all the children of this folder. To support paging an initial offset
-     * and a maximum number of children to retrieve can be passed.
-     * 
-     * @param maxItems
-     *            max. number of items to return
-     * @param skipCount
-     *            initial offset where to start fetching
-     * @param user
-     *            user to determine visible children
-     * @param usePwc
-     *            if true return private working copy otherwise return latest
-     *            version;
-     * 
-     * @return list of children objects
-     */
-    ChildrenResult getChildren(int maxItems, int skipCount, String user, boolean usePwc);
-
-    /**
-     * get all the children of this folder which are folders. To support paging
-     * an initial offset and a maximum number of children to retrieve can be
-     * passed.
-     * 
-     * @param maxItems
-     *            max. number of items to return
-     * @param skipCount
-     *            initial offset where to start fetching
-     * @param user
-     *          user to determine visible children
-     * @return list of children folders
-     */
-    ChildrenResult getFolderChildren(int maxItems, int skipCount, String user);
-
-    /**
-     * indicate if a child with the given name exists in this folder.
-     * 
-     * @param name
-     *            name to check
-     * @return true if the name exists in the folderas child, false otherwise
-     */
-    boolean hasChild(String name);
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/CmisServiceValidator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/CmisServiceValidator.java
deleted file mode 100644
index bf2df40..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/CmisServiceValidator.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.api;

-

-import java.util.List;

-

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;

-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;

-import org.apache.chemistry.opencmis.commons.server.CallContext;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-

-public interface CmisServiceValidator {

-

-    void getRepositoryInfos(CallContext context, ExtensionsData extension);

-

-    void getRepositoryInfo(CallContext context, String repositoryId, ExtensionsData extension);

-

-    void getTypeChildren(CallContext context, String repositoryId, String typeId, ExtensionsData extension);

-

-    void getTypeDescendants(CallContext context, String repositoryId, String typeId, ExtensionsData extension);

-

-    void getTypeDefinition(CallContext context, String repositoryId, String typeId, ExtensionsData extension);

-

-    StoredObject getChildren(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject getDescendants(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject getFolderTree(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject getObjectParents(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject getFolderParent(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject getCheckedOutDocs(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject createDocument(CallContext context, String repositoryId, String folderId, List<String> policyIds,

-            ExtensionsData extension);

-

-    StoredObject createDocumentFromSource(CallContext context, String repositoryId, String sourceId, String folderId,

-            List<String> policyIds, ExtensionsData extension);

-

-    StoredObject createFolder(CallContext context, String repositoryId, String folderId, List<String> policyIds,

-            ExtensionsData extension);

-

-    // relationship has no parent, returns source and target object

-    StoredObject[] createRelationship(CallContext context, String repositoryId, String sourceId, String targetId,

-            List<String> policyIds, ExtensionsData extension);

-

-    StoredObject createPolicy(CallContext context, String repositoryId, String folderId, Acl addAces, Acl removeAces,

-            List<String> policyIds, ExtensionsData extension);

-

-    StoredObject getAllowableActions(CallContext context, String repositoryId, String objectId, 

-            ExtensionsData extension);

-

-    StoredObject getObject(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject getProperties(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject getRenditions(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject getObjectByPath(CallContext context, String repositoryId, String path, ExtensionsData extension);

-

-    StoredObject getContentStream(CallContext context, String repositoryId, String objectId, String streamId,

-            ExtensionsData extension);

-

-    StoredObject updateProperties(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension);

-

-    StoredObject[] moveObject(CallContext context, String repositoryId, Holder<String> objectId, String targetFolderId,

-            String sourceFolderId, ExtensionsData extension);

-

-    StoredObject deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,

-            ExtensionsData extension);

-

-    StoredObject deleteTree(CallContext context, String repositoryId, String folderId, Boolean allVersions,

-            UnfileObject unfileObjects, ExtensionsData extension);

-

-    StoredObject setContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            Boolean overwriteFlag, ExtensionsData extension);

-

-    // CMIS 1.1

-    StoredObject appendContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension);

-

-    StoredObject deleteContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension);

-

-    StoredObject checkOut(CallContext context, String repositoryId, Holder<String> objectId, ExtensionsData extension,

-            Holder<Boolean> contentCopied);

-

-    StoredObject cancelCheckOut(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId, Acl addAces,

-            Acl removeAces, List<String> policyIds, ExtensionsData extension);

-

-    StoredObject getObjectOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension);

-

-    StoredObject getPropertiesOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension);

-

-    StoredObject getAllVersions(CallContext context, String repositoryId, String objectId, String versionSeriesId,

-            ExtensionsData extension);

-

-    void query(CallContext context, String repositoryId, ExtensionsData extension);

-

-    void getContentChanges(CallContext context, String repositoryId, ExtensionsData extension);

-

-    StoredObject[] addObjectToFolder(CallContext context, String repositoryId, String objectId, String folderId,

-            Boolean allVersions, ExtensionsData extension);

-

-    StoredObject[] removeObjectFromFolder(CallContext context, String repositoryId, String objectId, String folderId,

-            ExtensionsData extension);

-

-    StoredObject getObjectRelationships(CallContext context, String repositoryId, String objectId,

-            RelationshipDirection relationshipDirection, String typeId, ExtensionsData extension);

-

-    StoredObject getAcl(CallContext context, String repositoryId, String objectId, ExtensionsData extension);

-

-    StoredObject applyAcl(CallContext context, String repositoryId, String objectId, AclPropagation aclPropagation,

-            ExtensionsData extension);

-

-    StoredObject[] applyPolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension);

-

-    StoredObject[] removePolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension);

-

-    StoredObject getAppliedPolicies(CallContext context, String repositoryId, String objectId, 

-            ExtensionsData extension);

-

-    StoredObject create(CallContext context, String repositoryId, String folderId, ExtensionsData extension);

-

-    StoredObject applyAcl(CallContext context, String repositoryId, String objectId);

-

-    // CMIS 1.1

-    StoredObject createItem(CallContext context, String repositoryId, Properties properties, String folderId,

-            List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension);

-

-    void createType(CallContext callContext, String repositoryId, TypeDefinition type, ExtensionsData extension);

-    

-    TypeDefinition updateType(CallContext callContext, String repositoryId, TypeDefinition type, 

-            ExtensionsData extension);

-    

-    TypeDefinition deleteType(CallContext callContext, String repositoryId, String typeId, ExtensionsData extension);

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Content.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Content.java
deleted file mode 100644
index febd889..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Content.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-
-/**
- * Interface to represent a content stream according to the CMIS spec.
- *
- */
-public interface Content {
-
-    /**
-     * return true if this object has content or false if there is no content
-     * attached.
-     * 
-     * @return true if has content otherwise false
-     */
-    boolean hasContent();
-
-    /**
-     * Retrieve the content of a document.
-     * 
-     * @param offset
-     *            offset in content stream
-     * @param length
-     *            length of content to return
-     * 
-     * @return object containing mime-type, length and a stream with content
-     */
-    ContentStream getContent();
-
-    /**
-     * Assign content to a document. Existing content gets overwritten. The
-     * document is not yet persisted in the new state.
-     * 
-     * @param content
-     *            content to be assigned to the document.
-     */
-    void setContent(ContentStream content);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Document.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Document.java
deleted file mode 100644
index db12ed5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Document.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * A document is a concrete object (meaning it can be stored) and has content.
- * It also has a path (is contained in a parent folder)
- */
-public interface Document extends Fileable, Content {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/DocumentVersion.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/DocumentVersion.java
deleted file mode 100644
index e141a66..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/DocumentVersion.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * A DocumentVersion is a concrete version of a versioned document. It has an
- * id, is stored in the object store, has content and adds versioning
- * functionality. It does not have a path. It inherits also properties so each
- * version may have its own properties.
- */
-public interface DocumentVersion extends Version, Content, Fileable {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Fileable.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Fileable.java
deleted file mode 100644
index ae0f33b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Fileable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * Interface for convenience representing objects that can be filed to a folder.
- *
- */
-public interface Fileable extends StoredObject, Filing {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java
deleted file mode 100644
index acab5e2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.List;
-
-/**
- * Path is the capability of an object to get accessed by a path in addition to
- * the identifier. Paths are hierarchical, each object with a path has a parent
- * where the parent is always a folder. Paths do not exist on its own but are
- * part of other objects (documents and folders). Most of the functionality is
- * defined in interfaces that are subclasses.
- */
-public interface Filing {
-
-    /**
-     * character indicating how folders are separated within a path string. This
-     * char must not be a valid character of an object name.
-     */
-    String PATH_SEPARATOR = "/";
-
-    /**
-     * return a list of parents the principal has access to. for single parent
-     * object this list must contain only one element. returns an empty list if
-     * this is an unfiled document.
-     * 
-     * @return list of parent folders
-     */
-    List<String> getParentIds();
-
-    /**
-     * usually true except for the root folder, optimized call that just tests
-     * existence to provide information for AtomPub links (much cheaper than
-     * calling getParents() and test for empty result.
-     * 
-     * @return true if object has a parent, false if it is a root object
-     */
-    boolean hasParent();
-
-    /**
-     * get the path segment of this object.
-     * 
-     * @return
-     *      String with path segment
-     */
-    String getPathSegment();
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java
deleted file mode 100644
index ead29af..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.List;
-
-/**
- * A folder is a concrete object (meaning it can be stored) and has Each folder
- * is contained in a parent folder. The parent folder for the special root
- * folder is null.
- */
-
-public interface Folder extends Fileable {
-
-    /**
-     * get parent if of this folder.
-     * 
-     * @return parent id of this folder
-     */
-    String getParentId();
-
-    /**
-     * set the parent id of a folder.
-     * 
-     * @param parentId
-     *            parent id of this folder
-     */
-    void setParentId(String parentId);
-
-    /**
-     * return a list of allowed types of children in this folder.
-     * 
-     * @return
-     *      list of allowed object child type ids
-     */
-    List<String> getAllowedChildObjectTypeIds();
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Item.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Item.java
deleted file mode 100644
index aeeb510..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Item.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * Interface to represent a CMIS item according to the CMIS specification.
- * 
- */
-public interface Item extends Fileable {
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java
deleted file mode 100644
index 8396ff7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * Documents can have in the CMIS specification multiple parents. This interface
- * describes the behavior of objects with multiple parent objects.
- */
-public interface MultiFiling extends Filing {
-
-    /**
-     * Add parent folder to this document.
-     * 
-     * @param parentId
-     *            id of parent folder to be added.
-     */
-    void addParentId(String parentId);
-
-    /**
-     * Remove parent from this object.
-     * 
-     * @param parentId
-     *            id of parent folder to be removed.
-     */
-    void removeParentId(String parentId);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
deleted file mode 100644
index 097c532..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-
-/**
- * This is the interface an implementation must provide to store any kind of
- * CMIS objects. The ObjectStore is the topmost container of all CMIS object
- * that get persisted. It is comparable to a file system, one object store
- * exists per repository id. The object store allows access objects by an id. In
- * addition a object can be retrieved by path. Typically the object store owns
- * the list of object ids and maintains the path hierarchy.
- */
-public interface ObjectStore {
-
-    /**
-     * Class to represent a result of get children calls.
-     */
-    public static class ChildrenResult {
-        private int noItems;
-        private List<Fileable> children;
-
-        /**
-         * Create new children results object.
-         * 
-         * @param children
-         *            list of children
-         * @param noItems
-         *            number of items in result
-         */
-        public ChildrenResult(List<Fileable> children, int noItems) {
-            this.children = children;
-            this.noItems = noItems;
-        }
-
-        /**
-         * Get number of items in this result.
-         * 
-         * @return number of items
-         */
-        public int getNoItems() {
-            return noItems;
-        }
-
-        /**
-         * Get the children objects.
-         * 
-         * @return list of children
-         */
-        public List<Fileable> getChildren() {
-            return children;
-        }
-    }
-
-    /**
-     * Get the root folder of this object store.
-     * 
-     * @return the root folder of this store
-     */
-    Folder getRootFolder();
-
-    /**
-     * return an object by path.
-     * 
-     * @param path
-     *            the path to the object
-     * @param user
-     *            user to check visibility
-     * @return the stored object with this path
-     */
-    StoredObject getObjectByPath(String path, String user);
-
-    /**
-     * get an object by its id.
-     * 
-     * @param folderId
-     *            the id of the object
-     * @return the object identified by this id
-     */
-    StoredObject getObjectById(String folderId);
-
-    /**
-     * Deletes an object from the store. For a folders the folder must be empty.
-     * 
-     * @param objectId
-     *            id of object to be deleted
-     * @param allVersions
-     *            is TRUE all version of the document are deleted, otherwise
-     *            just this one
-     * @param user
-     *            user to check visibility
-     */
-    void deleteObject(String objectId, Boolean allVersions, String user);
-
-    /**
-     * Create a document as initial step. The document is created but still
-     * temporary It is not yet persisted and does not have an id yet. After this
-     * call additional actions can take place (like assigning properties and a
-     * type) before it is persisted.
-     * 
-     * @param propMap
-     *            map of properties
-     * @param user
-     *            the user who creates the document
-     * @param folder
-     *            the parent folder
-     * @param contentStream
-     *            the content of the document
-     * @param policies
-     *            list of policies to apply
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @return document object
-     */
-    Document createDocument(Map<String, PropertyData<?>> propMap, String user, Folder folder,
-            ContentStream contentStream, List<String> policies, Acl addACEs, Acl removeACEs);
-
-    /**
-     * Create a folder as initial step. The folder is created but still
-     * temporary. It is not yet persisted and does not have an id yet. After
-     * this call additional actions can take place (like assigning properties
-     * and a type) before it is persisted.
-     * 
-     * @param name
-     *            name of the folder
-     * @param propMap
-     *            map of properties
-     * @param user
-     *            the user who creates the document
-     * @param folder
-     *            the parent folder
-     * @param policies
-     *            list of policies to apply
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @return folder object
-     */
-    Folder createFolder(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
-            List<String> policies, Acl addACEs, Acl removeACEs);
-
-    /**
-     * Create a document that supports versions as initial step. The document is
-     * created but still temporary. It is not yet persisted and does not have an
-     * id yet. After this call additional actions can take place (like assigning
-     * properties and a type) before it is persisted.
-     * 
-     * @param name
-     *            name of the document * @param propMap map of properities
-     * @param user
-     *            the user who creates the document
-     * @param folder
-     *            the parent folder
-     * @param policies
-     *            list of policies to apply
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @param contentStream
-     *            content stream of the object to create
-     * @param versioningState
-     *            version state of the object to be created in
-     * @return versioned document object
-     */
-    DocumentVersion createVersionedDocument(String name, Map<String, PropertyData<?>> propMap, String user,
-            Folder folder, List<String> policies, Acl addACEs, Acl removeACEs, ContentStream contentStream,
-            VersioningState versioningState);
-
-    /**
-     * Create an item as initial step. The item is created but still temporary.
-     * It is not yet persisted and does not have an id yet. After this call
-     * additional actions can take place (like assigning properties and a type)
-     * before it is persisted.
-     * 
-     * @param name
-     *            name of the document
-     * @param propMap
-     *            map of properties
-     * @param user
-     *            the user who creates the document
-     * @param folder
-     *            the parent folder
-     * @param policies
-     *            list of policies to apply
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @return document object
-     */
-    StoredObject createItem(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
-            List<String> policies, Acl addACEs, Acl removeACEs);
-
-    /**
-     * Create a policy. The policy is created but still temporary. It is not yet
-     * persisted and does not have an id yet. After this call additional actions
-     * can take place (like assigning properties and a type) before it is
-     * persisted.
-     * 
-     * @param name
-     *            name of the document
-     * @param policyText
-     *            policy text to apply to this policy
-     * @param propMap
-     *            map of properties
-     * @param user
-     *            the user who creates the document
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @return policy object
-     */
-    StoredObject createPolicy(String name, String policyText, Map<String, PropertyData<?>> propMap, String user,
-            Acl addACEs, Acl removeACEs);
-
-    /**
-     * get all the children of this folder. To support paging an initial offset
-     * and a maximum number of children to retrieve can be passed.
-     * 
-     * @param folder
-     *            folder to get children from
-     * @param maxItems
-     *            max. number of items to return
-     * @param skipCount
-     *            initial offset where to start fetching
-     * @param user
-     *            user to determine visible children
-     * @param usePwc
-     *            if true return private working copy otherwise return latest
-     *            version;
-     * 
-     * @return list of children objects
-     */
-    ChildrenResult getChildren(Folder folder, int maxItems, int skipCount, String user, boolean usePwc);
-
-    /**
-     * get all the children of this folder which are folders. To support paging
-     * an initial offset and a maximum number of children to retrieve can be
-     * passed.
-     * 
-     * @param folder
-     *            folder to get children from
-     * @param maxItems
-     *            max. number of items to return
-     * @param skipCount
-     *            initial offset where to start fetching
-     * @param user
-     *            the user who performs the call
-     * @return list of children folders
-     */
-    ChildrenResult getFolderChildren(Folder folder, int maxItems, int skipCount, String user);
-
-    /**
-     * Move an object to a different folder.
-     * 
-     * @param so
-     *            object to be moved
-     * @param oldParent
-     *            old parent folder for the object
-     * @param newParent
-     *            new parent folder for the object
-     * @param user
-     *            user performing the operation
-     */
-    void move(StoredObject so, Folder oldParent, Folder newParent, String user);
-
-    /**
-     * Rename an object.
-     * 
-     * @param so
-     *            object to be renamed
-     * @param newName
-     *            new name to be assigned
-     * @param user
-     *            user performing the operation
-     */
-    void rename(StoredObject so, String newName, String user);
-
-    /**
-     * Persist a new version in the store (created from a check-out).
-     * 
-     * @param version
-     *      version to be stored
-     */
-    void storeVersion(DocumentVersion version);
-
-    /**
-     * remove a version from the store (after a cancel check-out).
-     * 
-     * @param version
-     *            version to be deleted
-     */
-    void deleteVersion(DocumentVersion version);
-
-    /**
-     * Modify and store the properties of an object.
-     * 
-     * @param so
-     *            object to update
-     * @param properties
-     *            map containing properties to be updated
-     */
-    void updateObject(StoredObject so, Map<String, PropertyData<?>> properties, String user);
-
-    /**
-     * get the path of this folder (for folder in CMIS path is unique).
-     * 
-     * @param folderId
-     *            id of folder
-     * @return path of this folder
-     */
-    String getFolderPath(String folderId);
-
-    /**
-     * Clear repository and remove all data.
-     */
-    void clear();
-
-    /**
-     * For statistics: return the number of objects contained in the system.
-     * 
-     * @return number of stored objects
-     */
-    long getObjectCount();
-
-    /**
-     * Create a relationship. The relationship is created but still temporary.
-     * It is not yet persisted and does not have an id yet. After this call
-     * additional actions can take place (like assigning properties and a type)
-     * before it is persisted.
-     * 
-     * @param name
-     *            name of relationship
-     * @param sourceObject
-     *            source of the relationship
-     * @param targetObject
-     *            target of the relationship
-     * @param propMap
-     *            map of properities
-     * @param user
-     *            the user who creates the document
-     * @param addACEs
-     *            aces that are added
-     * @param removeACEs
-     *            aces that are removed
-     * @return versioned document object
-     */
-    StoredObject createRelationship(String name, StoredObject sourceObject, StoredObject targetObject,
-            Map<String, PropertyData<?>> propMap, String user, Acl addACEs, Acl removeACEs);
-
-    /**
-     * Return a list of all documents that are checked out in the repository.
-     * 
-     * @param orderBy
-     *            orderBy specification according to CMIS spec.
-     * @param user
-     *            user id of user calling
-     * @param includeRelationships
-     *            if true include all relationships in the response
-     * @return list of checked out documents in the repository
-     */
-    List<StoredObject> getCheckedOutDocuments(String orderBy, String user, IncludeRelationships includeRelationships);
-
-    /**
-     * Apply a ACLs by relative adding and removing a list of ACEs to/from an
-     * object.
-     * 
-     * @param so
-     *            object where ACLs are applied
-     * @param addAces
-     *            list of ACEs to be added
-     * @param removeAces
-     *            list of ACEs to be removed
-     * @param aclPropagation
-     *            enum value how to propagate ACLs to child objects
-     * @param user
-     *            the user who applies ACL
-     * @return new ACL of object
-     */
-    Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces, AclPropagation aclPropagation, String user);
-
-    /**
-     * Apply a ACLs by setting a new list of ACEs to an object.
-     * 
-     * @param so
-     *            object where ACLs are applied
-     * @param aces
-     *            list of ACEs to be applied
-     * @param aclPropagation
-     *            enum value how to propagate ACLs to child objects
-     * @param user
-     *            user who executes the call and needs to have permission to
-     *            apply ACL
-     * @return new ACL of object
-     */
-    Acl applyAcl(StoredObject so, Acl aces, AclPropagation aclPropagation, String user);
-
-    /**
-     * Check if this store contains any object with the given type id.
-     * 
-     * @param typeId
-     *            id of type definition to check
-     * @return true if at least one object in the store has the given type,
-     *         false if no objects exist having this type
-     */
-    boolean isTypeInUse(String typeId);
-
-    /**
-     * Get relationships to and from an object.
-     * 
-     * @param objectId
-     *            id of object to get relationships with
-     * @param typeIds
-     *            list of all types to be included
-     * @param direction
-     *            direction of relationship
-     * @return
-     *            list of relationships belonging to this object
-     */
-    List<StoredObject> getRelationships(String objectId, List<String> typeIds, RelationshipDirection direction);
-
-    /**
-     * get an ACL object from an ACL id.
-     * 
-     * @param aclId
-     *            id of ACL
-     * @return ACL of this id
-     */
-    Acl getAcl(int aclId);
-
-    // Multifiling methods:
-    /**
-     * get all parent ids of this object visible for a user.
-     * 
-     * @param so
-     *            objects to get parents from
-     * @param user
-     *            user who can see parents
-     * @return list of folder ids
-     */
-    List<String> getParentIds(StoredObject so, String user);
-
-    /**
-     * Add this document to a new parent folder as child object.
-     * 
-     * @param so
-     *            objects to be added
-     * @param parent
-     *            parent folder the object is to be added to
-     */
-    void addParent(StoredObject so, Folder parent);
-
-    /**
-     * Remove this object from the children of parent.
-     * 
-     * @param so
-     *            object to be removed
-     * @param parent
-     *            parent folder the object is to be removed from
-     */
-    void removeParent(StoredObject so, Folder parent);
-
-    /**
-     * Retrieve the content of a document.
-     * 
-     * @param so
-     *            object to get content from
-     * @param offset
-     *            offset in content stream
-     * @param length
-     *            length of content to return
-     * 
-     * @return object containing mime-type, length and a stream with content
-     */
-    ContentStream getContent(StoredObject so, long offset, long length);
-
-    /**
-     * Write content and attach it to a document. Existing content gets overwritten. 
-     * 
-     * @param so
-     *            object to set content to
-     * @param content
-     *            content to be assigned to the document. If null any existing 
-     *            content is deleted
-     * @return
-     *             the created content stream
-     */
-    ContentStream setContent(StoredObject so, ContentStream content);
-
-    /**
-     * Append content to an existing content stream.
-     * 
-     * @param so
-     *            object to append content to
-     * @param content
-     *            content to be assigned to the document.
-     */
-    void appendContent(StoredObject so, ContentStream content);
-
-    /**
-     * get the rendition this objects supports.
-     * 
-     * @param so
-     *            object to get renditions from
-     * @param renditionFilter
-     *            filter of renditions to return
-     * @param maxItems
-     *            max nubmer of items to return
-     * @param skipCount
-     *            number of objects to skip in result
-     * @return List of renditions or null if no renditions are available for
-     *         this object
-     */
-    List<RenditionData> getRenditions(StoredObject so, String renditionFilter, long maxItems, long skipCount);
-
-    /**
-     * get the rendition of this object.
-     * 
-     * @param so
-     *            object to get renditions from
-     * @param streamId
-     *            stream if of rendition
-     * @param offset
-     *            offset in rendition content
-     * @param length
-     *            length of rendition content
-     * @return ContentStream containing the rendition
-     */
-    ContentStream getRenditionContent(StoredObject so, String streamId, long offset, long length);
-
-}
-
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Policy.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Policy.java
deleted file mode 100644
index 7e80753..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Policy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * Interface representing a policy according to the CMIS specification.
- * 
- */
-public interface Policy {
-
-    /**
-     * returns the policy text of this policy.
-     * 
-     * @return policy text
-     */
-    String getPolicyText();
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Relationship.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Relationship.java
deleted file mode 100644
index 9f79dfb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Relationship.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * Interface representing a policy according to the CMIS specification.
- * 
- */
-public interface Relationship {
-
-    /**
-     * get the source objects of this relation.
-     * 
-     * @return list of object ids
-     */
-    String getSourceObjectId();
-
-    /**
-     * get the target objects of this relation.
-     * 
-     * @return list of object ids
-     */
-    String getTargetObjectId();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoreManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoreManager.java
deleted file mode 100644
index 40ad6f5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoreManager.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * interface to a repository implementation. This interface is the entry point
- * to a repository that can persist CMIS objects. Using this interface the type
- * information can be retrieved or set, a repository can be created or for a
- * given repository the store can be retrieved.
- * 
- */
-public interface StoreManager {
-
-    /**
-     * Return a list of all available repositories.
-     * 
-     * @return list of repository ids
-     */
-    List<String> getAllRepositoryIds();
-
-    /**
-     * Initialize the store for the given repository. Only called for
-     * repositories that exist on startup (i.e. for each repository id returned
-     * in a previous getAllRepositoryIds() call.
-     * 
-     * @param repositoryId
-     *            id of repository to initialize
-     */
-    void initRepository(String repositoryId);
-
-    /**
-     * Get the object store for the given repository id.
-     * 
-     * @param repositoryId
-     *            repository id of object
-     * @return the object store in which objects for this repository are stored.
-     */
-    ObjectStore getObjectStore(String repositoryId);
-
-    /**
-     * Get a permission and parameter validating instance.
-     * 
-     * @return validator and permission checker
-     */
-    CmisServiceValidator getServiceValidator();
-
-    /**
-     * Create a new repository with the given id. Create the repository,
-     * initiate the type system and initialize it so that it is ready for use.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param typeCreatorClassName
-     *            class implementing the type creation, the class must implement
-     *            the interface TypeCreator
-     */
-    void createAndInitRepository(String repositoryId, String typeCreatorClassName);
-
-    /**
-     * Retrieve a list with all type definitions.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param includePropertyDefinitions
-     *            indicates whether to include property definitions in returned
-     *            type
-     * @return map with type definition
-     */
-    Collection<TypeDefinitionContainer> getTypeDefinitionList(String repositoryId, boolean includePropertyDefinitions);
-
-    /**
-     * Retrieve a type definition for a give repository and type id.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param typeId
-     *            id of type definition
-     * @return type definition
-     */
-    TypeDefinitionContainer getTypeById(String repositoryId, String typeId);
-
-    /**
-     * Retrieve a type definition for a give repository and type id with or
-     * without property definitions and limited to depth in hierarchy.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param typeId
-     *            id of type definition
-     * @param includePropertyDefinitions
-     *            indicates whether to include property definitions in returned
-     *            type
-     * @param depth
-     *            limit depth of type hierarchy in return (-1 means unlimited)
-     * @return type definition
-     */
-    TypeDefinitionContainer getTypeById(String repositoryId, String typeId, boolean includePropertyDefinitions,
-            int depth);
-
-    /**
-     * Retrieve a factory to create CMIS data structures used as containers.
-     * 
-     * @return factory object
-     */
-    BindingsObjectFactory getObjectFactory();
-
-    /**
-     * Retrieve a list of root types in the repositories. Root types are
-     * available by definition and need to to be created by a client. CMIS
-     * supports documents, folders, relations and policies as root types.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @param inclPropDefs
-     *            true to include property definitions, false otherwise
-     * @return list of root types
-     */
-    List<TypeDefinitionContainer> getRootTypes(String repositoryId, boolean inclPropDefs);
-
-    /**
-     * Retrieve the repository information for a repository.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @return repository information
-     */
-    RepositoryInfo getRepositoryInfo(String repositoryId);
-
-    /**
-     * Retrieve the type manager for a given repository.
-     * 
-     * @param repositoryId
-     *            id of repository
-     * @return type manager for this repository or null if repository is unknown
-     */
-    TypeManager getTypeManager(String repositoryId);
-
-    /**
-     * Get information if a repository supports single filing.
-     * 
-     * @param repositoryId
-     *            repository id of to get information from
-     * @return true if single filing is supported false otherwise
-     */
-    boolean supportsSingleFiling(String repositoryId);
-
-    /**
-     * Get information if a repository supports multi filing.
-     * 
-     * @param repositoryId
-     *            repository id of to get information from
-     * @return true if multi filing is supported false otherwise
-     */
-    boolean supportsMultiFilings(String repositoryId);
-
-    /**
-     * Execute a query against the repository (same parameter as the discovery
-     * service query method.
-     * 
-     * @param user
-     *            user execuing the query
-     * @param repositoryId
-     *            id of repository
-     * @param statement
-     *            query statement
-     * @param searchAllVersions
-     *            search in all versions of objects
-     * @param includeAllowableActions
-     *            include allowable actions
-     * @param includeRelationships
-     *            include relationships
-     * @param renditionFilter
-     *            include renditions
-     * @param maxItems
-     *            max number of items to return
-     * @param skipCount
-     *            items to skip
-     * @return list of objects matching the query
-     */
-    ObjectList query(String user, String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount);
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java
deleted file mode 100644
index 054f07a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-
-/**
- * Stored Object interface is common part that all objects handled by CMIS
- * (Documents, Folders, Relations, Policies, ACLs) share. Objects that implement
- * this interface are always concrete and can live in the object store. A stored
- * object always has an id, a name and properties.
- * 
- */
-public interface StoredObject {
-
-    /**
-     * Retrieve the id of this object.
-     * 
-     * @return id of this object
-     */
-    String getId();
-
-    /**
-     * Set the id of this object.
-     * 
-     * @param id
-     *            id of this object
-     */
-    void setId(String id);
-
-    /**
-     * Retrieve the name of this object.
-     * 
-     * @return name of this object
-     */
-    String getName();
-
-    /**
-     * Set the name of this document. This method does not persist the object.
-     * 
-     * @param name
-     *            name that is assigned to this object
-     */
-    void setName(String name);
-
-    /**
-     * Retrieve the type of this document.
-     * 
-     * @return Id of the type identifying the type of this object
-     */
-    String getTypeId();
-
-    /**
-     * Set the type of this document. This method does not persist the object.
-     * 
-     * @param type
-     *            id of the type this object gets assigned.
-     */
-    void setTypeId(String type);
-
-    /**
-     * CMIS 1.1 get ids of all secondary types.
-     * 
-     * @return list of type ids
-     */
-    List<String> getSecondaryTypeIds();
-
-    /**
-     * CMIS 1.1: set description of an object.
-     * 
-     * @param description
-     *            description of this object
-     */
-    void setDescription(String description);
-
-    /**
-     * CMIS 1.1: get description of an object.
-     * 
-     * @return description of this object
-     */
-    String getDescription();
-
-    /**
-     * Retrieve the user who created the document.
-     * 
-     * @return user who created the document.
-     */
-    String getCreatedBy();
-
-    /**
-     * Set the user who last modified the object. This method does not persist.
-     * the object.
-     * 
-     * @param createdBy
-     *            user who last modified the document
-     */
-    void setCreatedBy(String createdBy);
-
-    /**
-     * Retrieve the user who last modified the document.
-     * 
-     * @return user who last modified the document.
-     */
-    String getModifiedBy();
-
-    /**
-     * Set the user who last modified the object. This method does not persist.
-     * the object.
-     * 
-     * @param modifiedBy
-     *            user who last modified the document
-     */
-    void setModifiedBy(String modifiedBy);
-
-    /**
-     * Get the creation date.
-     * 
-     * @return date the object was created at
-     */
-    GregorianCalendar getCreatedAt();
-
-    /**
-     * Assign date and time when the object was created. Usually you should not
-     * call this method externally. This method does not persist the object.
-     * 
-     * @param createdAt
-     *            date the object was created at
-     */
-    void setCreatedAt(GregorianCalendar createdAt);
-
-    /**
-     * Retrieve date and time when the object was last modified.
-     * 
-     * @return date the object was last modified
-     */
-    GregorianCalendar getModifiedAt();
-
-    /**
-     * Assign current date and time when the object was last modified. Usually
-     * you should not call this method externally. This method does not persist
-     * the object.
-     */
-    void setModifiedAtNow();
-
-    /**
-     * Set the date and time of the last modification of this object.
-     * 
-     * @param calendar
-     *            timestamp of last modification
-     */
-    void setModifiedAt(GregorianCalendar calendar);
-
-    /**
-     * Get the repository id of this object where the object is stored.
-     * 
-     * @return
-     *      repository id of this object
-     */
-    String getRepositoryId();
-
-    /**
-     * Assign a repository where this object will be stored. This method does
-     * not persist the object.
-     * 
-     * @param repositoryId
-     *            id of the repository
-     */
-    void setRepositoryId(String repositoryId);
-
-    /**
-     * Retrieve the list of properties.
-     * 
-     * @return map of properties
-     */
-    Map<String, PropertyData<?>> getProperties();
-
-    /**
-     * Assign the properties to an object. This method does not persist the
-     * object.
-     * 
-     * @param props
-     *            properties to be assigned
-     */
-    void setProperties(Map<String, PropertyData<?>> props);
-
-    /**
-     * Retrieve a change token uniquely identifying the state of the object when
-     * it was persisted (used for optimistic locking).
-     * 
-     * @return String identifying the change token
-     */
-    String getChangeToken();
-
-    /**
-     * Create all system base properties that need to be stored with every
-     * object in the repository This method is called when a new object is
-     * created to record all of the capturing data like the creation time,
-     * creator etc.
-     * 
-     * @param properties
-     *            The properties passed by the client, containing, name, type,
-     *            etc
-     * @param user
-     *            The user creating the document
-     */
-    void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user);
-
-    /**
-     * Update all system base properties that need to be stored with every
-     * object in the repository This method is called when an object is is
-     * updated to record all of the capturing data like the modification time,
-     * updating user etc.
-     * 
-     * @param properties
-     *            The properties passed by the client, containing, name, type,
-     *            etc
-     * @param user
-     *            The user creating the document
-     */
-    void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user);
-
-    /**
-     * fill a passed map object with properties of this object.
-     * 
-     * @param properties
-     *            map to fill
-     * @param objFactory
-     *            object factory to create objects
-     * @param requestedIds
-     *            list of property ids being requested
-     */
-    void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds);
-
-    /**
-     * Set all properties which are not system properties. These are the
-     * properties as defined in Type system definition. This method is called
-     * when an object is created or updated. The implementation must ignore the
-     * system properties.
-     * 
-     * @param properties
-     *            Set of properties as set by the client, including system
-     *            parameters
-     */
-    void setCustomProperties(Map<String, PropertyData<?>> properties);
-
-    /**
-     * get the Acl id of the stored object.
-     * 
-     * @return acl id of the ACl of this object
-     */
-    int getAclId();
-
-    /**
-     * get the allowable actions of the object.
-     * 
-     * @param user
-     *            user requesting allowable actions
-     * @return allowable actions of this object for the use
-     */
-    AllowableActions getAllowableActions(String user);
-
-    /**
-     * check if the document can generate a renditions and rendition is visible
-     * for user.
-     * 
-     * @param user
-     *            user requesting allowable actions
-     * @return true if rendition exists, false if not.
-     */
-    boolean hasRendition(String user);
-
-    /**
-     * get applied policies of this object.
-     * 
-     * @return list of ids of policies applied to this object
-     */
-    List<String> getAppliedPolicies();
-
-    /**
-     * add an id of a policy to an object.
-     * 
-     * @param policyId
-     *            id of policy to add
-     */
-    void addAppliedPolicy(String policyId);
-
-    /**
-     * remove an id of a policy from an object.
-     * 
-     * @param policyId
-     *            id of policy to remove
-     */
-    void removePolicy(String policyId);
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/TypeManagerCreatable.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/TypeManagerCreatable.java
deleted file mode 100644
index 2b45608..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/TypeManagerCreatable.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.api;

-

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.server.support.TypeManager;

-

-/**

- * Extension of TypeManager interface to add type mutability.

- * 

- */

-public interface TypeManagerCreatable extends TypeManager {

-

-    /**

-     * Add a type to the type system. Add all properties from inherited types,

-     * add type to children of parent types.

-     * 

-     * @param typeDefinition

-     *            new type to add

-     * @param addInheritedProperties

-     *            add properties from supertype to type definition

-     */

-    void addTypeDefinition(TypeDefinition typeDefinition, boolean addInheritedProperties);

-

-    /**

-     * Modify an existing type definition.

-     * 

-     * @param typeDefinition

-     *            type to be modified

-     */

-    void updateTypeDefinition(TypeDefinition typeDefinition);

-

-    /**

-     * Delete a type from the type system. Delete will succeed only if type is

-     * not in use. Otherwise an exception is thrown.

-     * 

-     * @param typeId

-     *            id of type to be deleted

-     */

-    void deleteTypeDefinition(String typeId);

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java
deleted file mode 100644
index 8f331d3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-/**
- * The interface version adds the version specific functionality to an object.
- * It has minor and major versions, stores a comment and has a label.
- */
-public interface Version {
-
-    /**
-     * Check if this version is a major version.
-     * 
-     * @return true if major version, false if it is a minor version
-     */
-    boolean isMajor();
-
-    /**
-     * Check if this version is a private working copy.
-     * 
-     * @return true if it a PWC, false if not
-     */
-    boolean isPwc();
-
-    /**
-     * make the private working copy an official version.
-     * 
-     * @param isMajor
-     *            true if major version, false if it is a minor version
-     */
-    void commit(boolean isMajor);
-
-    /**
-     * Set the check.in comment.
-     * 
-     * @param comment
-     *            check-in comment
-     */
-    void setCheckinComment(String comment);
-
-    /**
-     * Get the check-in comment.
-     * 
-     * @return check-in comment
-     */
-    String getCheckinComment();
-
-    /**
-     * Get the version label.
-     * 
-     * @return the version label
-     */
-    String getVersionLabel();
-
-    /**
-     * Get the versioned document (parent) of this version.
-     * 
-     * @return versioned document
-     */
-    VersionedDocument getParentDocument();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
deleted file mode 100644
index 4ca98e9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.api;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-
-/**
- * A version series is a concrete object (meaning it can be stored) and has
- * methods for check-out and checkin. It has a path (is contained in a folder)
- * In contrast to a non-versioned document it has no content, but versions
- * instead.
- * 
- */
-public interface VersionedDocument extends Filing, StoredObject {
-
-    /**
-     * Add a new version to this document.
-     * 
-     * @param verState
-     *            versioning state of new version
-     * @param user
-     *            user adding the new vesion
-     * @return document version added
-     */
-    DocumentVersion addVersion(VersioningState verState, String user);
-
-    /**
-     * Delete a version from this object, throw exception if document is checked
-     * out or document does not contain this version.
-     * 
-     * @param version
-     *            version to be removed
-     * @return true if version could be removed, and other versions exist, false
-     *         if the deleted version was the last version in this document
-     */
-    boolean deleteVersion(DocumentVersion version);
-
-    /**
-     * Test if current object is checked-out.
-     * 
-     * @return true if checked-out, false if not checked-out
-     */
-    boolean isCheckedOut();
-
-    /**
-     * Cancel a check-out operation and discard the private working copy.
-     * 
-     * @param user
-     *            user doing the cancel check-out
-     */
-    void cancelCheckOut(String user);
-
-    /**
-     * Perform a check-out operation.
-     * 
-     * @param user
-     *            user who checks-out
-     * @return document version beinf the new private working copy
-     */
-    DocumentVersion checkOut(String user);
-
-    /**
-     * Check in a private working copy.
-     * 
-     * @param isMajor
-     *            true if this is a major version
-     * @param properties
-     *            properties to set
-     * @param content
-     *            content of the document
-     * @param checkinComment
-     *            comment to attach to check-in
-     * @param policyIds
-     *            list of policy ids to add
-     * @param user
-     *            user who does the check-in
-     */
-    void checkIn(boolean isMajor, Properties properties, ContentStream content, String checkinComment,
-            List<String> policyIds, String user);
-
-    /**
-     * Get all versions of this document.
-     * 
-     * @return list of document versions
-     */
-    List<DocumentVersion> getAllVersions();
-
-    /**
-     * Get the latest version of this document.
-     * 
-     * @param major
-     *            true if latest major version, false to include minor versions
-     * @return
-     *            latest version of the document
-     */
-    DocumentVersion getLatestVersion(boolean major);
-
-    /**
-     * Get the user who has checked out this document.
-     * 
-     * @return user id of user who has checked out this document
-     */
-    String getCheckedOutBy();
-
-    /**
-     * Get the private working copy of this document.
-     * 
-     * @return private working copy
-     */
-    DocumentVersion getPwc();
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java
deleted file mode 100644
index 6520cf8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.LastModifiedContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ContentStreamDataImpl implements LastModifiedContentStream {
-
-    private static final int SIZE_KB = 1024;
-
-    private static final int BUFFER_SIZE = 0xFFFF;
-
-    private static final Logger LOG = LoggerFactory.getLogger(ContentStreamDataImpl.class.getName());
-
-    private static long totalLength = 0L;
-    private static long totalCalls = 0L;
-
-    private long fLength;
-
-    private String fMimeType;
-
-    private String fFileName;
-
-    private byte[] fContent;
-
-    private GregorianCalendar fLastModified;
-
-    private long fStreamLimitOffset;
-
-    private long fStreamLimitLength;
-
-    private final long sizeLimitKB;
-    
-    private final boolean doNotStoreContent;
-
-    private static synchronized long getTotalLength() {
-        return totalLength;
-    }
-
-    private static synchronized void increaseTotalLength(long length) {
-        totalLength += length;
-    }
-
-    private static synchronized void decreaseTotalLength(long length) {
-        totalLength -= length;
-    }
-
-    private static synchronized long getTotalCalls() {
-        return totalCalls;
-    }
-
-    private static synchronized void increaseTotalCalls() {
-        totalCalls++;
-    }
-
-    public ContentStreamDataImpl(long maxAllowedContentSizeKB) {
-        sizeLimitKB = maxAllowedContentSizeKB;
-        fLength = 0;
-        doNotStoreContent = false;
-    }
-
-    public ContentStreamDataImpl(long maxAllowedContentSizeKB, boolean doNotStore) {
-        sizeLimitKB = maxAllowedContentSizeKB;
-        fLength = 0;
-        doNotStoreContent = doNotStore;
-    }
-
-    public void setContent(InputStream in) throws IOException {
-        fStreamLimitOffset = -1;
-        fStreamLimitLength = -1;
-        if (null == in) {
-            fContent = null; // delete content
-            fLength = 0;
-        } else {
-            byte[] buffer = new byte[BUFFER_SIZE];
-            ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
-            int len = in.read(buffer);
-            while (len != -1) {
-                if (!doNotStoreContent) {
-                    contentStream.write(buffer, 0, len);
-                }
-                fLength += len;
-                if (sizeLimitKB > 0 && fLength > sizeLimitKB * SIZE_KB) {
-                    throw new CmisInvalidArgumentException("Content size exceeds max. allowed size of " + sizeLimitKB
-                            + "KB.");
-                }
-                len = in.read(buffer);
-            }
-            if (!doNotStoreContent) {
-                fContent = contentStream.toByteArray();
-                fLength = contentStream.size();
-            }
-            contentStream.close();
-            in.close();
-        }
-        increaseTotalLength(fLength);
-        increaseTotalCalls();
-        LOG.debug("setting content stream, total no calls " + getTotalCalls() + ".");
-        LOG.debug("setting content stream, new size total " + (getTotalLength() / (SIZE_KB * SIZE_KB)) + "MB.");
-    }
-
-    public void appendContent(InputStream is) throws IOException {
-
-        if (null == is) {
-            return; // nothing to do
-        } else {
-            byte[] buffer = new byte[BUFFER_SIZE];
-            ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
-
-            // first read existing stream
-            if (!doNotStoreContent) {
-                contentStream.write(fContent);
-            }
-            decreaseTotalLength(fLength);
-
-            // then append new content
-            int len = is.read(buffer);
-            while (len != -1) {
-                contentStream.write(buffer, 0, len);
-                fLength += len;
-                if (sizeLimitKB > 0 && fLength > sizeLimitKB * SIZE_KB) {
-                    throw new CmisInvalidArgumentException("Content size exceeds max. allowed size of " + sizeLimitKB
-                            + "KB.");
-                }
-                len = is.read(buffer);
-            }
-            if (!doNotStoreContent) {
-                fContent = contentStream.toByteArray();
-            }
-            fLength = contentStream.size();
-            contentStream.close();
-            is.close();
-        }
-        increaseTotalLength(fLength);
-        increaseTotalCalls();
-        LOG.debug("setting content stream, total no calls " + getTotalCalls() + ".");
-        LOG.debug("setting content stream, new size total " + (getTotalLength() / (SIZE_KB * SIZE_KB)) + "MB.");
-    }
-
-    @Override
-    public long getLength() {
-        return fLength;
-    }
-
-    @Override
-    public BigInteger getBigLength() {
-        return BigInteger.valueOf(fLength);
-    }
-
-    @Override
-    public String getMimeType() {
-        return fMimeType;
-    }
-
-    public void setMimeType(String mimeType) {
-        this.fMimeType = mimeType;
-    }
-
-    @Override
-    public String getFileName() {
-        return fFileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fFileName = fileName;
-    }
-
-    public String getFilename() {
-        return fFileName;
-    }
-
-    @Override
-    public InputStream getStream() {
-        if (doNotStoreContent) {
-            return new RandomInputStream(fLength);
-        }
-        
-        if (null == fContent) {
-            return null;
-        } else if (fStreamLimitOffset <= 0 && fStreamLimitLength < 0) {
-                return new ByteArrayInputStream(fContent);
-        } else {            
-            return new ByteArrayInputStream(fContent, (int) (fStreamLimitOffset < 0 ? 0 : fStreamLimitOffset),
-                    (int) (fStreamLimitLength < 0 ? fLength : fStreamLimitLength));
-        }
-    }
-
-    public void setLastModified(GregorianCalendar lastModified) {
-        this.fLastModified = lastModified;
-    }
-
-    @Override
-    public GregorianCalendar getLastModified() {
-        return fLastModified;
-    }
-
-    public ContentStream getCloneWithLimits(long offset, long length) {
-        ContentStreamDataImpl clone = new ContentStreamDataImpl(0, doNotStoreContent);
-        clone.fFileName = fFileName;
-        clone.fLength = length < 0 ? fLength : Math.min(fLength, length);
-        clone.fContent = fContent;
-        clone.fMimeType = fMimeType;
-        clone.fStreamLimitOffset = offset;
-        clone.fStreamLimitLength = clone.fLength;
-        clone.fLastModified = fLastModified;
-        return clone;
-    }
-
-    public final byte[] getBytes() {
-        return fContent;
-    }
-
-    @Override
-    public List<CmisExtensionElement> getExtensions() {
-        return null;
-    }
-
-    @Override
-    public void setExtensions(List<CmisExtensionElement> extensions) {
-        // not implemented
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
deleted file mode 100644
index a9b995f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * InMemory Stored Document A document is a stored object that has a path and
- * (optional) content.
- */
-
-public class DocumentImpl extends FilingImpl implements Document {
-    private ContentStream fContent;
-
-    private static final Logger LOG = LoggerFactory.getLogger(DocumentImpl.class.getName());
-
-    public DocumentImpl() { // visibility should be package
-        super();
-    }
-
-    @Override
-    public ContentStream getContent() {
-        return fContent;
-    }
-
-    @Override
-    public void setContent(ContentStream content) {
-        fContent = content;
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        // fill the version related properties (versions should override this
-        // but the spec requires some
-        // properties always to be set
-
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_IMMUTABLE, requestedIds)) {
-            properties.put(PropertyIds.IS_IMMUTABLE,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_IMMUTABLE, false));
-        }
-
-        // Set the content related properties
-        if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
-            properties.put(PropertyIds.CONTENT_STREAM_FILE_NAME, objFactory.createPropertyStringData(
-                    PropertyIds.CONTENT_STREAM_FILE_NAME, null != fContent ? fContent.getFileName() : (String) null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_ID, requestedIds)) {
-            properties.put(PropertyIds.CONTENT_STREAM_ID,
-                    objFactory.createPropertyStringData(PropertyIds.CONTENT_STREAM_ID, (String) null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
-            properties.put(
-                    PropertyIds.CONTENT_STREAM_LENGTH,
-                    objFactory.createPropertyIntegerData(PropertyIds.CONTENT_STREAM_LENGTH,
-                            null != fContent ? fContent.getBigLength() : null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
-            properties.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, objFactory.createPropertyStringData(
-                    PropertyIds.CONTENT_STREAM_MIME_TYPE, null != fContent ? fContent.getMimeType() : (String) null));
-        }
-
-        // Spec requires versioning properties even for unversioned documents
-        // overwrite the version related properties
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_ID, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_ID, getId()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
-            properties.put(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, false));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                    objFactory.createPropertyStringData(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, (String) null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, (String) null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_LATEST_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_VERSION, true));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_MAJOR_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_MAJOR_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_MAJOR_VERSION, true));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_MAJOR_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_LATEST_MAJOR_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_MAJOR_VERSION, true));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CHECKIN_COMMENT, requestedIds)) {
-            properties.put(PropertyIds.CHECKIN_COMMENT,
-                    objFactory.createPropertyStringData(PropertyIds.CHECKIN_COMMENT, (String) null));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_LABEL, requestedIds)) {
-            properties.put(PropertyIds.VERSION_LABEL,
-                    objFactory.createPropertyStringData(PropertyIds.VERSION_LABEL, (String) null));
-        }
-
-        // CMIS 1.1
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_PRIVATE_WORKING_COPY, requestedIds)) {
-            properties.put(PropertyIds.IS_PRIVATE_WORKING_COPY,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_PRIVATE_WORKING_COPY, false));
-        }
-
-    }
-
-    @Override
-    public boolean hasContent() {
-        return null != fContent;
-    }
-    
-    @Override
-    public boolean hasRendition(String user) {
-        return RenditionUtil.hasRendition(this, user);
-    }
-
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
deleted file mode 100644
index 4b4038f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
-import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-
-/**
- * A class representing a single version of a document
- */
-public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion, MultiFiling {
-
-    private static final Long MAX_CONTENT_SIZE_KB = ConfigurationSettings
-            .getConfigurationValueAsLong(ConfigConstants.MAX_CONTENT_SIZE_KB);
-
-    private ContentStream fContent;
-    private final VersionedDocumentImpl fContainer; // the document this version
-                                                    // belongs to
-    private String fComment; // checkin comment
-    private boolean fIsMajor;
-    private boolean fIsPwc; // true if this is the PWC
-
-    public DocumentVersionImpl(String repositoryId, VersionedDocument container, VersioningState verState) {
-        super();
-        setRepositoryId(repositoryId);
-        fContainer = (VersionedDocumentImpl) container;
-        fIsMajor = verState == VersioningState.MAJOR || verState == null;
-        fIsPwc = verState == VersioningState.CHECKEDOUT;
-        fProperties = new HashMap<String, PropertyData<?>>();
-        // copy user properties from latest version
-        DocumentVersionImpl src = (DocumentVersionImpl) container.getLatestVersion(false);
-        if (null != src && null != src.fProperties) {
-            for (Entry<String, PropertyData<?>> prop : src.fProperties.entrySet()) {
-                fProperties.put(prop.getKey(), prop.getValue());
-            }
-        }
-    }
-
-    @Override
-    public void setContent(ContentStream content) {
-        setContentIntern(content);
-    }
-
-    private void setContentIntern(ContentStream content) {
-        fContent = content;
-    }
-
-    @Override
-    public void setCheckinComment(String comment) {
-        fComment = comment;
-    }
-
-    @Override
-    public String getCheckinComment() {
-        return fComment;
-    }
-
-    private String createVersionLabel() {
-        int majorNo = 0;
-        int minorNo = 0;
-        List<DocumentVersion> allVersions = fContainer.getAllVersions();
-        for (DocumentVersion ver : allVersions) {
-            if (ver.isMajor()) {
-                ++majorNo;
-                minorNo = 0;
-            } else {
-                ++minorNo;
-            }
-            if (ver == this) {
-                break;
-            }
-        }
-        String label = majorNo + "." + minorNo;
-        return label;
-    }
-
-    @Override
-    public boolean isMajor() {
-        return fIsMajor && !isPwc();
-    }
-
-    @Override
-    public boolean isPwc() {
-        return fIsPwc;
-    }
-
-    @Override
-    public void commit(boolean isMajor) {
-        fIsPwc = false; // unset working copy flag
-        fIsMajor = isMajor;
-    }
-
-    @Override
-    public ContentStream getContent() {
-        return fContent;
-    }
-
-    @Override
-    public VersionedDocument getParentDocument() {
-        return fContainer;
-    }
-
-    private boolean isLatestVersion() {
-        List<DocumentVersion> allVers = fContainer.getAllVersions();
-        boolean hasPwc = null != fContainer.getPwc();
-        boolean isLatestVersion;
-        if (hasPwc) {
-            // CMIS 1.1 forbids it for PWC
-            isLatestVersion = allVers.size() > 1 && allVers.get(allVers.size() - 2).equals(this);
-        } else {
-            isLatestVersion = allVers.get(allVers.size() - 1).equals(this);
-        }
-        if (hasPwc) {
-            // CMIS 1.1 forbids it for PWC
-            isLatestVersion = allVers.size() > 1 && allVers.get(allVers.size() - 2).equals(this);
-        } else {
-            isLatestVersion = allVers.get(allVers.size() - 1).equals(this);
-        }
-        return isLatestVersion;
-    }
-
-    private boolean isLatestMajorVersion() {
-        if (!fIsMajor) {
-            return false;
-        }
-
-        List<DocumentVersion> allVersions = fContainer.getAllVersions();
-        DocumentVersion latestMajor = null;
-
-        for (DocumentVersion ver : allVersions) {
-            if (ver.isMajor() && !ver.isPwc()) {
-                latestMajor = ver;
-            }
-        }
-
-        boolean isLatestMajorVersion = latestMajor == this;
-        return isLatestMajorVersion;
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        DocumentVersion pwc = fContainer.getPwc();
-
-        // First get the properties of the container (like custom type
-        // properties, etc)
-        fContainer.fillProperties(properties, objFactory, requestedIds);
-
-        // overwrite the version specific properties (like modification date,
-        // user, etc.)
-        // and set some properties specific to the version
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_IMMUTABLE, requestedIds)) {
-            properties.put(PropertyIds.IS_IMMUTABLE,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_IMMUTABLE, false));
-        }
-
-        // fill the version related properties
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_LATEST_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_VERSION, isLatestVersion()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_MAJOR_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_MAJOR_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_MAJOR_VERSION, fIsMajor));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_MAJOR_VERSION, requestedIds)) {
-            properties.put(PropertyIds.IS_LATEST_MAJOR_VERSION,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_MAJOR_VERSION, isLatestMajorVersion()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_ID, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_ID, fContainer.getId()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
-            properties.put(
-                    PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                            fContainer.isCheckedOut()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
-            properties.put(
-                    PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                    objFactory.createPropertyStringData(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                            fContainer.getCheckedOutBy()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
-            properties.put(
-                    PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                            pwc == null ? null : pwc.getId()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CHECKIN_COMMENT, requestedIds)) {
-            properties.put(PropertyIds.CHECKIN_COMMENT,
-                    objFactory.createPropertyStringData(PropertyIds.CHECKIN_COMMENT, fComment));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_LABEL, requestedIds)) {
-            properties.put(PropertyIds.VERSION_LABEL,
-                    objFactory.createPropertyStringData(PropertyIds.VERSION_LABEL, getVersionLabel()));
-        }
-
-        // Set the content related properties
-        if (null != fContent) {
-            if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
-                properties.put(
-                        PropertyIds.CONTENT_STREAM_FILE_NAME,
-                        objFactory.createPropertyStringData(PropertyIds.CONTENT_STREAM_FILE_NAME,
-                                fContent.getFileName()));
-            }
-            if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_ID, requestedIds)) {
-                properties.put(PropertyIds.CONTENT_STREAM_ID,
-                        objFactory.createPropertyStringData(PropertyIds.CONTENT_STREAM_ID, (String) null));
-            }
-            if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
-                properties.put(PropertyIds.CONTENT_STREAM_LENGTH, objFactory.createPropertyIntegerData(
-                        PropertyIds.CONTENT_STREAM_LENGTH, fContent.getBigLength()));
-            }
-            if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
-                properties.put(
-                        PropertyIds.CONTENT_STREAM_MIME_TYPE,
-                        objFactory.createPropertyStringData(PropertyIds.CONTENT_STREAM_MIME_TYPE,
-                                fContent.getMimeType()));
-            }
-        }
-
-        // CMIS 1.1
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_PRIVATE_WORKING_COPY, requestedIds)) {
-            properties.put(PropertyIds.IS_PRIVATE_WORKING_COPY,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_PRIVATE_WORKING_COPY, isPwc()));
-        }
-
-    }
-
-    @Override
-    public int getAclId() {
-        return ((StoredObjectImpl) fContainer).getAclId();
-    }
-
-    @Override
-    public void setAclId(int id) {
-        ((StoredObjectImpl) fContainer).setAclId(id);
-    }
-
-    @Override
-    public List<String> getParentIds() {
-        return fContainer.getParentIds();
-    }
-
-    @Override
-    public String getPathSegment() {
-        return fContainer.getPathSegment();
-    }
-
-    @Override
-    public boolean hasContent() {
-        return null != fContent;
-    }
-
-    @Override
-    public boolean hasParent() {
-        return fContainer.hasParent();
-    }
-
-    @Override
-    public String getVersionLabel() {
-        return createVersionLabel();
-    }
-
-    @Override
-    public void addParentId(String parentId) {
-        fContainer.addParentId(parentId);
-    }
-
-    @Override
-    public void removeParentId(String parentId) {
-        fContainer.removeParentId(parentId);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java
deleted file mode 100644
index 09b195f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
-
-public class FilingImpl extends StoredObjectImpl implements Fileable, MultiFiling {
-
-    private List<String> parentIds = new ArrayList<String>(1);
-
-    FilingImpl() {
-        super();
-    }
-
-    @Override
-    public List<String> getParentIds() {
-        return parentIds;
-    }
-
-    @Override
-    public boolean hasParent() {
-        return !(null == parentIds || parentIds.isEmpty());
-    }
-
-    @Override
-    public String getPathSegment() {
-        return super.getName();
-    }
-
-    @Override
-    public void addParentId(String parentId) {
-        parentIds.add(parentId);
-    }
-
-    @Override
-    public void removeParentId(String parentId) {
-        parentIds.remove(parentId);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
deleted file mode 100644
index 9463835..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.NameValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FolderImpl extends StoredObjectImpl implements Folder {
-    private static final Logger LOG = LoggerFactory.getLogger(FilingImpl.class.getName());
-    private String parentId;
-
-    public FolderImpl() {
-        super();
-    }
-
-    public FolderImpl(String name, String parentId) {
-        super();
-        init(name, parentId);
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        // add folder specific properties
-
-        if (FilterParser.isContainedInFilter(PropertyIds.PARENT_ID, requestedIds)) {
-            properties.put(PropertyIds.PARENT_ID, objFactory.createPropertyIdData(PropertyIds.PARENT_ID, parentId));
-        }
-
-        if (FilterParser.isContainedInFilter(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, requestedIds)) {
-            String allowedChildObjects = null; // TODO: not yet supported
-            properties.put(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS,
-                    objFactory.createPropertyIdData(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, allowedChildObjects));
-        }
-
-    }
-
-    @Override
-    public List<String> getAllowedChildObjectTypeIds() {
-        // TODO implement this.
-        return null;
-    }
-
-    @Override
-    public boolean hasRendition(String user) {
-        return true;
-    }
-
-    @Override
-    public List<String> getParentIds() {
-        if (parentId == null) {
-            return Collections.emptyList();
-        } else {
-            return Collections.singletonList(parentId);
-        }
-    }
-
-    @Override
-    public boolean hasParent() {
-        return null != parentId;
-    }
-
-    @Override
-    public String getParentId() {
-        return parentId;
-    }
-
-    @Override
-    public String getPathSegment() {
-        return getName();
-    }
-
-    @Override
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    // Helper functions
-    private void init(String name, String parentId) {
-        if (!NameValidator.isValidName(name)) {
-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-        }
-        setName(name);
-        this.parentId = parentId;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ImageThumbnailGenerator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ImageThumbnailGenerator.java
deleted file mode 100644
index edc8b8c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ImageThumbnailGenerator.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.awt.AlphaComposite;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-
-import javax.imageio.ImageIO;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-
-public class ImageThumbnailGenerator {
-
-    private static final int DEFAULT_LENGTH = 100;
-    private static final String RENDITION_MIME_TYPE = "image/jpeg";;
-    private InputStream image;
-    private int thumbWidth;
-    private int thumbHeight;
-
-    public ImageThumbnailGenerator(InputStream imageContent) {
-        this.image = imageContent;
-    }
-
-    public int getWidth() {
-        return thumbWidth;
-    }
-
-    public int getHeight() {
-        return thumbHeight;
-    }
-
-    public ContentStream getRendition(int width, int height) {
-        byte[] thumbnail;
-        try {
-            thumbnail = scaleImage(image, width, height);
-            ContentStreamImpl cs = new ContentStreamImpl();
-            cs.setFileName("thumbnail.jpg");
-            cs.setMimeType(RENDITION_MIME_TYPE);
-            cs.setStream(new ByteArrayInputStream(thumbnail));
-            cs.setLength(BigInteger.valueOf(thumbnail.length));
-            return cs;
-        } catch (IOException e) {
-            throw new CmisRuntimeException("Failed to generate thumbnail", e);
-        }
-    }
-
-    private byte[] scaleImage(InputStream stream, int width, int height) throws IOException {
-
-        BufferedImage resizedImage;
-        BufferedImage originalImage = ImageIO.read(stream);
-
-        if (width <= 0) {
-            resizedImage = scaleLongerSideTo(originalImage, height);
-        } else if (height <= 0) {
-            resizedImage = scaleLongerSideTo(originalImage, width);
-        } else {
-            resizedImage = scaleImage(originalImage, width, height);
-        }
-
-        thumbWidth = resizedImage.getWidth();
-        thumbHeight = resizedImage.getHeight();
-
-        return storeImageinByteArray(resizedImage);
-    }
-
-    private BufferedImage scaleLongerSideTo(BufferedImage bi, int longerSideLengthParam) throws IOException {
-        int width, height;
-        int longerSideLength = longerSideLengthParam;
-
-        if (longerSideLength <= 0) {
-            longerSideLength = DEFAULT_LENGTH;
-        }
-
-        if (bi.getWidth() > bi.getHeight()) {
-            width = longerSideLength;
-            height = bi.getHeight() * longerSideLength / bi.getWidth();
-        } else {
-            height = longerSideLength;
-            width = bi.getWidth() * longerSideLength / bi.getHeight();
-        }
-
-        BufferedImage resizedImage = scaleImage(bi, width, height);
-        return resizedImage;
-    }
-
-    private BufferedImage scaleImage(BufferedImage originalImage, int width, int height) {
-
-        BufferedImage resizedImage = new BufferedImage(width, height, originalImage.getType());
-        Graphics2D g = resizedImage.createGraphics();
-
-        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
-        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        g.drawImage(originalImage, 0, 0, width, height, null);
-        g.dispose();
-        g.setComposite(AlphaComposite.Src);
-
-        return resizedImage;
-    }
-
-    private byte[] storeImageinByteArray(BufferedImage bi) throws IOException {
-
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        boolean ok = ImageIO.write(bi, "JPG", os);
-        if (ok) {
-            return os.toByteArray();
-        } else {
-            return null;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAce.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAce.java
deleted file mode 100644
index 9eaa520..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAce.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;

-

-import java.util.Collections;

-import java.util.List;

-

-import org.apache.chemistry.opencmis.commons.data.Ace;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;

-

-public class InMemoryAce {

-

-    private static final String ANONYMOUS = "anonymous";

-    private static final String ANYONE = "anyone";

-    private final String principalId;

-    private Permission permission;

-    private static final InMemoryAce DEFAULT_ACE = new InMemoryAce(InMemoryAce.getAnyoneUser(), Permission.ALL);

-

-    public static final String getAnyoneUser() {

-        return ANYONE;

-    }

-

-    public static final String getAnonymousUser() {

-        return ANONYMOUS;

-    }

-

-    public static final InMemoryAce getDefaultAce() {

-        return DEFAULT_ACE;

-    }

-

-    public InMemoryAce(Ace commonsAce) {

-        if (null == commonsAce || null == commonsAce.getPrincipalId() || null == commonsAce.getPermissions()) {

-            throw new IllegalArgumentException("Cannot create InMemoryAce with null value");

-        }

-        List<String> perms = commonsAce.getPermissions();

-        if (perms.size() != 1) {

-            throw new IllegalArgumentException("InMemory only supports ACEs with a single permission.");

-        }

-        String perm = perms.get(0);

-        this.principalId = commonsAce.getPrincipalId();

-        this.permission = Permission.fromCmisString(perm);

-    }

-

-    public InMemoryAce(String prinicpalId, Permission permission) {

-        if (null == prinicpalId || null == permission) {

-            throw new IllegalArgumentException("Cannot create InMemoryAce with null value");

-        }

-

-        this.principalId = prinicpalId;

-        this.permission = permission;

-    }

-

-    public String getPrincipalId() {

-        return principalId;

-    }

-

-    public Permission getPermission() {

-        return permission;

-    }

-

-    public void setPermission(Permission newPermission) {

-        permission = newPermission;

-    }

-

-    @Override

-    public int hashCode() {

-        final int prime = 31;

-        int result = 1;

-        result = prime * result + ((permission == null) ? 0 : permission.hashCode());

-        result = prime * result + ((principalId == null) ? 0 : principalId.hashCode());

-        return result;

-    }

-

-    @Override

-    public boolean equals(Object obj) {

-        if (this == obj) {

-            return true;

-        }

-        if (obj == null) {

-            return false;

-        }

-        if (getClass() != obj.getClass()) {

-            return false;

-        }

-        InMemoryAce other = (InMemoryAce) obj;

-        if (permission != other.permission) {

-            return false;

-        }

-        if (principalId == null) {

-            if (other.principalId != null) {

-                return false;

-            }

-        } else if (!principalId.equals(other.principalId)) {

-            return false;

-        }

-        return true;

-    }

-

-    public boolean hasPermission(Permission permission2) {

-        return this.permission.compareTo(permission2) >= 0;

-    }

-

-    @Override

-    public String toString() {

-        return "InMemoryAce [principalId=" + principalId + ", permission=" + permission + "]";

-    }

-

-    public Ace toCommonsAce() {

-        return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId),

-                Collections.singletonList(permission.toCmisString()));

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java
deleted file mode 100644
index 6ab8b0a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*

-x * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;

-

-import java.util.ArrayList;

-import java.util.Collections;

-import java.util.Comparator;

-import java.util.List;

-

-import org.apache.chemistry.opencmis.commons.data.Ace;

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;

-

-public class InMemoryAcl implements Cloneable {

-

-    private List<InMemoryAce> acl;

-    private int id;

-

-    @SuppressWarnings("serial")

-    private static class AceComparator<T extends InMemoryAce> implements Comparator<T> {

-

-        @Override

-        public int compare(T o1, T o2) {

-            if (null == o1 || null == o2) {

-                if (o1 == o2) { // NOSONAR

-                    return 0;

-                } else if (o1 == null) {

-                    return 1;

-                } else {

-                    return -1;

-                }

-            }

-            int res = o1.getPrincipalId().compareTo(o2.getPrincipalId());

-            return res;

-        }

-    };

-

-    private static final Comparator<? super InMemoryAce> COMP = new AceComparator<InMemoryAce>();

-    private static final InMemoryAcl DEFAULT_ACL = new InMemoryAcl(new ArrayList<InMemoryAce>() {

-        {

-            add(InMemoryAce.getDefaultAce());

-        }

-    });

-

-    public static InMemoryAcl createFromCommonsAcl(Acl commonsAcl) {

-        InMemoryAcl acl = new InMemoryAcl();

-        for (Ace cace : commonsAcl.getAces()) {

-            if (acl.hasPrincipal(cace.getPrincipalId())) {

-                Permission perm = acl.getPermission(cace.getPrincipalId());

-                Permission newPerm = Permission.fromCmisString(cace.getPermissions().get(0));

-                if (perm.ordinal() > newPerm.ordinal()) {

-                    acl.setPermission(cace.getPrincipalId(), newPerm);

-                }

-            } else {

-                acl.addAce(new InMemoryAce(cace));

-            }

-

-        }

-        return acl;

-    }

-

-    public static InMemoryAcl getDefaultAcl() {

-        return DEFAULT_ACL;

-    }

-

-    public InMemoryAcl() {

-        acl = new ArrayList<InMemoryAce>(3);

-    }

-

-    public InMemoryAcl(final List<InMemoryAce> arg) {

-        this.acl = new ArrayList<InMemoryAce>(arg);

-        Collections.sort(this.acl, COMP);

-        for (int i = 0; i < acl.size(); i++) {

-            InMemoryAce ace = acl.get(i);

-            if (ace == null) {

-                throw new IllegalArgumentException("Cannot create ACLs with a null principal id or permission.");

-            }

-        }

-        for (int i = 0; i < acl.size() - 1; i++) {

-            if (acl.get(i).equals(acl.get(i + 1))) {

-                throw new IllegalArgumentException("Cannot create ACLs with same principal id in more than one ACE.");

-            }

-        }

-    }

-

-    public void setId(int id) {

-        this.id = id;

-    }

-

-    public int getId() {

-        return id;

-    }

-

-    public final List<InMemoryAce> getAces() {

-        return acl;

-    }

-

-    public boolean addAce(InMemoryAce ace) {

-        if (ace == null) {

-            return false;

-        }

-        for (InMemoryAce ace2 : acl) {

-            if (ace2.getPrincipalId().equals(ace.getPrincipalId())) {

-                return false;

-            }

-        }

-        acl.add(ace);

-        Collections.sort(acl, COMP);

-        return true;

-    }

-

-    public boolean removeAce(InMemoryAce ace) {

-        return acl.remove(ace);

-    }

-

-    public void mergeAcl(InMemoryAcl acl2) {

-        if (acl2 == null) {

-            return;

-        }

-        for (InMemoryAce ace : acl2.getAces()) {

-            InMemoryAce existingAce = getAce(ace.getPrincipalId());

-            if (existingAce == null) {

-                acl.add(ace);

-            } else if (existingAce.getPermission().ordinal() < ace.getPermission().ordinal()) {

-                existingAce.setPermission(ace.getPermission());

-            }

-        }

-        Collections.sort(this.acl, COMP);

-    }

-

-    public Permission getPermission(String principalId) {

-        InMemoryAce ace = getAce(principalId);

-        return ace == null ? Permission.NONE : ace.getPermission();

-    }

-

-    private InMemoryAce getAce(String principalId) {

-        if (null == principalId) {

-            return null;

-        }

-

-        for (InMemoryAce ace : acl) {

-            if (ace.getPrincipalId().equals(principalId)) {

-                return ace;

-            }

-        }

-        return null;

-    }

-

-    public boolean hasPermission(String principalId, Permission permission) {

-        if (null == permission) {

-            return false;

-        }

-

-        if (null == principalId) {

-            for (InMemoryAce ace : acl) {

-                if (ace.getPrincipalId().equals(InMemoryAce.getAnonymousUser())) {

-                    return ace.hasPermission(permission);

-                }

-            }

-        }

-

-        for (InMemoryAce ace : acl) {

-            if (ace.getPrincipalId().equals(principalId) || ace.getPrincipalId().equals(InMemoryAce.getAnyoneUser())

-                    || ace.getPrincipalId().equals(InMemoryAce.getAnonymousUser())) {

-                return ace.hasPermission(permission);

-            }

-        }

-        return false;

-    }

-

-    public void setPermission(String principalId, Permission permission) {

-        for (InMemoryAce ace : acl) {

-            if (ace.getPrincipalId().equals(principalId)) {

-                ace.setPermission(permission);

-            }

-        }

-        throw new IllegalArgumentException("Unknown principalId in setPermission: " + principalId);

-    }

-

-    public int size() {

-        return acl.size();

-    }

-

-    @Override

-    public int hashCode() {

-        final int prime = 31;

-        int result = 1;

-        result = prime * result + ((acl == null) ? 0 : acl.hashCode());

-        return result;

-    }

-

-    @Override

-    public boolean equals(Object obj) {

-        if (this == obj) {

-            return true;

-        }

-        if (obj == null) {

-            return false;

-        }

-        if (getClass() != obj.getClass()) {

-            return false;

-        }

-        InMemoryAcl other = (InMemoryAcl) obj;

-        if (acl == null) {

-            if (other.acl != null) {

-                return false;

-            }

-        } else if (!acl.equals(other.acl)) {

-            return false;

-        }

-        return true;

-    }

-

-    @Override

-    public String toString() {

-        return "InMemoryAcl [acl=" + acl + "]";

-    }

-

-    private boolean hasPrincipal(String principalId) {

-        for (InMemoryAce ace : acl) {

-            if (ace.getPrincipalId().equals(principalId)) {

-                return true;

-            }

-        }

-        return false;

-    }

-

-    public Acl toCommonsAcl() {

-        List<Ace> commonsAcl = new ArrayList<Ace>();

-        for (InMemoryAce memAce : acl) {

-            commonsAcl.add(memAce.toCommonsAce());

-        }

-

-        return new AccessControlListImpl(commonsAcl);

-    }

-

-    @Override

-    public InMemoryAcl clone() throws CloneNotSupportedException {

-        InMemoryAcl newAcl = new InMemoryAcl(acl);

-        return newAcl;

-    }

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java
deleted file mode 100644
index 1c6ff15..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;

-

-import java.util.List;

-

-import org.apache.chemistry.opencmis.commons.data.Acl;

-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

-import org.apache.chemistry.opencmis.commons.data.Properties;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;

-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;

-import org.apache.chemistry.opencmis.commons.server.CallContext;

-import org.apache.chemistry.opencmis.commons.spi.Holder;

-import org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;

-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;

-

-public class InMemoryServiceValidatorImpl extends BaseServiceValidatorImpl {

-

-    public InMemoryServiceValidatorImpl(StoreManager sm) {

-        super(sm);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkStandardParameters(java.lang.String, java.lang.String)

-     */

-    @Override

-    protected StoredObject checkStandardParameters(String repositoryId, String objectId) {

-

-        StoredObject so = super.checkStandardParameters(repositoryId, objectId);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkStandardParametersAllowNull(java.lang.String, java.lang.String)

-     */

-    @Override

-    protected StoredObject checkStandardParametersAllowNull(String repositoryId, String objectId) {

-

-        StoredObject so = super.checkStandardParametersAllowNull(repositoryId, objectId);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkExistingObjectId

-     * (org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore,

-     * java.lang.String)

-     */

-    @Override

-    protected StoredObject checkExistingObjectId(ObjectStore objStore, String objectId) {

-

-        StoredObject so = super.checkExistingObjectId(objStore, objectId);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkParams(java.lang.String, java.lang.String, java.lang.String)

-     */

-    @Override

-    protected StoredObject[] checkParams(String repositoryId, String objectId1, String objectId2) {

-

-        StoredObject[] sos = super.checkParams(repositoryId, objectId1, objectId2);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getRepositoryInfos

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getRepositoryInfos(CallContext context, ExtensionsData extension) {

-

-        super.getRepositoryInfos(context, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getRepositoryInfo

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getRepositoryInfo(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        super.getRepositoryInfo(context, repositoryId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getTypeChildren

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getTypeChildren(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        super.getTypeChildren(context, repositoryId, typeId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getTypeDescendants

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getTypeDescendants(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        super.getTypeDescendants(context, repositoryId, typeId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getTypeDefinition

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getTypeDefinition(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {

-

-        super.getTypeDefinition(context, repositoryId, typeId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getChildren(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getChildren(CallContext context, String repositoryId, String folderId, 

-            ExtensionsData extension) {

-

-        StoredObject so = super.getChildren(context, repositoryId, folderId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getDescendants(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getDescendants(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getDescendants(context, repositoryId, folderId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getFolderTree(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getFolderTree(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getFolderTree(context, repositoryId, folderId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getObjectParents

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getObjectParents(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getObjectParents(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getFolderParent

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getFolderParent(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getFolderParent(context, repositoryId, folderId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getCheckedOutDocs

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getCheckedOutDocs(CallContext context, String repositoryId, String folderId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getCheckedOutDocs(context, repositoryId, folderId, extension);

-        if (null != so) {

-            checkReadAccess(repositoryId, context.getUsername(), so);

-        }

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #createDocument(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject createDocument(CallContext context, String repositoryId, String folderId,

-            List<String> policyIds, ExtensionsData extension) {

-

-        StoredObject folder = super.createDocument(context, repositoryId, folderId, policyIds, extension);

-        if (null != folder) {

-            checkWriteAccess(repositoryId, context.getUsername(), folder);

-        }

-        return folder;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #createDocumentFromSource

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject createDocumentFromSource(CallContext context, String repositoryId, String sourceId,

-            String folderId, List<String> policyIds, ExtensionsData extension) {

-

-        StoredObject source = super.createDocumentFromSource(context, repositoryId, sourceId, folderId, policyIds,

-                extension);

-        checkWriteAccess(repositoryId, context.getUsername(), source);

-        return source;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #createFolder(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject createFolder(CallContext context, String repositoryId, String folderId, List<String> policyIds,

-            ExtensionsData extension) {

-

-        StoredObject parentFolder = super.createFolder(context, repositoryId, folderId, policyIds, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), parentFolder);

-        return parentFolder;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #createRelationship

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] createRelationship(CallContext context, String repositoryId, String sourceId,

-            String targetId, List<String> policyIds, ExtensionsData extension) {

-

-        StoredObject[] sos = super.createRelationship(context, repositoryId, sourceId, targetId, policyIds, extension);

-        checkReadAccess(repositoryId, context.getUsername(), sos[0]);

-        checkReadAccess(repositoryId, context.getUsername(), sos[1]);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #createPolicy(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject createPolicy(CallContext context, String repositoryId, String folderId, Acl addAces,

-            Acl removeAces, List<String> policyIds, ExtensionsData extension) {

-

-        if (policyIds != null && policyIds.size() > 0) {

-            throw new CmisConstraintException("Applying policies to policies is not supported.");

-        }

-        if (folderId != null && folderId.length() > 0) {

-            throw new CmisConstraintException("Policies cannot be created in folders.");

-        }

-        if (addAces != null || removeAces != null) {

-            throw new CmisConstraintException("ACLs on policies are not suported.");

-        }

-

-        super.createPolicy(context, repositoryId, null, null, null, null, extension);

-        return null;

-    }

-

-    @Override

-    public StoredObject createItem(CallContext context, String repositoryId, Properties properties, String folderId,

-            List<String> policyIds, Acl addAces, Acl removeAces, ExtensionsData extension) {

-        StoredObject folder = super.createItem(context, repositoryId, properties, folderId, policyIds, addAces,

-                removeAces, extension);

-        if (null != folder) {

-            checkWriteAccess(repositoryId, context.getUsername(), folder);

-        }

-        return folder;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getAllowableActions

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getAllowableActions(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getAllowableActions(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getObject(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getObject(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {

-

-        StoredObject so = super.getObject(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getProperties(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getProperties(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getProperties(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getRenditions(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getRenditions(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getRenditions(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getObjectByPath

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getObjectByPath(CallContext context, String repositoryId, String path, 

-            ExtensionsData extension) {

-

-        StoredObject so = super.getObjectByPath(context, repositoryId, path, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getContentStream

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getContentStream(CallContext context, String repositoryId, String objectId, String streamId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getContentStream(context, repositoryId, objectId, streamId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #updateProperties

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject updateProperties(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.updateProperties(context, repositoryId, objectId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #moveObject(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] moveObject(CallContext context, String repositoryId, Holder<String> objectId,

-            String targetFolderId, String sourceFolderId, ExtensionsData extension) {

-

-        StoredObject[] sos = super.moveObject(context, repositoryId, objectId, targetFolderId, sourceFolderId,

-                extension);

-        checkReadAccess(repositoryId, context.getUsername(), sos[0]);

-        checkReadAccess(repositoryId, context.getUsername(), sos[1]);

-        checkWriteAccess(repositoryId, context.getUsername(), sos[2]);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #deleteObject(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.Boolean,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,

-            ExtensionsData extension) {

-

-        StoredObject so = super.deleteObject(context, repositoryId, objectId, allVersions, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #deleteTree(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.Boolean,

-     * org.apache.chemistry.opencmis.commons.enums.UnfileObject,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject deleteTree(CallContext context, String repositoryId, String folderId, Boolean allVersions,

-            UnfileObject unfileObjects, ExtensionsData extension) {

-

-        StoredObject so = super.deleteTree(context, repositoryId, folderId, allVersions, unfileObjects, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #setContentStream

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * java.lang.Boolean,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject setContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            Boolean overwriteFlag, ExtensionsData extension) {

-

-        StoredObject so = super.setContentStream(context, repositoryId, objectId, overwriteFlag, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #deleteContentStream

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject deleteContentStream(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.deleteContentStream(context, repositoryId, objectId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkOut(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData,

-     * org.apache.chemistry.opencmis.commons.spi.Holder)

-     */

-    @Override

-    public StoredObject checkOut(CallContext context, String repositoryId, Holder<String> objectId,

-            ExtensionsData extension, Holder<Boolean> contentCopied) {

-

-        StoredObject so = super.checkOut(context, repositoryId, objectId, extension, contentCopied);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #cancelCheckOut(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject cancelCheckOut(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.cancelCheckOut(context, repositoryId, objectId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #checkIn(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId, Acl addAces,

-            Acl removeAces, List<String> policyIds, ExtensionsData extension) {

-

-        StoredObject so = super.checkIn(context, repositoryId, objectId, addAces, removeAces, policyIds, extension);

-

-        if (null != addAces || null != removeAces) {

-            throw new CmisInvalidArgumentException(

-                    "version specific ACLs are not supported, addAces and removeAces must be null.");

-        }

-

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getObjectOfLatestVersion

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getObjectOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        StoredObject so = super.getObjectOfLatestVersion(context, repositoryId, objectId, versionSeriesId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getPropertiesOfLatestVersion

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getPropertiesOfLatestVersion(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        StoredObject so = super.getPropertiesOfLatestVersion(context, repositoryId, objectId, versionSeriesId,

-                extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getAllVersions(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getAllVersions(CallContext context, String repositoryId, String objectId,

-            String versionSeriesId, ExtensionsData extension) {

-

-        StoredObject so = super.getAllVersions(context, repositoryId, objectId, versionSeriesId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #query(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void query(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        super.query(context, repositoryId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getContentChanges

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public void getContentChanges(CallContext context, String repositoryId, ExtensionsData extension) {

-

-        super.getContentChanges(context, repositoryId, extension);

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #addObjectToFolder

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] addObjectToFolder(CallContext context, String repositoryId, String objectId, String folderId,

-            Boolean allVersions, ExtensionsData extension) {

-

-        StoredObject[] sos = super.addObjectToFolder(context, repositoryId, objectId, folderId, allVersions, extension);

-        checkReadAccess(repositoryId, context.getUsername(), sos[0]);

-        checkWriteAccess(repositoryId, context.getUsername(), sos[1]);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #removeObjectFromFolder

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] removeObjectFromFolder(CallContext context, String repositoryId, String objectId,

-            String folderId, ExtensionsData extension) {

-

-        StoredObject[] sos = super.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), sos[0]);

-        if (null != folderId) {

-            checkWriteAccess(repositoryId, context.getUsername(), sos[1]);

-        }

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getObjectRelationships

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.enums.RelationshipDirection,

-     * java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getObjectRelationships(CallContext context, String repositoryId, String objectId,

-            RelationshipDirection relationshipDirection, String typeId, ExtensionsData extension) {

-

-        StoredObject so = super.getObjectRelationships(context, repositoryId, objectId, relationshipDirection, typeId,

-                extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getAcl(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getAcl(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {

-

-        StoredObject so = super.getAcl(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #applyAcl(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.enums.AclPropagation,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject applyAcl(CallContext context, String repositoryId, String objectId,

-            AclPropagation aclPropagation, ExtensionsData extension) {

-

-        StoredObject so = super.applyAcl(context, repositoryId, objectId, aclPropagation, extension);

-        checkAllAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #applyPolicy(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] applyPolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject[] sos = super.applyPolicy(context, repositoryId, policyId, objectId, extension);

-        if (!(sos[0] instanceof Policy)) {

-            throw new CmisInvalidArgumentException("applyPolicy failed, " + policyId + " is not a policy id");

-        }

-        if (sos[1] instanceof Policy) {

-            throw new CmisInvalidArgumentException("applyPolicy failed, " + objectId

-                    + " is a policy id. Applying policies to policies is not supported.");

-        }

-        checkAllAccess(repositoryId, context.getUsername(), sos[1]);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #removePolicy(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject[] removePolicy(CallContext context, String repositoryId, String policyId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject[] sos = super.removePolicy(context, repositoryId, policyId, objectId, extension);

-        checkAllAccess(repositoryId, context.getUsername(), sos[1]);

-        return sos;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #getAppliedPolicies

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject getAppliedPolicies(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.getAppliedPolicies(context, repositoryId, objectId, extension);

-        checkReadAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #create(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject create(CallContext context, String repositoryId, String folderId, ExtensionsData extension) {

-

-        StoredObject so = super.create(context, repositoryId, folderId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #deleteObjectOrCancelCheckOut

-     * (org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String,

-     * org.apache.chemistry.opencmis.commons.data.ExtensionsData)

-     */

-    @Override

-    public StoredObject deleteObjectOrCancelCheckOut(CallContext context, String repositoryId, String objectId,

-            ExtensionsData extension) {

-

-        StoredObject so = super.deleteObjectOrCancelCheckOut(context, repositoryId, objectId, extension);

-        checkWriteAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    /*

-     * (non-Javadoc)

-     * 

-     * @see

-     * org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl

-     * #applyAcl(org.apache.chemistry.opencmis.commons.server.CallContext,

-     * java.lang.String, java.lang.String)

-     */

-    @Override

-    public StoredObject applyAcl(CallContext context, String repositoryId, String objectId) {

-

-        StoredObject so = super.applyAcl(context, repositoryId, objectId);

-        checkAllAccess(repositoryId, context.getUsername(), so);

-        return so;

-    }

-

-    @Override

-    public void createType(CallContext callContext, String repositoryId, TypeDefinition type, ExtensionsData extension) {

-        super.createType(callContext, repositoryId, type, extension);

-    }

-

-    @Override

-    public TypeDefinition updateType(CallContext callContext, String repositoryId, TypeDefinition type,

-            ExtensionsData extension) {

-        throw new CmisNotSupportedException("Updating a type definition is not supported.");

-    }

-

-    @Override

-    public TypeDefinition deleteType(CallContext callContext, String repositoryId, String typeId,

-            ExtensionsData extension) {

-        return super.deleteType(callContext, repositoryId, typeId, extension);

-    }

-

-    private ObjectStoreImpl getObjectStore(String repositoryId) {

-        return (ObjectStoreImpl) fStoreManager.getObjectStore(repositoryId);

-    }

-

-    private void checkReadAccess(String repositoryId, String principalId, StoredObject so) {

-        getObjectStore(repositoryId).checkReadAccess(principalId, so);

-    }

-

-    private void checkWriteAccess(String repositoryId, String principalId, StoredObject so) {

-        getObjectStore(repositoryId).checkWriteAccess(principalId, so);

-    }

-

-    private void checkAllAccess(String repositoryId, String principalId, StoredObject so) {

-        getObjectStore(repositoryId).checkAllAccess(principalId, so);

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java
deleted file mode 100644
index aef8d23..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
-
-/**
- * itemImpl is used for CMIS:item objects. Items are fileable but do not have
- * content
- * 
- */
-public class ItemImpl extends FilingImpl implements Item, Filing {
-
-    public ItemImpl() {
-        super();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
deleted file mode 100644
index 60424c5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
+++ /dev/null
@@ -1,1135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
-import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-import org.apache.chemistry.opencmis.inmemory.types.DefaultTypeSystemCreator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The object store is the central core of the in-memory repository. It is based
- * on huge HashMap map mapping ids to objects in memory. To allow access from
- * multiple threads a Java concurrent HashMap is used that allows parallel
- * access methods.
- * <p>
- * Certain methods in the in-memory repository must guarantee constraints. For
- * example a folder enforces that each child has a unique name. Therefore
- * certain operations must occur in an atomic manner. In the example it must be
- * guaranteed that no write access occurs to the map between acquiring the
- * iterator to find the children and finishing the add operation when no name
- * conflicts can occur. For this purpose this class has methods to lock an
- * unlock the state of the repository. It is very important that the caller
- * acquiring the lock enforces an unlock under all circumstances. Typical code
- * is:
- * <p>
- * 
- * <pre>
- * ObjectStoreImpl os = ... ;
- * try {
- *     os.lock();
- * } finally {
- *     os.unlock();
- * }
- * </pre>
- * 
- * The locking is very coarse-grained. Productive implementations would probably
- * implement finer grained locks on a folder or document rather than the
- * complete repository.
- */
-public class ObjectStoreImpl implements ObjectStore {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ObjectStoreImpl.class.getName());
-    private static final int FIRST_ID = 100;
-    private static final Long MAX_CONTENT_SIZE_KB = ConfigurationSettings
-            .getConfigurationValueAsLong(ConfigConstants.MAX_CONTENT_SIZE_KB);
-
-    /**
-     * User id for administrator always having all rights.
-     */
-    public static final String ADMIN_PRINCIPAL_ID = "Admin";
-
-    /**
-     * Simple id generator that uses just an integer.
-     */
-    private static int nextUnusedId = FIRST_ID;
-
-    /**
-     * A concurrent HashMap as core element to hold all objects in the
-     * repository.
-     */
-    private final Map<String, StoredObject> fStoredObjectMap = new ConcurrentHashMap<String, StoredObject>();
-
-    /**
-     * A concurrent HashMap to hold all Acls in the repository.
-     */
-    private int nextUnusedAclId = 0;
-
-    private final List<InMemoryAcl> fAcls = new ArrayList<InMemoryAcl>();
-
-    private final Lock fLock = new ReentrantLock();
-
-    private final String fRepositoryId;
-    private FolderImpl fRootFolder = null;
-
-    public ObjectStoreImpl(String repositoryId) {
-        fRepositoryId = repositoryId;
-        createRootFolder();
-    }
-
-    private static synchronized Integer getNextId() {
-        return nextUnusedId++;
-    }
-
-    private synchronized Integer getNextAclId() {
-        return nextUnusedAclId++;
-    }
-
-    private void lock() {
-        fLock.lock();
-    }
-
-    private void unlock() {
-        fLock.unlock();
-    }
-
-    @Override
-    public Folder getRootFolder() {
-        return fRootFolder;
-    }
-
-    @Override
-    public StoredObject getObjectByPath(String path, String user) {
-        StoredObject so = findObjectWithPathInDescendents(path, user, Filing.PATH_SEPARATOR, fRootFolder);
-        return so;
-    }
-
-    private Fileable findObjectWithPathInDescendents(String path, String user, String prefix, Fileable fo) {
-        if (path.equals(prefix)) {
-            return fo;
-        } else if (fo instanceof Folder) {
-            List<Fileable> children = getChildren((Folder) fo);
-            for (Fileable child : children) {
-                String foundPath = prefix.length() == 1 ? prefix + child.getName() : prefix + Filing.PATH_SEPARATOR
-                        + child.getName();
-                if (path.startsWith(foundPath)) {
-                    Fileable found = findObjectWithPathInDescendents(path, user, foundPath, child);
-                    if (null != found) {
-                        return found; // note that there can be multiple folders
-                                      // with the same prefix like folder1,
-                                      // folder10
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public StoredObject getObjectById(String objectId) {
-        // we use path as id so we just can look it up in the map
-        StoredObject so = fStoredObjectMap.get(objectId);
-        return so;
-    }
-
-    @Override
-    public void deleteObject(String objectId, Boolean allVersions, String user) {
-        StoredObject obj = fStoredObjectMap.get(objectId);
-
-        if (null == obj) {
-            throw new CmisObjectNotFoundException("Cannot delete object with id  " + objectId
-                    + ". Object does not exist.");
-        }
-
-        if (obj instanceof FolderImpl) {
-            deleteFolder(objectId, user);
-        } else if (obj instanceof DocumentVersion) {
-            DocumentVersion vers = (DocumentVersion) obj;
-            VersionedDocument parentDoc = vers.getParentDocument();
-            boolean otherVersionsExists;
-            if (allVersions != null && allVersions) {
-                otherVersionsExists = false;
-                List<DocumentVersion> allVers = parentDoc.getAllVersions();
-                for (DocumentVersion ver : allVers) {
-                    fStoredObjectMap.remove(ver.getId());
-                }
-            } else {
-                fStoredObjectMap.remove(objectId);
-                otherVersionsExists = parentDoc.deleteVersion(vers);
-            }
-
-            if (!otherVersionsExists) {
-                fStoredObjectMap.remove(parentDoc.getId());
-            }
-        } else {
-            fStoredObjectMap.remove(objectId);
-        }
-    }
-
-    public String storeObject(StoredObject so) {
-        String id = so.getId();
-        // check if update or create
-        if (null == id) {
-            id = getNextId().toString();
-        }
-        fStoredObjectMap.put(id, so);
-        return id;
-    }
-
-    StoredObject getObject(String id) {
-        return fStoredObjectMap.get(id);
-    }
-
-    void removeObject(String id) {
-        fStoredObjectMap.remove(id);
-    }
-
-    public Set<String> getIds() {
-        Set<String> entries = fStoredObjectMap.keySet();
-        return entries;
-    }
-
-    /**
-     * Clear repository and remove all data.
-     */
-    @Override
-    public void clear() {
-        lock();
-        fStoredObjectMap.clear();
-        storeObject(fRootFolder);
-        unlock();
-    }
-
-    @Override
-    public long getObjectCount() {
-        return fStoredObjectMap.size();
-    }
-
-    // /////////////////////////////////////////
-    // private helper methods
-
-    private void createRootFolder() {
-        FolderImpl rootFolder = new FolderImpl();
-        rootFolder.setName("RootFolder");
-        rootFolder.setParentId(null);
-        rootFolder.setTypeId(BaseTypeId.CMIS_FOLDER.value());
-        rootFolder.setCreatedBy("Admin");
-        rootFolder.setModifiedBy("Admin");
-        rootFolder.setModifiedAtNow();
-        rootFolder.setRepositoryId(fRepositoryId);
-        rootFolder.setAclId(addAcl(InMemoryAcl.getDefaultAcl()));
-        String id = storeObject(rootFolder);
-        rootFolder.setId(id);
-        fRootFolder = rootFolder;
-    }
-
-    @Override
-    public Document createDocument(Map<String, PropertyData<?>> propMap, String user, Folder folder,
-            ContentStream contentStream, List<String> policies, Acl addACEs, Acl removeACEs) {
-        String name = (String) propMap.get(PropertyIds.NAME).getFirstValue();
-        DocumentImpl doc = new DocumentImpl();
-        doc.createSystemBasePropertiesWhenCreated(propMap, user);
-        doc.setCustomProperties(propMap);
-        doc.setRepositoryId(fRepositoryId);
-        doc.setName(name);
-        if (null != folder) {
-            if (hasChild(folder, name)) {
-                throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + getFolderPath(folder.getId()));
-            }
-            doc.addParentId(folder.getId());
-        }
-        ContentStream content = setContent(doc, contentStream);
-        doc.setContent(content);
-        int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
-        doc.setAclId(aclId);
-        if (null != policies) {
-            doc.setAppliedPolicies(policies);
-        }
-        String id = storeObject(doc);
-        doc.setId(id);
-        applyAcl(doc, addACEs, removeACEs);
-        return doc;
-    }
-
-    @Override
-    public StoredObject createItem(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
-            List<String> policies, Acl addACEs, Acl removeACEs) {
-        ItemImpl item = new ItemImpl();
-        item.createSystemBasePropertiesWhenCreated(propMap, user);
-        item.setCustomProperties(propMap);
-        item.setRepositoryId(fRepositoryId);
-        item.setName(name);
-        if (null != folder) {
-            if (hasChild(folder, name)) {
-                throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + getFolderPath(folder.getId()));
-            }
-            item.addParentId(folder.getId());
-        }
-        if (null != policies) {
-            item.setAppliedPolicies(policies);
-        }
-        int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
-        item.setAclId(aclId);
-        String id = storeObject(item);
-        item.setId(id);
-        applyAcl(item, addACEs, removeACEs);
-        return item;
-    }
-
-    @Override
-    public DocumentVersion createVersionedDocument(String name, Map<String, PropertyData<?>> propMap, String user,
-            Folder folder, List<String> policies, Acl addACEs, Acl removeACEs, ContentStream contentStream,
-            VersioningState versioningState) {
-        VersionedDocumentImpl doc = new VersionedDocumentImpl();
-        doc.createSystemBasePropertiesWhenCreated(propMap, user);
-        doc.setCustomProperties(propMap);
-        doc.setRepositoryId(fRepositoryId);
-        doc.setName(name);
-        String id = storeObject(doc);
-        doc.setId(id);
-        DocumentVersion version = doc.addVersion(versioningState, user);
-        setContent(version, contentStream);
-        version.createSystemBasePropertiesWhenCreated(propMap, user);
-        version.setCustomProperties(propMap);
-        if (null != folder) {
-            if (hasChild(folder, name)) {
-                throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + getFolderPath(folder.getId()));
-            }
-            doc.addParentId(folder.getId());
-        }
-        int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
-        doc.setAclId(aclId);
-        if (null != policies) {
-            doc.setAppliedPolicies(policies);
-        }
-        id = storeObject(version);
-        version.setId(id);
-        applyAcl(doc, addACEs, removeACEs);
-        return version;
-    }
-
-    @Override
-    public Folder createFolder(String name, Map<String, PropertyData<?>> propMap, String user, Folder parent,
-            List<String> policies, Acl addACEs, Acl removeACEs) {
-
-        if (null == parent) {
-            throw new CmisInvalidArgumentException("Cannot create root folder.");
-        } else if (hasChild(parent, name)) {
-            throw new CmisNameConstraintViolationException(
-                    "Cannot create folder, this name already exists in parent folder.");
-        }
-        FolderImpl folder = new FolderImpl(name, parent.getId());
-        if (null != propMap) {
-            folder.createSystemBasePropertiesWhenCreated(propMap, user);
-            folder.setCustomProperties(propMap);
-        }
-        folder.setRepositoryId(fRepositoryId);
-
-        int aclId = getAclId(((FolderImpl) parent), addACEs, removeACEs);
-        folder.setAclId(aclId);
-        if (null != policies) {
-            folder.setAppliedPolicies(policies);
-        }
-
-        String id = storeObject(folder);
-        folder.setId(id);
-        applyAcl(folder, addACEs, removeACEs);
-        return folder;
-    }
-
-    public Folder createFolder(String name) {
-        Folder folder = new FolderImpl(name, null);
-        folder.setRepositoryId(fRepositoryId);
-        return folder;
-    }
-
-    @Override
-    public StoredObject createPolicy(String name, String policyText, Map<String, PropertyData<?>> propMap, String user,
-            Acl addACEs, Acl removeACEs) {
-        PolicyImpl policy = new PolicyImpl();
-        policy.createSystemBasePropertiesWhenCreated(propMap, user);
-        policy.setCustomProperties(propMap);
-        policy.setRepositoryId(fRepositoryId);
-        policy.setName(name);
-        policy.setPolicyText(policyText);
-        String id = storeObject(policy);
-        policy.setId(id);
-        applyAcl(policy, addACEs, removeACEs);
-        return policy;
-    }
-
-    @Override
-    public StoredObject createRelationship(String name, StoredObject sourceObject, StoredObject targetObject,
-            Map<String, PropertyData<?>> propMap, String user, Acl addACEs, Acl removeACEs) {
-
-        RelationshipImpl rel = new RelationshipImpl();
-        rel.createSystemBasePropertiesWhenCreated(propMap, user);
-        rel.setCustomProperties(propMap);
-        rel.setRepositoryId(fRepositoryId);
-        rel.setName(name);
-        if (null != sourceObject) {
-            rel.setSource(sourceObject.getId());
-        }
-        if (null != targetObject) {
-            rel.setTarget(targetObject.getId());
-        }
-        String id = storeObject(rel);
-        rel.setId(id);
-        applyAcl(rel, addACEs, removeACEs);
-        return rel;
-    }
-
-    @Override
-    public void storeVersion(DocumentVersion version) {
-        String id = storeObject(version);
-        version.setId(id);
-    }
-
-    @Override
-    public void deleteVersion(DocumentVersion version) {
-        StoredObject found = fStoredObjectMap.remove(version.getId());
-
-        if (null == found) {
-            throw new CmisInvalidArgumentException("Cannot delete object with id  " + version.getId()
-                    + ". Object does not exist.");
-        }
-    }
-
-    @Override
-    public void updateObject(StoredObject so, Map<String, PropertyData<?>> newProperties, String user) {
-        // nothing to do
-        Map<String, PropertyData<?>> properties = so.getProperties();
-        for (String key : newProperties.keySet()) {
-            PropertyData<?> value = newProperties.get(key);
-
-            if (key.equals(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
-                properties.put(key, value); // preserve it even if it is empty!
-            } else  if (null == value || value.getValues() == null || value.getFirstValue() == null) {
-                // delete property
-                properties.remove(key);
-            } else {
-                properties.put(key, value);
-            }
-        }
-        // update system properties and secondary object type ids
-        so.updateSystemBasePropertiesWhenModified(properties, user);
-        properties.remove(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-    }
-
-    @Override
-    public List<StoredObject> getCheckedOutDocuments(String orderBy, String user,
-            IncludeRelationships includeRelationships) {
-        List<StoredObject> res = new ArrayList<StoredObject>();
-
-        for (StoredObject so : fStoredObjectMap.values()) {
-            if (so instanceof VersionedDocument) {
-                VersionedDocument verDoc = (VersionedDocument) so;
-                if (verDoc.isCheckedOut() && hasReadAccess(user, verDoc)) {
-                    res.add(verDoc.getPwc());
-                }
-            }
-        }
-
-        return res;
-    }
-
-    @Override
-    public List<StoredObject> getRelationships(String objectId, List<String> typeIds, RelationshipDirection direction) {
-
-        List<StoredObject> res = new ArrayList<StoredObject>();
-
-        if (typeIds != null && typeIds.size() > 0) {
-            for (String typeId : typeIds) {
-                for (StoredObject so : fStoredObjectMap.values()) {
-                    if (so instanceof Relationship && so.getTypeId().equals(typeId)) {
-                        Relationship ro = (Relationship) so;
-                        if (ro.getSourceObjectId().equals(objectId)
-                                && (RelationshipDirection.EITHER == direction 
-                                    || RelationshipDirection.SOURCE == direction)) {
-                            res.add(so);
-                        } else if (ro.getTargetObjectId().equals(objectId)
-                                && (RelationshipDirection.EITHER == direction 
-                                    || RelationshipDirection.TARGET == direction)) {
-                            res.add(so);
-                        }
-                    }
-                }
-            }
-        } else {
-            res = getAllRelationships(objectId, direction);
-        }
-        return res;
-    }
-
-    @Override
-    public String getFolderPath(String folderId) {
-        StringBuilder sb = new StringBuilder();
-        insertPathSegment(sb, folderId);
-        return sb.toString();
-    }
-
-    private void insertPathSegment(StringBuilder sb, String folderId) {
-        Folder folder = (Folder) getObjectById(folderId);
-        if (null == folder.getParentId()) {
-            if (sb.length() == 0) {
-                sb.insert(0, Filing.PATH_SEPARATOR);
-            }
-        } else {
-            sb.insert(0, folder.getName());
-            sb.insert(0, Filing.PATH_SEPARATOR);
-            insertPathSegment(sb, folder.getParentId());
-        }
-    }
-
-    @Override
-    public Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces, AclPropagation aclPropagation, 
-            String principalId) {
-        if (aclPropagation == AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
-            return applyAcl(so, addAces, removeAces);
-        } else {
-            return applyAclRecursive(((Folder) so), addAces, removeAces, principalId);
-        }
-    }
-
-    @Override
-    public Acl applyAcl(StoredObject so, Acl acl, AclPropagation aclPropagation, String principalId) {
-        if (aclPropagation == AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
-            return applyAcl(so, acl);
-        } else {
-            return applyAclRecursive(((Folder) so), acl, principalId);
-        }
-    }
-
-    public List<Integer> getAllAclsForUser(String principalId, Permission permission) {
-        List<Integer> acls = new ArrayList<Integer>();
-        for (InMemoryAcl acl : fAcls) {
-            if (acl.hasPermission(principalId, permission)) {
-                acls.add(acl.getId());
-            }
-        }
-        return acls;
-    }
-
-    @Override
-    public Acl getAcl(int aclId) {
-        InMemoryAcl acl = getInMemoryAcl(aclId);
-        return acl == null ? InMemoryAcl.getDefaultAcl().toCommonsAcl() : acl.toCommonsAcl();
-    }
-
-    public int getAclId(StoredObjectImpl so, Acl addACEs, Acl removeACEs) {
-        InMemoryAcl newAcl;
-        boolean removeDefaultAcl = false;
-        int aclId = 0;
-
-        if (so == null) {
-            newAcl = new InMemoryAcl();
-        } else {
-            aclId = so.getAclId();
-            newAcl = getInMemoryAcl(aclId);
-            if (null == newAcl) {
-                newAcl = new InMemoryAcl();
-            } else {
-                // copy list so that we can safely change it without effecting
-                // the original
-                newAcl = new InMemoryAcl(newAcl.getAces());
-            }
-        }
-
-        if (newAcl.size() == 0 && addACEs == null && removeACEs == null) {
-            return 0;
-        }
-
-        if (null != removeACEs) {
-            for (Ace ace : removeACEs.getAces()) {
-                InMemoryAce inMemAce = new InMemoryAce(ace);
-                if (inMemAce.equals(InMemoryAce.getDefaultAce())) {
-                    removeDefaultAcl = true;
-                }
-            }
-        }
-
-        if (so != null && 0 == aclId && !removeDefaultAcl) {
-            return 0; // if object grants full access to everyone and it will
-                      // not be removed we do nothing
-        }
-
-        // add ACEs
-        if (null != addACEs) {
-            for (Ace ace : addACEs.getAces()) {
-                InMemoryAce inMemAce = new InMemoryAce(ace);
-                if (inMemAce.equals(InMemoryAce.getDefaultAce())) {
-                    return 0; // if everyone has full access there is no need to
-                }
-                // add additional ACLs.
-                newAcl.addAce(inMemAce);
-            }
-        }
-
-        // remove ACEs
-        if (null != removeACEs) {
-            for (Ace ace : removeACEs.getAces()) {
-                InMemoryAce inMemAce = new InMemoryAce(ace);
-                newAcl.removeAce(inMemAce);
-            }
-        }
-
-        if (newAcl.size() > 0) {
-            return addAcl(newAcl);
-        } else {
-            return 0;
-        }
-    }
-
-    private void deleteFolder(String folderId, String user) {
-        StoredObject folder = fStoredObjectMap.get(folderId);
-        if (folder == null) {
-            throw new CmisInvalidArgumentException("Unknown object with id:  " + folderId);
-        }
-
-        if (!(folder instanceof FolderImpl)) {
-            throw new CmisInvalidArgumentException("Cannot delete folder with id:  " + folderId
-                    + ". Object exists but is not a folder.");
-        }
-
-        // check if children exist
-        List<Fileable> children = getChildren((Folder) folder, -1, -1, user, true).getChildren();
-        if (children != null && !children.isEmpty()) {
-            throw new CmisConstraintException("Cannot delete folder with id:  " + folderId + ". Folder is not empty.");
-        }
-
-        fStoredObjectMap.remove(folderId);
-    }
-
-    @Override
-    public ChildrenResult getChildren(Folder folder, int maxItemsParam, int skipCountParam, String user, 
-            boolean usePwc) {
-        List<Fileable> children = getChildren(folder, user, usePwc);
-        sortFolderList(children);
-
-        int maxItems = maxItemsParam < 0 ? children.size() : maxItemsParam;
-        int skipCount = skipCountParam < 0 ? 0 : skipCountParam;
-
-        int from = Math.min(skipCount, children.size());
-        int to = Math.min(maxItems + from, children.size());
-        int noItems = children.size();
-
-        children = children.subList(from, to);
-        return new ChildrenResult(children, noItems);
-    }
-
-    private List<Fileable> getChildren(Folder folder) {
-        return getChildren(folder, null, false);
-    }
-
-    private List<Fileable> getChildren(Folder folder, String user, boolean usePwc) {
-        List<Fileable> children = new ArrayList<Fileable>();
-        for (String id : getIds()) {
-            StoredObject obj = getObject(id);
-            if (obj instanceof Fileable) {
-                Fileable pathObj = (Fileable) obj;
-                if ((null == user || hasReadAccess(user, obj)) && pathObj.getParentIds().contains(folder.getId())) {
-                    if (pathObj instanceof VersionedDocument) {
-                        DocumentVersion ver;
-                        if (usePwc) {
-                            ver = ((VersionedDocument) pathObj).getPwc();
-                            if (null == ver) {
-                                ver = ((VersionedDocument) pathObj).getLatestVersion(false);
-                            }
-                        } else {
-                            ver = ((VersionedDocument) pathObj).getLatestVersion(false);
-                        }
-                        children.add(ver);
-                    } else if (!(pathObj instanceof DocumentVersion)) { // ignore
-                                                                        // DocumentVersion
-                        children.add(pathObj);
-                    }
-
-                }
-            }
-        }
-        return children;
-    }
-
-    @Override
-    public ChildrenResult getFolderChildren(Folder folder, int maxItems, int skipCount, String user) {
-        List<Fileable> folderChildren = new ArrayList<Fileable>();
-        for (String id : getIds()) {
-            StoredObject obj = getObject(id);
-            if (hasReadAccess(user, obj) && obj instanceof Folder) {
-                Folder childFolder = (Folder) obj;
-                if (childFolder.getParentIds().contains(folder.getId())) {
-                    folderChildren.add(childFolder);
-                }
-            }
-        }
-        sortFolderList(folderChildren);
-        int from = Math.min(skipCount, folderChildren.size());
-        int to = Math.min(maxItems + from, folderChildren.size());
-        int noItems = folderChildren.size();
-
-        folderChildren = folderChildren.subList(from, to);
-
-        return new ChildrenResult(folderChildren, noItems);
-    }
-
-    @Override
-    public void move(StoredObject so, Folder oldParent, Folder newParent, String user) {
-        try {
-            if (hasChild(newParent, so.getName())) {
-                throw new CmisInvalidArgumentException("Cannot move object " + so.getName() + " to folder "
-                        + getFolderPath(newParent.getId()) + ". A child with this name already exists.");
-            }
-            lock();
-            if (so instanceof MultiFiling) {
-                MultiFiling fi = (MultiFiling) so;
-                addParentIntern(fi, newParent);
-                removeParentIntern(fi, oldParent);
-            } else if (so instanceof FolderImpl) {
-                ((FolderImpl) so).setParentId(newParent.getId());
-            }
-        } finally {
-            unlock();
-        }
-    }
-
-    @Override
-    public void rename(StoredObject so, String newName, String user) {
-        try {
-            lock();
-            if (so.getId().equals(fRootFolder.getId())) {
-                throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
-            }
-            if (so.getName().equals(newName)) {
-            	return;
-            }
-            if (so instanceof Fileable) {
-                for (String folderId : ((Fileable)so).getParentIds()) {
-                    Folder folder = (Folder) getObjectById(folderId);
-                    if (hasChild(folder, newName)) {
-                        throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
-                                + ". This path already exists in parent " + getFolderPath(folder.getId()) + ".");
-                    }
-                }
-            }
-            so.setName(newName);
-        } finally {
-            unlock();
-        }
-    }
-
-    private boolean hasChild(Folder folder, String name) {
-        List<Fileable> children = getChildren(folder);
-        for (Fileable child : children) {
-            if (child.getName().equals(name)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public List<String> getParentIds(StoredObject so, String user) {
-        List<String> visibleParents = new ArrayList<String>();
-        if (!(so instanceof Fileable)) {
-            throw new CmisInvalidArgumentException("Object is not fileable: " + so.getId());
-        }
-        Filing fileable = (Fileable) so;
-        List<String> parents = fileable.getParentIds();
-        for (String id : parents) {
-            StoredObject parent = getObjectById(id);
-            if (hasReadAccess(user, parent)) {
-                visibleParents.add(id);
-            }
-        }
-        return visibleParents;
-    }
-
-    public boolean hasReadAccess(String principalId, StoredObject so) {
-        return hasAccess(principalId, so, Permission.READ);
-    }
-
-    public boolean hasWriteAccess(String principalId, StoredObject so) {
-        return hasAccess(principalId, so, Permission.WRITE);
-    }
-
-    public boolean hasAllAccess(String principalId, StoredObject so) {
-        return hasAccess(principalId, so, Permission.ALL);
-    }
-
-    public void checkReadAccess(String principalId, StoredObject so) {
-        checkAccess(principalId, so, Permission.READ);
-    }
-
-    public void checkWriteAccess(String principalId, StoredObject so) {
-        checkAccess(principalId, so, Permission.WRITE);
-    }
-
-    public void checkAllAccess(String principalId, StoredObject so) {
-        checkAccess(principalId, so, Permission.ALL);
-    }
-
-    private void checkAccess(String principalId, StoredObject so, Permission permission) {
-        if (!hasAccess(principalId, so, permission)) {
-            throw new CmisPermissionDeniedException("Object with id " + so.getId() + " and name " + so.getName()
-                    + " does not grant " + permission.toString() + " access to principal " + principalId);
-        }
-    }
-
-    private boolean hasAccess(String principalId, StoredObject so, Permission permission) {
-        if (null != principalId && principalId.equals(ADMIN_PRINCIPAL_ID)) {
-            return true;
-        }
-        List<Integer> aclIds = getAllAclsForUser(principalId, permission);
-        return aclIds.contains(((StoredObjectImpl) so).getAclId());
-    }
-
-    private InMemoryAcl getInMemoryAcl(int aclId) {
-
-        for (InMemoryAcl acl : fAcls) {
-            if (aclId == acl.getId()) {
-                return acl;
-            }
-        }
-        return null;
-    }
-
-    private int setAcl(StoredObjectImpl so, Acl acl) {
-        int aclId;
-        if (null == acl || acl.getAces().isEmpty()) {
-            aclId = 0;
-        } else {
-            aclId = getAclId(null, acl, null);
-        }
-        so.setAclId(aclId);
-        return aclId;
-    }
-
-    /**
-     * Check if an Acl is already known.
-     * 
-     * @param acl
-     *            acl to be checked
-     * @return 0 if Acl is not known, id of Acl otherwise
-     */
-    private int hasAcl(InMemoryAcl acl) {
-        for (InMemoryAcl acl2 : fAcls) {
-            if (acl2.equals(acl)) {
-                return acl2.getId();
-            }
-        }
-        return -1;
-    }
-
-    private int addAcl(InMemoryAcl acl) {
-        int aclId = -1;
-
-        if (null == acl) {
-            return 0;
-        }
-
-        lock();
-        try {
-            aclId = hasAcl(acl);
-            if (aclId < 0) {
-                aclId = getNextAclId();
-                acl.setId(aclId);
-                fAcls.add(acl);
-            }
-        } finally {
-            unlock();
-        }
-        return aclId;
-    }
-
-    private Acl applyAcl(StoredObject so, Acl acl) {
-        int aclId = setAcl((StoredObjectImpl) so, acl);
-        return getAcl(aclId);
-    }
-
-    private Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces) {
-        int aclId = getAclId((StoredObjectImpl) so, addAces, removeAces);
-        ((StoredObjectImpl) so).setAclId(aclId);
-        return getAcl(aclId);
-    }
-
-    private Acl applyAclRecursive(Folder folder, Acl addAces, Acl removeAces, String principalId) {
-        List<Fileable> children = getChildren(folder, -1, -1, ADMIN_PRINCIPAL_ID, false).getChildren();
-        Acl result = applyAcl(folder, addAces, removeAces);
-
-        if (null == children) {
-            return result;
-        }
-
-        for (Fileable child : children) {
-            if (hasAllAccess(principalId, child)) {
-                if (child instanceof Folder) {
-                    applyAclRecursive((Folder) child, addAces, removeAces, principalId);
-                } else {
-                    applyAcl(child, addAces, removeAces);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private Acl applyAclRecursive(Folder folder, Acl acl, String principalId) {
-        List<Fileable> children = getChildren(folder, -1, -1, ADMIN_PRINCIPAL_ID, false).getChildren();
-        Acl result = applyAcl(folder, acl);
-
-        if (null == children) {
-            return result;
-        }
-
-        for (Fileable child : children) {
-            if (hasAllAccess(principalId, child)) {
-                if (child instanceof Folder) {
-                    applyAclRecursive((Folder) child, acl, principalId);
-                } else {
-                    applyAcl(child, acl);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private List<StoredObject> getAllRelationships(String objectId, RelationshipDirection direction) {
-
-        List<StoredObject> res = new ArrayList<StoredObject>();
-
-        for (StoredObject so : fStoredObjectMap.values()) {
-            if (so instanceof Relationship) {
-                Relationship ro = (Relationship) so;
-                if (ro.getSourceObjectId().equals(objectId)
-                        && (RelationshipDirection.EITHER == direction || RelationshipDirection.SOURCE == direction)) {
-                    res.add(so);
-                } else if (ro.getTargetObjectId().equals(objectId)
-                        && (RelationshipDirection.EITHER == direction || RelationshipDirection.TARGET == direction)) {
-                    res.add(so);
-                }
-            }
-        }
-        return res;
-    }
-
-    @Override
-    public boolean isTypeInUse(String typeId) {
-        // iterate over all the objects and check for each if the type matches
-        for (String objectId : getIds()) {
-            StoredObject so = getObjectById(objectId);
-            if (so.getTypeId().equals(typeId)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void addParent(StoredObject so, Folder parent) {
-        try {
-            lock();
-            if (hasChild(parent, so.getName())) {
-                throw new IllegalArgumentException(
-                        "Cannot assign new parent folder, this name already exists in target folder.");
-            }
-            MultiFiling mfi;
-            if (so instanceof MultiFiling) {
-                mfi = (MultiFiling) so;
-            } else {
-                throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
-            }
-
-            addParentIntern(mfi, parent);
-        } finally {
-            unlock();
-        }
-    }
-
-    @Override
-    public void removeParent(StoredObject so, Folder parent) {
-        try {
-            lock();
-            MultiFiling mfi;
-            if (so instanceof MultiFiling) {
-                mfi = (MultiFiling) so;
-            } else {
-                throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
-            }
-
-            removeParentIntern(mfi, parent);
-        } finally {
-            unlock();
-        }
-    }
-
-    private void addParentIntern(MultiFiling so, Folder parent) {
-        so.addParentId(parent.getId());
-    }
-
-    private void removeParentIntern(MultiFiling so, Folder parent) {
-        so.removeParentId(parent.getId());
-    }
-
-    private static void sortFolderList(List<? extends StoredObject> list) {
-        // TODO evaluate orderBy, for now sort by path segment
-        class FolderComparator implements Comparator<StoredObject> {
-
-            @Override
-            public int compare(StoredObject f1, StoredObject f2) {
-                String segment1 = f1.getName();
-                String segment2 = f2.getName();
-
-                return segment1.compareTo(segment2);
-            }
-        }
-
-        Collections.sort(list, new FolderComparator());
-    }
-
-    @Override
-    public ContentStream getContent(StoredObject so, long offset, long length) {
-        if (so instanceof Content) {
-            Content content = (Content) so;
-            ContentStream contentStream = content.getContent();
-            if (null == contentStream) {
-                return null;
-            } else if (offset <= 0 && length < 0) {
-                return contentStream;
-            } else {
-                return ((ContentStreamDataImpl)contentStream).getCloneWithLimits(offset, length);
-            }
-        } else {
-            throw new CmisInvalidArgumentException("Cannot set content, object does not implement interface Content.");
-        }
-    }
-
-    @Override
-    public ContentStream setContent(StoredObject so, ContentStream contentStream) {
-        if (so instanceof Content) {
-            ContentStreamDataImpl newContent;
-            Content content = (Content) so;
-
-            if (null == contentStream) {
-                newContent = null;
-            } else {
-                boolean useFakeContentStore = so.getTypeId().equals(DefaultTypeSystemCreator.BIG_CONTENT_FAKE_TYPE);
-                newContent = new ContentStreamDataImpl(MAX_CONTENT_SIZE_KB == null ? 0 : MAX_CONTENT_SIZE_KB, useFakeContentStore);
-                String fileName = contentStream.getFileName();
-                if (null == fileName || fileName.length() <= 0) {
-                    fileName = so.getName(); // use name of document as fallback
-                }
-                newContent.setFileName(fileName);
-                String mimeType = contentStream.getMimeType();
-                if (null == mimeType || mimeType.length() <= 0) {
-                    mimeType = "application/octet-stream"; // use as fallback
-                }
-                newContent.setMimeType(mimeType);
-                newContent.setLastModified(new GregorianCalendar());
-                try {
-                    newContent.setContent(contentStream.getStream());
-                } catch (IOException e) {
-                    throw new CmisRuntimeException("Failed to get content from InputStream", e);
-                }
-            }
-            content.setContent(newContent);
-            return newContent;
-
-        } else {
-            throw new CmisInvalidArgumentException("Cannot set content, object does not implement interface Content.");
-        }
-    }
-
-    @Override
-    public void appendContent(StoredObject so, ContentStream contentStream) {
-        if (so instanceof Content) {
-            Content content = (Content) so;
-            ContentStreamDataImpl newContent = (ContentStreamDataImpl) content.getContent();
-
-            if (null == newContent) {
-                content.setContent(null);
-            } else {
-                try {
-                    newContent.appendContent(contentStream.getStream());
-                } catch (IOException e) {
-                    throw new CmisStorageException("Failed to append content: IO Exception", e);
-                }
-            }
-        } else {
-            throw new CmisInvalidArgumentException("Cannot set content, object does not implement interface Content.");
-        }
-    }
-    
-    @Override
-    public List<RenditionData> getRenditions(StoredObject so, String renditionFilter, long maxItems, long skipCount) {
-
-        return RenditionUtil.getRenditions(so, renditionFilter, maxItems, skipCount);
-    }
-
-    @Override
-    public ContentStream getRenditionContent(StoredObject so, String streamId, long offset, long length) {
-        return RenditionUtil.getRenditionContent(so, streamId, offset, length);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/Permission.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/Permission.java
deleted file mode 100644
index 1ae7881..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/Permission.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;

-

-import org.apache.chemistry.opencmis.commons.BasicPermissions;

-

-public enum Permission {

-    NONE("none"), READ("read"), WRITE("write"), ALL("all");

-

-    private enum EnumBasicPermissions {

-

-        CMIS_READ(BasicPermissions.READ), CMIS_WRITE(BasicPermissions.WRITE), CMIS_ALL(BasicPermissions.ALL);

-        private final String value;

-

-        EnumBasicPermissions(String v) {

-            value = v;

-        }

-

-        public String value() {

-            return value;

-        }

-

-        public static EnumBasicPermissions fromValue(String v) {

-            for (EnumBasicPermissions c : EnumBasicPermissions.values()) {

-                if (c.value.equals(v)) {

-                    return c;

-                }

-            }

-            throw new IllegalArgumentException(v);

-        }

-    }

-

-    private final String value;

-

-    Permission(String v) {

-        value = v;

-    }

-

-    public String value() {

-        return value;

-    }

-

-    public static Permission fromValue(String v) {

-        for (Permission c : Permission.values()) {

-            if (c.value.equals(v)) {

-                return c;

-            }

-        }

-        throw new IllegalArgumentException(v);

-    }

-

-    public static Permission fromCmisString(String strPerm) {

-        Permission permission;

-        if (strPerm.equals(EnumBasicPermissions.CMIS_READ.value())) {

-            permission = Permission.READ;

-        } else if (strPerm.equals(EnumBasicPermissions.CMIS_WRITE.value())) {

-            permission = Permission.WRITE;

-        } else if (strPerm.equals(EnumBasicPermissions.CMIS_ALL.value())) {

-            permission = Permission.ALL;

-        } else {

-            throw new IllegalArgumentException("InMemory only supports CMIS basic permissions read, write, all.");

-        }

-        return permission;

-    }

-

-    public String toCmisString() {

-        if (this.equals(READ)) {

-            return EnumBasicPermissions.CMIS_READ.value();

-        } else if (this.equals(WRITE)) {

-            return EnumBasicPermissions.CMIS_WRITE.value();

-        } else if (this.equals(ALL)) {

-            return EnumBasicPermissions.CMIS_ALL.value();

-        } else {

-            return "";

-        }

-    }

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
deleted file mode 100644
index 3f6e164..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;
-
-public class PolicyImpl extends StoredObjectImpl implements Policy {
-
-    public PolicyImpl() {
-        super();
-    }
-
-    private String policyText;
-
-    public void setPolicyText(String text) {
-        policyText = text;
-    }
-
-    @Override
-    public String getPolicyText() {
-        return policyText;
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        if (FilterParser.isContainedInFilter(PropertyIds.POLICY_TEXT, requestedIds)) {
-            properties.put(PropertyIds.POLICY_TEXT,
-                    objFactory.createPropertyStringData(PropertyIds.POLICY_TEXT, policyText));
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RandomInputStream.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RandomInputStream.java
deleted file mode 100644
index 9e8fe36..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RandomInputStream.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Random;
-
-public class RandomInputStream extends InputStream {
-
-    private Random random = new Random();
-    private boolean isClosed = false;
-    private long size;
-    private long bytesRead;
-
-    public RandomInputStream(long size) {
-        this.size = size;
-    }
-    
-    @Override
-    public int read() throws IOException {
-        checkOpen();
-        long len = checkLimit(1);
-        if (len > 0) {
-            int result = random.nextInt() % 256;
-            if (result < 0) {
-                result = -result;
-            }
-            bytesRead++;
-            return result;
-        } else {
-            return -1;
-        }
-    }
-
-    @Override
-    public int read(byte[] data, int offset, int length) throws IOException {
-        checkOpen();
-        int sizeToRead = (int)checkLimit(length);
-        if (0 == sizeToRead) {
-            return -1;
-        }
-
-        byte[] temp = new byte[sizeToRead];
-        random.nextBytes(temp);
-        System.arraycopy(temp, 0, data, offset, sizeToRead);
-        bytesRead += length;
-        return length;
-    }
-
-    @Override
-    public int read(byte[] data) throws IOException {
-        checkOpen();
-        long len = checkLimit(data.length);
-        if (0 == len) {
-            return -1;
-        }
-        random.nextBytes(data);
-        bytesRead += len;
-        return (int) len;
-    }
-
-    @Override
-    public long skip(long bytesToSkip) throws IOException {
-        checkOpen();
-        long skip = checkLimit(bytesToSkip);
-        bytesRead += skip;
-        return skip;
-    }
-
-    @Override
-    public void close() {
-        this.isClosed = true;
-    }
-
-    @Override
-    public int available() {
-        return (int)(size - bytesRead);
-    }
-
-    private void checkOpen() throws IOException {
-        if (isClosed) {
-            throw new IOException("RandomInputStream was already closed.");
-        }
-    }
-
-    private long checkLimit(long sizeRequested) {
-        if (bytesRead >= size) {
-            return 0;
-        } else if (bytesRead + sizeRequested >= size) {
-            return size - bytesRead;
-        } else {
-            return sizeRequested;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
deleted file mode 100644
index 74608c4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
-
-public class RelationshipImpl extends StoredObjectImpl implements Relationship {
-
-    private String sourceObjId;
-    private String targetObjId;
-
-    public RelationshipImpl() {
-        super();
-    }
-
-    @Override
-    public String getSourceObjectId() {
-        return sourceObjId;
-    }
-
-    public void setSource(String id) {
-        this.sourceObjId = id;
-    }
-
-    @Override
-    public String getTargetObjectId() {
-        return targetObjId;
-    }
-
-    public void setTarget(String id) {
-        targetObjId = id;
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        if (FilterParser.isContainedInFilter(PropertyIds.SOURCE_ID, requestedIds)) {
-            properties.put(PropertyIds.SOURCE_ID,
-                    objFactory.createPropertyStringData(PropertyIds.SOURCE_ID, sourceObjId));
-        }
-
-        if (FilterParser.isContainedInFilter(PropertyIds.TARGET_ID, requestedIds)) {
-            properties.put(PropertyIds.TARGET_ID,
-                    objFactory.createPropertyStringData(PropertyIds.TARGET_ID, targetObjId));
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RenditionUtil.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RenditionUtil.java
deleted file mode 100644
index e40c779..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RenditionUtil.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RenditionUtil {
-    
-    private static final Logger LOG = LoggerFactory.getLogger(RenditionUtil.class.getName());
-    private static final int BUFFER_SIZE = 65536;
-    public static final String RENDITION_MIME_TYPE_JPEG = "image/jpeg";
-    public static final String RENDITION_MIME_TYPE_PNG = "image/png";
-    public static final String RENDITION_SUFFIX = "-rendition";
-    public static final int THUMBNAIL_SIZE = 100;
-    public static final int ICON_SIZE = 32;
-
-    public static boolean hasRendition(StoredObject so, String user) {
-        if (so instanceof Folder) {
-            return true;
-        } else if (so instanceof Content) {
-            ContentStream contentStream = ((Content)so).getContent();
-            if (null == contentStream) {
-                return false;
-            }
-
-            String mimeType = contentStream.getMimeType();
-
-            return isImage(mimeType) || isAudio(mimeType) || isVideo(mimeType) || isPDF(mimeType) || isPowerpoint(mimeType)
-                    || isExcel(mimeType) || isWord(mimeType) || isHtml(mimeType) || isPlainText(mimeType);
-        } else {
-            return false;
-        }
-    }
-    
-    private static boolean isImage(String mimeType) {
-        return mimeType.startsWith("image/");
-    }
-
-    private static boolean isWord(String mimeType) {
-        return mimeType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")
-                || mimeType.equals("application/ms-word");
-    }
-
-    private static boolean isExcel(String mimeType) {
-        return mimeType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
-                || mimeType.equals("application/vnd.ms-excel");
-    }
-
-    private static boolean isPowerpoint(String mimeType) {
-        return mimeType.equals("application/vnd.openxmlformats-officedocument.presentationml.slideshow")
-                || mimeType.equals("application/vnd.openxmlformats-officedocument.presentationml.presentation")
-                || mimeType.equals("application/vnd.ms-powerpoint");
-    }
-
-    private static boolean isPDF(String mimeType) {
-        return mimeType.equals("application/pdf");
-    }
-
-    private static boolean isHtml(String mimeType) {
-        return mimeType.equals("text/html");
-    }
-
-    private static boolean isAudio(String mimeType) {
-        return mimeType.startsWith("audio/");
-    }
-
-    private static boolean isVideo(String mimeType) {
-        return mimeType.startsWith("video/");
-    }
-
-    private static boolean isPlainText(String mimeType) {
-        return mimeType.equals("text/plain");
-    }
-
-    public static ContentStream getIconFromResourceDir(String name) throws IOException {
-
-        InputStream imageStream = StoredObjectImpl.class.getResourceAsStream(name);
-        ByteArrayOutputStream ba = new ByteArrayOutputStream();
-        byte[] buffer = new byte[BUFFER_SIZE];
-        int noBytesRead = 0;
-
-        try {
-            while ((noBytesRead = imageStream.read(buffer)) >= 0) {
-                ba.write(buffer, 0, noBytesRead);
-            }
-        } finally {
-            IOUtils.closeQuietly(ba);
-            IOUtils.closeQuietly(imageStream);
-        }
-
-        ContentStreamDataImpl content = new ContentStreamDataImpl(0);
-        content.setFileName(name);
-        content.setMimeType("image/png");
-        content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-        return content;
-    }
-
-    public static boolean testRenditionFilterForImage(String[] formats) {
-        if (formats.length == 1 && null != formats[0] && formats[0].equals("cmis:none")) {
-            return false;
-        } else {
-            return arrayContainsString(formats, "*") || arrayContainsString(formats, "image/*")
-                    || arrayContainsString(formats, "image/jpeg");
-        }
-    }
-
-    private static boolean arrayContainsString(String[] formats, String val) {
-        for (String s : formats) {
-            if (val.equals(s)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static ContentStream getRenditionContent(StoredObject so, String streamId, long offset, long length) {
-        if (so instanceof Folder) {
-            return RenditionUtil.getFolderRenditionContent(streamId, offset, length);
-        }
-        if (!(so instanceof Content)) {
-            throw new CmisInvalidArgumentException("Only objects with content can have a rendition");
-        }
-        ContentStream contentStream = ((Content)so).getContent();
-
-        if (null == contentStream) {
-            return null;
-        }
-
-        String mimeType = contentStream.getMimeType();
-
-        try {
-            if (isImage(mimeType)) {
-                ImageThumbnailGenerator generator = new ImageThumbnailGenerator(contentStream.getStream());
-                return generator.getRendition(THUMBNAIL_SIZE, 0);
-            } else if (isAudio(mimeType)) {
-                return getIconFromResourceDir("/audio-x-generic.png");
-            } else if (isVideo(mimeType)) {
-                return getIconFromResourceDir("/video-x-generic.png");
-            } else if (isPDF(mimeType)) {
-                return getIconFromResourceDir("/application-pdf.png");
-            } else if (isWord(mimeType)) {
-                return getIconFromResourceDir("/application-msword.png");
-            } else if (isPowerpoint(mimeType)) {
-                return getIconFromResourceDir("/application-vnd.ms-powerpoint.png");
-            } else if (isExcel(mimeType)) {
-                return getIconFromResourceDir("/application-vnd.ms-excel.png");
-            } else if (isHtml(mimeType)) {
-                return getIconFromResourceDir("/text-html.png");
-            } else if (isPlainText(mimeType)) {
-                return getIconFromResourceDir("/text-x-generic.png");
-            } else {
-                return null;
-            }
-        } catch (IOException e) {
-            LOG.error("Failed to generate rendition: ", e);
-            throw new CmisRuntimeException("Failed to generate rendition: " + e);
-        }
-    }
-    
-    private static ContentStream getFolderRenditionContent(String streamId, long offset, long length) {
-        try {
-            return getIconFromResourceDir("/folder.png");
-        } catch (IOException e) {
-            LOG.error("Failed to generate rendition: ", e);
-            throw new CmisRuntimeException("Failed to generate rendition: " + e);
-        }
-    }
-    
-    public static List<RenditionData> getRenditions(StoredObject so, String renditionFilter, long maxItems, long skipCount) {
-
-        String tokenizer = "[\\s;]";
-        if (null == renditionFilter) {
-            return null;
-        }
-        String[] formats = renditionFilter.split(tokenizer);
-        boolean isImageRendition = RenditionUtil.testRenditionFilterForImage(formats);
-        if (!(so instanceof Content) && !(so instanceof Folder)) {
-            return null;
-        }
-        
-        if (isImageRendition && hasRendition(so, null)) {
-            String mimeType;
-            if (so  instanceof Folder) {
-                mimeType = "image/png";
-            } else {
-                ContentStream contentStream = ((Content)so).getContent();
-                mimeType = contentStream.getMimeType();
-            }
-
-            List<RenditionData> renditions = new ArrayList<RenditionData>(1);
-            RenditionDataImpl rendition = new RenditionDataImpl();
-            if (mimeType.equals("image/jpeg")) {
-                rendition.setBigHeight(BigInteger.valueOf(THUMBNAIL_SIZE));
-                rendition.setBigWidth(BigInteger.valueOf(THUMBNAIL_SIZE));
-                rendition.setMimeType(RENDITION_MIME_TYPE_JPEG);
-            } else {
-                rendition.setBigHeight(BigInteger.valueOf(ICON_SIZE));
-                rendition.setBigWidth(BigInteger.valueOf(ICON_SIZE));
-                rendition.setMimeType(RENDITION_MIME_TYPE_PNG);
-            }
-            rendition.setKind("cmis:thumbnail");
-            rendition.setRenditionDocumentId(so.getId());
-            rendition.setStreamId(so.getId() + RENDITION_SUFFIX);
-            rendition.setBigLength(BigInteger.valueOf(-1L));
-            rendition.setTitle(so.getName());
-            renditions.add(rendition);
-            return renditions;
-        } else {
-            return null;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java
deleted file mode 100644
index 18339a9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Create objects that are stored in a persistent store.
- */
-public final class StoreManagerFactory {
-
-    private static final Logger LOG = LoggerFactory.getLogger(StoreManagerFactory.class);
-
-    private StoreManagerFactory() {
-    }
-
-    public static StoreManager createInstance(String className) {
-
-        Class<?> clazz = null;
-        try {
-            clazz = Class.forName(className);
-        } catch (ClassNotFoundException e) {
-            String msg = "Failed to create StoredObjectCreator, class " + className + " does not exist.";
-            LOG.error(msg, e);
-            throw new CmisRuntimeException(msg, e);
-        }
-
-        Object obj = null;
-        try {
-            obj = clazz.newInstance();
-        } catch (InstantiationException e) {
-            LOG.error("Failed to create StoredObjectCreator from class " + className, e);
-        } catch (IllegalAccessException e) {
-            LOG.error("Failed to create StoredObjectCreator from class " + className, e);
-        }
-
-        if (obj instanceof StoreManager) {
-            return (StoreManager) obj;
-        } else {
-            LOG.error("Failed to create StoredObjectCreator, class " + className
-                    + " does not implement interface StoredObjectCreator");
-            return null;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
deleted file mode 100644
index 388a911..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.TypeCreator;
-import org.apache.chemistry.opencmis.inmemory.TypeManagerImpl;
-import org.apache.chemistry.opencmis.inmemory.query.InMemoryQueryProcessor;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.CmisServiceValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * Factory to create objects that are stored in the InMemory store.
- * 
- */
-public class StoreManagerImpl implements StoreManager {
-
-    private static final String UNKNOWN_REPOSITORY = "Unknown repository ";
-    private static final String CMIS_READ = "cmis:read";
-    private static final String CMIS_WRITE = "cmis:write";
-    private static final String CMIS_ALL = "cmis:all";
-
-    private final BindingsObjectFactory fObjectFactory;
-    private final TypeDefinitionFactory typeFactory = TypeDefinitionFactory.newInstance();
-    private static final String OPENCMIS_VERSION;
-    private static final String OPENCMIS_SERVER;
-
-    static {
-        Package p = Package.getPackage("org.apache.chemistry.opencmis.inmemory");
-        if (p == null) {
-            OPENCMIS_VERSION = "?";
-            OPENCMIS_SERVER = "Apache-Chemistry-OpenCMIS-InMemory";
-        } else {
-            String ver = p.getImplementationVersion();
-            OPENCMIS_VERSION = (null == ver ? "?" : ver);
-            OPENCMIS_SERVER = "Apache-Chemistry-OpenCMIS-InMemory/" + OPENCMIS_VERSION;
-        }
-    }
-
-    /**
-     * Map from repository id to a type manager.
-     */
-    private final Map<String, TypeManagerImpl> fMapRepositoryToTypeManager = new HashMap<String, TypeManagerImpl>();
-
-    /**
-     * Map from repository id to a object store.
-     */
-    private final Map<String, ObjectStore> fMapRepositoryToObjectStore = new HashMap<String, ObjectStore>();
-
-    public ObjectStoreImpl getStore(String repositoryId) {
-        return (ObjectStoreImpl) fMapRepositoryToObjectStore.get(repositoryId);
-    }
-
-    public StoreManagerImpl() {
-        fObjectFactory = new BindingsObjectFactoryImpl();
-    }
-
-    @Override
-    public List<String> getAllRepositoryIds() {
-        Set<String> repIds = fMapRepositoryToObjectStore.keySet();
-        List<String> result = new ArrayList<String>();
-        result.addAll(repIds);
-        return result;
-    }
-
-    @Override
-    public void initRepository(String repositoryId) {
-        fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
-        fMapRepositoryToTypeManager.put(repositoryId, new TypeManagerImpl());
-    }
-
-    @Override
-    public void createAndInitRepository(String repositoryId, String typeCreatorClassName) {
-        if (fMapRepositoryToObjectStore.containsKey(repositoryId)
-                || fMapRepositoryToTypeManager.containsKey(repositoryId)) {
-            throw new CmisInvalidArgumentException("Cannot add repository, repository " + repositoryId
-                    + " already exists.");
-        }
-
-        fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
-        fMapRepositoryToTypeManager.put(repositoryId, new TypeManagerImpl());
-
-        // initialize the type system:
-        initTypeSystem(repositoryId, typeCreatorClassName);
-    }
-
-    @Override
-    public ObjectStore getObjectStore(String repositoryId) {
-        return fMapRepositoryToObjectStore.get(repositoryId);
-    }
-
-    @Override
-    public CmisServiceValidator getServiceValidator() {
-        return new InMemoryServiceValidatorImpl(this);
-    }
-
-    @Override
-    public BindingsObjectFactory getObjectFactory() {
-        return fObjectFactory;
-    }
-
-    @Override
-    public TypeDefinitionContainer getTypeById(String repositoryId, String typeId) {
-        TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisObjectNotFoundException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-        TypeDefinitionContainer tdc = typeManager.getTypeById(typeId);
-        if (null != tdc && !cmis11) {
-            TypeDefinition td = tdc.getTypeDefinition();
-            if (td.getBaseTypeId() == BaseTypeId.CMIS_ITEM || td.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY
-                    || td.getId().equals(BaseTypeId.CMIS_ITEM.value())
-                    || td.getId().equals(BaseTypeId.CMIS_SECONDARY.value())) {
-                tdc = null; // filter new types for CMIS 1.0
-            } else {
-            	// remove type mutability information:
-                MutableTypeDefinition tdm = typeFactory.copy(td, true);
-                tdm.setTypeMutability(null);
-                tdc = new TypeDefinitionContainerImpl(tdm);
-            }
-        }
-        return tdc;
-    }
-
-    @Override
-    public TypeDefinitionContainer getTypeById(String repositoryId, String typeId, boolean includePropertyDefinitions,
-            int depthParam) {
-        int depth = depthParam;
-        TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisInvalidArgumentException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-
-        TypeDefinitionContainer tc = typeManager.getTypeById(typeId);
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-
-        if (tc != null) {
-            if (depth == -1) {
-                if (cmis11 && includePropertyDefinitions) {
-                    return tc;
-                } else {
-                    depth = Integer.MAX_VALUE;
-                }
-            } else if (depth == 0 || depth < -1) {
-                throw new CmisInvalidArgumentException("illegal depth value: " + depth);
-            }
-
-            return cloneTypeList(depth, includePropertyDefinitions, tc, null, cmis11);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public Collection<TypeDefinitionContainer> getTypeDefinitionList(String repositoryId,
-            boolean includePropertyDefinitions) {
-        TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisInvalidArgumentException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-        Collection<TypeDefinitionContainer> typeColl = getRootTypes(repositoryId, includePropertyDefinitions);
-        return typeColl;
-    }
-
-    @Override
-    public List<TypeDefinitionContainer> getRootTypes(String repositoryId, boolean includePropertyDefinitions) {
-        List<TypeDefinitionContainer> result;
-        TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisInvalidArgumentException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-        List<TypeDefinitionContainer> rootTypes = typeManager.getRootTypes();
-
-        // remove cmis:item and cmis:secondary for CMIS 1.0
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-        if (!cmis11) {
-            rootTypes = new ArrayList<TypeDefinitionContainer>(rootTypes);
-            TypeDefinitionContainer tcItem = null, tcSecondary = null;
-            for (TypeDefinitionContainer tc : rootTypes) {
-                if (tc.getTypeDefinition().getId().equals(BaseTypeId.CMIS_ITEM.value())) {
-                    tcItem = tc;
-                }
-                if (tc.getTypeDefinition().getId().equals(BaseTypeId.CMIS_SECONDARY.value())) {
-                    tcSecondary = tc;
-                }
-            }
-            if (tcItem != null) {
-                rootTypes.remove(tcItem);
-            }
-            if (tcSecondary != null) {
-                rootTypes.remove(tcSecondary);
-            }
-        }
-
-        if (cmis11 && includePropertyDefinitions) {
-            result = rootTypes;
-        } else {
-            result = cloneTypeDefinitionTree(rootTypes, includePropertyDefinitions, cmis11);
-        }
-        return result;
-    }
-    
-    private List<TypeDefinitionContainer> cloneTypeDefinitionTree (List<TypeDefinitionContainer> tdcList, boolean includePropertyDefinitions, boolean cmis11) {
-    	List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>(tdcList.size());
-		for (TypeDefinitionContainer c : tdcList) {
-			MutableTypeDefinition td = typeFactory.copy(c.getTypeDefinition(), includePropertyDefinitions);
-			if (!cmis11) {
-				td.setTypeMutability(null);
-			}
-			TypeDefinitionContainerImpl tdc = new TypeDefinitionContainerImpl(td);
-			tdc.setChildren(cloneTypeDefinitionTree(c.getChildren(), includePropertyDefinitions, cmis11));
-			result.add(tdc);
-		}
-		return result;
-	}
-    
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId) {
-        ObjectStore sm = fMapRepositoryToObjectStore.get(repositoryId);
-        if (null == sm) {
-            return null;
-        }
-
-        RepositoryInfo repoInfo = createRepositoryInfo(repositoryId);
-        return repoInfo;
-    }
-
-    public void clearTypeSystem(String repositoryId) {
-        TypeManagerImpl typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisInvalidArgumentException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-
-        typeManager.clearTypeSystem();
-    }
-
-    public static List<TypeDefinition> initTypeSystem(String typeCreatorClassName) {
-
-        List<TypeDefinition> typesList = null;
-
-        if (typeCreatorClassName != null) {
-            Object obj = null;
-            TypeCreator typeCreator = null;
-
-            final String message = "Illegal class to create type system, must implement TypeCreator interface.";
-            try {
-                obj = Class.forName(typeCreatorClassName).newInstance();
-            } catch (InstantiationException e) {
-                throw new CmisRuntimeException(message, e);
-            } catch (IllegalAccessException e) {
-                throw new CmisRuntimeException(message, e);
-            } catch (ClassNotFoundException e) {
-                throw new CmisRuntimeException(message, e);
-            }
-
-            if (obj instanceof TypeCreator) {
-                typeCreator = (TypeCreator) obj;
-            } else {
-                throw new CmisRuntimeException(message);
-            }
-
-            // retrieve the list of available types from the configured class.
-            // test
-            typesList = typeCreator.createTypesList();
-        }
-
-        return typesList;
-    }
-
-    private void initTypeSystem(String repositoryId, String typeCreatorClassName) {
-
-        List<TypeDefinition> typeDefs = null;
-        TypeManagerImpl typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        if (null == typeManager) {
-            throw new CmisObjectNotFoundException(UNKNOWN_REPOSITORY + repositoryId);
-        }
-
-        if (null != typeCreatorClassName) {
-            typeDefs = initTypeSystem(typeCreatorClassName);
-        }
-
-        typeManager.initTypeSystem(typeDefs, true);
-    }
-
-    @SuppressWarnings("serial")
-    private RepositoryInfo createRepositoryInfo(String repositoryId) {
-        boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-        ObjectStore objStore = getObjectStore(repositoryId);
-        String rootFolderId = objStore.getRootFolder().getId();
-        // repository info
-        RepositoryInfoImpl repoInfo;
-        repoInfo = new RepositoryInfoImpl();
-        repoInfo.setId(repositoryId == null ? "inMem" : repositoryId);
-        repoInfo.setName("Apache Chemistry OpenCMIS InMemory Repository");
-        repoInfo.setDescription("Apache Chemistry OpenCMIS InMemory Repository (Version: " + OPENCMIS_VERSION + ")");
-        repoInfo.setRootFolder(rootFolderId);
-        repoInfo.setPrincipalAnonymous(InMemoryAce.getAnonymousUser());
-        repoInfo.setPrincipalAnyone(InMemoryAce.getAnyoneUser());
-        repoInfo.setThinClientUri("");
-        repoInfo.setChangesIncomplete(Boolean.TRUE);
-        repoInfo.setLatestChangeLogToken("token-24");
-        repoInfo.setVendorName("Apache Chemistry");
-        repoInfo.setProductName(OPENCMIS_SERVER);
-        repoInfo.setProductVersion(OPENCMIS_VERSION);
-
-        // set capabilities
-        RepositoryCapabilitiesImpl caps = new RepositoryCapabilitiesImpl();
-        caps.setAllVersionsSearchable(false);
-        caps.setCapabilityAcl(CapabilityAcl.MANAGE);
-        caps.setCapabilityChanges(CapabilityChanges.OBJECTIDSONLY);
-        caps.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
-        caps.setCapabilityJoin(CapabilityJoin.NONE);
-        caps.setCapabilityQuery(CapabilityQuery.BOTHCOMBINED);
-        caps.setCapabilityRendition(CapabilityRenditions.READ);
-        caps.setIsPwcSearchable(false);
-        caps.setIsPwcUpdatable(true);
-        caps.setSupportsGetDescendants(true);
-        caps.setSupportsGetFolderTree(true);
-        caps.setSupportsMultifiling(true);
-        caps.setSupportsUnfiling(true);
-        caps.setSupportsVersionSpecificFiling(false);
-        caps.setCapabilityAcl(CapabilityAcl.MANAGE);
-
-        AclCapabilitiesDataImpl aclCaps = new AclCapabilitiesDataImpl();
-        aclCaps.setAclPropagation(AclPropagation.OBJECTONLY);
-        aclCaps.setSupportedPermissions(SupportedPermissions.BASIC);
-
-        // permissions
-        List<PermissionDefinition> permissions = new ArrayList<PermissionDefinition>();
-        permissions.add(createPermission(CMIS_READ, "Read"));
-        permissions.add(createPermission(CMIS_WRITE, "Write"));
-        permissions.add(createPermission(CMIS_ALL, "All"));
-        if (cmis11) {
-            NewTypeSettableAttributesImpl typeAttrs = new NewTypeSettableAttributesImpl();
-            typeAttrs.setCanSetControllableAcl(false);
-            typeAttrs.setCanSetControllablePolicy(false);
-            typeAttrs.setCanSetCreatable(true);
-            typeAttrs.setCanSetDescription(true);
-            typeAttrs.setCanSetDisplayName(true);
-            typeAttrs.setCanSetFileable(false);
-            typeAttrs.setCanSetFulltextIndexed(false);
-            typeAttrs.setCanSetId(true);
-            typeAttrs.setCanSetIncludedInSupertypeQuery(false);
-            typeAttrs.setCanSetLocalName(true);
-            typeAttrs.setCanSetLocalNamespace(true);
-            typeAttrs.setCanSetQueryable(false);
-            typeAttrs.setCanSetQueryName(true);
-            caps.setNewTypeSettableAttributes(typeAttrs);
-        }
-        aclCaps.setPermissionDefinitionData(permissions);
-
-        // mapping
-        List<PermissionMapping> list = new ArrayList<PermissionMapping>();
-        list.add(createMapping(PermissionMapping.CAN_GET_DESCENDENTS_FOLDER, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_CHILDREN_FOLDER, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_PARENTS_FOLDER, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_FOLDER_PARENT_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_CREATE_FOLDER_FOLDER, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_CREATE_RELATIONSHIP_SOURCE, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_CREATE_RELATIONSHIP_TARGET, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_PROPERTIES_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_VIEW_CONTENT_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_UPDATE_PROPERTIES_OBJECT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_OBJECT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_TARGET, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_MOVE_SOURCE, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_DELETE_OBJECT, CMIS_WRITE));
-
-        list.add(createMapping(PermissionMapping.CAN_DELETE_TREE_FOLDER, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_SET_CONTENT_DOCUMENT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_DELETE_CONTENT_DOCUMENT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_ADD_TO_FOLDER_OBJECT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_REMOVE_FROM_FOLDER_OBJECT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_CHECKOUT_DOCUMENT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_CANCEL_CHECKOUT_DOCUMENT, CMIS_WRITE));
-
-        list.add(createMapping(PermissionMapping.CAN_CHECKIN_DOCUMENT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_GET_ALL_VERSIONS_VERSION_SERIES, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_OBJECT_RELATIONSHIPS_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_ADD_POLICY_OBJECT, CMIS_WRITE));
-        list.add(createMapping(PermissionMapping.CAN_REMOVE_POLICY_OBJECT, CMIS_WRITE));
-
-        list.add(createMapping(PermissionMapping.CAN_GET_APPLIED_POLICIES_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_GET_ACL_OBJECT, CMIS_READ));
-        list.add(createMapping(PermissionMapping.CAN_APPLY_ACL_OBJECT, CMIS_ALL));
-
-        Map<String, PermissionMapping> map = new LinkedHashMap<String, PermissionMapping>();
-        for (PermissionMapping pm : list) {
-            map.put(pm.getKey(), pm);
-        }
-
-        List<BaseTypeId> changesOnType;
-        // CMIS 1.1 extensions
-        if (cmis11) {
-            repoInfo.setCmisVersionSupported(CmisVersion.CMIS_1_1.value());
-            repoInfo.setCmisVersion(CmisVersion.CMIS_1_1);
-            changesOnType = new ArrayList<BaseTypeId>() {
-                {
-                    add(BaseTypeId.CMIS_DOCUMENT);
-                    add(BaseTypeId.CMIS_FOLDER);
-                    add(BaseTypeId.CMIS_ITEM);
-                }
-            };
-
-            Set<PropertyType> propertyTypeSet = new HashSet<PropertyType>() {
-                {
-                    add(PropertyType.BOOLEAN);
-                    add(PropertyType.DATETIME);
-                    add(PropertyType.DECIMAL);
-                    add(PropertyType.HTML);
-                    add(PropertyType.ID);
-                    add(PropertyType.INTEGER);
-                    add(PropertyType.STRING);
-                    add(PropertyType.URI);
-                }
-            };
-            CreatablePropertyTypesImpl creatablePropertyTypes = new CreatablePropertyTypesImpl();
-            creatablePropertyTypes.setCanCreate(propertyTypeSet);
-            caps.setCreatablePropertyTypes(creatablePropertyTypes);
-            caps.setCapabilityOrderBy(CapabilityOrderBy.COMMON);
-        } else {
-            repoInfo.setCmisVersionSupported(CmisVersion.CMIS_1_0.value());
-            repoInfo.setCmisVersion(CmisVersion.CMIS_1_0);
-            changesOnType = new ArrayList<BaseTypeId>() {
-                {
-                    add(BaseTypeId.CMIS_DOCUMENT);
-                    add(BaseTypeId.CMIS_FOLDER);
-                }
-            };
-        }
-        repoInfo.setChangesOnType(changesOnType);
-
-        aclCaps.setPermissionMappingData(map);
-
-        repoInfo.setAclCapabilities(aclCaps);
-
-        repoInfo.setCapabilities(caps);
-
-        return repoInfo;
-    }
-
-    private static PermissionDefinition createPermission(String permission, String description) {
-        PermissionDefinitionDataImpl pd = new PermissionDefinitionDataImpl();
-        pd.setId(permission);
-        pd.setDescription(description);
-
-        return pd;
-    }
-
-    private static PermissionMapping createMapping(String key, String permission) {
-        PermissionMappingDataImpl pm = new PermissionMappingDataImpl();
-        pm.setKey(key);
-        pm.setPermissions(Collections.singletonList(permission));
-
-        return pm;
-    }
-
-    /**
-     * traverse tree and replace each need node with a clone. remove properties
-     * on clone if requested, cut children of clone if depth is exceeded.
-     * 
-     * @param depth
-     *            levels of children to copy
-     * @param includePropertyDefinitions
-     *            indicates with or without property definitions
-     * @param tdc
-     *            type definition to clone
-     * @param parent
-     *            parent container where to add clone as child
-     * @return cloned type definition
-     */
-    public static TypeDefinitionContainer cloneTypeList(int depth, boolean includePropertyDefinitions,
-            TypeDefinitionContainer tdc, TypeDefinitionContainer parent, boolean cmis11) {
-
-        final TypeDefinitionFactory typeFactory = TypeDefinitionFactory.newInstance();
-        MutableTypeDefinition tdClone = typeFactory.copy(tdc.getTypeDefinition(), includePropertyDefinitions);
-        if (!cmis11) {
-        	tdClone.setTypeMutability(null);
-        }
-        TypeDefinitionContainerImpl tdcClone = new TypeDefinitionContainerImpl(tdClone);
-        if (null != parent) {
-            parent.getChildren().add(tdcClone);
-        }
-
-        if (depth > 0) {
-            List<TypeDefinitionContainer> children = tdc.getChildren();
-            for (TypeDefinitionContainer child : children) {
-                cloneTypeList(depth - 1, includePropertyDefinitions, child, tdcClone, cmis11);
-            }
-        }
-        return tdcClone;
-    }
-
-    @Override
-    public TypeManager getTypeManager(String repositoryId) {
-        TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
-        return typeManager;
-    }
-
-    @Override
-    public boolean supportsSingleFiling(String repositoryId) {
-        return false;
-    }
-
-    @Override
-    public boolean supportsMultiFilings(String repositoryId) {
-        return true;
-    }
-
-    @Override
-    public ObjectList query(String user, String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount) {
-        TypeManager tm = getTypeManager(repositoryId);
-        ObjectStore objectStore = getObjectStore(repositoryId);
-
-        InMemoryQueryProcessor queryProcessor = new InMemoryQueryProcessor(getStore(repositoryId));
-        ObjectList objList = queryProcessor.query(tm, objectStore, user, repositoryId, statement, searchAllVersions,
-                includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount);
-
-        return objList;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
deleted file mode 100644
index e61b5fe..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.DataObjectCreator;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-
-/**
- * StoredObject is the common superclass of all objects hold in the repository
- * Documents, Folders, Relationships and Policies.
- * 
- */
-public class StoredObjectImpl implements StoredObject {
-
-    private static final int BUFFER_SIZE = 65536;
-    private static final String UNKNOWN_USER = "unknown";
-
-    protected String fId;
-    protected String fName;
-    protected String fTypeId;
-    protected String fCreatedBy;
-    protected String fModifiedBy;
-    protected GregorianCalendar fCreatedAt;
-    protected GregorianCalendar fModifiedAt;
-    protected String fRepositoryId;
-    protected Map<String, PropertyData<?>> fProperties;
-    protected int fAclId;
-    protected String description; // CMIS 1.1
-    protected List<String> secondaryTypeIds; // CMIS 1.1
-    protected List<String> policyIds;
-
-    StoredObjectImpl() { // visibility should be package
-        GregorianCalendar now = getNow();
-        now.setTime(new Date());
-        fCreatedAt = now;
-        fModifiedAt = now;
-        secondaryTypeIds = new ArrayList<String>();
-        policyIds = null;
-    }
-
-    @Override
-    public String getId() {
-        return fId;
-    }
-
-    @Override
-    public void setId(String id) {
-        fId = id;
-    }
-
-    @Override
-    public String getName() {
-        return fName;
-    }
-
-    @Override
-    public void setName(String name) {
-        fName = name;
-    }
-
-    @Override
-    public String getTypeId() {
-        return fTypeId;
-    }
-
-    @Override
-    public void setTypeId(String type) {
-        fTypeId = type;
-    }
-
-    @Override
-    public String getCreatedBy() {
-        return fCreatedBy;
-    }
-
-    @Override
-    public void setCreatedBy(String createdBy) {
-        this.fCreatedBy = createdBy;
-    }
-
-    @Override
-    public String getModifiedBy() {
-        return fModifiedBy;
-    }
-
-    @Override
-    public void setModifiedBy(String modifiedBy) {
-        this.fModifiedBy = modifiedBy;
-    }
-
-    @Override
-    public GregorianCalendar getCreatedAt() {
-        return fCreatedAt;
-    }
-
-    @Override
-    public void setCreatedAt(GregorianCalendar createdAt) {
-        this.fCreatedAt = createdAt;
-    }
-
-    @Override
-    public GregorianCalendar getModifiedAt() {
-        return fModifiedAt;
-    }
-
-    @Override
-    public void setModifiedAtNow() {
-    	GregorianCalendar now = getNow();
-    	// ensure a larger time for modification date and change token:
-    	while (now.getTimeInMillis() == fModifiedAt.getTimeInMillis()) {
-    		try {
-    			Thread.sleep(1);
-    		} catch (InterruptedException ex) {    			
-    		}
-    		now = getNow();
-    	}
-        this.fModifiedAt = now;
-    }
-
-    @Override
-    public void setModifiedAt(GregorianCalendar cal) {
-        this.fModifiedAt = cal;
-    }
-
-    @Override
-    public void setRepositoryId(String repositoryId) {
-        fRepositoryId = repositoryId;
-    }
-
-    @Override
-    public String getRepositoryId() {
-        return fRepositoryId;
-    }
-
-    @Override
-    public List<String> getAppliedPolicies() {
-        if (null == policyIds) {
-            return null;
-        } else {
-            return Collections.unmodifiableList(policyIds);
-        }
-    }
-
-    public void setAppliedPolicies(List<String> newPolicies) {
-        if (null == newPolicies) {
-            policyIds = null;
-        } else {
-            if (null == policyIds) {
-                policyIds = new ArrayList<String>();
-            }
-            policyIds.addAll(newPolicies);
-        }
-    }
-
-    @Override
-    public void addAppliedPolicy(String policyId) {
-        if (null == policyIds) {
-            policyIds = new ArrayList<String>();
-        }
-        if (!policyIds.contains(policyId)) {
-            policyIds.add(policyId);
-        }
-    }
-
-    @Override
-    public void removePolicy(String policyId) {
-        if (null != policyIds && policyIds.contains(policyId)) {
-            policyIds.remove(policyId);
-            if (policyIds.isEmpty()) {
-                policyIds = null;
-            }
-        }
-    }
-
-    // CMIS 1.1:
-    @Override
-    public void setDescription(String descr) {
-        description = descr;
-    }
-
-    // CMIS 1.1:
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public List<String> getSecondaryTypeIds() {
-        return Collections.unmodifiableList(secondaryTypeIds);
-    }
-
-    @Override
-    public void setProperties(Map<String, PropertyData<?>> props) {
-        fProperties = props;
-    }
-
-    @Override
-    public Map<String, PropertyData<?>> getProperties() {
-        return fProperties;
-    }
-
-    @Override
-    public String getChangeToken() {
-        GregorianCalendar lastModified = getModifiedAt();
-        String token = Long.valueOf(lastModified.getTimeInMillis()).toString();
-        return token;
-    }
-
-    @Override
-    public void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user) {
-        addSystemBaseProperties(properties, user, true);
-    }
-
-    @Override
-    public void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user) {
-        addSystemBaseProperties(properties, user, false);
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        if (FilterParser.isContainedInFilter(PropertyIds.NAME, requestedIds)) {
-            properties.put(PropertyIds.NAME, objFactory.createPropertyStringData(PropertyIds.NAME, getName()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.OBJECT_ID, requestedIds)) {
-            properties.put(PropertyIds.OBJECT_ID, objFactory.createPropertyIdData(PropertyIds.OBJECT_ID, getId()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.OBJECT_TYPE_ID, requestedIds)) {
-            properties.put(PropertyIds.OBJECT_TYPE_ID,
-                    objFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getTypeId()));
-        }
-        // set the base type id PropertyIds.CMIS_BASE_TYPE_ID outside because it
-        // requires the type definition
-        if (FilterParser.isContainedInFilter(PropertyIds.CREATED_BY, requestedIds)) {
-            properties.put(PropertyIds.CREATED_BY,
-                    objFactory.createPropertyStringData(PropertyIds.CREATED_BY, getCreatedBy()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CREATION_DATE, requestedIds)) {
-            properties.put(PropertyIds.CREATION_DATE,
-                    objFactory.createPropertyDateTimeData(PropertyIds.CREATION_DATE, getCreatedAt()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.LAST_MODIFIED_BY, requestedIds)) {
-            properties.put(PropertyIds.LAST_MODIFIED_BY,
-                    objFactory.createPropertyStringData(PropertyIds.LAST_MODIFIED_BY, getModifiedBy()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.LAST_MODIFICATION_DATE, requestedIds)) {
-            properties.put(PropertyIds.LAST_MODIFICATION_DATE,
-                    objFactory.createPropertyDateTimeData(PropertyIds.LAST_MODIFICATION_DATE, getModifiedAt()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.CHANGE_TOKEN, requestedIds)) {
-            String token = getChangeToken();
-            properties.put(PropertyIds.CHANGE_TOKEN,
-                    objFactory.createPropertyStringData(PropertyIds.CHANGE_TOKEN, token));
-        }
-
-        // CMIS 1.1 properties:
-        if (FilterParser.isContainedInFilter(PropertyIds.DESCRIPTION, requestedIds)) {
-            properties.put(PropertyIds.DESCRIPTION,
-                    objFactory.createPropertyStringData(PropertyIds.DESCRIPTION, description));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, requestedIds)) {
-            properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
-                    objFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypeIds));
-        }
-
-        // add custom properties of type definition to the collection
-        if (null != fProperties) {
-            for (Entry<String, PropertyData<?>> prop : fProperties.entrySet()) {
-                if (FilterParser.isContainedInFilter(prop.getKey(), requestedIds)) {
-                    properties.put(prop.getKey(), prop.getValue());
-                }
-            }
-        }
-
-    }
-
-    // ///////////////////////////////////////////
-    // private helper methods
-
-    @Override
-    public void setCustomProperties(Map<String, PropertyData<?>> properties) {
-        Map<String, PropertyData<?>> propertiesNew = new HashMap<String, PropertyData<?>>(properties);
-        // get a writablecollection
-        removeAllSystemProperties(propertiesNew);
-        setProperties(propertiesNew);
-    }
-
-    private static GregorianCalendar getNow() {
-        GregorianCalendar now = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        return now;
-    }
-
-    /*
-     * Add CMIS_CREATED_BY, CMIS_CREATION_DATE, CMIS_LAST_MODIFIED_BY,
-     * CMIS_LAST_MODIFICATION_DATE, CMIS_CHANGE_TOKEN system properties to the
-     * list of properties with current values.
-     */
-    @SuppressWarnings("unchecked")
-    private void addSystemBaseProperties(Map<String, PropertyData<?>> properties, String user, boolean isCreated) {
-        if (user == null) {
-            user = UNKNOWN_USER;
-        }
-
-        // Note that initial creation and modification date is set in
-        // constructor.
-        setModifiedBy(user);
-        if (null != properties) {
-            if (null != properties.get(PropertyIds.DESCRIPTION)) {
-                setDescription((String) properties.get(PropertyIds.DESCRIPTION).getFirstValue());
-            }
-
-            if (properties.containsKey(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
-                secondaryTypeIds.clear();
-            }
-            PropertyData<?> secondaryTypeProp = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-            if (null != secondaryTypeProp) {
-                secondaryTypeIds.addAll((List<String>) secondaryTypeProp.getValues());
-            }
-        }
-        if (isCreated) {
-            setCreatedBy(user);
-            setName((String) properties.get(PropertyIds.NAME).getFirstValue());
-            setTypeId((String) properties.get(PropertyIds.OBJECT_TYPE_ID).getFirstValue());
-        } else {
-            setModifiedAtNow();
-        }
-    }
-
-    /*
-     * Add CMIS_CREATED_BY, CMIS_CREATION_DATE, CMIS_LAST_MODIFIED_BY,
-     * CMIS_LAST_MODIFICATION_DATE, CMIS_CHANGE_TOKEN system properties to the
-     * list of properties with current values
-     */
-    protected void setSystemBasePropertiesWhenCreatedDirect(String name, String typeId, String user) {
-        // Note that initial creation and modification date is set in
-        // constructor.
-        setModifiedBy(user);
-        setCreatedBy(user);
-        setName(name);
-        setTypeId(typeId);
-    }
-
-    /*
-     * CMIS_NAME CMIS_OBJECT_ID CMIS_OBJECT_TYPE_ID CMIS_BASE_TYPE_ID
-     * CMIS_CREATED_BY CMIS_CREATION_DATE CMIS_LAST_MODIFIED_BY
-     * CMIS_LAST_MODIFICATION_DATE CMIS_CHANGE_TOKEN
-     * 
-     * // ---- document ---- CMIS_IS_IMMUTABLE CMIS_IS_LATEST_VERSION
-     * CMIS_IS_MAJOR_VERSION CMIS_IS_LATEST_MAJOR_VERSION CMIS_VERSION_LABEL
-     * CMIS_VERSION_SERIES_ID CMIS_IS_VERSION_SERIES_CHECKED_OUT
-     * CMIS_VERSION_SERIES_CHECKED_OUT_BY CMIS_VERSION_SERIES_CHECKED_OUT_ID
-     * CMIS_CHECKIN_COMMENT CMIS_CONTENT_STREAM_LENGTH
-     * CMIS_CONTENT_STREAM_MIME_TYPE CMIS_CONTENT_STREAM_FILE_NAME
-     * CMIS_CONTENT_STREAM_ID
-     * 
-     * // ---- folder ---- CMIS_PARENT_ID CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS
-     * CMIS_PATH
-     * 
-     * // ---- relationship ---- CMIS_SOURCE_ID CMIS_TARGET_ID
-     * 
-     * // ---- policy ---- CMIS_POLICY_TEXT
-     */
-    private static void removeAllSystemProperties(Map<String, PropertyData<?>> properties) {
-        // ---- base ----
-        if (properties.containsKey(PropertyIds.NAME)) {
-            properties.remove(PropertyIds.NAME);
-        }
-        if (properties.containsKey(PropertyIds.OBJECT_ID)) {
-            properties.remove(PropertyIds.OBJECT_ID);
-        }
-        if (properties.containsKey(PropertyIds.OBJECT_TYPE_ID)) {
-            properties.remove(PropertyIds.OBJECT_TYPE_ID);
-        }
-        if (properties.containsKey(PropertyIds.BASE_TYPE_ID)) {
-            properties.remove(PropertyIds.BASE_TYPE_ID);
-        }
-        if (properties.containsKey(PropertyIds.CREATED_BY)) {
-            properties.remove(PropertyIds.CREATED_BY);
-        }
-        if (properties.containsKey(PropertyIds.CREATION_DATE)) {
-            properties.remove(PropertyIds.CREATION_DATE);
-        }
-        if (properties.containsKey(PropertyIds.LAST_MODIFIED_BY)) {
-            properties.remove(PropertyIds.LAST_MODIFIED_BY);
-        }
-        if (properties.containsKey(PropertyIds.LAST_MODIFICATION_DATE)) {
-            properties.remove(PropertyIds.LAST_MODIFICATION_DATE);
-        }
-        if (properties.containsKey(PropertyIds.CHANGE_TOKEN)) {
-            properties.remove(PropertyIds.CHANGE_TOKEN);
-        }
-        // ---- document ----
-        if (properties.containsKey(PropertyIds.IS_IMMUTABLE)) {
-            properties.remove(PropertyIds.IS_IMMUTABLE);
-        }
-        if (properties.containsKey(PropertyIds.IS_LATEST_VERSION)) {
-            properties.remove(PropertyIds.IS_LATEST_VERSION);
-        }
-        if (properties.containsKey(PropertyIds.IS_MAJOR_VERSION)) {
-            properties.remove(PropertyIds.IS_MAJOR_VERSION);
-        }
-        if (properties.containsKey(PropertyIds.IS_LATEST_MAJOR_VERSION)) {
-            properties.remove(PropertyIds.IS_LATEST_MAJOR_VERSION);
-        }
-        if (properties.containsKey(PropertyIds.VERSION_LABEL)) {
-            properties.remove(PropertyIds.VERSION_LABEL);
-        }
-        if (properties.containsKey(PropertyIds.VERSION_SERIES_ID)) {
-            properties.remove(PropertyIds.VERSION_SERIES_ID);
-        }
-        if (properties.containsKey(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT)) {
-            properties.remove(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-        }
-        if (properties.containsKey(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY)) {
-            properties.remove(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
-        }
-        if (properties.containsKey(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID)) {
-            properties.remove(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
-        }
-        if (properties.containsKey(PropertyIds.CHECKIN_COMMENT)) {
-            properties.remove(PropertyIds.CHECKIN_COMMENT);
-        }
-        if (properties.containsKey(PropertyIds.CONTENT_STREAM_LENGTH)) {
-            properties.remove(PropertyIds.CONTENT_STREAM_LENGTH);
-        }
-        if (properties.containsKey(PropertyIds.CONTENT_STREAM_MIME_TYPE)) {
-            properties.remove(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        }
-        if (properties.containsKey(PropertyIds.CONTENT_STREAM_FILE_NAME)) {
-            properties.remove(PropertyIds.CONTENT_STREAM_FILE_NAME);
-        }
-        if (properties.containsKey(PropertyIds.CONTENT_STREAM_ID)) {
-            properties.remove(PropertyIds.CONTENT_STREAM_ID);
-        }
-        // ---- folder ----
-        if (properties.containsKey(PropertyIds.PARENT_ID)) {
-            properties.remove(PropertyIds.PARENT_ID);
-        }
-        if (properties.containsKey(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS)) {
-            properties.remove(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
-        }
-        if (properties.containsKey(PropertyIds.PATH)) {
-            properties.remove(PropertyIds.PATH);
-        }
-        // ---- relationship ----
-        if (properties.containsKey(PropertyIds.SOURCE_ID)) {
-            properties.remove(PropertyIds.SOURCE_ID);
-        }
-        if (properties.containsKey(PropertyIds.TARGET_ID)) {
-            properties.remove(PropertyIds.TARGET_ID);
-        }
-        // ---- policy ----
-        if (properties.containsKey(PropertyIds.POLICY_TEXT)) {
-            properties.remove(PropertyIds.POLICY_TEXT);
-        }
-    }
-
-    @Override
-    public int getAclId() {
-        return fAclId;
-    }
-
-    public void setAclId(int aclId) {
-        fAclId = aclId;
-    }
-
-    @Override
-    public AllowableActions getAllowableActions(String user) {
-        AllowableActions actions = DataObjectCreator.fillAllowableActions(this, user);
-        return actions;
-    }
-
-    @Override
-    public boolean hasRendition(String user) {
-        return false;
-    }
-
-    protected ContentStream getIconFromResourceDir(String name) throws IOException {
-
-        InputStream imageStream = StoredObjectImpl.class.getResourceAsStream(name);
-        ByteArrayOutputStream ba = new ByteArrayOutputStream();
-        byte[] buffer = new byte[BUFFER_SIZE];
-        int noBytesRead = 0;
-
-        try {
-            while ((noBytesRead = imageStream.read(buffer)) >= 0) {
-                ba.write(buffer, 0, noBytesRead);
-            }
-        } finally {
-            IOUtils.closeQuietly(ba);
-            IOUtils.closeQuietly(imageStream);
-        }
-
-        ContentStreamDataImpl content = new ContentStreamDataImpl(0);
-        content.setFileName(name);
-        content.setMimeType("image/png");
-        content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-        return content;
-    }
-
-    protected boolean testRenditionFilterForImage(String[] formats) {
-        if (formats.length == 1 && null != formats[0] && formats[0].equals("cmis:none")) {
-            return false;
-        } else {
-            return arrayContainsString(formats, "*") || arrayContainsString(formats, "image/*")
-                    || arrayContainsString(formats, "image/jpeg");
-        }
-    }
-
-    private boolean arrayContainsString(String[] formats, String val) {
-        for (String s : formats) {
-            if (val.equals(s)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
deleted file mode 100644
index 2447144..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
-
-public class VersionedDocumentImpl extends FilingImpl implements VersionedDocument {
-
-    private boolean fIsCheckedOut;
-    private String fCheckedOutUser;
-    private final List<DocumentVersion> fVersions;
-
-    public VersionedDocumentImpl() {
-        super();
-        fVersions = new ArrayList<DocumentVersion>();
-        fIsCheckedOut = false;
-    }
-
-    @Override
-    public DocumentVersion addVersion(VersioningState verState, String user) {
-
-        if (isCheckedOut()) {
-            throw new CmisConstraintException("Cannot add a version to document, document is checked out.");
-        }
-
-        DocumentVersionImpl ver = new DocumentVersionImpl(fRepositoryId, this, verState);
-        ver.setSystemBasePropertiesWhenCreatedDirect(getName(), getTypeId(), user); // copy
-        // name and type id from version series.
-        fVersions.add(ver);
-        if (verState == VersioningState.CHECKEDOUT) {
-            fCheckedOutUser = user;
-            fIsCheckedOut = true;
-        }
-
-        return ver;
-    }
-
-    @Override
-    public boolean deleteVersion(DocumentVersion version) {
-        if (fIsCheckedOut) {
-            // Note: Do not throw an exception here if the document is
-            // checked-out. In AtomPub binding cancelCheckout
-            // mapped to a deleteVersion() call!
-            DocumentVersion pwc = getPwc();
-            if (pwc == version) { // NOSONAR
-                cancelCheckOut(false); // note object is already deleted from
-                                       // map in ObjectStore
-                return !fVersions.isEmpty();
-            }
-        }
-        boolean found = fVersions.remove(version);
-        if (!found) {
-            throw new CmisInvalidArgumentException("Version is not contained in the document:" + version.getId());
-        }
-
-        return !fVersions.isEmpty();
-    }
-
-    @Override
-    public void cancelCheckOut(String user) {
-        cancelCheckOut(true);
-    }
-
-    @Override
-    public void checkIn(boolean isMajor, Properties properties, ContentStream content, String checkinComment,
-            List<String> policyIds, String user) {
-        if (fIsCheckedOut) {
-            if (fCheckedOutUser.equals(user)) {
-                fIsCheckedOut = false;
-                fCheckedOutUser = null;
-            } else {
-                throw new CmisConstraintException("Error: Can't checkin. Document " + getId() + " user " + user
-                        + " has not checked out the document");
-            }
-        } else {
-            throw new CmisConstraintException("Error: Can't cancel checkout, Document " + getId()
-                    + " is not checked out.");
-        }
-
-        DocumentVersion pwc = getPwc();
-
-        if (null != content) {
-            pwc.setContent(content);
-        }
-
-        if (null != properties && null != properties.getProperties()) {
-            ((DocumentVersionImpl) pwc).setCustomProperties(properties.getProperties());
-        }
-
-        pwc.setCheckinComment(checkinComment);
-        pwc.commit(isMajor);
-        if (policyIds != null && policyIds.size() > 0) {
-            ((DocumentVersionImpl) pwc).setAppliedPolicies(policyIds);
-        }
-    }
-
-    @Override
-    public DocumentVersion checkOut(String user) {
-        if (fIsCheckedOut) {
-            throw new CmisConstraintException("Error: Can't checkout, Document " + getId() 
-                    + " is already checked out.");
-        }
-
-        // create PWC
-        DocumentVersion pwc = addVersion(VersioningState.CHECKEDOUT, user); // will
-        // set check-out flag
-        return pwc;
-    }
-
-    @Override
-    public List<DocumentVersion> getAllVersions() {
-        return fVersions;
-    }
-
-    @Override
-    public DocumentVersion getLatestVersion(boolean major) {
-
-        DocumentVersion latest = null;
-        if (fVersions.size() == 0) {
-            return null;
-        }
-
-        if (major) {
-            for (DocumentVersion ver : fVersions) {
-                if (ver.isMajor() && !ver.isPwc()) {
-                    latest = ver;
-                }
-            }
-        } else {
-            if (null == getPwc()) {
-                latest = fVersions.get(fVersions.size() - 1);
-            } else if (fVersions.size() > 1) {
-                latest = fVersions.get(fVersions.size() - 2);
-            } else {
-                latest = null;
-            }
-            if (null == getPwc()) {
-                latest = fVersions.get(fVersions.size() - 1);
-            } else if (fVersions.size() > 1) {
-                latest = fVersions.get(fVersions.size() - 2);
-            } else {
-                latest = null;
-            }
-        }
-        return latest;
-    }
-
-    @Override
-    public boolean isCheckedOut() {
-        return fIsCheckedOut;
-    }
-
-    @Override
-    public String getCheckedOutBy() {
-        return fCheckedOutUser;
-    }
-
-    @Override
-    public DocumentVersion getPwc() {
-        for (DocumentVersion ver : fVersions) {
-            if (ver.isPwc()) {
-                return ver;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-            List<String> requestedIds) {
-
-        DocumentVersion pwc = getPwc();
-
-        super.fillProperties(properties, objFactory, requestedIds);
-
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_IMMUTABLE, requestedIds)) {
-            properties.put(PropertyIds.IS_IMMUTABLE,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_IMMUTABLE, false));
-        }
-
-        // overwrite the version related properties
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_ID, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_ID, getId()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
-            properties.put(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                    objFactory.createPropertyBooleanData(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, isCheckedOut()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
-            properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                    objFactory.createPropertyStringData(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, getCheckedOutBy()));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
-            properties.put(
-                    PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                    objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                            pwc == null ? null : pwc.getId()));
-        }
-
-    }
-
-    private void cancelCheckOut(boolean deleteInObjectStore) {
-        DocumentVersion pwc = getPwc();
-        fIsCheckedOut = false;
-        fCheckedOutUser = null;
-        fVersions.remove(pwc);
-        if (fVersions.size() > 0) {
-            String nameLatestVer = getLatestVersion(false).getName();
-            if (!getName().equals(nameLatestVer)) {
-                setName(nameLatestVer);
-            }
-        }
-        if (deleteInObjectStore) {
-            // TODO:
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java
deleted file mode 100644
index ef726db..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.types;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.inmemory.TypeCreator;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-
-public class DefaultTypeSystemCreator implements TypeCreator {
-    private static final String BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR = "Builtin InMemory type definition ";
-    public static final List<TypeDefinition> SINGLETON_TYPES = buildTypesList();
-    public static final String COMPLEX_TYPE = "ComplexType";
-    public static final String TOPLEVEL_TYPE = "DocumentTopLevel";
-    public static final String VERSIONED_TYPE = "VersionableType";
-    public static final String ITEM_TYPE = "MyItemType";
-    public static final String LEVEL1_TYPE = "DocumentLevel1";
-    public static final String LEVEL2_TYPE = "DocumentLevel2";
-    public static final String SECONDARY_TYPE_ID = "MySecondaryType";
-    public static final String BIG_CONTENT_FAKE_TYPE = "BigContentFakeType";
-
-    /*
-     * In the public interface of this class we return the singleton containing
-     * the required types for testing.
-     * @see org.apache.chemistry.opencmis.inmemory.TypeCreator#createTypesList()
-     */
-    @Override
-    public List<TypeDefinition> createTypesList() {
-        return SINGLETON_TYPES;
-    }
-
-    public static List<TypeDefinition> getTypesList() {
-        return SINGLETON_TYPES;
-    }
-
-    public static TypeDefinition getTypeById(String typeId) {
-        for (TypeDefinition typeDef : SINGLETON_TYPES) {
-            if (typeDef.getId().equals(typeId)) {
-                return typeDef;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Create root types and a collection of sample types.
-     * 
-     * @return typesMap a map filled with created types
-     */
-    private static List<TypeDefinition> buildTypesList() {
-        // always add CMIS default types
-        TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-
-        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-        MutableDocumentTypeDefinition cmisType1;
-        try {
-            cmisType1 = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisDocumentType().getId());
-            cmisType1.setId("MyDocType1");
-            cmisType1.setDisplayName("My Type 1 Level 1");
-            cmisType1.setDescription("Builtin InMemory type definition MyDocType1");
-            typesList.add(cmisType1);
-
-            MutableDocumentTypeDefinition cmisType2;
-            cmisType2 = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisDocumentType().getId());
-            cmisType2.setId("MyDocType2");
-            cmisType2.setDisplayName("My Type 2 Level 1");
-            cmisType2.setDescription("Builtin InMemory type definition MyDocType2");
-            typesList.add(cmisType2);
-
-            MutableTypeDefinition cmisType11;
-            cmisType11 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.1");
-            cmisType11.setDisplayName("My Type 3 Level 2");
-            cmisType11.setDescription("Builtin InMemory type definition MyDocType1.1");
-            typesList.add(cmisType11);
-
-            MutableTypeDefinition cmisType111;
-            cmisType111 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.1");
-            cmisType111.setDisplayName("My Type 4 Level 3");
-            cmisType111.setDescription("Builtin InMemory type definition MyDocType1.1.1");
-            typesList.add(cmisType111);
-
-            MutableTypeDefinition cmisType112;
-            cmisType112 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.2");
-            cmisType112.setId("MyDocType1.1.2");
-            cmisType112.setDisplayName("My Type 5 Level 3");
-            cmisType112.setDescription("Builtin InMemory type definition MyDocType1.1.2");
-            typesList.add(cmisType112);
-
-            MutableTypeDefinition cmisType12;
-            cmisType12 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.2");
-            cmisType12.setDisplayName("My Type 6 Level 2");
-            cmisType12.setDescription("Builtin InMemory type definition MyDocType1.2");
-            typesList.add(cmisType12);
-
-            MutableTypeDefinition cmisType21;
-            cmisType21 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.1");
-            cmisType21.setDisplayName("My Type 7 Level 2");
-            cmisType21.setDescription("Builtin InMemory type definition MyDocType2.1");
-            typesList.add(cmisType21);
-
-            MutableTypeDefinition cmisType22;
-            cmisType22 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.2");
-            cmisType22.setDisplayName("My Type 8 Level 2");
-            cmisType22.setDescription("Builtin InMemory type definition MyDocType2.2");
-            typesList.add(cmisType22);
-
-            MutableTypeDefinition cmisType23;
-            cmisType23 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.3");
-            cmisType23.setDisplayName("My Type 9 Level 2");
-            cmisType23.setDescription("Builtin InMemory type definition MyDocType2.3");
-            typesList.add(cmisType23);
-
-            MutableTypeDefinition cmisType24;
-            cmisType24 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.4");
-            cmisType24.setDisplayName("My Type 10 Level 2");
-            cmisType24.setDescription("Builtin InMemory type definition MyDocType2.4");
-            typesList.add(cmisType24);
-
-            MutableTypeDefinition cmisType25;
-            cmisType25 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.5");
-            cmisType25.setDisplayName("My Type 11 Level 2");
-            cmisType25.setDescription("Builtin InMemory type definition MyDocType2.5");
-            typesList.add(cmisType25);
-
-            MutableTypeDefinition cmisType26;
-            cmisType26 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.6");
-            cmisType26.setDisplayName("My Type 12 Level 2");
-            cmisType26.setDescription("Builtin InMemory type definition MyDocType2.6");
-            typesList.add(cmisType26);
-
-            MutableTypeDefinition cmisType27;
-            cmisType27 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.7");
-            cmisType27.setDisplayName("My Type 13 Level 2");
-            cmisType27.setDescription("Builtin InMemory type definition MyDocType2.7");
-            typesList.add(cmisType27);
-
-            MutableTypeDefinition cmisType28;
-            cmisType28 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.8");
-            cmisType28.setDisplayName("My Type 14 Level 2");
-            cmisType28.setDescription("Builtin InMemory type definition MyDocType2.8");
-            typesList.add(cmisType28);
-
-            MutableTypeDefinition cmisType29;
-            cmisType29 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.9");
-            cmisType29.setDisplayName("My Type 15 Level 2");
-            cmisType29.setDescription("Builtin InMemory type definition MyDocType2.9");
-            typesList.add(cmisType29);
-
-            // create a complex type with properties
-            MutableDocumentTypeDefinition cmisComplexType;
-            cmisComplexType = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisDocumentType().getId());
-            cmisComplexType.setId(COMPLEX_TYPE);
-            cmisComplexType.setDisplayName("Complex type with properties, Level 1");
-            cmisComplexType.setDescription("Builtin InMemory type definition ComplexType");
-
-            PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
-                    "Sample Boolean Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop);
-
-            prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
-                    "Sample Boolean multi-value Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop);
-
-            PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
-                    "Sample DateTime Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop2);
-
-            prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
-                    "Sample DateTime multi-value Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop2);
-
-            PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
-                    "Sample Decimal Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop3);
-
-            prop3 = PropertyCreationHelper.createDecimalMultiDefinition("DecimalPropMV",
-                    "Sample Decimal multi-value Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop3);
-
-            PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
-                    "Sample Html Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop4);
-
-            prop4 = PropertyCreationHelper.createHtmlMultiDefinition("HtmlPropMV", "Sample Html multi-value Property",
-                    Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop4);
-
-            PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property",
-                    Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop5);
-
-            prop5 = PropertyCreationHelper.createIdMultiDefinition("IdPropMV", "Sample Id Html multi-value Property",
-                    Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop5);
-
-            PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
-                    "Sample Int Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop6);
-
-            prop6 = PropertyCreationHelper.createIntegerMultiDefinition("IntPropMV", "Sample Int multi-value Property",
-                    Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop6);
-
-            PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
-                    "Sample String Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop7);
-
-            PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp",
-                    "Sample Uri Property", Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop8);
-
-            prop8 = PropertyCreationHelper.createUriMultiDefinition("UriPropMV", "Sample Uri multi-value Property",
-                    Updatability.READWRITE);
-            cmisComplexType.addPropertyDefinition(prop8);
-
-            PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition("PickListProp",
-                    "Sample Pick List Property", Updatability.READWRITE);
-            List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-            ChoiceImpl<String> elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("red"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("green"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("blue"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("black"));
-            choiceList.add(elem);
-            prop9.setChoices(choiceList);
-            prop9.setDefaultValue(Collections.singletonList("blue"));
-            cmisComplexType.addPropertyDefinition(prop9);
-
-            // add type to types collection
-            typesList.add(cmisComplexType);
-
-            // create a type hierarchy with inherited properties
-            MutableDocumentTypeDefinition cmisDocTypeTopLevel;
-            cmisDocTypeTopLevel = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisDocumentType().getId());
-            cmisDocTypeTopLevel.setId(TOPLEVEL_TYPE);
-            cmisDocTypeTopLevel.setDisplayName("Document type with properties, Level 1");
-            cmisDocTypeTopLevel.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + TOPLEVEL_TYPE);
-
-            MutableTypeDefinition cmisDocTypeLevel1;
-            cmisDocTypeLevel1 = typeFactory.createChildTypeDefinition(cmisDocTypeTopLevel, LEVEL1_TYPE);
-            cmisDocTypeLevel1.setDisplayName("Document type with inherited properties, Level 2");
-            cmisDocTypeLevel1.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + LEVEL1_TYPE);
-
-            MutableTypeDefinition cmisDocTypeLevel2;
-            cmisDocTypeLevel2 = typeFactory.createChildTypeDefinition(cmisDocTypeLevel1, LEVEL2_TYPE);
-            cmisDocTypeLevel2.setDisplayName("Document type with inherited properties, Level 3");
-            cmisDocTypeLevel2.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + LEVEL2_TYPE);
-
-            PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
-                    "Sample String Property", Updatability.READWRITE);
-            cmisDocTypeTopLevel.addPropertyDefinition(propTop);
-
-            PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
-                    "String Property Level 1", Updatability.READWRITE);
-            cmisDocTypeLevel1.addPropertyDefinition(propLevel1);
-
-            PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
-                    "String Property Level 2", Updatability.READWRITE);
-            cmisDocTypeLevel2.addPropertyDefinition(propLevel2);
-
-            // add type to types collection
-            typesList.add(cmisDocTypeTopLevel);
-            typesList.add(cmisDocTypeLevel1);
-            typesList.add(cmisDocTypeLevel2);
-
-            // Create a type that is versionable
-            MutableDocumentTypeDefinition cmisVersionedType;
-            cmisVersionedType = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisDocumentType().getId());
-            cmisVersionedType.setId(VERSIONED_TYPE);
-            cmisVersionedType.setDisplayName("Versioned Type");
-            cmisVersionedType.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + VERSIONED_TYPE);
-            cmisVersionedType.setIsVersionable(true); // make it a versionable
-                                                      // type
-
-            // create a single String property definition
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition("VersionedStringProp",
-                    "Sample String Property", Updatability.WHENCHECKEDOUT);
-            cmisVersionedType.addPropertyDefinition(prop1);
-
-            // add type to types collection
-            typesList.add(cmisVersionedType);
-
-            // CMIS 1.1 create an item item type
-
-            MutableItemTypeDefinition itemType;
-            itemType = typeFactory.createItemTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisItemType().getId());
-            itemType.setId(ITEM_TYPE);
-            itemType.setDisplayName("MyItemType");
-            itemType.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + ITEM_TYPE);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(itemType);
-
-            // create a single String property definition
-
-            prop1 = PropertyCreationHelper.createStringDefinition("ItemStringProp", "Item String Property",
-                    Updatability.READWRITE);
-            itemType.addPropertyDefinition(prop1);
-            // add type to types collection
-            typesList.add(itemType);
-
-            MutableSecondaryTypeDefinition cmisSecondaryType;
-            cmisSecondaryType = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisSecondaryType().getId());
-            cmisSecondaryType.setId(SECONDARY_TYPE_ID);
-            cmisSecondaryType.setDisplayName("MySecondaryType");
-            cmisSecondaryType.setDescription(BUILTIN_IN_MEMORY_TYPE_DEFINITION_DESCR + SECONDARY_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisSecondaryType);
-            cmisSecondaryType.setIsFileable(false);
-
-            // create a single String property definition
-            PropertyStringDefinitionImpl propS1 = PropertyCreationHelper.createStringDefinition("SecondaryStringProp",
-                    "Secondary String Property", Updatability.READWRITE);
-            cmisSecondaryType.addPropertyDefinition(propS1);
-            PropertyIntegerDefinitionImpl propS2 = PropertyCreationHelper.createIntegerDefinition(
-                    "SecondaryIntegerProp", "Secondary Integer Property", Updatability.READWRITE);
-            propS2.setIsRequired(true);
-            cmisSecondaryType.addPropertyDefinition(propS2);
-            // add type to types collection
-            typesList.add(cmisSecondaryType);
-
-            // add relationship type
-            MutableRelationshipTypeDefinition relType;
-            relType = typeFactory.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisRelationshipType().getId());
-            relType.setId("CrossReferenceType");
-            relType.setDisplayName("CrossReferenceType");
-            relType.setDescription("Builtin InMemory type definition CrossReferenceType");
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(relType);
-            relType.setIsFileable(false);
-
-            // create a single String property definition
-
-            prop1 = PropertyCreationHelper.createStringDefinition("CrossReferenceKind", "CrossReferenceType",
-                    Updatability.READWRITE);
-            relType.addPropertyDefinition(prop1);
-            typesList.add(relType);
-
-            // add a policy type
-            MutablePolicyTypeDefinition polType;
-            polType = typeFactory.createPolicyTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisPolicyType().getId());
-            polType.setId("AuditPolicy");
-            polType.setDisplayName("Audit Policy");
-            polType.setDescription("Builtin InMemory type definition AuditPolicy");
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(polType);
-            polType.setIsFileable(false);
-
-            // create a String property definition
-            prop1 = PropertyCreationHelper.createStringDefinition("AuditSettings", "Audit Kind Property",
-                    Updatability.READWRITE);
-            polType.addPropertyDefinition(prop1);
-            typesList.add(polType);
-
-            MutableTypeDefinition cmisTypeFake;
-            cmisTypeFake = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisDocumentType().getId());
-            cmisTypeFake.setId(BIG_CONTENT_FAKE_TYPE);
-            cmisTypeFake.setDisplayName("BigContentFakeType");
-            cmisTypeFake.setDescription("Builtin InMemory type definition for big content streams. Content is "
-                    + "ignored and replaced by random bytes");
-            typesList.add(cmisTypeFake);
-
-            
-
-            return typesList;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java
deleted file mode 100644
index 9ad8402..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.inmemory.types;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-
-public final class DocumentTypeCreationHelper {
-
-    public static class InMemoryDocumentType extends DocumentTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
-        }
-    }
-
-    public static class InMemoryFolderType extends FolderTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
-        }
-    }
-
-    public static class InMemoryRelationshipType extends RelationshipTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
-        }
-    }
-
-    public static class InMemoryPolicyType extends PolicyTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
-        }
-    }
-
-    public static class InMemoryItemType extends ItemTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(id);
-        }
-    }
-
-    public static class InMemorySecondaryType extends SecondaryTypeDefinitionImpl {
-
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
-            super.addPropertyDefinition(propertyDefinition);
-        }
-
-        @Override
-        public void setId(String id) {
-            super.setId(id);
-            super.setLocalName(id);
-            super.setQueryName(id);
-        }
-    }
-
-    private static final List<TypeDefinition> DEFAULT_TYPES = createCmisDefaultTypes();
-    private static TypeDefinitionFactory typeFactory;
-    private static MutableDocumentTypeDefinition cmisTypeDoc;
-    private static MutableFolderTypeDefinition cmisTypeFolder;
-    private static MutableRelationshipTypeDefinition cmisTypeRel;
-    private static MutablePolicyTypeDefinition cmisTypePolicy;
-    private static MutableItemTypeDefinition cmisTypeItem;
-    private static MutableSecondaryTypeDefinition cmisTypeSecondary;
-
-    public static DocumentTypeDefinition getCmisDocumentType() {
-        return cmisTypeDoc;
-    }
-
-    public static FolderTypeDefinition getCmisFolderType() {
-        return cmisTypeFolder;
-    }
-
-    public static RelationshipTypeDefinition getCmisRelationshipType() {
-        return cmisTypeRel;
-    }
-
-    public static PolicyTypeDefinition getCmisPolicyType() {
-        return cmisTypePolicy;
-    }
-
-    public static ItemTypeDefinition getCmisItemType() {
-        return cmisTypeItem;
-    }
-
-    public static SecondaryTypeDefinition getCmisSecondaryType() {
-        return cmisTypeSecondary;
-    }
-
-    private static void initType(MutableTypeDefinition type, TypeDefinition parentTypeDefinition) {
-        type.setBaseTypeId(parentTypeDefinition.getBaseTypeId());
-        type.setParentTypeId(parentTypeDefinition.getId());
-        type.setIsControllableAcl(parentTypeDefinition.isControllableAcl());
-        type.setIsControllablePolicy(parentTypeDefinition.isControllablePolicy());
-        type.setIsCreatable(parentTypeDefinition.isCreatable());
-        type.setDescription(null);
-        type.setDisplayName(null);
-        type.setIsFileable(parentTypeDefinition.isFileable());
-        type.setIsFulltextIndexed(parentTypeDefinition.isFulltextIndexed());
-        type.setIsIncludedInSupertypeQuery(parentTypeDefinition.isIncludedInSupertypeQuery());
-        type.setLocalName(null);
-        type.setLocalNamespace(parentTypeDefinition.getLocalNamespace());
-        type.setIsQueryable(parentTypeDefinition.isQueryable());
-        type.setQueryName(null);
-        type.setId(null);
-        type.setTypeMutability(parentTypeDefinition.getTypeMutability());
-    }
-
-    /*  
-     * Creates a new mutable document type definition, which is a child of the
-     * provided type definition. Property definitions are not added which is
-     * useful for creating additional types at runtime
-     */
-    public static MutableDocumentTypeDefinition createDocumentTypeDefinitionWithoutBaseProperties(
-            DocumentTypeDefinition parentTypeDefinition) throws InstantiationException, IllegalAccessException {
-        MutableDocumentTypeDefinition documentType = new InMemoryDocumentType();
-        initType(documentType, parentTypeDefinition);
-
-        documentType.setIsVersionable(parentTypeDefinition.isVersionable());
-        documentType.setContentStreamAllowed(parentTypeDefinition.getContentStreamAllowed());
-        return documentType;
-    }
-
-    private DocumentTypeCreationHelper() {
-    }
-
-    public static List<TypeDefinition> createMapWithDefaultTypes() {
-        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-        typesList.addAll(DEFAULT_TYPES);
-        return typesList;
-    }
-
-    public static List<TypeDefinition> getDefaultTypes() {
-        return DEFAULT_TYPES;
-    }
-
-    private static void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
-        if (propertyDefinition.getId().equals(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
-            MutablePropertyDefinition<?> propDef = (MutablePropertyDefinition<?>) propertyDefinition;
-            propDef.setUpdatability(Updatability.READWRITE);
-        }
-    }
-
-    private static String getQueryName(String id) {
-        if (null == id) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder(id);
-        for (int i = 0; i < sb.length(); i++) {
-            char c = sb.charAt(i);
-            if (c == '.' || c == ' ') {
-                sb.setCharAt(i, '_');
-            }
-        }
-        return sb.toString();
-    }
-
-    public static void setDefaultTypeCapabilities(MutableTypeDefinition cmisType) {
-        cmisType.setIsCreatable(true);
-        cmisType.setIsFileable(true);
-        cmisType.setIsFulltextIndexed(false);
-    }
-
-    static TypeMutabilityImpl getBaseTypeMutability() {
-        TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
-        typeMutability.setCanCreate(true);
-        typeMutability.setCanUpdate(false);
-        typeMutability.setCanDelete(false);
-        return typeMutability;
-    }
-
-    private static List<TypeDefinition> createCmisDefaultTypes() {
-        TypeDefinitionFactory typeFactoryLocal = getTypeDefinitionFactory();
-
-        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-        // create root types:
-        try {
-            cmisTypeDoc = typeFactoryLocal.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypeDoc);
-            cmisTypeDoc.setTypeMutability(getBaseTypeMutability());
-            cmisTypeDoc.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-            cmisTypeDoc.setIsVersionable(false);
-            typesList.add(cmisTypeDoc);
-
-            cmisTypeFolder = typeFactoryLocal.createFolderTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypeFolder);
-            cmisTypeFolder.setTypeMutability(getBaseTypeMutability());
-            typesList.add(cmisTypeFolder);
-
-            cmisTypeRel = typeFactoryLocal.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypeRel);
-            cmisTypeRel.setTypeMutability(getBaseTypeMutability());
-            cmisTypeRel.setIsFileable(false);
-            typesList.add(cmisTypeRel);
-
-            cmisTypePolicy = typeFactoryLocal.createPolicyTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypePolicy);
-            cmisTypePolicy.setTypeMutability(getBaseTypeMutability());
-            cmisTypePolicy.setIsFileable(false);
-            typesList.add(cmisTypePolicy);
-
-            cmisTypeItem = typeFactoryLocal.createItemTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypeItem);
-            cmisTypeItem.setTypeMutability(getBaseTypeMutability());
-            cmisTypeItem.setIsFileable(true);
-            typesList.add(cmisTypeItem);
-
-            cmisTypeSecondary = typeFactoryLocal.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1, null);
-            setDefaultTypeCapabilities(cmisTypeSecondary);
-            cmisTypeSecondary.setTypeMutability(getBaseTypeMutability());
-            cmisTypeSecondary.setIsFileable(false);
-            typesList.add(cmisTypeSecondary);
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating base types. ", e);
-        }
-
-        return typesList;
-    }
-
-    public static TypeDefinitionFactory getTypeDefinitionFactory() {
-        if (null == typeFactory) {
-            typeFactory = TypeDefinitionFactory.newInstance();
-            typeFactory.setDefaultControllableAcl(true);
-            typeFactory.setDefaultControllablePolicy(true);
-            typeFactory.setDefaultNamespace("http://apache.org");
-            typeFactory.setDefaultIsFulltextIndexed(false);
-            typeFactory.setDefaultQueryable(true);
-            TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
-            typeMutability.setCanCreate(true);
-            typeMutability.setCanUpdate(true);
-            typeMutability.setCanDelete(true);
-            typeFactory.setDefaultTypeMutability(typeMutability);
-            typeFactory.setDocumentTypeDefinitionClass(InMemoryDocumentType.class);
-            typeFactory.setFolderTypeDefinitionClass(InMemoryFolderType.class);
-            typeFactory.setRelationshipTypeDefinitionClass(InMemoryRelationshipType.class);
-            typeFactory.setPolicyTypeDefinitionClass(InMemoryPolicyType.class);
-            typeFactory.setItemTypeDefinitionClass(InMemoryItemType.class);
-            typeFactory.setSecondaryTypeDefinitionClass(InMemorySecondaryType.class);
-        }
-        return typeFactory;
-    }
-
-    /**
-     * Create root types and a collection of sample types.
-     * 
-     * @return typesMap map filled with created types
-     */
-    public static List<TypeDefinition> createDefaultTypes() {
-        List<TypeDefinition> typesList = createCmisDefaultTypes();
-
-        return typesList;
-    }
-
-    public static void setBasicPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(PropertyIds.NAME, "Name",
-                Updatability.READWRITE);
-        propS.setIsRequired(true);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(PropertyIds.OBJECT_ID, "Object Id",
-                Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = PropertyCreationHelper
-                .createIdDefinition(PropertyIds.OBJECT_TYPE_ID, "Type-Id", Updatability.ONCREATE);
-        propId.setIsRequired(true);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = PropertyCreationHelper.createIdDefinition(PropertyIds.BASE_TYPE_ID, "Base-Type-Id",
-                Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.CREATED_BY, "Created By",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyDateTimeDefinitionImpl propD = PropertyCreationHelper.createDateTimeDefinition(
-                PropertyIds.CREATION_DATE, "Creation Date", Updatability.READONLY);
-        propertyDefinitions.put(propD.getId(), propD);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.LAST_MODIFIED_BY, "Modified By",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propD = PropertyCreationHelper.createDateTimeDefinition(PropertyIds.LAST_MODIFICATION_DATE,
-                "Modification Date", Updatability.READONLY);
-        propertyDefinitions.put(propD.getId(), propD);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.CHANGE_TOKEN, "Change Token",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        // CMIS 1.1:
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.DESCRIPTION, "Description",
-                Updatability.READWRITE);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = PropertyCreationHelper.createIdMultiDefinition(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
-                "Secondary Type Ids", Updatability.READWRITE);
-        propertyDefinitions.put(propId.getId(), propId);
-    }
-
-    public static void setBasicDocumentPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        setBasicPropertyDefinitions(propertyDefinitions);
-        PropertyBooleanDefinitionImpl propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_IMMUTABLE,
-                "Immutable", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_LATEST_VERSION, "Is Latest Version",
-                Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_MAJOR_VERSION, "Is Major Version",
-                Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_LATEST_MAJOR_VERSION,
-                "Is Latest Major Version", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(PropertyIds.VERSION_LABEL,
-                "Version Label", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(PropertyIds.VERSION_SERIES_ID,
-                "Version Series Id", Updatability.READONLY);
-        propId.setIsQueryable(false);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                "Checked Out", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                "Checked Out By", Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = PropertyCreationHelper.createIdDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, "Checked Out Id",
-                Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.CHECKIN_COMMENT, "Checkin Comment",
-                Updatability.READONLY);
-        // read-only, because
-        // not set as property
-        propertyDefinitions.put(propS.getId(), propS);
-
-        PropertyIntegerDefinitionImpl propI = PropertyCreationHelper.createIntegerDefinition(
-                PropertyIds.CONTENT_STREAM_LENGTH, "Content Length", Updatability.READONLY);
-        propertyDefinitions.put(propI.getId(), propI);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.CONTENT_STREAM_MIME_TYPE, "Mime Type",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propS = PropertyCreationHelper.createStringDefinition(PropertyIds.CONTENT_STREAM_FILE_NAME, "File Name",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-
-        propId = PropertyCreationHelper.createIdDefinition(PropertyIds.CONTENT_STREAM_ID, "Stream Id",
-                Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        // CMIS 1.1:
-        propB = PropertyCreationHelper.createBooleanDefinition(PropertyIds.IS_PRIVATE_WORKING_COPY,
-                "Private Working Copy", Updatability.READONLY);
-        propertyDefinitions.put(propB.getId(), propB);
-
-        propertyDefinitions.put(propS.getId(), propS);
-    }
-
-    public static void setBasicFolderPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        setBasicPropertyDefinitions(propertyDefinitions);
-        PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(PropertyIds.PARENT_ID, "Parent Id",
-                Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = PropertyCreationHelper.createIdMultiDefinition(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS,
-                "Allowed Child Types", Updatability.READONLY);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(PropertyIds.PATH, "Path",
-                Updatability.READONLY);
-        propertyDefinitions.put(propS.getId(), propS);
-    }
-
-    public static void setBasicPolicyPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        setBasicPropertyDefinitions(propertyDefinitions);
-        PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(PropertyIds.POLICY_TEXT,
-                "Policy Text", Updatability.READWRITE);
-        propS.setIsRequired(true);
-        propertyDefinitions.put(propS.getId(), propS);
-    }
-
-    public static void setBasicRelationshipPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
-
-        setBasicPropertyDefinitions(propertyDefinitions);
-        PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(PropertyIds.SOURCE_ID, "Source Id",
-                Updatability.READWRITE);
-        propId.setIsRequired(true);
-        propertyDefinitions.put(propId.getId(), propId);
-
-        propId = PropertyCreationHelper.createIdDefinition(PropertyIds.TARGET_ID, "Target Id", Updatability.READWRITE);
-        propId.setIsRequired(true);
-        propertyDefinitions.put(propId.getId(), propId);
-    }
-
-    public static void mergePropertyDefinitions(Map<String, PropertyDefinition<?>> existingPpropertyDefinitions,
-            Map<String, PropertyDefinition<?>> newPropertyDefinitions) {
-        for (String propId : newPropertyDefinitions.keySet()) {
-            if (existingPpropertyDefinitions.containsKey(propId)) {
-                throw new CmisInvalidArgumentException("You can't set a property with id " + propId
-                        + ". This property id already exists already or exists in supertype");
-            }
-        }
-        existingPpropertyDefinitions.putAll(newPropertyDefinitions);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
deleted file mode 100644
index 8bfdd53..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.types;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyIdListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.DataObjectCreator;
-import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.NameValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class PropertyCreationHelper {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PropertyCreationHelper.class);
-
-    private PropertyCreationHelper() {
-    }
-
-    public static PropertyBooleanDefinitionImpl createBooleanDefinition(String id, String displayName, 
-            Updatability upd) {
-        PropertyBooleanDefinitionImpl prop = new PropertyBooleanDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.BOOLEAN, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyBooleanDefinitionImpl createBooleanMultiDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyBooleanDefinitionImpl prop = new PropertyBooleanDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.BOOLEAN, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyDateTimeDefinitionImpl createDateTimeDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyDateTimeDefinitionImpl prop = new PropertyDateTimeDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.DATETIME, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyDateTimeDefinitionImpl createDateTimeMultiDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyDateTimeDefinitionImpl prop = new PropertyDateTimeDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.DATETIME, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyDecimalDefinitionImpl createDecimalDefinition(String id, String displayName, 
-            Updatability upd) {
-        PropertyDecimalDefinitionImpl prop = new PropertyDecimalDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.DECIMAL, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyDecimalDefinitionImpl createDecimalMultiDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyDecimalDefinitionImpl prop = new PropertyDecimalDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.DECIMAL, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyHtmlDefinitionImpl createHtmlDefinition(String id, String displayName, Updatability upd) {
-        PropertyHtmlDefinitionImpl prop = new PropertyHtmlDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.HTML, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyHtmlDefinitionImpl createHtmlMultiDefinition(String id, String displayName, 
-            Updatability upd) {
-        PropertyHtmlDefinitionImpl prop = new PropertyHtmlDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.HTML, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyIdDefinitionImpl createIdDefinition(String id, String displayName, Updatability upd) {
-        PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyIdDefinitionImpl createIdMultiDefinition(String id, String displayName, Updatability upd) {
-        PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyIntegerDefinitionImpl createIntegerDefinition(String id, String displayName, 
-            Updatability upd) {
-        PropertyIntegerDefinitionImpl prop = new PropertyIntegerDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.INTEGER, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyIntegerDefinitionImpl createIntegerMultiDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyIntegerDefinitionImpl prop = new PropertyIntegerDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.INTEGER, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyStringDefinitionImpl createStringDefinition(String id, String displayName, Updatability upd) {
-        PropertyStringDefinitionImpl prop = new PropertyStringDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.STRING, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyStringDefinitionImpl createStringMultiDefinition(String id, String displayName,
-            Updatability upd) {
-        PropertyStringDefinitionImpl prop = new PropertyStringDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.STRING, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static PropertyUriDefinitionImpl createUriDefinition(String id, String displayName, Updatability upd) {
-        PropertyUriDefinitionImpl prop = new PropertyUriDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.URI, displayName, Cardinality.SINGLE, upd);
-        return prop;
-    }
-
-    public static PropertyUriDefinitionImpl createUriMultiDefinition(String id, String displayName, Updatability upd) {
-        PropertyUriDefinitionImpl prop = new PropertyUriDefinitionImpl();
-        createStandardDefinition(prop, id, PropertyType.URI, displayName, Cardinality.MULTI, upd);
-        return prop;
-    }
-
-    public static <T> void addElemToPicklist(AbstractPropertyDefinition<T> prop, T value) {
-        List<Choice<T>> choiceList = prop.getChoices();
-        if (choiceList == null) {
-            choiceList = new ArrayList<Choice<T>>();
-            prop.setChoices(choiceList);
-        }
-
-        ChoiceImpl<T> elem = new ChoiceImpl<T>();
-        elem.setValue(Collections.singletonList(value));
-        choiceList.add(elem);
-    }
-
-    public static <T> void setDefaultValue(AbstractPropertyDefinition<T> prop, T defVal) {
-        prop.setDefaultValue(Collections.singletonList(defVal));
-    }
-
-    public static Properties getPropertiesFromObject(StoredObject so, ObjectStore objectStore, TypeManager typeManager,
-            List<String> requestedIds, boolean fillOptionalPropertyData) {
-        // build properties collection
-
-        BindingsObjectFactory objectFactory = new BindingsObjectFactoryImpl();
-        Map<String, PropertyData<?>> properties = new HashMap<String, PropertyData<?>>();
-        so.fillProperties(properties, objectFactory, requestedIds);
-        TypeDefinition td = typeManager.getTypeById(so.getTypeId()).getTypeDefinition();
-
-        String typeId = so.getTypeId();
-        if (so instanceof Folder && FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
-            String path = objectStore.getFolderPath(so.getId());
-            properties.put(PropertyIds.PATH, objectFactory.createPropertyStringData(PropertyIds.PATH, path));
-        }
-        if (FilterParser.isContainedInFilter(PropertyIds.BASE_TYPE_ID, requestedIds)) {
-            if (td == null) {
-                LOG.warn("getPropertiesFromObject(), cannot get type definition, a type with id " + typeId
-                        + " is unknown");
-                return null;
-            } else {
-                String baseTypeId = td.getBaseTypeId().value();
-                properties.put(PropertyIds.BASE_TYPE_ID,
-                        objectFactory.createPropertyIdData(PropertyIds.BASE_TYPE_ID, baseTypeId));
-            }
-        }
-
-        // fill not-set properties from type definition (as spec requires)
-        Map<String, PropertyDefinition<?>> propDefs = td.getPropertyDefinitions();
-        for (PropertyDefinition<?> propDef : propDefs.values()) {
-            if (!properties.containsKey(propDef.getId())
-                    && FilterParser.isContainedInFilter(propDef.getId(), requestedIds)) {
-                properties.put(propDef.getId(), getEmptyValue(propDef));
-            }
-        }
-
-        // fill not-set properties from secondary types
-        List<String> secTypeIds = so.getSecondaryTypeIds();
-        for (String secTypeId : secTypeIds) {
-            td = typeManager.getTypeById(secTypeId).getTypeDefinition();
-            propDefs = td.getPropertyDefinitions();
-            for (PropertyDefinition<?> propDef : propDefs.values()) {
-                if (!properties.containsKey(propDef.getId())
-                        && FilterParser.isContainedInFilter(propDef.getId(), requestedIds)) {
-                    properties.put(propDef.getId(), getEmptyValue(propDef));
-                }
-            }
-        }
-
-        List<PropertyData<?>> propertiesList = new ArrayList<PropertyData<?>>(properties.values());
-
-        // add query name, local name, display name
-        if (fillOptionalPropertyData) {
-            fillOptionalPropertyData(td, propertiesList);
-        }
-
-        Properties props = objectFactory.createPropertiesData(propertiesList);
-        return props;
-    }
-
-    public static Properties getPropertiesFromObject(StoredObject so, ObjectStore objectStore,
-            TypeDefinition primaryType, List<TypeDefinition> secondaryTypes, Map<String, String> requestedIds,
-            Map<String, String> requestedFuncs) {
-        // build properties collection
-
-        List<String> idList = new ArrayList<String>(requestedIds.values());
-        BindingsObjectFactory objectFactory = new BindingsObjectFactoryImpl();
-        Map<String, PropertyData<?>> properties = new HashMap<String, PropertyData<?>>();
-        so.fillProperties(properties, objectFactory, idList);
-        // special handling for path
-        if (so instanceof Folder && FilterParser.isContainedInFilter(PropertyIds.PATH, idList)) {
-            String path = objectStore.getFolderPath(so.getId());
-            properties.put(PropertyIds.PATH, objectFactory.createPropertyStringData(PropertyIds.PATH, path));
-        }
-
-        if (FilterParser.isContainedInFilter(PropertyIds.BASE_TYPE_ID, idList)) {
-            String baseTypeId = primaryType.getBaseTypeId().value();
-            properties.put(PropertyIds.BASE_TYPE_ID,
-                    objectFactory.createPropertyIdData(PropertyIds.BASE_TYPE_ID, baseTypeId));
-        }
-
-        Map<String, PropertyData<?>> mappedProperties = new HashMap<String, PropertyData<?>>();
-
-        // primary type:
-        if (requestedIds.containsValue("*")) {
-            for (Map.Entry<String, PropertyData<?>> prop : properties.entrySet()) {
-                addPropertyToMap(mappedProperties, primaryType, prop.getValue(), null);
-            }
-            // add all values that are not set:
-            Map<String, PropertyDefinition<?>> propDefs = primaryType.getPropertyDefinitions();
-            for (PropertyDefinition<?> propDef : propDefs.values()) {
-                if (!mappedProperties.containsKey(propDef.getQueryName())) {
-                    mappedProperties.put(propDef.getId(), getEmptyValue(propDef));
-                }
-            }
-
-        } else {
-            // replace all ids with query names or alias:
-            for (Entry<String, String> propAlias : requestedIds.entrySet()) {
-                String queryNameOrAlias = propAlias.getKey();
-                PropertyData<?> prop = properties.get(propAlias.getValue());
-                if (null != prop) {
-                    addPropertyToMap(mappedProperties, primaryType, prop, queryNameOrAlias);
-                } else {
-                    addNotSetPropertyToMap(mappedProperties, primaryType, propAlias.getValue(), queryNameOrAlias);
-                }
-            }
-        }
-
-        // secondary types:
-        if (null != secondaryTypes) {
-            for (TypeDefinition typeDef : secondaryTypes) {
-                if (requestedIds.containsValue("*")) {
-                    for (Map.Entry<String, PropertyData<?>> prop : properties.entrySet()) {
-                        addPropertyToMap(mappedProperties, typeDef, prop.getValue(), null);
-                    }
-                    // add all values that are not set:
-                    Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-                    for (PropertyDefinition<?> propDef : propDefs.values()) {
-                        if (!mappedProperties.containsKey(propDef.getQueryName())) {
-                            mappedProperties.put(propDef.getId(), getEmptyValue(propDef));
-                        }
-                    }
-                } else {
-                    // replace all ids with query names or alias:
-                    for (Entry<String, String> propAlias : requestedIds.entrySet()) {
-                        String queryNameOrAlias = propAlias.getKey();
-                        PropertyData<?> prop = properties.get(propAlias.getValue());
-                        if (null != prop) {
-                            addPropertyToMap(mappedProperties, typeDef, prop, queryNameOrAlias);
-                        } else {
-                            addNotSetPropertyToMap(mappedProperties, typeDef, propAlias.getValue(), queryNameOrAlias);
-                        }
-                    }
-                }
-            }
-        }
-
-        // add functions:
-        for (Entry<String, String> funcEntry : requestedFuncs.entrySet()) {
-            String queryName;
-            if (funcEntry.getValue().equals("SCORE")) {
-                queryName = "SEARCH_SCORE";
-                if (!funcEntry.getKey().equals("SCORE")) {
-                    queryName = funcEntry.getKey();
-                }
-
-                PropertyDecimalImpl pd = new PropertyDecimalImpl();
-                // fixed dummy value
-                pd.setValue(BigDecimal.valueOf(1.0));
-                pd.setId(queryName);
-                pd.setQueryName(queryName);
-                pd.setLocalName("SCORE");
-                pd.setDisplayName("Score");
-                mappedProperties.put(funcEntry.getKey(), pd);
-            }
-        }
-
-        Properties props = new PropertiesImpl(mappedProperties.values());
-        return props;
-    }
-
-    private static void addNotSetPropertyToMap(Map<String, PropertyData<?>> mappedProperties, TypeDefinition typeDef,
-            String propId, String queryNameOrAlias) {
-        PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(propId);
-        if (null != propDef) {
-            AbstractPropertyData<?> ad = getEmptyValue(propDef);
-            String localName = propDef.getLocalName();
-            String displayName = propDef.getDisplayName();
-            ad.setQueryName(queryNameOrAlias);
-            ad.setLocalName(localName);
-            ad.setDisplayName(displayName);
-            mappedProperties.put(queryNameOrAlias, ad);
-        }
-    }
-
-    private static void addPropertyToMap(Map<String, PropertyData<?>> mappedProperties, TypeDefinition typeDef,
-            PropertyData<?> propData, String queryNameOrAlias) {
-        String propId = propData.getId();
-        if (typeDef.getPropertyDefinitions().containsKey(propId)) {
-            // map property id to property query name
-            PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(propId);
-            String queryName = propDef.getQueryName();
-            String localName = propDef.getLocalName();
-            String displayName = propDef.getDisplayName();
-
-            AbstractPropertyData<?> ad = clonePropertyData(propData);
-            ad.setQueryName(queryNameOrAlias == null ? queryName : queryNameOrAlias);
-            ad.setLocalName(localName);
-            ad.setDisplayName(displayName);
-
-            mappedProperties.put(queryName, ad);
-        }
-    }
-
-    public static ObjectData getObjectData(TypeManager tm, ObjectStore objectStore, StoredObject so, String filter,
-            String user, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
-
-        ObjectDataImpl od = new ObjectDataImpl();
-
-        if (so == null) {
-            throw new CmisObjectNotFoundException("Illegal object id: null");
-        }
-
-        // build properties collection
-        List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-        Properties props = getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
-
-        // fill output object
-        if (null != includeAllowableActions && includeAllowableActions) {
-            AllowableActions allowableActions = so.getAllowableActions(user);
-            od.setAllowableActions(allowableActions);
-        }
-
-        List<RenditionData> renditions = objectStore.getRenditions(so, renditionFilter, 0, 0);
-        if (null != renditions && renditions.size() > 0) {
-            od.setRenditions(renditions);
-        }
-
-        if (null != includeACL && includeACL) {
-            int aclId = so instanceof DocumentVersion ? ((DocumentVersion) so).getParentDocument().getAclId() : so
-                    .getAclId();
-            Acl acl = objectStore.getAcl(aclId);
-            od.setAcl(acl);
-        }
-        od.setIsExactAcl(true);
-
-        if (null != includePolicyIds && includePolicyIds) {
-            od.setPolicyIds(DataObjectCreator.fillPolicyIds(so));
-        }
-
-        if (null != includeRelationships && includeRelationships != IncludeRelationships.NONE) {
-            od.setRelationships(DataObjectCreator.fillRelationships(tm, objectStore, includeRelationships, so, user));
-        }
-
-        if (null != includePolicyIds && includePolicyIds) {
-            List<String> polIds = so.getAppliedPolicies();
-            if (null != polIds) {
-                PolicyIdListImpl policies = new PolicyIdListImpl();
-                policies.setPolicyIds(polIds);
-                od.setPolicyIds(policies);
-            }
-        }
-        od.setProperties(props);
-
-        // Note: do not set change event info for this call
-        return od;
-    }
-
-    public static ObjectData getObjectDataQueryResult(TypeManager tm, ObjectStore objectStore,
-            TypeDefinition primaryType, StoredObject so, String user, Map<String, String> requestedProperties,
-            Map<String, String> requestedFuncs, List<TypeDefinition> secondaryTypes, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter) {
-
-        ObjectDataImpl od = new ObjectDataImpl();
-
-        // build properties collection
-        Properties props = getPropertiesFromObject(so, objectStore, primaryType, secondaryTypes, requestedProperties,
-                requestedFuncs);
-
-        // fill output object
-        if (null != includeAllowableActions && includeAllowableActions) {
-            AllowableActions allowableActions = so.getAllowableActions(user);
-            od.setAllowableActions(allowableActions);
-        }
-
-        int aclId = so.getAclId();
-        Acl acl = objectStore.getAcl(aclId);
-        od.setAcl(acl);
-
-        od.setIsExactAcl(true);
-
-        if (null != includeRelationships && includeRelationships != IncludeRelationships.NONE) {
-            od.setRelationships(DataObjectCreator.fillRelationships(tm, objectStore, includeRelationships, so, user));
-        }
-
-        List<RenditionData> renditions = objectStore.getRenditions(so, renditionFilter, 0, 0);
-        if (null != renditions && renditions.size() > 0) {
-            od.setRenditions(renditions);
-        }
-
-        od.setProperties(props);
-
-        return od;
-    }
-
-    // internal helpers
-    private static void createStandardDefinition(AbstractPropertyDefinition<?> prop, String id, PropertyType propType,
-            String displayName, Cardinality card, Updatability upd) {
-
-        if (!NameValidator.isValidId(id)) {
-            throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-        }
-
-        prop.setId(id);
-        if (displayName == null) {
-            prop.setDisplayName("Sample " + prop.getId() + " boolean property");
-        } else {
-            prop.setDisplayName(displayName);
-        }
-        prop.setDescription("This is a " + prop.getDisplayName() + " property.");
-        prop.setLocalName(id);
-        prop.setLocalNamespace(null);
-        prop.setQueryName(id);
-        prop.setIsInherited(false);
-        prop.setCardinality(card);
-        prop.setIsOpenChoice(false);
-        prop.setIsQueryable(true);
-        prop.setIsRequired(false);
-        prop.setIsOrderable(card == Cardinality.SINGLE ? true : false);
-        prop.setPropertyType(propType);
-        prop.setUpdatability(upd);
-    }
-
-    private static void fillOptionalPropertyData(TypeDefinition td, List<PropertyData<?>> properties) {
-        for (PropertyData<?> pd : properties) {
-            fillOptionalPropertyData(td, (AbstractPropertyData<?>) pd);
-        }
-    }
-
-    private static void fillOptionalPropertyData(TypeDefinition td, AbstractPropertyData<?> property) {
-        PropertyDefinition<?> pd = td.getPropertyDefinitions().get(property.getId());
-        if (null != pd) {
-            String displayName = pd.getDisplayName();
-            String queryName = pd.getQueryName();
-            String localName = pd.getLocalName();
-            property.setDisplayName(displayName);
-            property.setLocalName(localName);
-            property.setQueryName(queryName);
-        }
-    }
-
-    private static AbstractPropertyData<?> getEmptyValue(PropertyDefinition<?> propDef) {
-        AbstractPropertyData<?> emptyValue;
-        if (propDef.getPropertyType().equals(PropertyType.BOOLEAN)) {
-            emptyValue = new PropertyBooleanImpl(propDef.getId(), (Boolean) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.DATETIME)) {
-            emptyValue = new PropertyDateTimeImpl(propDef.getId(), (GregorianCalendar) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.DECIMAL)) {
-            emptyValue = new PropertyDecimalImpl(propDef.getId(), (BigDecimal) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.HTML)) {
-            emptyValue = new PropertyHtmlImpl(propDef.getId(), (String) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.ID)) {
-            emptyValue = new PropertyIdImpl(propDef.getId(), (String) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.INTEGER)) {
-            emptyValue = new PropertyIntegerImpl(propDef.getId(), (BigInteger) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.STRING)) {
-            emptyValue = new PropertyStringImpl(propDef.getId(), (String) null);
-        } else if (propDef.getPropertyType().equals(PropertyType.URI)) {
-            emptyValue = new PropertyUriImpl(propDef.getId(), (String) null);
-        } else {
-            throw new CmisRuntimeException("Unknown property type " + propDef.getPropertyType());
-        }
-        emptyValue.setDisplayName(propDef.getDisplayName());
-        emptyValue.setQueryName(propDef.getQueryName());
-        emptyValue.setLocalName(propDef.getLocalName());
-        return emptyValue;
-    }
-
-    private static AbstractPropertyData<?> clonePropertyData(PropertyData<?> prop) {
-        AbstractPropertyData<?> ad = null;
-
-        if (prop instanceof PropertyBooleanImpl) {
-            PropertyBooleanImpl clone = new PropertyBooleanImpl();
-            clone.setValues(((PropertyBooleanImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyDateTimeImpl) {
-            PropertyDateTimeImpl clone = new PropertyDateTimeImpl();
-            clone.setValues(((PropertyDateTimeImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyDecimalImpl) {
-            PropertyDecimalImpl clone = new PropertyDecimalImpl();
-            clone.setValues(((PropertyDecimalImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyHtmlImpl) {
-            PropertyHtmlImpl clone = new PropertyHtmlImpl();
-            clone.setValues(((PropertyHtmlImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyIdImpl) {
-            PropertyIdImpl clone = new PropertyIdImpl();
-            clone.setValues(((PropertyIdImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyIntegerImpl) {
-            PropertyIntegerImpl clone = new PropertyIntegerImpl();
-            clone.setValues(((PropertyIntegerImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyStringImpl) {
-            PropertyStringImpl clone = new PropertyStringImpl();
-            clone.setValues(((PropertyStringImpl) prop).getValues());
-            ad = clone;
-        } else if (prop instanceof PropertyUriImpl) {
-            PropertyUriImpl clone = new PropertyUriImpl();
-            clone.setValues(((PropertyUriImpl) prop).getValues());
-            ad = clone;
-        } else {
-            throw new CmisRuntimeException("Unknown property type: " + prop.getClass());
-        }
-
-        ad.setDisplayName(prop.getDisplayName());
-        ad.setId(prop.getId());
-        ad.setLocalName(prop.getLocalName());
-        ad.setQueryName(prop.getQueryName());
-        ad.setExtensions(prop.getExtensions());
-
-        return ad;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeDefinitions.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeDefinitions.java
deleted file mode 100644
index 4cd3b95..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeDefinitions.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.types;

-

-import java.util.ArrayList;

-import java.util.List;

-

-import javax.xml.bind.annotation.XmlElement;

-import javax.xml.bind.annotation.XmlRootElement;

-

-import org.apache.chemistry.opencmis.commons.impl.XMLConstants;

-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;

-

-@XmlRootElement

-public class TypeDefinitions {

-

-    private List<CmisTypeDefinitionType> type;

-

-    @XmlElement(namespace = XMLConstants.NAMESPACE_RESTATOM, name = "type")

-    public List<CmisTypeDefinitionType> getTypeDefinitions() {

-        if (type == null) {

-            type = new ArrayList<CmisTypeDefinitionType>();

-        }

-        return this.type;

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeUtil.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeUtil.java
deleted file mode 100644
index 3024372..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/TypeUtil.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.types;
-
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-
-public final class TypeUtil {
-
-    private TypeUtil() {
-    }
-
-    public static TypeDefinition cloneType(TypeDefinition type) {
-        if (type instanceof DocumentTypeDefinition) {
-            return cloneTypeDoc((DocumentTypeDefinition) type);
-        } else if (type instanceof FolderTypeDefinition) {
-            return cloneTypeFolder((FolderTypeDefinition) type);
-        } else if (type instanceof PolicyTypeDefinition) {
-            return cloneTypePolicy((PolicyTypeDefinition) type);
-        } else if (type instanceof ItemTypeDefinition) {
-            return cloneTypeItem((ItemTypeDefinition) type);
-        } else if (type instanceof RelationshipTypeDefinition) {
-            return cloneTypeRelationship((RelationshipTypeDefinition) type);
-        } else if (type instanceof SecondaryTypeDefinition) {
-            return cloneTypeSecondary((SecondaryTypeDefinition) type);
-        } else {
-            return null;
-        }
-    }
-
-    public static AbstractPropertyDefinition<?> clonePropertyDefinition(PropertyDefinition<?> pd) {
-        if (pd instanceof PropertyBooleanDefinition) {
-            PropertyBooleanDefinitionImpl pdBoolDef = new PropertyBooleanDefinitionImpl();
-            PropertyBooleanDefinitionImpl pdSrc = (PropertyBooleanDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdBoolDef);
-            pdBoolDef.setChoices(pdSrc.getChoices());
-            pdBoolDef.setDefaultValue(pdSrc.getDefaultValue());
-            return pdBoolDef;
-        } else if (pd instanceof PropertyDateTimeDefinition) {
-            PropertyDateTimeDefinitionImpl pdDateDef = new PropertyDateTimeDefinitionImpl();
-            PropertyDateTimeDefinitionImpl pdSrc = (PropertyDateTimeDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdDateDef);
-            pdDateDef.setChoices(pdSrc.getChoices());
-            pdDateDef.setDefaultValue(pdSrc.getDefaultValue());
-            pdDateDef.setDateTimeResolution(pdSrc.getDateTimeResolution());
-            return pdDateDef;
-        } else if (pd instanceof PropertyDecimalDefinition) {
-            PropertyDecimalDefinitionImpl pdDecDef = new PropertyDecimalDefinitionImpl();
-            PropertyDecimalDefinitionImpl pdSrc = (PropertyDecimalDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdDecDef);
-            pdDecDef.setChoices(pdSrc.getChoices());
-            pdDecDef.setDefaultValue(pdSrc.getDefaultValue());
-            pdDecDef.setMinValue(pdSrc.getMinValue());
-            pdDecDef.setMaxValue(pdSrc.getMaxValue());
-            pdDecDef.setPrecision(pdSrc.getPrecision());
-            return pdDecDef;
-        } else if (pd instanceof PropertyHtmlDefinition) {
-            PropertyHtmlDefinitionImpl pdHtmlDef = new PropertyHtmlDefinitionImpl();
-            PropertyHtmlDefinitionImpl pdSrc = (PropertyHtmlDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdHtmlDef);
-            pdHtmlDef.setChoices(pdSrc.getChoices());
-            pdHtmlDef.setDefaultValue(pdSrc.getDefaultValue());
-            return pdHtmlDef;
-        } else if (pd instanceof PropertyIdDefinition) {
-            PropertyIdDefinitionImpl pdIdDef = new PropertyIdDefinitionImpl();
-            PropertyIdDefinitionImpl pdSrc = (PropertyIdDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdIdDef);
-            pdIdDef.setChoices(pdSrc.getChoices());
-            pdIdDef.setDefaultValue(pdSrc.getDefaultValue());
-            return pdIdDef;
-        } else if (pd instanceof PropertyIntegerDefinition) {
-            PropertyIntegerDefinitionImpl pdIntDef = new PropertyIntegerDefinitionImpl();
-            PropertyIntegerDefinitionImpl pdSrc = (PropertyIntegerDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdIntDef);
-            pdIntDef.setChoices(pdSrc.getChoices());
-            pdIntDef.setDefaultValue(pdSrc.getDefaultValue());
-            pdIntDef.setMinValue(pdSrc.getMinValue());
-            pdIntDef.setMaxValue(pdSrc.getMaxValue());
-            return pdIntDef;
-        } else if (pd instanceof PropertyStringDefinition) {
-            PropertyStringDefinitionImpl pdStringDef = new PropertyStringDefinitionImpl();
-            PropertyStringDefinitionImpl pdSrc = (PropertyStringDefinitionImpl) pd;
-            initializeAbstractPropertyDefinition(pd, pdStringDef);
-            pdStringDef.setChoices(pdSrc.getChoices());
-            pdStringDef.setDefaultValue(pdSrc.getDefaultValue());
-            pdStringDef.setMaxLength(pdSrc.getMaxLength());
-            return pdStringDef;
-        } else if (pd instanceof PropertyUriDefinition) {
-            PropertyUriDefinitionImpl pdUriDef = new PropertyUriDefinitionImpl();
-            PropertyUriDefinition pdSrc = (PropertyUriDefinition) pd;
-            initializeAbstractPropertyDefinition(pd, pdUriDef);
-            pdUriDef.setChoices(pdSrc.getChoices());
-            pdUriDef.setDefaultValue(pdSrc.getDefaultValue());
-            return pdUriDef;
-        } else {
-            return null;
-        }
-    }
-
-    public static DocumentTypeDefinitionImpl cloneTypeDoc(DocumentTypeDefinition type) {
-        DocumentTypeDefinitionImpl td = new DocumentTypeDefinitionImpl();
-        td.initialize(type);
-        td.setIsVersionable(type.isVersionable());
-        td.setContentStreamAllowed(type.getContentStreamAllowed());
-        return td;
-    }
-
-    public static FolderTypeDefinitionImpl cloneTypeFolder(FolderTypeDefinition type) {
-        FolderTypeDefinitionImpl td = new FolderTypeDefinitionImpl();
-        td.initialize(type);
-        return td;
-    }
-
-    public static RelationshipTypeDefinitionImpl cloneTypeRelationship(RelationshipTypeDefinition type) {
-        RelationshipTypeDefinitionImpl td = new RelationshipTypeDefinitionImpl();
-        td.initialize(type);
-        td.setAllowedSourceTypes(type.getAllowedSourceTypeIds());
-        td.setAllowedTargetTypes(type.getAllowedTargetTypeIds());
-        return td;
-    }
-
-    public static ItemTypeDefinitionImpl cloneTypeItem(ItemTypeDefinition type) {
-        ItemTypeDefinitionImpl td = new ItemTypeDefinitionImpl();
-        td.initialize(type);
-        return td;
-    }
-
-    public static SecondaryTypeDefinitionImpl cloneTypeSecondary(SecondaryTypeDefinition type) {
-        SecondaryTypeDefinitionImpl td = new SecondaryTypeDefinitionImpl();
-        td.initialize(type);
-        return td;
-    }
-
-    public static PolicyTypeDefinitionImpl cloneTypePolicy(PolicyTypeDefinition type) {
-        PolicyTypeDefinitionImpl td = new PolicyTypeDefinitionImpl();
-        td.initialize(td);
-        return null;
-    }
-
-    public static String getQueryNameFromId(String id) {
-        StringBuilder sb = new StringBuilder(id.length());
-        for (int i = 0; i < id.length(); i++) {
-            char c = id.charAt(i);
-            if (c == '.' || c == ' ' || c == ',' || c == '\'' || c == '"' || c == '\\' || c == '(' || c == ')') {
-                sb.append('_');
-            } else {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    private static void initializeAbstractPropertyDefinition(PropertyDefinition<?> pdSrc,
-            AbstractPropertyDefinition<?> pdTarget) {
-        pdTarget.setCardinality(pdSrc.getCardinality());
-        pdTarget.setDescription(pdSrc.getDescription());
-        pdTarget.setDisplayName(pdSrc.getDisplayName());
-        pdTarget.setExtensions(pdSrc.getExtensions());
-        pdTarget.setId(pdSrc.getId());
-        pdTarget.setIsInherited(false);
-        pdTarget.setIsOpenChoice(pdSrc.isOpenChoice());
-        pdTarget.setIsOrderable(pdSrc.isOrderable());
-        pdTarget.setIsQueryable(pdSrc.isQueryable());
-        pdTarget.setIsRequired(pdSrc.isRequired());
-        pdTarget.setLocalName(pdSrc.getLocalName());
-        pdTarget.setLocalNamespace(pdSrc.getLocalNamespace());
-        pdTarget.setPropertyType(pdSrc.getPropertyType());
-        pdTarget.setQueryName(pdSrc.getQueryName());
-        pdTarget.setUpdatability(pdSrc.getUpdatability());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-msword.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-msword.png
deleted file mode 100644
index 2015b52..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-msword.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-pdf.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-pdf.png
deleted file mode 100644
index 1cb7e63..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-pdf.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-excel.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-excel.png
deleted file mode 100644
index 6b9ee7b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-excel.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-powerpoint.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-powerpoint.png
deleted file mode 100644
index 749c439..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/application-vnd.ms-powerpoint.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/audio-x-generic.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/audio-x-generic.png
deleted file mode 100644
index bda21e8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/audio-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/folder.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/folder.png
deleted file mode 100644
index cc7d843..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/folder.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/image-x-generic.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/image-x-generic.png
deleted file mode 100644
index 4a7866c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/image-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/log4j.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/log4j.properties
deleted file mode 100644
index 496f9fc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more

-# contributor license agreements.  See the NOTICE file distributed with

-# this work for additional information regarding copyright ownership.

-# The ASF licenses this file to You under the Apache License, Version 2.0

-# (the "License"); you may not use this file except in compliance with

-# the License.  You may obtain a copy of the License at

-# 

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

-# 

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

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

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

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

-# limitations under the License.

-

-

-# sample log4j.properties

-

-log4j.rootCategory=WARN, R, O

-

-# Stdout

-log4j.appender.O=org.apache.log4j.ConsoleAppender

-

-# File

-log4j.appender.R=org.apache.log4j.RollingFileAppender

-log4j.appender.R.File=log4j.log

-

-# Control the maximum log file size

-log4j.appender.R.MaxFileSize=100KB

-

-# Archive log files (one backup file here)

-log4j.appender.R.MaxBackupIndex=1

-log4j.appender.R.layout=org.apache.log4j.PatternLayout

-log4j.appender.O.layout=org.apache.log4j.PatternLayout

-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-

-# log4j.logger.org.apache.chemistry.opencmis.inmemory=DEBUG

-# log4j.logger.org.apache.chemistry.opencmis.server.support.filter=INFO
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-html.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-html.png
deleted file mode 100644
index b7de8cb..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-html.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-x-generic.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-x-generic.png
deleted file mode 100644
index c46fc63..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/text-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/types.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/types.xml
deleted file mode 100644
index 43c6892..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/types.xml
+++ /dev/null
@@ -1,2384 +0,0 @@
-<!-- Generated Output file with type definitions. Do not edit! -->
-<chem:typeDefinitions xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"
-     xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
-     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-     xmlns:chem="http://chemistry.apache.org/schemas/TypeDefnitions">
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>audioFile</id>
-    <localName>audioFile</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Audio File</displayName>
-    <queryName>AUDIO_FILE</queryName>
-    <description>Audio Content (compressed or uncompressed)</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>album</id>
-        <localName>album</localName>
-        <displayName>Album</displayName>
-        <queryName>ALBUM</queryName>
-        <description>title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comment</id>
-        <localName>comment</localName>
-        <displayName>Comment</displayName>
-        <queryName>COMMENT</queryName>
-        <description>Comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>genre</id>
-        <localName>genre</localName>
-        <displayName>Genre</displayName>
-        <queryName>GENRE</queryName>
-        <description>Genre</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>length</id>
-        <localName>length</localName>
-        <displayName>Length</displayName>
-        <queryName>LENGTH</queryName>
-        <description>Length in seconds</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>track</id>
-        <localName>track</localName>
-        <displayName>Track</displayName>
-        <queryName>TRACK</queryName>
-        <description>Track in album</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>year</id>
-        <localName>year</localName>
-        <displayName>Year</displayName>
-        <queryName>YEAR</queryName>
-        <description>release date of albun</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>composer</id>
-        <localName>composer</localName>
-        <displayName>Composer</displayName>
-        <queryName>COMPOSER</queryName>
-        <description>Composer</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>discNo</id>
-        <localName>discNo</localName>
-        <displayName>Disc Number</displayName>
-        <queryName>DISC_NUMBER</queryName>
-        <description>number of disc / total discs</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>audioFormat</id>
-        <localName>audioFormat</localName>
-        <displayName>Audio Format</displayName>
-        <queryName>AUDIO_FORMAT</queryName>
-        <description>Audio Format / compression scheme</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>sampleRate</id>
-        <localName>sampleRate</localName>
-        <displayName>Sample Rate</displayName>
-        <queryName>SAMPLE_RATE</queryName>
-        <description>Sample Rate</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>audioChannelType</id>
-        <localName>audioChannelType</localName>
-        <displayName>Audio Channel Type</displayName>
-        <queryName>AUDIO_CHANNEL_TYPE</queryName>
-        <description>audio channel type</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Mono">
-            <value>Mono</value>
-        </choice>
-        <choice displayName="Stereo">
-            <value>Stereo</value>
-        </choice>
-        <choice displayName="5.1">
-            <value>5.1</value>
-        </choice>
-        <choice displayName="7.1">
-            <value>7.1</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>noChannels</id>
-        <localName>noChannels</localName>
-        <displayName>Number Channels</displayName>
-        <queryName>NUMBER_CHANNELS</queryName>
-        <description>number of audio channels</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>compressorVersion</id>
-        <localName>compressorVersion</localName>
-        <displayName>Compressor Version</displayName>
-        <queryName>COMPRESSOR_VERSION</queryName>
-        <description>version description of compressor</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>emailDocument</id>
-    <localName>emailDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Email Document</displayName>
-    <queryName>EMAIL_DOCUMENT</queryName>
-    <description>Document of type Email</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>from</id>
-        <localName>from</localName>
-        <displayName>From</displayName>
-        <queryName>FROM</queryName>
-        <description>sender of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>to</id>
-        <localName>to</localName>
-        <displayName>To</displayName>
-        <queryName>TO</queryName>
-        <description>recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>cc</id>
-        <localName>cc</localName>
-        <displayName>Cc</displayName>
-        <queryName>CC</queryName>
-        <description>carbon copy recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>bcc</id>
-        <localName>bcc</localName>
-        <displayName>Bcc</displayName>
-        <queryName>BCC</queryName>
-        <description>blind carbon copy recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>subject</id>
-        <localName>subject</localName>
-        <displayName>Subject</displayName>
-        <queryName>SUBJECT</queryName>
-        <description>subjet of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>messageRecipientAddress</id>
-        <localName>messageRecipientAddress</localName>
-        <displayName>Message Recipient Address</displayName>
-        <queryName>MESSAGE_RECIPIENT_ADDRESS</queryName>
-        <description>Message Recipient Address</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>creationDate</id>
-        <localName>creationDate</localName>
-        <displayName>Creation Date</displayName>
-        <queryName>CREATION_DATE</queryName>
-        <description>Creation Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>lastSaveDate</id>
-        <localName>lastSaveDate</localName>
-        <displayName>Last Save Date</displayName>
-        <queryName>LAST_SAVE_DATE</queryName>
-        <description>Last Save Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>exifImage</id>
-    <localName>exifImage</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>EXIF Image</displayName>
-    <queryName>EXIF_IMAGE</queryName>
-    <description>Image with EXIF tags</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyIntegerDefinition>
-        <id>imageWidth</id>
-        <localName>0x0100</localName>
-        <displayName>Image Width</displayName>
-        <queryName>IMAGE_WIDTH</queryName>
-        <description>Image Width</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>imageHeight</id>
-        <localName>0x0101</localName>
-        <displayName>Image Height</displayName>
-        <queryName>IMAGE_HEIGHT</queryName>
-        <description>Image Height</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>bitsPerSample</id>
-        <localName>0x0102</localName>
-        <displayName>Bits Per Sample</displayName>
-        <queryName>BITS_PER_SAMPLE</queryName>
-        <description>Bits Per Sample</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>compression</id>
-        <localName>0x0103</localName>
-        <displayName>Compression</displayName>
-        <queryName>COMPRESSION</queryName>
-        <description>Compression Format</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Uncompressed">
-            <value>1</value>
-        </choice>
-        <choice displayName="CCITT 1D">
-            <value>2</value>
-        </choice>
-        <choice displayName="T4/Group 3 Fax">
-            <value>3</value>
-        </choice>
-        <choice displayName="T6/Group 4 Fax">
-            <value>4</value>
-        </choice>
-        <choice displayName="LZW">
-            <value>5</value>
-        </choice>
-        <choice displayName="JPEG (old-style)">
-            <value>6</value>
-        </choice>
-        <choice displayName="JPEG">
-            <value>7</value>
-        </choice>
-        <choice displayName="Adobe Deflate">
-            <value>8</value>
-        </choice>
-        <choice displayName="JBIG BW">
-            <value>9</value>
-        </choice>
-        <choice displayName="JBIG Color">
-            <value>10</value>
-        </choice>
-        <choice displayName="JPEG">
-            <value>99</value>
-        </choice>
-        <choice displayName="Kodak 262">
-            <value>262</value>
-        </choice>
-        <choice displayName="Next">
-            <value>32766</value>
-        </choice>
-        <choice displayName="Sony ARW Compressed">
-            <value>32767</value>
-        </choice>
-        <choice displayName="Packed RAW">
-            <value>32769</value>
-        </choice>
-        <choice displayName="Samsung SRW Compressed">
-            <value>32770</value>
-        </choice>
-        <choice displayName="CCIRLEW">
-            <value>32771</value>
-        </choice>
-        <choice displayName="PackBits">
-            <value>32773</value>
-        </choice>
-        <choice displayName="Thunderscan">
-            <value>32809</value>
-        </choice>
-        <choice displayName="Kodak KDC Compressed">
-            <value>32867</value>
-        </choice>
-        <choice displayName="IT8CTPAD">
-            <value>32895</value>
-        </choice>
-        <choice displayName="IT8LW">
-            <value>32896</value>
-        </choice>
-        <choice displayName="IT8MP">
-            <value>32897</value>
-        </choice>
-        <choice displayName="IT8BL">
-            <value>32898</value>
-        </choice>
-        <choice displayName="PixarFilm">
-            <value>32908</value>
-        </choice>
-        <choice displayName="PixarLog">
-            <value>32909</value>
-        </choice>
-        <choice displayName="Deflate">
-            <value>32946</value>
-        </choice>
-        <choice displayName="DCS">
-            <value>32947</value>
-        </choice>
-        <choice displayName="JBIG">
-            <value>34661</value>
-        </choice>
-        <choice displayName="SGILog">
-            <value>34676</value>
-        </choice>
-        <choice displayName="SGILog24">
-            <value>34677</value>
-        </choice>
-        <choice displayName="JPEG 2000">
-            <value>34712</value>
-        </choice>
-        <choice displayName="Nikon NEF Compressed">
-            <value>34713</value>
-        </choice>
-        <choice displayName="JBIG2 TIFF FX">
-            <value>34715</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Binary Level Codec">
-            <value>34718</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Progressive Transform Codec">
-            <value>34719</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Vector">
-            <value>34720</value>
-        </choice>
-        <choice displayName="Kodak DCR Compressed">
-            <value>65000</value>
-        </choice>
-        <choice displayName="Pentax PEF Compressed">
-            <value>65535</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>photometricInterpretation</id>
-        <localName>0x0106</localName>
-        <displayName>Photometric Interpretation</displayName>
-        <queryName>PHOTOMETRIC_INTERPRETATION</queryName>
-        <description>Color Format</description>
-        <localNamespace></localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="WhiteIsZero">
-            <value>0</value>
-        </choice>
-        <choice displayName="BlackIsZero">
-            <value>1</value>
-        </choice>
-        <choice displayName="RGB">
-            <value>2</value>
-        </choice>
-        <choice displayName="RGB Palette">
-            <value>3</value>
-        </choice>
-        <choice displayName="Transparency Mask">
-            <value>4</value>
-        </choice>
-        <choice displayName="CMYK">
-            <value>5</value>
-        </choice>
-        <choice displayName="YCbCr">
-            <value>6</value>
-        </choice>
-        <choice displayName="CIELab">
-            <value>8</value>
-        </choice>
-        <choice displayName="ICCLab">
-            <value>9</value>
-        </choice>
-        <choice displayName="ITULab">
-            <value>10</value>
-        </choice>
-        <choice displayName="Color Filter Array">
-            <value>32803</value>
-        </choice>
-        <choice displayName="Pixar LogL">
-            <value>32844</value>
-        </choice>
-        <choice displayName="Pixar LogLuv">
-            <value>32845</value>
-        </choice>
-        <choice displayName="Linear Raw">
-            <value>34892</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>imageDescription</id>
-        <localName>0x010e</localName>
-        <displayName>Image Description</displayName>
-        <queryName>IMAGE_DESCRIPTION</queryName>
-        <description>Description</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>make</id>
-        <localName>0x010f</localName>
-        <displayName>Make</displayName>
-        <queryName>MAKE</queryName>
-        <description>Camera Make</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>model</id>
-        <localName>0x0110</localName>
-        <displayName>Model</displayName>
-        <queryName>MODEL</queryName>
-        <description>Camera Model</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>orientation</id>
-        <localName>0x0112</localName>
-        <displayName>Orientation</displayName>
-        <queryName>ORIENTATION</queryName>
-        <description>Orientation</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Horizontal (normal)">
-            <value>1</value>
-        </choice>
-        <choice displayName="Mirror horizontal">
-            <value>2</value>
-        </choice>
-        <choice displayName="Rotate 180">
-            <value>3</value>
-        </choice>
-        <choice displayName="Mirror vertical">
-            <value>4</value>
-        </choice>
-        <choice displayName="Mirror horizontal and rotate 270 CW">
-            <value>5</value>
-        </choice>
-        <choice displayName="Rotate 90 CW">
-            <value>6</value>
-        </choice>
-        <choice displayName="Mirror horizontal and rotate 90 CW">
-            <value>7</value>
-        </choice>
-        <choice displayName="Rotate 270 CW">
-            <value>8</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>xResolution</id>
-        <localName>0x011a</localName>
-        <displayName>X Resolution</displayName>
-        <queryName>X_RESOLUTION</queryName>
-        <description>xresolution</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>yResolution</id>
-        <localName>0x011b</localName>
-        <displayName>Y Resolution</displayName>
-        <queryName>Y_RESOLUTION</queryName>
-        <description>yresolution</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>resolutionUnit</id>
-        <localName>0x0128</localName>
-        <displayName>Resolution Unit</displayName>
-        <queryName>RESOLUTION_UNIT</queryName>
-        <description>Resolution Unit</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="None">
-            <value>1</value>
-        </choice>
-        <choice displayName="inches">
-            <value>2</value>
-        </choice>
-        <choice displayName="cm">
-            <value>3</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>software</id>
-        <localName>0x0131</localName>
-        <displayName>Software</displayName>
-        <queryName>SOFTWARE</queryName>
-        <description>Software</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>modifyDate</id>
-        <localName>0x0132</localName>
-        <displayName>Modify Date</displayName>
-        <queryName>MODIFY_DATE</queryName>
-        <description>Modify Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>yCbCrPositioning</id>
-        <localName>0x0213</localName>
-        <displayName>YCbCrPositioning</displayName>
-        <queryName>YCBCRPOSITIONING</queryName>
-        <description>YCbCr Positioning</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Centered">
-            <value>1</value>
-        </choice>
-        <choice displayName="Co-sited">
-            <value>2</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>copyright</id>
-        <localName>0x8298</localName>
-        <displayName>Copyright</displayName>
-        <queryName>COPYRIGHT</queryName>
-        <description>Copyright Notice</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>exposureTime</id>
-        <localName>0x829a</localName>
-        <displayName>Exposure Time</displayName>
-        <queryName>EXPOSURE_TIME</queryName>
-        <description>Exposure Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>fNumber</id>
-        <localName>0x829d</localName>
-        <displayName>F Number</displayName>
-        <queryName>F_NUMBER</queryName>
-        <description>F-Stop Number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>exposureProgram</id>
-        <localName>0x8822</localName>
-        <displayName>Exposure Program</displayName>
-        <queryName>EXPOSURE_PROGRAM</queryName>
-        <description>Exposure Program</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Not Defined">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-        <choice displayName="Program AE">
-            <value>2</value>
-        </choice>
-        <choice displayName="Aperture-priority AE">
-            <value>3</value>
-        </choice>
-        <choice displayName="Shutter speed priority AE">
-            <value>4</value>
-        </choice>
-        <choice displayName="Creative (Slow speed)">
-            <value>5</value>
-        </choice>
-        <choice displayName="Action (High speed)">
-            <value>6</value>
-        </choice>
-        <choice displayName="Portrait">
-            <value>7</value>
-        </choice>
-        <choice displayName="Landscape">
-            <value>8</value>
-        </choice>
-        <choice displayName="Bulb">
-            <value>9</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>isoSpeed</id>
-        <localName>0x8827</localName>
-        <displayName>ISO Speed</displayName>
-        <queryName>ISO_SPEED</queryName>
-        <description>ISO Speed Setting</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsLatitude</id>
-        <localName>0x8825-0x0002</localName>
-        <displayName>GPS Latitude</displayName>
-        <queryName>GPS_LATITUDE</queryName>
-        <description>GPS Latitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsLatitudeRef</id>
-        <localName>0x8825-0x0001</localName>
-        <displayName>GPS Latitude Ref</displayName>
-        <queryName>GPS_LATITUDE_REF</queryName>
-        <description>GPS Latitude Reference (N/S)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="North">
-            <value>N</value>
-        </choice>
-        <choice displayName="South">
-            <value>S</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsLongitude</id>
-        <localName>0x8825-0x0004</localName>
-        <displayName>GPS Longitude</displayName>
-        <queryName>GPS_LONGITUDE</queryName>
-        <description>GPS Longitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsLongitudeRef</id>
-        <localName>0x8825-0x0003</localName>
-        <displayName>GPS Longitude Ref</displayName>
-        <queryName>GPS_LONGITUDE_REF</queryName>
-        <description>GPS Longitude Reference (W/E)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="East">
-            <value>E</value>
-        </choice>
-        <choice displayName="West">
-            <value>W</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsAltitude</id>
-        <localName>0x8825-0x0006</localName>
-        <displayName>GPS Altitude</displayName>
-        <queryName>GPS_ALTITUDE</queryName>
-        <description>GPS Altitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsAltitudeRef</id>
-        <localName>0x8825-0x0005</localName>
-        <displayName>GPS Altitude Ref</displayName>
-        <queryName>GPS_ALTITUDE_REF</queryName>
-        <description>GPS Altitude Reference</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Above Sea Level">
-            <value>0</value>
-        </choice>
-        <choice displayName="Below Sea Level">
-            <value>1</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>selfTimerMode</id>
-        <localName>0x882b</localName>
-        <displayName>Self Timer Mode</displayName>
-        <queryName>SELF_TIMER_MODE</queryName>
-        <description>Self Timer Mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>timeZoneOffset</id>
-        <localName>0x882a</localName>
-        <displayName>Time Zone Offset</displayName>
-        <queryName>TIME_ZONE_OFFSET</queryName>
-        <description>Time Zone Offset (GMT offset in hours)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDateTimeDefinition>
-        <id>dateTimeOriginal</id>
-        <localName>0x9003</localName>
-        <displayName>Date Time Original</displayName>
-        <queryName>DATE_TIME_ORIGINAL</queryName>
-        <description>date/time when original image was taken</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>createDate</id>
-        <localName>0x9004</localName>
-        <displayName>Create Date</displayName>
-        <queryName>CREATE_DATE</queryName>
-        <description>date/time digitized</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDecimalDefinition>
-        <id>shutterSpeedValue</id>
-        <localName>0x9201</localName>
-        <displayName>Shutter Speed Value</displayName>
-        <queryName>SHUTTER_SPEED_VALUE</queryName>
-        <description>shutter speed value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>apertureValue</id>
-        <localName>0x9202</localName>
-        <displayName>Aperture Value</displayName>
-        <queryName>APERTURE_VALUE</queryName>
-        <description>Aperture Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>brightnessValue</id>
-        <localName>0x9203</localName>
-        <displayName>Brightness Value</displayName>
-        <queryName>BRIGHTNESS_VALUE</queryName>
-        <description>Brightness Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>exposureCompensation</id>
-        <localName>0x9204</localName>
-        <displayName>Exposure Compensation</displayName>
-        <queryName>EXPOSURE_COMPENSATION</queryName>
-        <description>Exposure Compensation</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>maxApertureValue</id>
-        <localName>0x9205</localName>
-        <displayName>Max Aperture Value</displayName>
-        <queryName>MAX_APERTURE_VALUE</queryName>
-        <description>Max Aperture Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>meteringMode</id>
-        <localName>0x9207</localName>
-        <displayName>Metering Mode</displayName>
-        <queryName>METERING_MODE</queryName>
-        <description>metering mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Unknown">
-            <value>0</value>
-        </choice>
-        <choice displayName="Average">
-            <value>1</value>
-        </choice>
-        <choice displayName="Center-weighted average">
-            <value>2</value>
-        </choice>
-        <choice displayName="Spot">
-            <value>3</value>
-        </choice>
-        <choice displayName="Multi-spot">
-            <value>4</value>
-        </choice>
-        <choice displayName="Multi-segment">
-            <value>5</value>
-        </choice>
-        <choice displayName="Partial">
-            <value>6</value>
-        </choice>
-        <choice displayName="Other">
-            <value>255</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>subjectDistance</id>
-        <localName>0x9206</localName>
-        <displayName>Subject Distance</displayName>
-        <queryName>SUBJECT_DISTANCE</queryName>
-        <description>subject distance</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>lightSource</id>
-        <localName>0x9208</localName>
-        <displayName>Light Source</displayName>
-        <queryName>LIGHT_SOURCE</queryName>
-        <description>light source value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>flash</id>
-        <localName>0x9209</localName>
-        <displayName>Flash</displayName>
-        <queryName>FLASH</queryName>
-        <description>Flash Setting</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>focalLength</id>
-        <localName>0x920a</localName>
-        <displayName>Focal Length</displayName>
-        <queryName>FOCAL_LENGTH</queryName>
-        <description>focal length</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>userComment</id>
-        <localName>0x9286</localName>
-        <displayName>User Comment</displayName>
-        <queryName>USER_COMMENT</queryName>
-        <description>user comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>colorSpace</id>
-        <localName>0xa001</localName>
-        <displayName>Color Space</displayName>
-        <queryName>COLOR_SPACE</queryName>
-        <description>color space</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="sRGB">
-            <value>1</value>
-        </choice>
-        <choice displayName="Adobe RGB">
-            <value>2</value>
-        </choice>
-        <choice displayName="Wide Gamut RGB">
-            <value>65533</value>
-        </choice>
-        <choice displayName="ICC Profile">
-            <value>65534</value>
-        </choice>
-        <choice displayName="Uncalibrated">
-            <value>65535</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pixelXDimension</id>
-        <localName>0xa002</localName>
-        <displayName>PixelXDimension</displayName>
-        <queryName>PIXELXDIMENSION</queryName>
-        <description>dimension in pixel x</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pixelYDimension</id>
-        <localName>0xa003</localName>
-        <displayName>PixelYDimension</displayName>
-        <queryName>PIXELYDIMENSION</queryName>
-        <description>dimension in pixel y</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>exposureMode</id>
-        <localName>0xa402</localName>
-        <displayName>Exposure Mode</displayName>
-        <queryName>EXPOSURE_MODE</queryName>
-        <description>Exposure Mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Auto">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-        <choice displayName="Auto bracket">
-            <value>2</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>whiteBalance</id>
-        <localName>0xa403</localName>
-        <displayName>White Balance</displayName>
-        <queryName>WHITE_BALANCE</queryName>
-        <description>white balance</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Auto">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>sceneCaptureType</id>
-        <localName>0xa406</localName>
-        <displayName>Scene Capture Type</displayName>
-        <queryName>SCENE_CAPTURE_TYPE</queryName>
-        <description>Scene Capture Type</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Standard">
-            <value>0</value>
-        </choice>
-        <choice displayName="Landscape">
-            <value>1</value>
-        </choice>
-        <choice displayName="Portrait">
-            <value>2</value>
-        </choice>
-        <choice displayName="Night">
-            <value>3</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIdDefinition>
-        <id>imageUniqueId</id>
-        <localName>0xa420</localName>
-        <displayName>Image Unique Id</displayName>
-        <queryName>IMAGE_UNIQUE_ID</queryName>
-        <description>Image Unique Id</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>id</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIdDefinition>
-    <propertyStringDefinition>
-        <id>ownerName</id>
-        <localName>0xa430</localName>
-        <displayName>Owner Name</displayName>
-        <queryName>OWNER_NAME</queryName>
-        <description>Owner Name</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>serialNumber</id>
-        <localName>0xa431</localName>
-        <displayName>Serial Number</displayName>
-        <queryName>SERIAL_NUMBER</queryName>
-        <description>serial number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>rating</id>
-        <localName>0x4746</localName>
-        <displayName>Rating</displayName>
-        <queryName>RATING</queryName>
-        <description>rating value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>ratingPercent</id>
-        <localName>0x4749</localName>
-        <displayName>Rating Percent</displayName>
-        <queryName>RATING_PERCENT</queryName>
-        <description>rating percent</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>dataPrecision</id>
-        <localName>0x0000</localName>
-        <displayName>Data Precision</displayName>
-        <queryName>DATA_PRECISION</queryName>
-        <description>JPEG Data Precision</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>officeDocument</id>
-    <localName>officeDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Office Document</displayName>
-    <queryName>OFFICE_DOCUMENT</queryName>
-    <description>Document of type Office</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>applicationName</id>
-        <localName>applicationName</localName>
-        <displayName>Application Name</displayName>
-        <queryName>APPLICATION_NAME</queryName>
-        <description>Application Name</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>applicationVersion</id>
-        <localName>applicationVersion</localName>
-        <displayName>Application Version</displayName>
-        <queryName>APPLICATION_VERSION</queryName>
-        <description>Application Version</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>author</id>
-        <localName>author</localName>
-        <displayName>Author</displayName>
-        <queryName>AUTHOR</queryName>
-        <description>Author</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>category</id>
-        <localName>category</localName>
-        <displayName>Category</displayName>
-        <queryName>CATEGORY</queryName>
-        <description>Category</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>contentStatus</id>
-        <localName>contentStatus</localName>
-        <displayName>Content Status</displayName>
-        <queryName>CONTENT_STATUS</queryName>
-        <description>Content Status</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comments</id>
-        <localName>comments</localName>
-        <displayName>Comments</displayName>
-        <queryName>COMMENTS</queryName>
-        <description>Comments</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>company</id>
-        <localName>company</localName>
-        <displayName>Company</displayName>
-        <queryName>COMPANY</queryName>
-        <description>Company</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>keywords</id>
-        <localName>keywords</localName>
-        <displayName>Keywords</displayName>
-        <queryName>KEYWORDS</queryName>
-        <description>Keywords</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>lastAuthor</id>
-        <localName>lastAuthor</localName>
-        <displayName>Last Author</displayName>
-        <queryName>LAST_AUTHOR</queryName>
-        <description>Last Author</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>manager</id>
-        <localName>manager</localName>
-        <displayName>Manager</displayName>
-        <queryName>MANAGER</queryName>
-        <description>Manager</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>notes</id>
-        <localName>notes</localName>
-        <displayName>Notes</displayName>
-        <queryName>NOTES</queryName>
-        <description>Notes</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>presentationFormat</id>
-        <localName>presentationFormat</localName>
-        <displayName>Presentation Format</displayName>
-        <queryName>PRESENTATION_FORMAT</queryName>
-        <description>Presentation Format</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>revisionNumber</id>
-        <localName>revisionNumber</localName>
-        <displayName>Revision Number</displayName>
-        <queryName>REVISION_NUMBER</queryName>
-        <description>Revision Number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>template</id>
-        <localName>template</localName>
-        <displayName>Template</displayName>
-        <queryName>TEMPLATE</queryName>
-        <description>Template</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>version</id>
-        <localName>version</localName>
-        <displayName>Version</displayName>
-        <queryName>VERSION</queryName>
-        <description>Version</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>characterCount</id>
-        <localName>characterCount</localName>
-        <displayName>Character Count</displayName>
-        <queryName>CHARACTER_COUNT</queryName>
-        <description>Character Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>characterCountWithSpaces</id>
-        <localName>characterCountWithSpaces</localName>
-        <displayName>Character Count With Spaces</displayName>
-        <queryName>CHARACTER_COUNT_WITH_SPACES</queryName>
-        <description>Character Count With Spaces</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>wordCount</id>
-        <localName>wordCount</localName>
-        <displayName>Word Count</displayName>
-        <queryName>WORD_COUNT</queryName>
-        <description>Word Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>lineCount</id>
-        <localName>lineCount</localName>
-        <displayName>Line Count</displayName>
-        <queryName>LINE_COUNT</queryName>
-        <description>Line Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pageCount</id>
-        <localName>pageCount</localName>
-        <displayName>Page Count</displayName>
-        <queryName>PAGE_COUNT</queryName>
-        <description>Page Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>slideCount</id>
-        <localName>slideCount</localName>
-        <displayName>Slide Count</displayName>
-        <queryName>SLIDE_COUNT</queryName>
-        <description>Slide Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>paragraphCount</id>
-        <localName>paragraphCount</localName>
-        <displayName>Paragraph Count</displayName>
-        <queryName>PARAGRAPH_COUNT</queryName>
-        <description>Paragraph Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>totalTime</id>
-        <localName>totalTime</localName>
-        <displayName>Total Time</displayName>
-        <queryName>TOTAL_TIME</queryName>
-        <description>Total Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>editTime</id>
-        <localName>editTime</localName>
-        <displayName>Edit Time</displayName>
-        <queryName>EDIT_TIME</queryName>
-        <description>Edit Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>creationDate</id>
-        <localName>creationDate</localName>
-        <displayName>Creation Date</displayName>
-        <queryName>CREATION_DATE</queryName>
-        <description>Creation Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>lastSaveDate</id>
-        <localName>lastSaveDate</localName>
-        <displayName>Last Save Date</displayName>
-        <queryName>LAST_SAVE_DATE</queryName>
-        <description>Last Save Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyStringDefinition>
-        <id>lastPrinted</id>
-        <localName>lastPrinted</localName>
-        <displayName>Last Printed</displayName>
-        <queryName>LAST_PRINTED</queryName>
-        <description>Last Printed</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>pdfDocument</id>
-    <localName>pdfDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>officeDocument</parentId>
-    <displayName>PDF Document</displayName>
-    <queryName>PDF_DOCUMENT</queryName>
-    <description>Document of type PDF</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>creator</id>
-        <localName>creator</localName>
-        <displayName>Creator</displayName>
-        <queryName>CREATOR</queryName>
-        <description>creator of document</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>subject</id>
-        <localName>subject</localName>
-        <displayName>Subject</displayName>
-        <queryName>SUBJECT</queryName>
-        <description>subjet of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>trapped</id>
-        <localName>trapped</localName>
-        <displayName>Trapped</displayName>
-        <queryName>TRAPPED</queryName>
-        <description>trapped</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>videoFile</id>
-    <localName>videoFile</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Video File</displayName>
-    <queryName>VIDEO_FILE</queryName>
-    <description>Video Movies</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <TypeMutability>
-        <create>true</create>
-        <update>true</update>
-        <delete>true</delete>
-    </TypeMutability>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>album</id>
-        <localName>album</localName>
-        <displayName>Album</displayName>
-        <queryName>ALBUM</queryName>
-        <description>title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comment</id>
-        <localName>comment</localName>
-        <displayName>Comment</displayName>
-        <queryName>COMMENT</queryName>
-        <description>Comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>genre</id>
-        <localName>genre</localName>
-        <displayName>Genre</displayName>
-        <queryName>GENRE</queryName>
-        <description>Genre</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>length</id>
-        <localName>length</localName>
-        <displayName>Length</displayName>
-        <queryName>LENGTH</queryName>
-        <description>Length in seconds</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>track</id>
-        <localName>track</localName>
-        <displayName>Track</displayName>
-        <queryName>TRACK</queryName>
-        <description>Track in album</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>year</id>
-        <localName>year</localName>
-        <displayName>Year</displayName>
-        <queryName>YEAR</queryName>
-        <description>release date of albun</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>discNo</id>
-        <localName>discNo</localName>
-        <displayName>Disc Number</displayName>
-        <queryName>DISC_NUMBER</queryName>
-        <description>number of disc / total discs</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>imageWidth</id>
-        <localName>0x0100</localName>
-        <displayName>Image Width</displayName>
-        <queryName>IMAGE_WIDTH</queryName>
-        <description>Image Width</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>imageHeight</id>
-        <localName>0x0101</localName>
-        <displayName>Image Height</displayName>
-        <queryName>IMAGE_HEIGHT</queryName>
-        <description>Image Height</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-</cmisra:type>
-
-</chem:typeDefinitions>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/video-x-generic.png b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/video-x-generic.png
deleted file mode 100644
index 6222aff..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/resources/video-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/LICENSE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/LICENSE
deleted file mode 100644
index 7890389..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/LICENSE
+++ /dev/null
@@ -1,234 +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.
-
-=======================================================================
-
-Please see also THRID-PARTY-LICENSES.
-
-=======================================================================
-- SLF4J LOG4J-12 Binding (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/NOTICE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/NOTICE
deleted file mode 100644
index 5160367..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS InMemory Repository
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index 02dac0c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1,63 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class=org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl
-
-repository.id=dummy-rep
-repository.name=Dummy Repository
-
-# In Memory Settings
-InMemoryServer.RepositoryId=A1
-# InMemoryServer.RepositoryInfoCreatorClass=org.apache.chemistry.opencmis.client.provider.inmemory.UnitTestRepositoryInfo
-InMemoryServer.User=dummyuser
-InMemoryServer.Password=dummysecret
-InMemoryServer.TypesCreatorClass=org.apache.chemistry.opencmis.inmemory.types.DefaultTypeSystemCreator
-InMemoryServer.TypeDefinitionsFile=types.xml
-InMemoryServer.Class=org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerImpl
-
-# InMemoryServer.MemoryThreshold=10485760
-# InMemoryServer.TempDir=/path/to/your/tmp
-InMemoryServer.MaxSize=20971520
-InMemoryServer.EncryptTempFiles=true
-
-# settings for init repository with data
-  # enable or disable
-# RepositoryFiller.Enable=false
-RepositoryFiller.Enable=true
-  # Type id of documents that are created
-RepositoryFiller.DocumentTypeId=ComplexType
-  # Type id of folders that are created
-RepositoryFiller.FolderTypeId=cmis:folder
-  # Number of documents created per folder
-RepositoryFiller.DocsPerFolder=3
-  # Number of folders created per folder
-RepositoryFiller.FolderPerFolder=2
-  # number of folder levels created (depth of hierarchy)
-RepositoryFiller.Depth=3
-  # Size of content for documents (0=do not create content), default=0
-RepositoryFiller.ContentSizeInKB=32
-  # properties to set for a document
-RepositoryFiller.DocumentProperty.0=StringProp
-#RepositoryFiller.DocumentProperty.1=StringPropMV
-  # properties to set for a folder
-#RepositoryFiller.FolderProperty.0=StringFolderProp
-# InMemoryServer.MaxContentSizeKB=4096
-# InMemoryServer.CleanIntervalMinutes=240
-RepositoryFiller.ContentKind=lorem/text
-# RepositoryFiller.ContentKind=lorem/html
-# RepositoryFiller.ContentKind=static/text
-# RepositoryFiller.ContentKind=fractal/jpeg
-# slow!! 
- 
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/index.jsp b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/index.jsp
deleted file mode 100644
index ab0a186..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,291 +0,0 @@
-<!-- 

-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT 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 language="java" contentType="text/html; charset=ISO-8859-1"

-    pageEncoding="ISO-8859-1"%>

-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

-

-<%@ page import="java.util.Date, java.text.SimpleDateFormat, java.util.Locale, java.util.Calendar" %>

-<%@ page import="org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager" %>

-<%@ page import="org.apache.chemistry.opencmis.commons.server.CallContext" %>

-<%@ page import="org.apache.chemistry.opencmis.inmemory.DummyCallContext" %>

-<%@ page import="org.apache.chemistry.opencmis.commons.server.CmisServiceFactory" %>

-<%@ page import="org.apache.chemistry.opencmis.commons.server.CmisService" %>

-<%@ page import="org.apache.chemistry.opencmis.inmemory.server.InMemoryService" %>

-<%@ page import="org.apache.chemistry.opencmis.inmemory.ConfigConstants" %>

-<%@ page import="org.apache.chemistry.opencmis.inmemory.ConfigurationSettings" %>

-

-<%!

-    private static final String OPENCMIS_VERSION;

-

-    static {

-        Package p = Package.getPackage("org.apache.chemistry.opencmis.inmemory");

-        if (p == null) {

-            OPENCMIS_VERSION = "(unofficial dev or snapshot build)";

-        } else {

-            String ver = p.getImplementationVersion();

-            OPENCMIS_VERSION = (null == ver ? "(unofficial dev or snapshot build)" : ver);

-        }

-    }

-%>

-<html>

-<head>

-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

-<link rel="stylesheet" type="text/css" href="css/opencmis.css"/>

-<title>Apache Chemistry OpenCMIS-InMemory Server</title>

-

-<%!

-	private StoreManager getStoreManager(HttpServletRequest request) {

-	    CallContext context = new DummyCallContext();

-	    CmisServiceFactory servicesFactory = (CmisServiceFactory) request.getSession().getServletContext().getAttribute(

-	        "org.apache.chemistry.opencmis.servicesfactory");

-	    // AbstractServiceFactory factory = (AbstractServiceFactory)

-	    CmisService service = servicesFactory.getService(context);

-	    if (!(service instanceof InMemoryService))

-	      throw new RuntimeException("Illegal configuration, service must be of type InMemoryService.");

-	    return  ((InMemoryService) service).getStoreManager();

-	}

-%>

-

-</head>

-<body>

-<img alt="Apache Chemistry Logo" title="Apache Chemistry Logo" src="images/chemistry_logo_small.png"/>

-<img align="right" alt="Powered by Apache" src="images/pb-chemistry-150x150.jpg"/>

-<h1>OpenCMIS InMemory Server</h1>

-<p> Your server is up and running.</p>

-<p>

-	The OpenCMIS InMemory Server is a CMIS server for development and test purposes.

-	All objects are hold in memory and will be lost after shutdown.

-</p>

-<p>

-	You have to use a CMIS client to use this application. An example for

-	such a client is the <a href="http://chemistry.apache.org/java/developing/tools/dev-tools-workbench.html"> CMIS Workbench.</a>

-</p>

-<table>

-<tr><th>Server-Name</th><td>Apache-Chemistry-OpenCMIS-InMemory</td></tr>

-<tr>

-  <th>Version</th>

-  <td>

-<% 

-       out.println(OPENCMIS_VERSION);

-%>

-  </td>

-</tr>

-</table>

-

-<h2>Access Information</h2>

-<h3>CMIS 1.1</h3>

-<p>

-WS (SOAP) Binding: <a href="services11/cmis?wsdl">

-<% 

-String reqStr = request.getRequestURL().toString();

-out.println(reqStr.substring(0, reqStr.lastIndexOf('/')+1) + "services11/cmis?wsdl");

-%>

-</a>

-</p>

-<p>

-AtomPub Binding: <a href="atom11"> 

-<% 

-reqStr = request.getRequestURL().toString();

-out.println(reqStr.substring(0, reqStr.lastIndexOf('/')+1) + "atom11");

-%>

-</a>

-</p>

-<p>

-Browser Binding: <a href="browser"> 

-<% 

-out.println(reqStr.substring(0, reqStr.lastIndexOf('/')+1) + "browser");

-%>

-</a>

-</p>

-<h3>CMIS 1.0</h3>

-<p>

-WS (SOAP) Binding: <a href="services/cmis?wsdl">

-<% 

-reqStr = request.getRequestURL().toString();

-out.println(reqStr.substring(0, reqStr.lastIndexOf('/')+1) + "services/cmis?wsdl");

-%>

-</a>

-</p>

-<p>

-AtomPub Binding: <a href="atom"> 

-<% 

-reqStr = request.getRequestURL().toString();

-out.println(reqStr.substring(0, reqStr.lastIndexOf('/')+1) + "atom");

-%>

-</a>

-</p>

-<p>

-<h3>Authentication</h3>

-<p>

-Basic Authentication (user name and password are arbitrary)<br>

-Note: Authentication is optional and only informational. User names are stored 

-in properties (createdBy, etc.), password is not required. The server does 

-not perform any kind of secure authentication.

-</p>

-

-<h2>Web Interface</h2>

-<p>

-The <a href="web">OpenCMIS web interface</a> is simple web interface to access

-the repository. Please note that this is not the usual way to access the repository.

-Usually you will use a client application supporting the CMIS specification like

-the CMIS workbench.

-</p>

-

-<h2>NOTICE</h2>

-<p>

-This is an unsupported and experimental service. Any use is at your own risk.

-</p>

-<p>

-This service is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 

-OF ANY KIND, either express or implied. See the license below for more information.

-</p>

-

-<h2>Monitor</h2>

-<p>

-  Current state of the server:

-</p>

-

-<table>

-<tr> <th> Repository Id </th> <th> No. of objects</th></tr>

-<% 

-   StoreManager sm = getStoreManager(request);

-   for (String repId: sm.getAllRepositoryIds() ) {

-       out.println("<td>" + repId + "</td>");

-       out.println("<td>" + sm.getObjectStore(repId).getObjectCount() + "</td>");

-   }       

-%>

-</table>

-<p>&nbsp;</p>

-<table>

-<tr> <th> Java VM </th> <th>Size</th></tr>

-<% 

-   Runtime runtime = Runtime.getRuntime ();   

-   long mb = 1048576;

-   long value;

-   value = runtime.totalMemory ();

-   value = (value + mb/2) / mb; 

-   out.println("<tr><td> Used Memory </td>");

-   out.println("<td>" +  value + "MB</td></tr>");

-   value = runtime.maxMemory ();

-   value = (value + mb/2) / mb; 

-   out.println("<tr><td> Max Memory </td>");

-   out.println("<td>" + value + "MB</td></tr>");

-   value = runtime.freeMemory ();

-   value = (value + mb/2) / mb; 

-   out.println("<tr><td> Free Memory </td>");

-   out.println("<td>" + value + "MB</td>");

-   out.println("<tr><td> Processors </td>");

-   out.println("<td>" + runtime.availableProcessors() + "</td></tr>");

-%>

-</table>

-

-<h2>Configuration</h2>

-<p>

-  Important configuration settings

-</p>

-

-<table>

-<tr> <th> Setting </th> <th> Value</th></tr>

-<tr>

-	<td>Max. allowed content size </td>

-	<% 

-	  String maxSize = ConfigurationSettings.getConfigurationValueAsString(ConfigConstants.MAX_CONTENT_SIZE_KB);

-	  if (null == maxSize)

-	      maxSize = "unlimited";

-	  else

-		maxSize += "KB";

-	  out.println("<td>" + maxSize + "</td>");

-	%>

-</tr>

-<tr>

-	<td>Auto clean every</td>

-	<% 

-	  String cleanInterValStr = ConfigurationSettings.getConfigurationValueAsString(ConfigConstants.CLEAN_REPOSITORY_INTERVAL);

-	  if (null == cleanInterValStr)

-	      out.println("<td> - </td>");

-	  else

-	  	out.println("<td>" + cleanInterValStr + " minutes </td>");

-	%>

-</tr>

-<tr>

-	<td>Time of deployment</td>

-	<% 

-	  out.println("<td>" + ConfigurationSettings.getConfigurationValueAsString(ConfigConstants.DEPLOYMENT_TIME) + "</td>");

-	%>

-</tr>

-<tr>

-	<td>Next cleanup</td>

-	<% 

-	  String dateStr;

-	  Long interval = ConfigurationSettings.getConfigurationValueAsLong(ConfigConstants.CLEAN_REPOSITORY_INTERVAL);

-	  long diff = 0;

-	  

-	  if (null == interval)

-	      dateStr = "Never";

-	  else {

-		  try {

-		      Date now = new Date();

-		      Calendar calNow = Calendar.getInstance();

-		      Calendar calNextClean = Calendar.getInstance();

-		      calNow.setTime(now);

-			  SimpleDateFormat formatter ; 

-		      Date deploy;

-		      formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss a z yyyy", Locale.US);

-		      deploy = formatter.parse(ConfigurationSettings.getConfigurationValueAsString(ConfigConstants.DEPLOYMENT_TIME));

-		      calNextClean.setTime(deploy);

-		      while (calNextClean.before(calNow))

-		          calNextClean.add(Calendar.MINUTE, interval.intValue());

-		      dateStr = formatter.format(calNextClean.getTime());

-		      diff = calNextClean.getTimeInMillis() - calNow.getTimeInMillis();

-		      

-		  } catch (Exception e) {

-		      dateStr = e.getMessage();

-		  }

-	  }

-	  if (diff > 0)

-	      dateStr += " (in " + diff / 60000 + "min, " + ((diff / 1000) % 60) + "s)";

-	  

-	  // Date deploy = new Date(Date.parse();

-	  out.println("<td>" + dateStr + "</td>");

-	%>

-</tr>

-</table>

-

-<h2>More Information</h2>

-<p>

-<a href="http://chemistry.apache.org"> Apache Chemistry web site</a>

-</p>

-<p>

-<a href="http://www.oasis-open.org/committees/cmis"> CMIS page at OASIS</a>

-</p>

-

-

-<hr/>

-<h2>License Information</h2>

-This software is licensed under the 

-<a href="http://www.apache.org/licenses/LICENSE-2.0.html"> Apache 2.0 License </a>

-<br/>

-

-<a href="http://www.apache.org">

-  <img alt="ASF Logo" title="ASF Logo" src="images/asf_logo.png" align="right"/>

-</a>

-</body>

-</html>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java
deleted file mode 100644
index 9aa4c2f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.PolicyService;
-import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AbstractServiceTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractServiceTest.class);
-
-    protected static final String REPOSITORY_ID = "UnitTestRepository";
-    protected BindingsObjectFactory fFactory = new BindingsObjectFactoryImpl();
-    protected String fRootFolderId;
-    protected String fRepositoryId;
-    protected ObjectService fObjSvc;
-    protected NavigationService fNavSvc;
-    protected RepositoryService fRepSvc;
-    protected VersioningService fVerSvc;
-    protected MultiFilingService fMultiSvc;
-    protected DiscoveryService fDiscSvc;
-    protected AclService fAclSvc;
-    protected RelationshipService fRelSvc;
-    protected PolicyService fPolSvc;
-
-    protected CallContext fTestCallContext;
-    private String fTypeCreatorClassName;
-    private CmisBinding binding;
-
-    public AbstractServiceTest() {
-        // The in-memory server unit tests can either be run directly against
-        // the
-        // service implementation or against a clocal binding interface. The
-        // local
-        // binding interfaces offers some benefits like type system caching etc.
-        // The default is using the direct implementation. Subclasses may
-        // override this behavior.
-
-        // Init with default types, can be overridden by subclasses:
-        fTypeCreatorClassName = UnitTestTypeSystemCreator.class.getName();
-    }
-
-    // Subclasses may want to use their own types
-    protected void setTypeCreatorClass(String typeCreatorClassName) {
-        fTypeCreatorClassName = typeCreatorClassName;
-    }
-
-    protected String getTypeCreatorClass() {
-        return fTypeCreatorClassName;
-    }
-
-    protected void setUp() {
-        LOG.debug("Initializing InMemory Test with type creator class: " + fTypeCreatorClassName);
-        Map<String, String> parameters = new HashMap<String, String>();
-
-        // attach repository info to the session:
-        parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, fTypeCreatorClassName);
-        parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
-
-        // give subclasses a chance to provide additional parameters for special
-        // tests
-        addParameters(parameters);
-
-        fTestCallContext = new DummyCallContext();
-        // Attach a standard CallContext to a thread before the services are
-        // initialized.
-        // RuntimeContext.attachCfg(fTestCallContext);
-
-        initializeUsingLocalBinding(parameters);
-
-        assertNotNull(fRepSvc);
-        assertNotNull(fObjSvc);
-        assertNotNull(fNavSvc);
-
-        RepositoryInfo rep = fRepSvc.getRepositoryInfo(REPOSITORY_ID, null);
-        fRootFolderId = rep.getRootFolderId();
-        fRepositoryId = rep.getId();
-
-        assertNotNull(fRepositoryId);
-        assertNotNull(fRootFolderId);
-    }
-
-    // Override this method in subclasses if you want to provide additional
-    // configuration
-    // parameters. Default implementation is empty
-    protected void addParameters(Map<String, String> parameters) {
-    }
-
-    protected void tearDown() {
-        LOG.debug("Close local binding.");
-        binding.close();
-        LOG.debug("Local binding closed.");
-    }
-
-    public void testDummy() {
-        // dummy test to make tools happy that complain if there are no tests
-        // available in a test class
-    }
-
-    protected String createFolder(String folderName, String parentFolderId, String typeId) {
-        String id = null;
-        try {
-            id = createFolderNoCatch(folderName, parentFolderId, typeId);
-            if (null == id) {
-                fail("createFolder failed.");
-            }
-        } catch (Exception e) {
-            fail("createFolder() failed with exception: " + e);
-        }
-        return id;
-    }
-
-    protected String createFolderNoCatch(String folderName, String parentFolderId, String typeId) {
-        return createFolderNoCatch(folderName, parentFolderId, typeId, null, null);
-    }
-
-    protected String createFolderNoCatch(String folderName, String parentFolderId, String typeId, Acl addACEs,
-            Acl removeACEs) {
-        Properties props = createFolderProperties(folderName, typeId);
-        String id = fObjSvc.createFolder(fRepositoryId, props, parentFolderId, null, addACEs, removeACEs, null);
-        return id;
-    }
-
-    protected String createDocumentNoCatch(String name, String folderId, String typeId,
-            VersioningState versioningState, boolean withContent) {
-        return createDocumentNoCatch(name, folderId, typeId, versioningState, withContent, null, null);
-    }
-
-    protected String createDocumentNoCatch(String name, String folderId, String typeId,
-            VersioningState versioningState, boolean withContent, Acl addACEs, Acl removeACEs) {
-        ContentStream contentStream = null;
-        List<String> policies = null;
-        ExtensionsData extension = null;
-
-        Properties props = createDocumentProperties(name, typeId);
-
-        if (withContent) {
-            contentStream = createContent();
-        }
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
-                addACEs, removeACEs, extension);
-        return id;
-    }
-
-    protected String createDocument(String name, String folderId, String typeId, VersioningState versioningState,
-            boolean withContent) {
-        String id = null;
-        try {
-            id = createDocumentNoCatch(name, folderId, typeId, versioningState, withContent);
-            if (null == id) {
-                fail("createDocument failed.");
-            }
-        } catch (Exception e) {
-            fail("createDocument() failed with exception: " + e);
-        }
-        return id;
-    }
-
-    protected String createDocument(String name, String folderId, String typeId, boolean withContent) {
-        VersioningState versioningState = VersioningState.NONE;
-        return createDocument(name, folderId, typeId, versioningState, withContent);
-    }
-
-    protected Properties createDocumentProperties(String name, String typeId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    protected Properties createFolderProperties(String folderName, String typeId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, folderName));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    protected ContentStream createContent() {
-        return createContent(32);
-    }
-
-    protected ContentStream createContent(int sizeInKB) {
-        return createContent(sizeInKB, 0, null);
-    }
-
-    protected ContentStream createContent(int sizeInKB, long maxSizeInKB, String mimeType) {
-        ContentStreamDataImpl content = new ContentStreamDataImpl(maxSizeInKB);
-        content.setFileName("data.txt");
-
-        if (null == mimeType) {
-            content.setMimeType("text/plain");
-        } else {
-            content.setMimeType(mimeType);
-        }
-        int len = sizeInKB * 1024;
-        byte[] b = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
-                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a }; // 32
-        int noBlocks = len / b.length;
-
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int i = 0; i < noBlocks; i++) {
-                ba.write(b);
-            }
-            content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        return content;
-    }
-
-    protected ContentStream createContent(char ch) {
-        ContentStreamDataImpl content = new ContentStreamDataImpl(0);
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = 32 * 1024;
-        byte[] b = new byte[32];
-        for (int i = 0; i < 32; i++) {
-            b[i] = (byte) Character.getNumericValue(ch);
-        }
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int i = 0; i < 1024; i++) {
-                ba.write(b);
-            }
-            content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        return content;
-    }
-
-    protected void verifyContentResult(ContentStream sd) {
-        verifyContentResult(sd, 32);
-    }
-
-    protected void verifyContentResult(ContentStream sd, int sizeInK) {
-        assertEquals("text/plain", sd.getMimeType());
-        assertEquals("data.txt", sd.getFileName());
-        assertEquals(sizeInK * 1024, sd.getBigLength().longValue());
-        byte[] ba = new byte[32];
-        InputStream is = sd.getStream();
-        int counter = 0;
-        try {
-            while (is.read(ba) == ba.length) {
-                ++counter;
-                assertEquals(0x61, ba[0]);
-                assertEquals(0x6e, ba[29]);
-                assertEquals(0x0c, ba[30]);
-                assertEquals(0x0a, ba[31]);
-            }
-        } catch (IOException e) {
-            fail("reading from content stream failed");
-        }
-        assertEquals(sizeInK * 1024 / 32, counter);
-    }
-
-    protected String getByPath(String id, String path) {
-        ObjectData res = null;
-        try {
-            res = fObjSvc.getObjectByPath(fRepositoryId, path, "*", false, IncludeRelationships.NONE, null, false,
-                    false, null);
-            assertNotNull(res);
-            assertEquals(id, res.getId());
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-        return res.getId();
-    }
-
-    @SuppressWarnings("unchecked")
-    protected String getPathOfFolder(String id) {
-        String path = null;
-        try {
-            String filter = PropertyIds.PATH;
-            Properties res = fObjSvc.getProperties(fRepositoryId, id, filter, null);
-            assertNotNull(res);
-            PropertyData<String> pd = (PropertyData<String>) res.getProperties().get(PropertyIds.PATH);
-            assertNotNull(pd);
-            path = pd.getFirstValue();
-            assertNotNull(path);
-        } catch (Exception e) {
-            fail("getProperties() failed with exception: " + e);
-        }
-        return path;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected String getPathOfDocument(String id) {
-        String path = null;
-        String filter = "*";
-        List<ObjectParentData> parentData = fNavSvc.getObjectParents(fRepositoryId, id, filter, false,
-                IncludeRelationships.NONE, null, true, null);
-        String name = parentData.get(0).getRelativePathSegment();
-        PropertyData<String> pd = (PropertyData<String>) parentData.get(0).getObject().getProperties().getProperties()
-                .get(PropertyIds.PATH);
-        assertNotNull(pd);
-        path = pd.getFirstValue() + "/" + name;
-        return path;
-    }
-
-    protected ObjectData getDocumentObjectData(String id) {
-        ObjectData res = null;
-        try {
-            String returnedId = null;
-            res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            assertNotNull(res);
-            returnedId = res.getId();
-            testReturnedProperties(returnedId, res.getProperties().getProperties());
-            assertEquals(id, returnedId);
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-        return res;
-    }
-
-    protected String getDocument(String id) {
-        ObjectData res = getDocumentObjectData(id);
-        assertNotNull(res);
-        return res.getId();
-    }
-
-    protected void testReturnedProperties(String objectId, Map<String, PropertyData<?>> props) {
-        for (PropertyData<?> pd : props.values()) {
-            LOG.debug("return property id: " + pd.getId() + ", value: " + pd.getValues());
-        }
-
-        PropertyData<?> pd = props.get(PropertyIds.OBJECT_ID);
-        assertNotNull(pd);
-        assertEquals(objectId, pd.getFirstValue());
-    }
-
-    /**
-     * Instantiates the services by using the client provider interface.
-     * 
-     * @param parameters
-     *            configuration parameters for client provider interface and
-     *            in-memory provider
-     */
-    protected void initializeUsingLocalBinding(Map<String, String> parameters) {
-
-        LOG.info("Initialize unit test using the local binding interface.");
-
-        // add parameters for local binding:
-        parameters.put(SessionParameter.BINDING_SPI_CLASS, SessionParameter.LOCAL_FACTORY);
-        parameters.put(SessionParameter.LOCAL_FACTORY, InMemoryServiceFactoryImpl.class.getName());
-        parameters.put(ConfigConstants.OVERRIDE_CALL_CONTEXT, "true");
-        InMemoryServiceFactoryImpl.setOverrideCallContext(fTestCallContext);
-
-        // get factory and create binding
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        binding = factory.createCmisLocalBinding(parameters);
-        assertNotNull(binding);
-        fFactory = binding.getObjectFactory();
-        fRepSvc = binding.getRepositoryService();
-        fObjSvc = binding.getObjectService();
-        fNavSvc = binding.getNavigationService();
-        fVerSvc = binding.getVersioningService();
-        fMultiSvc = binding.getMultiFilingService();
-        fDiscSvc = binding.getDiscoveryService();
-        fAclSvc = binding.getAclService();
-        fRelSvc = binding.getRelationshipService();
-        fPolSvc = binding.getPolicyService();
-    }
-
-    protected String getStringProperty(ObjectData objData, String propertyKey) {
-        PropertyData<? extends Object> pd = objData.getProperties().getProperties().get(PropertyIds.PATH);
-        assertNotNull(pd.getFirstValue());
-        assertTrue(pd.getFirstValue() instanceof String);
-        return (String) pd.getFirstValue();
-    }
-
-    protected void deleteDocument(String docId) {
-        fObjSvc.deleteObject(fRepositoryId, docId, true, null);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
deleted file mode 100644
index 0f213cd..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
+++ /dev/null
@@ -1,1156 +0,0 @@
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBaseObjectTypeIds;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AclPermissionsTest extends AbstractServiceTest {
-
-    private static Logger LOG = LoggerFactory.getLogger(AclPermissionsTest.class);
-    private static final BigInteger MINUS_ONE = BigInteger.valueOf(-1L);
-
-    protected ObjectCreator fCreator;
-    protected ObjectStore objectStore = null;
-    protected List<Ace> addACEs = null;
-    protected Acl addAcl = null;
-    protected List<Ace> standardACEs = null;
-    protected Acl standardAcl = null;
-    protected List<Ace> noReadACEs = null;
-    protected Acl noReadAcl = null;
-    protected List<Ace> readACEs = null;
-    protected Acl readAcl = null;
-    protected List<Ace> readWriteACEs = null;
-    protected Acl readWriteAcl = null;
-    protected List<Ace> writerReadACEs = null;
-    protected Acl writerReadAcl = null;
-    protected List<Ace> adminACEs = null;
-    protected Acl adminAcl = null;
-    protected List<Ace> testUserACEs = null;
-    protected Acl testUserAcl = null;
-    protected Acl defaultAcl = null;
-
-    protected static Map<String, String> idMap = new HashMap<String, String>();
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
-        super.setUp();
-        fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-        List<String> principalIds = new ArrayList<String>(3);
-        principalIds.add("TestAdmin");
-        principalIds.add("Writer");
-        principalIds.add("Reader");
-        principalIds.add("TestUser");
-        addACEs = new ArrayList<Ace>(4);
-        addACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        addACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        addACEs.add(createAce("TestUser", EnumBasicPermissions.CMIS_WRITE));
-        addACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        addAcl = fFactory.createAccessControlList(addACEs);
-
-        standardACEs = new ArrayList<Ace>(3);
-        standardACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        standardACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        standardACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        standardAcl = fFactory.createAccessControlList(standardACEs);
-
-        noReadACEs = new ArrayList<Ace>(2);
-        noReadACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        noReadACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        noReadAcl = fFactory.createAccessControlList(noReadACEs);
-
-        readACEs = new ArrayList<Ace>(1);
-        readACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        readAcl = fFactory.createAccessControlList(readACEs);
-
-        readWriteACEs = new ArrayList<Ace>(2);
-        readWriteACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        readWriteACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        readWriteAcl = fFactory.createAccessControlList(readWriteACEs);
-
-        testUserACEs = new ArrayList<Ace>(1);
-        testUserACEs.add(createAce("TestUser", EnumBasicPermissions.CMIS_WRITE));
-        testUserAcl = fFactory.createAccessControlList(testUserACEs);
-
-        writerReadACEs = new ArrayList<Ace>(1);
-        writerReadACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_READ));
-        writerReadAcl = fFactory.createAccessControlList(writerReadACEs);
-
-        adminACEs = new ArrayList<Ace>(1);
-        adminACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        adminAcl = fFactory.createAccessControlList(adminACEs);
-
-        List<Ace> defaultACEs = new ArrayList<Ace>(1);
-        defaultACEs.add(createAce(InMemoryAce.getAnyoneUser(), EnumBasicPermissions.CMIS_ALL));
-        defaultAcl = fFactory.createAccessControlList(defaultACEs);
-    }
-
-    @Test
-    public void testCreateObjectsWithAcl() {
-        // create a document with initial ACL
-        String docId = createDocumentWithAcls("complexDocument", fRootFolderId, UnitTestTypeSystemCreator.COMPLEX_TYPE,
-                addAcl, defaultAcl);
-        Acl acl1 = fAclSvc.getAcl(fRepositoryId, docId, true, null);
-        assertTrue(aclEquals(addAcl, acl1));
-
-        // create a folder with initial ACL
-        String folderId = createFolderWithAcls("folderWithAcl", fRootFolderId, BaseTypeId.CMIS_FOLDER.value(), addAcl,
-                defaultAcl);
-        Acl acl2 = fAclSvc.getAcl(fRepositoryId, folderId, true, null);
-        assertTrue(aclEquals(addAcl, acl2));
-
-        // add acl later
-        String docId2 = createVersionedDocument("complexDocument2", fRootFolderId);
-        Acl acl = fAclSvc.applyAcl(fRepositoryId, docId2, addAcl, defaultAcl, AclPropagation.OBJECTONLY, null);
-        assertTrue(aclEquals(addAcl, acl));
-
-        String folderId2 = createFolder("folder2", fRootFolderId, "cmis:folder");
-        acl2 = fAclSvc.applyAcl(fRepositoryId, folderId2, addAcl, defaultAcl, AclPropagation.OBJECTONLY, null);
-        assertTrue(aclEquals(addAcl, acl2));
-
-        // add a subfolder
-        String subFolderId = createFolder("subFolder", folderId, BaseTypeId.CMIS_FOLDER.value());
-        // folder should inherit acl
-        Acl subAcl = fAclSvc.getAcl(fRepositoryId, subFolderId, true, null);
-        assertTrue(aclEquals(addAcl, subAcl));
-
-        // add a document
-        String subDocId = createVersionedDocument("subDoc", subFolderId);
-        // document should inherit acl
-        Acl subAclDoc = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
-        assertTrue(aclEquals(addAcl, subAclDoc));
-
-        // remove an ace, no permission is left for TestUser
-        Acl removeAcl = createAcl("TestUser", EnumBasicPermissions.CMIS_WRITE);
-        Acl acl3 = fAclSvc.applyAcl(fRepositoryId, docId2, null, removeAcl, AclPropagation.OBJECTONLY, null);
-
-        List<Ace> compareRemoveACEs = new ArrayList<Ace>(3);
-        compareRemoveACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        compareRemoveACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        compareRemoveACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        Acl compareRemoveAcl = fFactory.createAccessControlList(compareRemoveACEs);
-
-        assertTrue(aclEquals(compareRemoveAcl, acl3));
-
-        // addACE not propagated
-        Acl addPropAcl = createAcl("TestUser", EnumBasicPermissions.CMIS_WRITE);
-
-        Acl acl4 = fAclSvc.applyAcl(fRepositoryId, subFolderId, addPropAcl, null, AclPropagation.OBJECTONLY, null);
-        Acl subAclDoc2 = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
-        assertTrue(aclEquals(addAcl, subAclDoc2)); // acl of doc did not change
-
-        List<Ace> compareRemoveACEs2 = new ArrayList<Ace>(4);
-        compareRemoveACEs2.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        compareRemoveACEs2.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
-        compareRemoveACEs2.add(createAce("TestUser", EnumBasicPermissions.CMIS_ALL));
-        compareRemoveACEs2.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        Acl compareRemoveAcl2 = fFactory.createAccessControlList(compareRemoveACEs2);
-        assertTrue(aclEquals(compareRemoveAcl2, acl4));
-
-        // addACE propagated
-        Acl acl5 = fAclSvc.applyAcl(fRepositoryId, subFolderId, addPropAcl, null, AclPropagation.PROPAGATE, null);
-        Acl subAclDoc3 = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
-        assertTrue(aclEquals(compareRemoveAcl2, subAclDoc3)); // acl of doc did
-                                                              // change
-        assertTrue(aclEquals(compareRemoveAcl2, acl5));
-    }
-
-    @Test
-    public void checkNavigationServiceGeneralAccess() {
-        // starts with call context TestUser
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, "ComplexType", standardAcl, defaultAcl);
-        String folderId = createFolderWithAcls("folder", fRootFolderId, "cmis:folder", standardAcl, defaultAcl);
-        // fTestCallContext = new DummyCallContext("Writer");
-        String subFolderId = createFolderWithAcls("subFolder", folderId, "cmis:folder", standardAcl, null);
-
-        // TestUser has no permission at all
-        switchCallContext("TestUser");
-        boolean exceptionThrown = false;
-        try {
-            ObjectInFolderList list = fNavSvc.getChildren(fRepositoryId, folderId, null, null, false,
-                    IncludeRelationships.NONE, null, null, BigInteger.ZERO, BigInteger.ZERO, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        ObjectInFolderList list = fNavSvc.getChildren(fRepositoryId, folderId, null, null, false,
-                IncludeRelationships.NONE, null, null, BigInteger.ZERO, BigInteger.ZERO, null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            List<ObjectInFolderContainer> list2 = fNavSvc.getDescendants(fRepositoryId, folderId, MINUS_ONE, null,
-                    null, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        List<ObjectInFolderContainer> list2 = fNavSvc.getDescendants(fRepositoryId, folderId, MINUS_ONE, null, null,
-                null, null, null, null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            List<ObjectInFolderContainer> list3 = fNavSvc.getFolderTree(fRepositoryId, folderId, BigInteger.ONE, null,
-                    null, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        List<ObjectInFolderContainer> list3 = fNavSvc.getFolderTree(fRepositoryId, folderId, BigInteger.ONE, null,
-                null, null, null, null, null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            List<ObjectParentData> list4 = fNavSvc.getObjectParents(fRepositoryId, folderId, null, null, null, null,
-                    null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        List<ObjectParentData> list4 = fNavSvc.getObjectParents(fRepositoryId, folderId, null, null, null, null, null,
-                null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            ObjectData list5 = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        ObjectData list5 = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            ObjectList list6 = fNavSvc.getCheckedOutDocs(fRepositoryId, folderId, null, null, null,
-                    IncludeRelationships.NONE, null, MINUS_ONE, MINUS_ONE, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        switchCallContext("Reader");
-        ObjectList list6 = fNavSvc.getCheckedOutDocs(fRepositoryId, folderId, null, null, null,
-                IncludeRelationships.NONE, null, MINUS_ONE, MINUS_ONE, null);
-    }
-
-    @Test
-    public void testAclServiceGeneralAccess() {
-        List<Ace> initialACEs = new ArrayList<Ace>(4);
-        initialACEs.addAll(standardACEs);
-        initialACEs.add(createAce("Admin2", EnumBasicPermissions.CMIS_ALL));
-        Acl initialAcl = fFactory.createAccessControlList(initialACEs);
-
-        List<Ace> expectedACEs = new ArrayList<Ace>(5);
-        expectedACEs.addAll(initialACEs);
-        expectedACEs.addAll(testUserACEs);
-        Acl expectedAcl = fFactory.createAccessControlList(expectedACEs);
-
-        List<Ace> removeACEs = new ArrayList<Ace>(1);
-        removeACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        Acl removeAcl = fFactory.createAccessControlList(removeACEs);
-
-        List<Ace> removeACEs2 = new ArrayList<Ace>(2);
-        removeACEs2.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
-        removeACEs2.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
-        Acl removeAcl2 = fFactory.createAccessControlList(removeACEs2);
-
-        List<Ace> testUserACEs = new ArrayList<Ace>(1);
-        testUserACEs.add(createAce("TestUser", EnumBasicPermissions.CMIS_WRITE));
-        Acl testUserAcl = fFactory.createAccessControlList(testUserACEs);
-
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, "ComplexType", initialAcl, defaultAcl);
-        String folderId = createFolderWithAcls("folder", fRootFolderId, "cmis:folder", initialAcl, defaultAcl);
-        String subFolderId = createFolderWithAcls("subFolder", folderId, "cmis:folder", initialAcl, defaultAcl);
-
-        // getAcl of a folder
-        switchCallContext("TestUser");
-        boolean exceptionThrown = false;
-        try {
-            Acl acl = fAclSvc.getAcl(fRepositoryId, folderId, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get acl of folder");
-        }
-
-        switchCallContext("Reader");
-        Acl acl = fAclSvc.getAcl(fRepositoryId, folderId, null, null);
-
-        // getAcl of a document
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            Acl docAcl = fAclSvc.getAcl(fRepositoryId, docId, true, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get acl of doc)");
-        }
-
-        switchCallContext("Reader");
-        Acl docAcl = fAclSvc.getAcl(fRepositoryId, docId, true, null);
-
-        // applyAcl
-        switchCallContext("Reader");
-        exceptionThrown = false;
-        try {
-            Acl docAcl2 = fAclSvc.applyAcl(fRepositoryId, docId, initialAcl, null, AclPropagation.OBJECTONLY, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions)");
-        }
-
-        // switchCallContext("Writer");
-        switchCallContext("TestAdmin");
-        Acl docAcl2 = fAclSvc.applyAcl(fRepositoryId, docId, initialAcl, null, AclPropagation.OBJECTONLY, null);
-
-        // applyAcl when not allowed to subItem
-        switchCallContext("TestAdmin");
-        Acl docAcl4 = fAclSvc.applyAcl(fRepositoryId, subFolderId, null, removeAcl, AclPropagation.OBJECTONLY, null);
-
-        // switchCallContext("Writer");
-        switchCallContext("TestAdmin");
-        // apply an ACL where the current user has permission to modify ACL on
-        // folder but not on sub-folder:
-        Acl docAcl5 = fAclSvc.applyAcl(fRepositoryId, folderId, testUserAcl, null, AclPropagation.PROPAGATE, null);
-        switchCallContext("Admin");
-        Acl docAcl6 = fAclSvc.getAcl(fRepositoryId, folderId, true, null);
-        assertTrue(aclEquals(expectedAcl, docAcl6));
-        Acl docAcl7 = fAclSvc.getAcl(fRepositoryId, subFolderId, true, null);
-        assertTrue(aclEquals(standardAcl, docAcl7));
-    }
-
-    @Test
-    public void testObjectServiceGeneralAccess() {
-
-        // starts with call context TestUser
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, "ComplexType", standardAcl, defaultAcl);
-        String folderId = createFolderWithAcls("folder", fRootFolderId, "cmis:folder", standardAcl, defaultAcl);
-        // fTestCallContext = new DummyCallContext("Writer");
-        String subFolderId = createFolderWithAcls("subFolder", folderId, "cmis:folder", standardAcl, null);
-        String noReadFolderId = createFolderWithAcls("noReadFolder", folderId, "cmis:folder", null, readAcl);
-        String adminFolderId = createFolderWithAcls("adminFolder", folderId, "cmis:folder", null, readWriteAcl);
-
-        // TestUser has no permission at all
-        switchCallContext("TestUser");
-        boolean exceptionThrown = false;
-        try {
-            Properties properties = createDocumentProperties("doc", "ComplexType");
-            String id = fObjSvc.createDocument(fRepositoryId, properties, folderId, null, null, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to create a document");
-        }
-
-        exceptionThrown = false;
-        try {
-            String id = fObjSvc.createFolder(fRepositoryId, null, folderId, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to create a folder");
-        }
-
-        /*
-         * exceptionThrown = false; try { Properties properties =
-         * createRelationshipProperties(folderId, fRootFolderId); String id1 =
-         * fObjSvc.createRelationship(fRepositoryId, properties, null, null,
-         * null, null); } catch (CmisPermissionDeniedException e) {
-         * exceptionThrown = true; } if (!exceptionThrown) fail(
-         * "TestUser has no permissions to create a relationship: missing read permission for source id"
-         * );
-         * 
-         * exceptionThrown = false; Properties properties =
-         * createRelationshipProperties( fRootFolderId, folderId); try { String
-         * id2 = fObjSvc.createRelationship(fRepositoryId, properties, null,
-         * null, null, null); } catch (CmisPermissionDeniedException e) {
-         * exceptionThrown = true; } if (!exceptionThrown) fail(
-         * "TestUser has no permissions to create a relationship: missing read permission for destination"
-         * );
-         */
-
-        exceptionThrown = false;
-        try {
-            Properties props = fObjSvc.getProperties(fRepositoryId, folderId, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get properties of the folder");
-        }
-
-        exceptionThrown = false;
-        try {
-            Properties props = fObjSvc.getProperties(fRepositoryId, docId, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get properties of the document");
-        }
-
-        exceptionThrown = false;
-        try {
-            List<RenditionData> renditions = fObjSvc.getRenditions(fRepositoryId, docId, null, BigInteger.valueOf(-1),
-                    BigInteger.valueOf(-1), null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get renditions of the document");
-        }
-
-        exceptionThrown = false;
-        try {
-            ContentStream contentStream = fObjSvc.getContentStream(fRepositoryId, docId, null, BigInteger.valueOf(-1),
-                    BigInteger.valueOf(-1), null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions to get contentStream of the document");
-        }
-
-        switchCallContext("Reader");
-        exceptionThrown = false;
-        Properties properties = createDocumentProperties("name", "typeId");
-        try {
-            fObjSvc.updateProperties(fRepositoryId, new Holder<String>(docId), new Holder<String>("changeToken"),
-                    properties, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to update properties of the document");
-        }
-
-        exceptionThrown = false;
-        properties = createDocumentProperties("name", "typeId");
-        try {
-            fObjSvc.updateProperties(fRepositoryId, new Holder<String>(docId), new Holder<String>("changeToken"),
-                    properties, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to update properties of the document");
-        }
-
-        exceptionThrown = false;
-        try {
-            fObjSvc.moveObject(fRepositoryId, new Holder<String>(docId), subFolderId, fRootFolderId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to move document");
-        }
-
-        switchCallContext("Writer");
-        exceptionThrown = false;
-        try {
-            fObjSvc.moveObject(fRepositoryId, new Holder<String>(docId), adminFolderId, fRootFolderId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Writer has no permissions to move document to admin folder");
-        }
-
-        switchCallContext("Reader");
-        exceptionThrown = false;
-        try {
-            fObjSvc.deleteObject(fRepositoryId, docId, true, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to delete document ");
-        }
-
-        exceptionThrown = false;
-        try {
-            fObjSvc.deleteObject(fRepositoryId, adminFolderId, true, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to delete admin folder ");
-        }
-
-        exceptionThrown = false;
-        try {
-            fObjSvc.setContentStream(fRepositoryId, new Holder<String>(docId), true, new Holder<String>("changeToken"),
-                    null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to set content ");
-        }
-
-        exceptionThrown = false;
-        try {
-            fObjSvc.deleteContentStream(fRepositoryId, new Holder<String>(docId), new Holder<String>("changeToken"),
-                    null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to delete content ");
-        }
-
-        exceptionThrown = false;
-        try {
-            fObjSvc.deleteTree(fRepositoryId, folderId, true, null, false, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permissions to delete tree ");
-        }
-    }
-
-    @Test
-    public void testMultiFilingServiceGeneralAccess() {
-        // starts with call context TestUser
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, "ComplexType", standardAcl, defaultAcl);
-        String folderId = createFolderWithAcls("folder", fRootFolderId, "cmis:folder", addAcl, defaultAcl);
-        String noReadFolderId = createFolderWithAcls("noReadFolder", folderId, "cmis:folder", null, readAcl);
-
-        // TestUser has no permission at the document
-        switchCallContext("TestUser");
-        boolean exceptionThrown = false;
-        try {
-
-            fMultiSvc.addObjectToFolder(fRepositoryId, docId, folderId, true, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permissions at the document to add a parent");
-        }
-
-        exceptionThrown = false;
-        switchCallContext("Reader"); // has no permission at the folder
-        try {
-
-            fMultiSvc.addObjectToFolder(fRepositoryId, docId, noReadFolderId, true, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permission at the folder to add a parent");
-        }
-
-        switchCallContext("TestAdmin");
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId, noReadFolderId, true, null);
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId, folderId, true, null);
-
-        switchCallContext("Reader");
-        try {
-
-            fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, noReadFolderId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has no permission at the folder to remove a parent");
-        }
-
-        switchCallContext("TestUser");
-        try {
-
-            fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, folderId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permission at the object to remove a parent");
-        }
-    }
-
-    @Test
-    public void testVersioningServiceGeneralAccess() {
-        // starts with call context TestUser
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                VersioningState.MAJOR, standardAcl, defaultAcl);
-
-        // TestUser has no permission at all
-        switchCallContext("TestUser");
-        boolean exceptionThrown = false;
-        try {
-            Holder<String> docIdHolder = new Holder<String>(docId);
-            fVerSvc.checkOut(fRepositoryId, docIdHolder, null, new Holder<Boolean>(false));
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permission to checkout)");
-        }
-
-        // Reader has only read permission
-        switchCallContext("Reader");
-        exceptionThrown = false;
-        try {
-            fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new Holder<Boolean>(false));
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has not enough permission to checkout)");
-        }
-
-        // checkout
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("TestUser");
-        Holder<String> docIdHolder = new Holder<String>(docId);
-        fVerSvc.checkOut(fRepositoryId, docIdHolder, null, new Holder<Boolean>(false));
-
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, null, testUserAcl, AclPropagation.OBJECTONLY, null);
-
-        // TestUser has no permission at all, only checkout user can checkin
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            fVerSvc.cancelCheckOut(fRepositoryId, docId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permission to cancelCheckOut)");
-        }
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("TestUser");
-        fVerSvc.cancelCheckOut(fRepositoryId, docId, null);
-
-        // writer looses write permission
-        switchCallContext("Writer");
-        fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new Holder<Boolean>(false));
-
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, null, readWriteAcl, AclPropagation.OBJECTONLY, null);
-
-        switchCallContext("Writer");
-        exceptionThrown = false;
-        try {
-            fVerSvc.cancelCheckOut(fRepositoryId, docId, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Reader has not enough permission to cancelCheckOut)");
-        }
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, readWriteAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("Writer");
-        fVerSvc.cancelCheckOut(fRepositoryId, docId, null);
-
-        // TestUser has no permission at all
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("TestUser");
-        fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new Holder<Boolean>(false));
-
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, null, testUserAcl, AclPropagation.OBJECTONLY, null);
-
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, null, null, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has no permission to checkIn)");
-        }
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("TestUser");
-        fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, null, null, null, null, null, null);
-
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, null, testUserAcl, AclPropagation.OBJECTONLY, null);
-
-        // writer looses write permission
-        switchCallContext("Writer");
-        fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new Holder<Boolean>(false));
-
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, null, readWriteAcl, AclPropagation.OBJECTONLY, null);
-
-        switchCallContext("Writer");
-        exceptionThrown = false;
-        try {
-            fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, null, null, null, null, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("Writer has not enough permission to checkIn)");
-        }
-        switchCallContext("TestAdmin");
-        fAclSvc.applyAcl(fRepositoryId, docId, readWriteAcl, null, AclPropagation.OBJECTONLY, null);
-        switchCallContext("Writer");
-        fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, null, null, null, null, null, null);
-
-        // TestUser has no permission at all
-        switchCallContext("TestUser");
-        exceptionThrown = false;
-        try {
-            ObjectData objectData = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, null, true, null, false,
-                    IncludeRelationships.NONE, null, false, false, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has not enough permission to getObjectOfLatestVersion)");
-        }
-
-        exceptionThrown = false;
-        try {
-            List<ObjectData> objectDataList = fVerSvc.getAllVersions(fRepositoryId, docId, docId, null, false, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has not enough permission to getAllVersions)");
-        }
-
-        exceptionThrown = false;
-        try {
-            Properties properties = fVerSvc.getPropertiesOfLatestVersion(fRepositoryId, docId, null, false, null, null);
-        } catch (CmisPermissionDeniedException e) {
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            fail("TestUser has not enough permission to getAllVersions)");
-        }
-    }
-
-    @Test
-    public void testVisibleObjects() {
-        LOG.debug("start test checkVisibleObjects()...");
-        switchCallContext("TestAdmin");
-        String docId = createDocumentWithAcls("doc", fRootFolderId, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                VersioningState.MAJOR, standardAcl, defaultAcl);
-        String docId2 = createDocumentWithAcls("doc2", fRootFolderId, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                VersioningState.MAJOR, addAcl, defaultAcl);
-        String folderId = createFolderWithAcls("folder", fRootFolderId, "cmis:folder", standardAcl, defaultAcl);
-        String folderId2 = createFolderWithAcls("folder2", fRootFolderId, "cmis:folder", addAcl, defaultAcl);
-        LOG.debug("checkVisibleObjects(): folderId2 is: " + folderId2);
-        String subFolderId = createFolderWithAcls("subFolder", folderId2, "cmis:folder", null, testUserAcl);
-        LOG.debug("checkVisibleObjects(): subFolderId is: " + subFolderId);
-        String subFolderId2 = createFolderWithAcls("subFolder2", folderId2, "cmis:folder", addAcl, null);
-        LOG.debug("checkVisibleObjects(): subFolderId2 is: " + subFolderId2);
-        String subDocId = createDocumentWithAcls("subDoc", folderId2, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                VersioningState.MAJOR, null, testUserAcl);
-        LOG.debug("checkVisibleObjects(): subDocId is: " + subDocId);
-        String subDocId2 = createDocumentWithAcls("subDoc2", folderId2, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                VersioningState.MAJOR, addAcl, null);
-        LOG.debug("checkVisibleObjects(): subDocId2 is: " + subDocId2);
-        String noAclDocId2 = createDocumentWithAcls("noAclDoc2", fRootFolderId, "ComplexType", null, null);
-        LOG.debug("checkVisibleObjects(): noAclDocId2 is: " + noAclDocId2);
-
-        // TestUser has no permission in standardAcl
-        switchCallContext("TestUser");
-
-        ObjectInFolderList list = fNavSvc.getChildren(fRepositoryId, folderId2, null, null, false,
-                IncludeRelationships.NONE, null, null, null, null, null);
-        List<ObjectInFolderData> objects = list.getObjects();
-        assertObjectDataListIds(objects, subDocId2);
-        assertObjectDataListIds(objects, subFolderId2);
-
-        list = fNavSvc.getChildren(fRepositoryId, fRootFolderId, null, null, false, IncludeRelationships.NONE, null,
-                null, null, null, null);
-        objects = list.getObjects();
-        assertObjectDataListIds(objects, docId2);
-        assertObjectDataListIds(objects, folderId2);
-        assertObjectDataListIds(objects, noAclDocId2);
-
-        List<ObjectInFolderContainer> descList = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, MINUS_ONE, null,
-                false, IncludeRelationships.NONE, null, false, null);
-        assertObjectInFolderContainerIds(descList, docId2);
-        assertObjectInFolderContainerIds(descList, folderId2);
-        assertObjectInFolderContainerIds(descList, noAclDocId2);
-
-        List<ObjectInFolderContainer> folderList = fNavSvc.getFolderTree(fRepositoryId, fRootFolderId, MINUS_ONE, null,
-                false, IncludeRelationships.NONE, null, false, null);
-        assertObjectInFolderContainerIds(folderList, folderId2);
-        assertObjectInFolderContainerIds(folderList, subFolderId2);
-
-        // check out
-        switchCallContext("TestAdmin");
-        Holder<String> holderDocId = new Holder<String>(docId);
-        Holder<String> holderDocId2 = new Holder<String>(docId2);
-        Holder<String> holderSubDocId = new Holder<String>(subDocId);
-        Holder<String> holderSubDocId2 = new Holder<String>(subDocId2);
-        fVerSvc.checkOut(fRepositoryId, holderDocId, null, null);
-        fVerSvc.checkOut(fRepositoryId, holderDocId2, null, null);
-        fVerSvc.checkOut(fRepositoryId, holderSubDocId, null, null);
-        fVerSvc.checkOut(fRepositoryId, holderSubDocId2, null, null);
-
-        switchCallContext("TestUser");
-        ObjectList objectList = fNavSvc.getCheckedOutDocs(fRepositoryId, null, null, null, false,
-                IncludeRelationships.NONE, null, MINUS_ONE, MINUS_ONE, null);
-        assertObjectInObjectListIds(objectList, holderDocId2.getValue());
-        assertObjectInObjectListIds(objectList, holderSubDocId2.getValue());
-
-        // only direct children are returned
-        ObjectList objectList2 = fNavSvc.getCheckedOutDocs(fRepositoryId, fRootFolderId, null, null, false,
-                IncludeRelationships.NONE, null, MINUS_ONE, MINUS_ONE, null);
-        List<String> docIds2 = new ArrayList<String>(1);
-        docIds2.add(docId2);
-        assertEquals(BigInteger.valueOf(1L), objectList2.getNumItems());
-
-        // multi filing, get object parents
-        switchCallContext("TestAdmin");
-        String secFolderId = createFolderWithAcls("secondFolder", fRootFolderId, "cmis:folder", standardAcl, defaultAcl);
-        String docId3 = createDocumentWithAcls("thirdDoc", folderId2, "ComplexType", addAcl, null);
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId3, secFolderId, true, null);
-
-        switchCallContext("TestUser"); // second parent is not visible
-        List<ObjectParentData> objectParentData = fNavSvc.getObjectParents(fRepositoryId, docId3, null, null, null,
-                null, true, null);
-        assertEquals(1, objectParentData.size());
-        assertEquals(folderId2, objectParentData.get(0).getObject().getId());
-        LOG.debug("...stop test checkVisibleObjects()");
-    }
-
-    @Test
-    public void testQueryAccess() {
-        createCustomPropertyDocuments();
-
-        String queryStatement;
-        List<ObjectData> objectDataList;
-        ObjectList objectList;
-        ObjectData first;
-
-        switchCallContext("TestUser"); // Testuser has no permissions to view a
-                                       // document
-        queryStatement = "select * from cmis:document";
-        objectList = fDiscSvc.query(fRepositoryId, queryStatement, null, null, null, null, MINUS_ONE, MINUS_ONE, null);
-        assertTrue(0L == objectList.getNumItems().longValue());
-
-        // add a permission for a document
-        switchCallContext("TestAdmin");
-        String docId20 = idMap.get("customDocId20");
-        fAclSvc.applyAcl(fRepositoryId, idMap.get("customDocId20"), testUserAcl, null, AclPropagation.OBJECTONLY, null);
-
-        switchCallContext("TestUser"); // Testuser has has only permissions for
-                                       // customDocId20
-        queryStatement = "select * from ComplexType where IntProp <= 20";
-
-        objectList = fDiscSvc.query(fRepositoryId, queryStatement, null, null, null, null, MINUS_ONE, MINUS_ONE, null);
-        assertTrue(1L == objectList.getNumItems().longValue());
-        objectDataList = objectList.getObjects();
-        first = objectDataList.get(0);
-        assertTrue(first.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT));
-    }
-
-    protected String createDocumentWithAcls(String name, String folderId, String typeId, Acl addACEs, Acl removeACEs) {
-        return createDocumentWithAcls(name, folderId, typeId, VersioningState.NONE, addACEs, removeACEs);
-    }
-
-    protected String createDocumentWithAcls(String name, String folderId, String typeId,
-            VersioningState versioningState, Acl addACEs, Acl removeACEs) {
-        ContentStream contentStream = null;
-        List<String> policies = null;
-        ExtensionsData extension = null;
-
-        Properties props = createDocumentProperties(name, typeId);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
-                addACEs, removeACEs, extension);
-        return id;
-    }
-
-    protected String createFolderWithAcls(String name, String folderId, String typeId, Acl addACEs, Acl removeACEs) {
-        List<String> policies = null;
-        ExtensionsData extension = null;
-
-        Properties props = createFolderProperties(name, typeId);
-
-        String id = fObjSvc.createFolder(fRepositoryId, props, folderId, policies, addACEs, removeACEs, extension);
-        return id;
-    }
-
-    protected Properties createRelationshipProperties(String sourceId, String targetId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SOURCE_ID, sourceId));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.TARGET_ID, targetId));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID,
-                EnumBaseObjectTypeIds.CMIS_RELATIONSHIP.value()));
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private void switchCallContext(String user) {
-        ((DummyCallContext) fTestCallContext).put(CallContext.USERNAME, user);
-    }
-
-    protected void createCustomPropertyDocuments() {
-        switchCallContext("TestAdmin");
-        // create folder
-        String folderId = createFolderWithAcls("customFolder", fRootFolderId, "cmis:folder", standardAcl, defaultAcl);
-        idMap.put("customFolder", folderId);
-
-        // create documents
-        List<PropertyData<?>> properties10 = new ArrayList<PropertyData<?>>();
-        properties10.add(fFactory.createPropertyIntegerData("IntProp", BigInteger.valueOf(10)));
-        properties10.add(fFactory.createPropertyStringData("StringProp", "10 string"));
-        properties10.add(fFactory.createPropertyBooleanData("BooleanProp", true));
-        GregorianCalendar gregorianCalendar = CalendarHelper.fromString("2010-07-10T12:00:00.000-01:00");
-        properties10.add(fFactory.createPropertyDateTimeData("DateTimeProp", gregorianCalendar));
-        String customDocId10 = createDocumentWithProperties("customDocument10", folderId, "ComplexType", properties10,
-                false);
-        idMap.put("customDocId10", customDocId10);
-
-        List<PropertyData<?>> properties20 = new ArrayList<PropertyData<?>>();
-        properties20.add(fFactory.createPropertyIntegerData("IntProp", BigInteger.valueOf(20)));
-        properties20.add(fFactory.createPropertyStringData("StringProp", "20 string"));
-        properties20.add(fFactory.createPropertyBooleanData("BooleanProp", false));
-        gregorianCalendar = CalendarHelper.fromString("2010-07-20T12:00:00.000-01:00");
-        properties20.add(fFactory.createPropertyDateTimeData("DateTimeProp", gregorianCalendar));
-        String customDocId20 = createDocumentWithProperties("customDocument20", folderId, "ComplexType", properties20,
-                false);
-        idMap.put("customDocId20", customDocId20);
-
-        List<PropertyData<?>> properties30 = new ArrayList<PropertyData<?>>();
-        properties30.add(fFactory.createPropertyIntegerData("IntProp", BigInteger.valueOf(30)));
-        properties30.add(fFactory.createPropertyStringData("StringProp", "30 string"));
-        properties30.add(fFactory.createPropertyBooleanData("BooleanProp", true));
-        gregorianCalendar = CalendarHelper.fromString("2010-07-30T12:00:00.000-01:00");
-        properties30.add(fFactory.createPropertyDateTimeData("DateTimeProp", gregorianCalendar));
-        String customDocId30 = createDocumentWithProperties("customDocument30", folderId, "ComplexType", properties30,
-                false);
-        idMap.put("customDocId30", customDocId30);
-
-    }
-
-    protected String createDocumentWithProperties(String name, String folderId, String typeId,
-            List<PropertyData<?>> properties, boolean withContent) {
-        ContentStream contentStream = null;
-
-        // add document properties
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        if (withContent) {
-            contentStream = createContent();
-        }
-
-        String id = null;
-        try {
-            id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, VersioningState.NONE, null,
-                    null, null, null);
-            if (null == id) {
-                fail("createDocument failed.");
-            }
-        } catch (Exception e) {
-            fail("createDocument() failed with exception: " + e);
-        }
-        return id;
-
-    }
-
-    private Acl createAcl(String principalId, EnumBasicPermissions permission) {
-        List<Ace> acesAdd = Arrays.asList(new Ace[] { createAce(principalId, permission), });
-        return fFactory.createAccessControlList(acesAdd);
-    }
-
-    private Ace createAce(String principalId, EnumBasicPermissions permission) {
-        return fFactory.createAccessControlEntry(principalId, Collections.singletonList(permission.value()));
-    }
-
-    private static boolean aclEquals(Acl acl1, Acl acl2) {
-        if (acl1 == acl2) {
-            return true;
-        }
-        if (acl1 == null || acl2 == null) {
-            return false;
-        }
-        if (acl1.getClass() != acl2.getClass()) {
-            return false;
-        }
-        if (acl1.getAces().size() != acl2.getAces().size()) {
-            return false;
-        }
-        for (int i = 0; i < acl1.getAces().size(); i++) {
-            aclHasAce(acl1.getAces(), acl2.getAces().get(i));
-        }
-        return true;
-    }
-
-    private static boolean aclHasAce(List<Ace> aces, Ace ace) {
-        for (Ace ace2 : aces) {
-            if (!ace.getPrincipalId().equals(ace2.getPrincipalId())) {
-                continue;
-            }
-            if (ace.getPermissions().size() != ace2.getPermissions().size()) {
-                continue;
-            }
-            for (int i = 0; i < ace2.getPermissions().size(); i++) {
-                if (!aceHasPermission(ace.getPermissions(), ace2.getPermissions().get(i))) {
-                    continue;
-                }
-            }
-
-            return true;
-        }
-        return false;
-    }
-
-    private static boolean aceHasPermission(List<String> permissions, String permission) {
-        for (String permission2 : permissions) {
-            if (permission2.equals(permission)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private String createVersionedDocument(String name, String folderId) {
-
-        VersioningState versioningState = VersioningState.MAJOR;
-        String id = null;
-        Map<String, String> properties = new HashMap<String, String>();
-        id = fCreator.createDocument(name, UnitTestTypeSystemCreator.VERSIONED_TYPE, folderId, versioningState,
-                properties);
-
-        return id;
-    }
-
-    private void assertObjectDataListIds(List<ObjectInFolderData> folderData, String id) {
-        boolean found = false;
-        for (ObjectInFolderData folder : folderData) {
-            LOG.info("   found folder id " + folder.getObject().getId());
-            if (id.equals(folder.getObject().getId())) {
-                found = true;
-            }
-        }
-        assertTrue("Failed to find folder id " + id, found);
-    }
-
-    private void assertObjectInFolderContainerIds(List<ObjectInFolderContainer> folderList, String id) {
-        boolean found = objectInFolderContainerHasId(folderList, id);
-        assertTrue("Failed to find folder id " + id, found);
-    }
-
-    private boolean objectInFolderContainerHasId(List<ObjectInFolderContainer> folderList, String id) {
-        for (ObjectInFolderContainer fc : folderList) {
-            if (id.equals(fc.getObject().getObject().getId())) {
-                return true;
-            }
-            List<ObjectInFolderContainer> children = fc.getChildren();
-            if (children != null && objectInFolderContainerHasId(children, id)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private void assertObjectInObjectListIds(ObjectList objList, String id) {
-        boolean found = false;
-        for (ObjectData od : objList.getObjects()) {
-            LOG.info("   found object id " + od.getId());
-            if (id.equals(od.getId())) {
-                found = true;
-            }
-
-        }
-        assertTrue("Failed to find object id " + id, found);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java
deleted file mode 100644
index eeb6c40..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
-import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AclServiceTest extends AbstractServiceTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AclServiceTest.class);
-    private ObjectCreator fCreator;
-    private static final String DOCUMENT_NAME = "DocumentWithAcl";
-    private static final String FOLDER_NAME = "FolderWithAcl";
-    private static final String DOCUMENT_TYPE_ID = DocumentTypeCreationHelper.getCmisDocumentType().getId();
-    private static final String FOLDER_TYPE_ID = DocumentTypeCreationHelper.getCmisFolderType().getId();
-    private static final String USER = "user";
-    private static final String ALICE = "alice";
-    private static final String BOB = "bob";
-    private static final String CHRIS = "chris";
-    private static final String DAN = "dan";
-    private Acl defaultAcl = null;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
-        super.setUp();
-        fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-
-        List<Ace> defaultACEs = new ArrayList<Ace>(1);
-        defaultACEs.add(fFactory.createAccessControlEntry(InMemoryAce.getAnyoneUser(),
-                Collections.singletonList(EnumBasicPermissions.CMIS_ALL.value())));
-        defaultAcl = fFactory.createAccessControlList(defaultACEs);
-
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testCreateDocumentWithAcl() {
-        LOG.info("starting testCreateDocumentWithAcl() ...");
-        Acl removeAces = defaultAcl;
-        Acl acl = createSimpleTestAcl();
-
-        String id = createDocument(fRootFolderId, acl, removeAces);
-        LOG.debug("created document with id: " + id);
-
-        // get ACL using AclService
-        Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
-        checkSimpleTestAcl(acl, aclReturn);
-
-        // get ACL using ObjectService getObject
-        ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                true, null);
-        checkSimpleTestAcl(acl, aclReturn);
-
-        // get ACL using ObjectService getObjectByPath
-        objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + DOCUMENT_NAME, "*", false, IncludeRelationships.NONE,
-                null, false, true, null);
-        assertNotNull(objData);
-        aclReturn = objData.getAcl();
-        checkSimpleTestAcl(acl, aclReturn);
-
-        LOG.info("... testCreateDocumentWithAcl() finished.");
-    }
-
-    @Test
-    public void testCreateFolderWithAcl() {
-        LOG.info("starting testCreateFolderWithAcl() ...");
-        Acl removeAces = defaultAcl;
-        Acl acl = createSimpleTestAcl();
-
-        String id = createFolder(fRootFolderId, acl, removeAces);
-        LOG.debug("created folder with id: " + id);
-
-        // get ACL using AclService
-        Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
-        checkSimpleTestAcl(acl, aclReturn);
-
-        // get ACL using ObjectService getObject
-        ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                true, null);
-        checkSimpleTestAcl(acl, aclReturn);
-
-        // get ACL using ObjectService getObjectByPath
-        objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + FOLDER_NAME, "*", false, IncludeRelationships.NONE,
-                null, false, true, null);
-        assertNotNull(objData);
-        aclReturn = objData.getAcl();
-        checkSimpleTestAcl(acl, aclReturn);
-        LOG.info("... testCreateFolderWithAcl() finished.");
-    }
-
-    @Test
-    public void testApplyAcl() {
-        LOG.info("starting testApplyAcl() ...");
-        Acl acl = createSimpleTestAcl();
-
-        String id = createDocument(fRootFolderId, null, null);
-        LOG.debug("created document with id: " + id);
-
-        // apply absolute ACL using AclService
-        Acl acl1 = fAclSvc.applyAcl(fRepositoryId, id, acl, defaultAcl, AclPropagation.OBJECTONLY, null);
-        checkSimpleTestAcl(acl, acl1);
-
-        // get ACL using AclService
-        Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
-        checkSimpleTestAcl(acl, aclReturn);
-
-        LOG.info("... testApplyAcl() finished.");
-    }
-
-    @Test
-    public void testAddRemoveAcl() {
-
-        LOG.info("starting testAddRemoveAcl() ...");
-        Acl acl = createAdvancedTestAcl();
-
-        String id = createDocument(fRootFolderId, acl, defaultAcl);
-        LOG.debug("created document with id: " + id);
-
-        Acl aclAdd = createAclAdd();
-        Acl aclRemove = createAclRemove();
-        // apply absolute ACL using AclService
-        Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
-
-        checkAclAfterAddRemove(aclReturn);
-
-        LOG.info("... testAddRemoveAcl() finished.");
-    }
-
-    @Test
-    public void testAddRemoveDuplicatedAcl() {
-        final String DOCUMENT_NAME_1 = "DocumentWithAcl-1";
-        final String DOCUMENT_NAME_2 = "DocumentWithAcl-2";
-
-        LOG.info("starting testAddRemoveDuplicatedAcl() ...");
-        Acl acl = createAdvancedTestAcl();
-        String id1 = createDocument(DOCUMENT_NAME_1, fRootFolderId, acl, defaultAcl);
-        String id2 = createDocument(DOCUMENT_NAME_2, fRootFolderId, acl, defaultAcl);
-
-        // // modify ACL of first doc
-        // List<Ace> acesRemove = Arrays.asList(new Ace[] {
-        // createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
-        // });
-        // Acl aclRemove = new AccessControlListImpl(acesRemove);
-        // List<Ace> acesAdd = Arrays.asList(new Ace[] {
-        // createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()),
-        // });
-        // Acl aclAdd = new AccessControlListImpl(acesAdd);
-        Acl aclAdd = createAclAdd();
-        Acl aclRemove = createAclRemove();
-        Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id1, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
-
-        checkAclAfterAddRemove(aclReturn);
-
-        // Ensure that ACL of second doc is unchanged
-        aclReturn = fAclSvc.getAcl(fRepositoryId, id2, true, null);
-        checkAdvancedTestAcl(acl, aclReturn);
-        LOG.info("... testAddRemoveDuplicatedAcl() finished.");
-    }
-
-    @Test
-    public void testApplyAclRecursiveSimple() {
-        LOG.info("starting testApplyAclRecursiveSimple() ...");
-        Acl acl = createSimpleTestAcl();
-        String[] ids = createHierarchy(acl, defaultAcl);
-        fAclSvc.applyAcl(fRepositoryId, ids[0], acl, null, AclPropagation.PROPAGATE, null);
-        checkAclRecursiveSimple(ids, acl);
-        LOG.info("... testApplyAclRecursiveSimple() finished.");
-    }
-
-    @Test
-    public void testApplyAclRecursiveIncremental() {
-        LOG.info("starting testApplyAclRecursiveIncremental() ...");
-        Acl acl = createAdvancedTestAcl();
-        String[] ids = createHierarchy(acl, defaultAcl);
-
-        Acl aclRemove = createAclRemove();
-        Acl aclAdd = createAclAdd();
-
-        Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, ids[0], aclAdd, aclRemove, AclPropagation.PROPAGATE, null);
-        checkAclAfterAddRemove(aclReturn);
-        for (String id : ids) {
-            aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
-            checkAclAfterAddRemove(aclReturn);
-        }
-        LOG.info("... testApplyAclRecursiveIncremental() finished.");
-    }
-
-    @Test
-    public void testRemoveAllAcls() {
-        LOG.info("starting testRemoveAllAcls() ...");
-
-        Acl acl = createAdvancedTestAcl();
-        String id = createDocument(fRootFolderId, acl, defaultAcl);
-        LOG.debug("created document with id: " + id);
-
-        Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, null, acl, AclPropagation.OBJECTONLY, null);
-        assertNotNull(aclReturn);
-        assertEquals(1, aclReturn.getAces().size());
-        assertTrue(aclHasPermission(aclReturn, "anyone", EnumBasicPermissions.CMIS_ALL.value()));
-
-        LOG.info("... testRemoveAllAcls() finished.");
-    }
-
-    private String createDocument(String name, String folderId, Acl addAces, Acl removeAces) {
-        return createDocumentNoCatch(name, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces, removeAces);
-    }
-
-    private String createDocument(String folderId, Acl addAces, Acl removeAces) {
-        return createDocumentNoCatch(DOCUMENT_NAME, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces,
-                removeAces);
-    }
-
-    private String createFolder(String folderId, Acl addAces, Acl removeAces) {
-        return createFolderNoCatch(FOLDER_NAME, folderId, FOLDER_TYPE_ID, addAces, removeAces);
-    }
-
-    private String[] createHierarchy(Acl addAces, Acl removeAces) {
-        String result[] = new String[6];
-        String rootFolderId = createFolderNoCatch(FOLDER_NAME, fRootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
-        result[0] = rootFolderId;
-        result[1] = createDocument(DOCUMENT_NAME + "-1", rootFolderId, addAces, removeAces);
-        result[2] = createDocument(DOCUMENT_NAME + "-2", rootFolderId, addAces, removeAces);
-        String subFolderId = createFolderNoCatch(FOLDER_NAME, rootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
-        result[3] = subFolderId;
-        result[4] = createDocument(DOCUMENT_NAME + "-1", subFolderId, addAces, removeAces);
-        result[5] = createDocument(DOCUMENT_NAME + "-2", subFolderId, addAces, removeAces);
-        return result;
-    }
-
-    private void checkAclRecursiveSimple(String[] ids, Acl acl) {
-        // get ACL using ObjectService getObject
-        for (String id : ids) {
-            ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null,
-                    false, true, null);
-            checkSimpleTestAcl(acl, objData.getAcl());
-        }
-    }
-
-    private Acl createSimpleTestAcl() {
-        List<Ace> aces = Arrays.asList(new Ace[] { createAce(USER, EnumBasicPermissions.CMIS_READ.value()) });
-        return fFactory.createAccessControlList(aces);
-    }
-
-    private void checkSimpleTestAcl(Acl acl, Acl aclReturn) {
-        assertNotNull(aclReturn);
-        assertEquals(acl.getAces().size(), aclReturn.getAces().size());
-        assertTrue(aclHasPermission(aclReturn, USER, EnumBasicPermissions.CMIS_READ.value()));
-    }
-
-    private Acl createAdvancedTestAcl() {
-        List<Ace> aces = Arrays.asList(new Ace[] { createAce(ALICE, EnumBasicPermissions.CMIS_READ.value()),
-                createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
-                createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value()), });
-        return fFactory.createAccessControlList(aces);
-    }
-
-    private Acl createAclAdd() {
-        List<Ace> acesAdd = Arrays.asList(new Ace[] { createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()), });
-        return fFactory.createAccessControlList(acesAdd);
-    }
-
-    private Acl createAclRemove() {
-        List<Ace> acesRemove = Arrays.asList(new Ace[] { createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
-                createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value()) });
-        return fFactory.createAccessControlList(acesRemove);
-    }
-
-    private void checkAclAfterAddRemove(Acl aclReturn) {
-        assertNotNull(aclReturn);
-        assertEquals(2, aclReturn.getAces().size());
-        assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
-        assertTrue(aclHasPermission(aclReturn, DAN, EnumBasicPermissions.CMIS_WRITE.value()));
-        assertFalse(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
-        assertFalse(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
-        assertTrue(aclHasNoPermission(aclReturn, BOB));
-        assertTrue(aclHasNoPermission(aclReturn, CHRIS));
-    }
-
-    private void checkAdvancedTestAcl(Acl acl, Acl aclReturn) {
-        assertNotNull(aclReturn);
-        assertEquals(acl.getAces().size(), aclReturn.getAces().size());
-        assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
-        assertTrue(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
-        assertTrue(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
-    }
-
-    private Ace createAce(String principalId, String permission) {
-        return fFactory.createAccessControlEntry(principalId, Collections.singletonList(permission));
-    }
-
-    private boolean aclHasPermission(Acl acl, String principalId, String permission) {
-        for (Ace ace : acl.getAces()) {
-            if (ace.getPrincipalId().equals(principalId) && aceContainsPermission(ace, permission)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean aclHasNoPermission(Acl acl, String principalId) {
-        if (null == acl) {
-            return false;
-        }
-
-        for (Ace ace : acl.getAces()) {
-            if (ace.getPrincipalId().equals(principalId)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private boolean aceContainsPermission(Ace ace, String permission) {
-        for (String acePerm : ace.getPermissions()) {
-            if (permission.equals(acePerm)) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java
deleted file mode 100644
index ad5bdd2..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAcl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.Permission;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AclTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AclTest.class);
-
-    final static String ANDREAS = "andreas";
-    final static String BERTA = "berta";
-    final static String CHRISTIAN = "christian";
-    final static String DOROTHEE = "dorothee";
-
-    final InMemoryAce aceN = new InMemoryAce(ANDREAS, Permission.NONE);
-    final InMemoryAce aceR = new InMemoryAce(BERTA, Permission.READ);
-    final InMemoryAce aceW = new InMemoryAce(CHRISTIAN, Permission.WRITE);
-    final InMemoryAce aceA = new InMemoryAce(DOROTHEE, Permission.ALL);
-
-    @Test
-    public void testCreateAce() {
-        try {
-            new InMemoryAce(null, Permission.NONE);
-            fail("create an ACE with null principalId should fail.");
-        } catch (RuntimeException e) {
-        }
-
-        try {
-            new InMemoryAce("xxx", null);
-            fail("create an ACE with null permission should fail.");
-        } catch (RuntimeException e) {
-        }
-    }
-
-    @Test
-    public void testCreate() {
-
-        InMemoryAcl acl = new InMemoryAcl();
-        acl.addAce(aceA);
-        assertEquals(1, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceA);
-
-        acl = new InMemoryAcl(createAceList());
-        LOG.debug(acl.toString());
-
-        assertEquals(2, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceR);
-        assertTrue(acl.getAces().get(1) == aceA);
-
-        acl = createDefaultAcl();
-        checkDefaultAcl(acl);
-
-        try {
-            List<InMemoryAce> aces = createAceList();
-            aces.add(null);
-            acl = new InMemoryAcl(aces);
-            fail("create an ACL with a null ACE should fail.");
-        } catch (RuntimeException e) {
-        }
-    }
-
-    @Test
-    public void testAdd() {
-        InMemoryAcl acl = new InMemoryAcl();
-        acl.addAce(aceR);
-        assertEquals(1, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceR);
-        acl.addAce(aceW);
-        assertEquals(2, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceR);
-        assertTrue(acl.getAces().get(1) == aceW);
-        acl.addAce(aceN);
-        assertEquals(3, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceN);
-        assertTrue(acl.getAces().get(1) == aceR);
-        assertTrue(acl.getAces().get(2) == aceW);
-        acl.addAce(aceA);
-        assertEquals(4, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceN);
-        assertTrue(acl.getAces().get(1) == aceR);
-        assertTrue(acl.getAces().get(2) == aceW);
-        assertTrue(acl.getAces().get(3) == aceA);
-
-        assertFalse("Adding an existing ACE to an ACL should fail.", acl.addAce(aceN));
-        assertFalse("Adding null to an ACL should fail.", acl.addAce(null));
-    }
-
-    @Test
-    public void testRemove() {
-        InMemoryAcl acl = createDefaultAcl();
-        checkDefaultAcl(acl);
-
-        acl.removeAce(aceR);
-        assertEquals(3, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceN);
-        assertTrue(acl.getAces().get(1) == aceW);
-        assertTrue(acl.getAces().get(2) == aceA);
-        acl.removeAce(aceW);
-        assertEquals(2, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceN);
-        assertTrue(acl.getAces().get(1) == aceA);
-        acl.removeAce(aceN);
-        assertEquals(1, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceA);
-        acl.removeAce(aceA);
-        assertEquals(0, acl.getAces().size());
-
-        acl = createDefaultAcl();
-        final InMemoryAce ace = new InMemoryAce("xyu", Permission.ALL);
-        assertFalse("Removing an unknown ACE from an ACL should fail.", acl.removeAce(ace));
-        assertFalse("Removing null from an ACL should fail.", acl.removeAce(null));
-    }
-
-    @Test
-    public void testMerge() {
-        final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE); // will
-                                                                              // be
-                                                                              // added
-        final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ); // is
-                                                                              // same
-        final InMemoryAce aceChange = new InMemoryAce(CHRISTIAN, Permission.ALL); // changes
-                                                                                  // permission
-
-        InMemoryAcl acl1 = createDefaultAcl();
-        InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {
-            {
-                add(aceNew);
-                add(aceRCopy);
-                add(aceChange);
-            }
-        });
-        acl1.mergeAcl(acl2);
-        assertEquals(5, acl1.getAces().size());
-        assertEquals(Permission.NONE, acl1.getPermission(ANDREAS));
-        assertEquals(Permission.READ, acl1.getPermission(BERTA));
-        assertEquals(Permission.ALL, acl1.getPermission(CHRISTIAN));
-        assertEquals(Permission.ALL, acl1.getPermission(DOROTHEE));
-        assertEquals(Permission.WRITE, acl1.getPermission("Hugo"));
-    }
-
-    @Test
-    public void testAclEquality() {
-        final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE);
-        final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ);
-
-        InMemoryAcl acl1 = createDefaultAcl();
-        InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {
-            {
-                add(aceRCopy);
-                add(aceA);
-                add(aceW);
-                add(aceN);
-            }
-        });
-        InMemoryAcl acl3 = new InMemoryAcl(new ArrayList<InMemoryAce>() {
-            {
-                add(aceR);
-                add(aceNew);
-                add(aceW);
-                add(aceN);
-            }
-        });
-        assertEquals(acl1, acl2);
-        assertFalse(acl1.equals(acl3));
-    }
-
-    @Test
-    public void testCheckPermissions() {
-        InMemoryAcl acl = createDefaultAcl();
-
-        assertTrue(acl.hasPermission(ANDREAS, Permission.NONE));
-        assertFalse(acl.hasPermission(ANDREAS, Permission.READ));
-        assertFalse(acl.hasPermission(ANDREAS, Permission.WRITE));
-        assertFalse(acl.hasPermission(ANDREAS, Permission.ALL));
-
-        assertTrue(acl.hasPermission(BERTA, Permission.NONE));
-        assertTrue(acl.hasPermission(BERTA, Permission.READ));
-        assertFalse(acl.hasPermission(BERTA, Permission.WRITE));
-        assertFalse(acl.hasPermission(BERTA, Permission.ALL));
-
-        assertTrue(acl.hasPermission(CHRISTIAN, Permission.NONE));
-        assertTrue(acl.hasPermission(CHRISTIAN, Permission.READ));
-        assertTrue(acl.hasPermission(CHRISTIAN, Permission.WRITE));
-        assertFalse(acl.hasPermission(CHRISTIAN, Permission.ALL));
-
-        assertTrue(acl.hasPermission(DOROTHEE, Permission.NONE));
-        assertTrue(acl.hasPermission(DOROTHEE, Permission.READ));
-        assertTrue(acl.hasPermission(DOROTHEE, Permission.WRITE));
-        assertTrue(acl.hasPermission(DOROTHEE, Permission.ALL));
-    }
-
-    @Test
-    public void testConvertFomCmisAcl() {
-        List<Ace> aces = Arrays.asList(new Ace[] { createAce(ANDREAS, EnumBasicPermissions.CMIS_READ.value()),
-                createAce(DOROTHEE, EnumBasicPermissions.CMIS_WRITE.value()) });
-        AccessControlListImpl cAcl = new AccessControlListImpl(aces);
-        InMemoryAcl acl = InMemoryAcl.createFromCommonsAcl(cAcl);
-        assertEquals(2, acl.size());
-        assertEquals(Permission.READ, acl.getPermission(ANDREAS));
-        assertEquals(Permission.WRITE, acl.getPermission(DOROTHEE));
-
-        try {
-            List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(null, Arrays
-                    .asList(new String[] { EnumBasicPermissions.CMIS_READ.value() })) });
-            acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
-            fail("create Ace will null principal should raise exception.");
-        } catch (RuntimeException e) {
-        }
-        try {
-            List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(
-                    ANDREAS), null) });
-            acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
-            fail("create Ace will null permission should raise exception.");
-        } catch (RuntimeException e) {
-        }
-    }
-
-    @Test
-    public void testConvertToCmisAcl() {
-        Ace ace = aceN.toCommonsAce();
-        assertEquals(ANDREAS, ace.getPrincipalId());
-        assertEquals(1, ace.getPermissions().size());
-        assertEquals("", ace.getPermissions().get(0));
-
-        ace = aceR.toCommonsAce();
-        assertEquals(BERTA, ace.getPrincipalId());
-        assertEquals(1, ace.getPermissions().size());
-        assertEquals(EnumBasicPermissions.CMIS_READ.value(), ace.getPermissions().get(0));
-
-        ace = aceW.toCommonsAce();
-        assertEquals(CHRISTIAN, ace.getPrincipalId());
-        assertEquals(1, ace.getPermissions().size());
-        assertEquals(EnumBasicPermissions.CMIS_WRITE.value(), ace.getPermissions().get(0));
-
-        ace = aceA.toCommonsAce();
-        assertEquals(DOROTHEE, ace.getPrincipalId());
-        assertEquals(1, ace.getPermissions().size());
-        assertEquals(EnumBasicPermissions.CMIS_ALL.value(), ace.getPermissions().get(0));
-
-        InMemoryAcl acl = createDefaultAcl();
-        Acl commonsAcl = acl.toCommonsAcl();
-        assertEquals(4, commonsAcl.getAces().size());
-        assertTrue(hasCommonsAce(commonsAcl, ANDREAS, ""));
-        assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_READ.value()));
-        assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_WRITE.value()));
-        assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_ALL.value()));
-        assertTrue(hasCommonsAce(commonsAcl, BERTA, EnumBasicPermissions.CMIS_READ.value()));
-        assertTrue(hasCommonsAce(commonsAcl, CHRISTIAN, EnumBasicPermissions.CMIS_WRITE.value()));
-        assertTrue(hasCommonsAce(commonsAcl, DOROTHEE, EnumBasicPermissions.CMIS_ALL.value()));
-    }
-
-    @Test
-    public void testCloneAcl() {
-        InMemoryAcl acl = createDefaultAcl();
-        InMemoryAcl acl2 = null;
-        try {
-            acl2 = acl.clone();
-        } catch (CloneNotSupportedException e) {
-            fail("Clone not supported");
-        }
-        assertFalse(acl == acl2);
-        assertEquals(acl, acl2);
-    }
-
-    private InMemoryAcl createDefaultAcl() {
-        return new InMemoryAcl(new ArrayList<InMemoryAce>() {
-            {
-                add(aceA);
-                add(aceR);
-                add(aceN);
-                add(aceW);
-            }
-        });
-    }
-
-    private void checkDefaultAcl(InMemoryAcl acl) {
-        assertEquals(4, acl.getAces().size());
-        assertTrue(acl.getAces().get(0) == aceN);
-        assertTrue(acl.getAces().get(1) == aceR);
-        assertTrue(acl.getAces().get(2) == aceW);
-        assertTrue(acl.getAces().get(3) == aceA);
-    }
-
-    private List<InMemoryAce> createAceList() {
-        return new ArrayList<InMemoryAce>() {
-            {
-                add(aceA);
-                add(aceR);
-            }
-        };
-    }
-
-    private Ace createAce(String principalId, String permission) {
-        AccessControlEntryImpl ace = new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId),
-                Arrays.asList(new String[] { permission }));
-        return ace;
-    }
-
-    private boolean hasCommonsAce(Acl acl, String principalId, String permission) {
-        for (Ace ace : acl.getAces()) {
-            if (ace.getPrincipalId().equals(principalId) && ace.getPermissions().get(0).equals(permission)) {
-                return true;
-            }
-        }
-        return false;
-
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java
deleted file mode 100644
index 436e174..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class DiscoveryServiceTest extends AbstractServiceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(DiscoveryServiceTest.class);
-    private static final String TEST_FOLDER_TYPE_ID = ObjectServiceTest.TEST_FOLDER_TYPE_ID;
-    private static final String TEST_DOCUMENT_TYPE_ID = ObjectServiceTest.TEST_DOCUMENT_TYPE_ID;
-    private static final String TEST_FOLDER_STRING_PROP_ID = ObjectServiceTest.TEST_FOLDER_STRING_PROP_ID;
-    private static final String TEST_DOCUMENT_STRING_PROP_ID = ObjectServiceTest.TEST_DOCUMENT_STRING_PROP_ID;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
-        super.setUp();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testQuery() {
-        log.info("starting testQuery() ...");
-
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        gen.setNumberOfDocumentsToCreatePerFolder(3);
-        gen.setDocumentTypeId(TEST_DOCUMENT_TYPE_ID);
-        gen.setFolderTypeId(TEST_FOLDER_TYPE_ID);
-
-        List<String> propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_DOCUMENT_STRING_PROP_ID);
-        gen.setDocumentPropertiesToGenerate(propsToSet);
-
-        propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_FOLDER_STRING_PROP_ID);
-        gen.setFolderPropertiesToGenerate(propsToSet);
-
-        gen.createFolderHierachy(2, 2, fRootFolderId);
-
-        Boolean searchAllVersions = Boolean.FALSE;
-        Boolean includeAllowableActions = Boolean.FALSE;
-        IncludeRelationships includeRelationships = IncludeRelationships.NONE;
-        String renditionFilter = null;
-        BigInteger maxItems = null;
-        BigInteger skipCount = null;
-
-        String statement = "SELECT * FROM " + TEST_DOCUMENT_TYPE_ID + " WHERE " + TEST_DOCUMENT_STRING_PROP_ID
-                + "='My Doc StringProperty 1'";
-        ObjectList res = fDiscSvc.query(fRepositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, null);
-        assertEquals(1, res.getObjects().size());
-
-        statement = "SELECT " + TEST_DOCUMENT_STRING_PROP_ID + " FROM " + TEST_DOCUMENT_TYPE_ID + " WHERE "
-                + TEST_DOCUMENT_STRING_PROP_ID + "='My Doc StringProperty 1'";
-        res = fDiscSvc.query(fRepositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, null);
-        assertEquals(1, res.getObjects().size());
-        assertEquals(1, res.getObjects().get(0).getProperties().getProperties().size()); // only
-                                                                                         // one
-                                                                                         // property
-                                                                                         // should
-                                                                                         // be
-                                                                                         // delivered
-
-        statement = "SELECT * FROM cmis:folder";
-        res = fDiscSvc.query(fRepositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, null);
-        // root + 2 at level 1 + 2*2 at level 2 = 7
-        assertEquals(7, res.getObjects().size());
-
-        /*
-         * assertEquals(BigInteger.valueOf(9), res.getNumItems());
-         * 
-         * statement = "SELECT * FROM cmis:folder"; res =
-         * fDiscSvc.query(fRepositoryId, statement, searchAllVersions,
-         * includeAllowableActions, includeRelationships, renditionFilter,
-         * maxItems, skipCount, null); // root + 2 at level 1 + 2*2 at level 2 =
-         * 7 assertEquals(BigInteger.valueOf(7), res.getNumItems());
-         * 
-         * statement = "SELECT * FROM cmis:folder"; res =
-         * fDiscSvc.query(fRepositoryId, statement, searchAllVersions,
-         * includeAllowableActions, includeRelationships, renditionFilter,
-         * maxItems, skipCount, null); // root + 2 at level 1 + 2*2 at level 2 =
-         * 7 assertEquals(BigInteger.valueOf(7), res.getNumItems());
-         * 
-         * statement = "SELECT * FROM cmis:folder WHERE name='Jens'"; res =
-         * fDiscSvc.query(fRepositoryId, statement, searchAllVersions,
-         * includeAllowableActions, includeRelationships, renditionFilter,
-         * maxItems, skipCount, null); assertEquals(BigInteger.valueOf(0),
-         * res.getNumItems());
-         */
-        log.info("... testQuery() finished.");
-    }
-
-    @Test
-    public void testQueryPaging() {
-        log.info("starting testQuery() ...");
-
-        String statement;
-        ObjectList res;
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        gen.setNumberOfDocumentsToCreatePerFolder(3);
-        gen.setDocumentTypeId(TEST_DOCUMENT_TYPE_ID);
-        gen.setFolderTypeId(TEST_FOLDER_TYPE_ID);
-
-        List<String> propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_DOCUMENT_STRING_PROP_ID);
-        gen.setDocumentPropertiesToGenerate(propsToSet);
-
-        propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_FOLDER_STRING_PROP_ID);
-        gen.setFolderPropertiesToGenerate(propsToSet);
-
-        gen.createFolderHierachy(2, 2, fRootFolderId);
-
-        Boolean searchAllVersions = Boolean.FALSE;
-        Boolean includeAllowableActions = Boolean.FALSE;
-        IncludeRelationships includeRelationships = IncludeRelationships.NONE;
-        String renditionFilter = null;
-        BigInteger skipCount = BigInteger.valueOf(0);
-        BigInteger maxItems = BigInteger.valueOf(3);
-
-        int count = 0;
-        boolean hasMoreItems = true;
-        statement = "SELECT * FROM cmis:document";
-        while (hasMoreItems) {
-            res = fDiscSvc.query(fRepositoryId, statement, searchAllVersions, includeAllowableActions,
-                    includeRelationships, renditionFilter, maxItems, skipCount, null);
-            hasMoreItems = res.hasMoreItems();
-            assertEquals(3, res.getObjects().size());
-            if (res.getNumItems() != null) {
-                assertEquals(9L, res.getNumItems().longValue());
-            }
-            skipCount = skipCount.add(maxItems);
-            ++count;
-        }
-        assertEquals(3, count);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
deleted file mode 100644
index 0421e2b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.FolderImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ObjectStoreImpl;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Some test directly against the in-memory folder object.
- */
-public class FolderTest extends TestCase {
-
-    private ObjectStoreImpl fStore;
-    private FolderImpl fRoot;
-    private FolderImpl f1;
-    private FolderImpl f2;
-    private FolderImpl f3;
-    private FolderImpl f4;
-    private FolderImpl f11;
-    private static final String TEST_REPOSITORY_ID = "TestRepositoryId";
-    private static final String USER = "user";
-
-    @Override
-    @Before
-    protected void setUp() throws Exception {
-        fStore = new ObjectStoreImpl(TEST_REPOSITORY_ID);
-        createFolders();
-    }
-
-    @Test
-    public void testCreateAndGetFolders() {
-        try {
-            createFolder("Folder 1", fRoot);
-            fail("Should throw exception if folder already exists.");
-        } catch (Exception e) {
-        }
-        assertEquals(f1.getName(), "Folder 1");
-        assertEquals(f11.getName(), "Folder 1.1");
-        assertNull(fRoot.getParentId());
-        assertEquals(fRoot.getId(), f1.getParentId());
-        assertEquals(f1.getId(), f11.getParentId());
-        assertEquals(Filing.PATH_SEPARATOR, getPath(fRoot));
-        assertEquals("/Folder 1", getPath(f1));
-        assertEquals("/Folder 1/Folder 1.1", getPath(f11));
-        StoredObject fTest = fStore.getObjectByPath("/", USER);
-        assertEquals(fRoot, fTest);
-        fTest = fStore.getObjectByPath("/Folder 1", USER);
-        assertEquals(f1, fTest);
-        fTest = fStore.getObjectByPath("/Folder 1/Folder 1.1", USER);
-        assertEquals(f11, fTest);
-        List<Fileable> subFolders = fStore.getChildren(fRoot, -1, -1, "user", false).getChildren();
-        assertEquals(4, subFolders.size());
-        subFolders = fStore.getChildren(f2, -1, -1, "user", false).getChildren();
-        assertEquals(0, subFolders.size());
-        subFolders = fStore.getChildren(f1, -1, -1, "user", false).getChildren();
-        assertEquals(1, subFolders.size());
-    }
-
-    @Test
-    public void testRenameFolder() {
-        // rename top level folder
-        String newName = "Folder B";
-        String oldPath = getPath(f2);
-        fStore.rename(f2, newName, USER);
-        assertEquals(f2.getName(), newName);
-        assertEquals(getPath(f2), Filing.PATH_SEPARATOR + newName);
-        assertNull(fStore.getObjectByPath(oldPath, USER));
-        assertEquals(f2, fStore.getObjectByPath(Filing.PATH_SEPARATOR + newName, USER));
-        try {
-            fStore.rename(f2, "Folder 3", USER);
-            fail("Should not allow to rename a folder to an existing name");
-        } catch (Exception e) {
-        }
-
-        // rename sub folder
-        oldPath = getPath(f11);
-        fStore.rename(f11, newName, USER);
-        assertEquals(f11.getName(), newName);
-        assertEquals(getPath(f11), "/Folder 1/Folder B");
-        assertNull(fStore.getObjectByPath(oldPath, USER));
-        assertEquals(f11, fStore.getObjectByPath("/Folder 1/Folder B", USER));
-
-        // rename to existing name
-        try {
-        	newName = f3.getName();
-            fStore.rename(f2, newName, USER);
-            fail("Should not allow to rename a folder to an existing name");
-        } catch (Exception e) {
-        }
-
-        // rename to same name
-        try {
-            newName = f2.getName();
-        	fStore.rename(f2, f2.getName(), USER);
-            assertEquals(f2.getName(), newName);
-        } catch (Exception e) {
-            fail("Rename with same name as before should succeed.");
-        }
-
-        // rename root folder
-        try {
-            fStore.rename(fRoot, "abc", USER);
-            fail("Should not be possible to rename root folder");
-        } catch (Exception e) {
-        }
-    }
-
-    @Test
-    public void testMoveFolder() {
-        String oldPath = getPath(f1);
-        Folder f1Parent = fRoot;
-        fStore.move(f1, f1Parent, f3, USER);
-        assertNull(fStore.getObjectByPath(oldPath, USER));
-        assertEquals(getPath(f1), "/Folder 3/Folder 1");
-        assertEquals(f1, fStore.getObjectByPath("/Folder 3/Folder 1", USER));
-
-        fStore.rename(f2, "Folder 1", USER);
-        try {
-            Folder f2Parent = fRoot;
-            fStore.move(f2, f2Parent, f3, USER);
-            fail("Should not be possible to move folder to a folder that has a child with same name");
-        } catch (Exception e) {
-        }
-    }
-
-    @Test
-    public void testDeleteFolder() {
-        String oldPath = getPath(f2);
-        fStore.deleteObject(f2.getId(), true, "TestUser");
-        assertNull(fStore.getObjectByPath(oldPath, USER));
-
-        try {
-            fStore.deleteObject(f1.getId(), true, "TestUser");
-            fail("Should not be possible to move folder that has children");
-        } catch (Exception e) {
-        }
-    }
-
-    private void createFolders() {
-        fRoot = (FolderImpl) fStore.getRootFolder();
-        f1 = (FolderImpl) createFolder("Folder 1", fRoot);
-
-        f2 = (FolderImpl) createFolder("Folder 2", fRoot);
-
-        f3 = (FolderImpl) createFolder("Folder 3", fRoot);
-
-        f4 = (FolderImpl) createFolder("Folder 4", fRoot);
-
-        f11 = (FolderImpl) createFolder("Folder 1.1", f1);
-    }
-
-    private Folder createFolder(String name, Folder parent) {
-        return fStore.createFolder(name, null, "user", parent, null, null, null);
-    }
-
-    private String getPath(Folder folder) {
-        return fStore.getFolderPath(folder.getId());
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java
deleted file mode 100644
index 93ef280..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class MultiFilingTest extends AbstractServiceTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(MultiFilingTest.class);
-    private static final String DOCUMENT_TYPE_ID = UnitTestTypeSystemCreator.COMPLEX_TYPE;
-    private static final String FOLDER_TYPE_ID = DocumentTypeCreationHelper.getCmisFolderType().getId();
-    private static final String UNFILED_DOC_NAME = "Unfiled document";
-    private static final String RENAMED_DOC_NAME = "My Renamed Document";
-
-    private String fId1;
-    private String fId2;
-    private String fId11;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setUp();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testCreateUnfiledDocument() {
-        LOG.debug("Begin testCreatUnfiledDocument()");
-        String docId = createUnfiledDocument();
-        String docId2 = getDocument(docId);
-        assertEquals(docId, docId2);
-
-        // get object parents, must be empty
-        List<ObjectParentData> res = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-
-        assertNotNull(res);
-        assertEquals(res.size(), 0);
-
-        // test with a different user than Admin:
-        switchCallContext("Alice");
-        docId = createDocument(UNFILED_DOC_NAME + "_2", null, DOCUMENT_TYPE_ID, true);
-        docId2 = getDocument(docId);
-        assertEquals(docId, docId2);
-
-        LOG.debug("End testCreatUnfiledDocument()");
-    }
-
-    @Test
-    public void testMakeFiledDocumentUnfiled() {
-        LOG.debug("Begin testMakeFiledDocumentUnfiled()");
-
-        String docId = createDocument("Filed document", fRootFolderId, DOCUMENT_TYPE_ID, true);
-
-        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fRootFolderId, null);
-        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        assertEquals(0, parents.size());
-
-        LOG.debug("End testMakeFiledDocumentUnfiled()");
-    }
-
-    @Test
-    public void testAddDocumentToFolder() {
-        LOG.debug("Begin testAddDocumentToFolder()");
-        String docId = createUnfiledDocument();
-        addDocumentToFolder(docId);
-        LOG.debug("End testAddDocumentToFolder()");
-    }
-
-    @Test
-    public void testRemoveDocumentFromFolder() {
-        LOG.debug("Begin testRemoveDocumentFromFolder()");
-
-        String docId = createUnfiledDocument();
-        removeDocumentFromFolder(docId);
-        LOG.debug("End testRemoveDocumentFromFolder()");
-    }
-
-    @Test
-    public void testMoveMultiFiledDocument() {
-        LOG.debug("begin testMoveMultiFiledDocument()");
-        String docId = createUnfiledDocument();
-        prepareMultiFiledDocument(docId);
-        String newFolderId = createFolder("folder2.1", fId2, FOLDER_TYPE_ID);
-
-        Holder<String> idHolder = new Holder<String>(docId);
-        fObjSvc.moveObject(fRepositoryId, idHolder, newFolderId, fId11, null);
-        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        assertEquals(3, parents.size());
-        boolean foundNewParent = false;
-        boolean foundOldParent = false;
-        for (ObjectParentData parentData : parents) {
-            if (parentData.getObject().getId().equals(newFolderId)) {
-                foundNewParent = true;
-            }
-            if (parentData.getObject().getId().equals(fId11)) {
-                foundOldParent = true;
-            }
-        }
-        assertTrue("After move new target should be a parent", foundNewParent);
-        assertFalse("After move old source should no longer be a parent", foundOldParent);
-        LOG.debug("End testMoveMultiFiledDocument()");
-    }
-
-    @Test
-    public void testRenameMultiFiledDocument() {
-        LOG.debug("begin testRenameMultiFiledDocument()");
-        String docId = createUnfiledDocument();
-        prepareMultiFiledDocument(docId);
-        renameDocumentAndCheckResult(docId);
-        LOG.debug("End testRenameMultiFiledDocument()");
-    }
-
-    @Test
-    public void testRenameMultiFiledDocumentWithNameConflict() {
-        LOG.debug("begin testRenameMultiFiledDocument()");
-        String docId = createUnfiledDocument();
-        prepareMultiFiledDocument(docId);
-        // create a document with the new name in one of the folders
-        createDocument(RENAMED_DOC_NAME, fId11, DOCUMENT_TYPE_ID, true);
-        // try to rename which should fail now
-        try {
-            renameDocumentAndCheckResult(docId);
-            fail("A rename to an existing name in one of the filed folders should fail");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisNameConstraintViolationException);
-        }
-        LOG.debug("End testRenameMultiFiledDocument()");
-    }
-
-    @Test
-    public void testRemoveDocumentFromAllFolders() {
-        LOG.debug("Begin testRemoveDocumentFromAllFolders()");
-
-        String docId = createUnfiledDocument();
-        removeDocumentFromAllFolders(docId);
-        LOG.debug("End testRemoveDocumentFromAllFolders()");
-    }
-
-    @Test
-    public void testAddVersionedDocumentToFolder() {
-        LOG.debug("Begin testAddVersionedDocumentToFolder()");
-        String docId = createVersionedDocument();
-        addDocumentToFolder(docId);
-        LOG.debug("End testAddVersionedDocumentToFolder()");
-    }
-
-    @Test
-    public void testRemoveVersionedDocumentFromFolder() {
-        LOG.debug("Begin testRemoveVersionedDocumentFromFolder()");
-
-        String docId = createVersionedDocument();
-        removeDocumentFromFolder(docId);
-        LOG.debug("End testRemoveVersionedDocumentFromFolder()");
-    }
-
-    @Test
-    public void testRemoveVersionedDocumentFromAllFolders() {
-        LOG.debug("Begin testRemoveVersionedDocumentFromAllFolders()");
-
-        String docId = createVersionedDocument();
-        removeDocumentFromAllFolders(docId);
-        LOG.debug("End testRemoveVersionedDocumentFromAllFolders()");
-    }
-
-    private void createFolders() {
-        fId1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
-        fId2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
-        fId11 = createFolder("folder1.1", fId1, FOLDER_TYPE_ID);
-    }
-
-    private void addDocumentToFolder(String docId) {
-
-        List<String> folderIds = prepareMultiFiledDocument(docId);
-
-        // get object parents, must contain all folders
-        List<ObjectParentData> res = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        assertEquals(3, res.size());
-        for (ObjectParentData opd : res) {
-            assertTrue(folderIds.contains(opd.getObject().getId()));
-            assertEquals(BaseTypeId.CMIS_FOLDER, opd.getObject().getBaseTypeId());
-            assertEquals(UNFILED_DOC_NAME, opd.getRelativePathSegment());
-        }
-
-        // try version specific filing, should fail
-        try {
-            fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId1, false, null);
-            fail("Adding not all versions to a folder should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisNotSupportedException);
-        }
-    }
-
-    private void removeDocumentFromFolder(String docId) {
-        prepareMultiFiledDocument(docId);
-
-        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId1, null);
-        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        assertEquals(2, parents.size());
-        for (ObjectParentData opd : parents) {
-            assertFalse(fId1.equals(opd.getObject().getId()));
-        }
-
-        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId2, null);
-        parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false, IncludeRelationships.NONE, null, true,
-                null);
-        assertEquals(1, parents.size());
-        for (ObjectParentData opd : parents) {
-            assertFalse(fId1.equals(opd.getObject().getId()));
-        }
-
-        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId11, null);
-        parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false, IncludeRelationships.NONE, null, true,
-                null);
-        assertEquals(0, parents.size());
-    }
-
-    private void removeDocumentFromAllFolders(String docId) {
-        prepareMultiFiledDocument(docId);
-
-        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, null, null);
-        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        assertEquals(0, parents.size());
-    }
-
-    private String createUnfiledDocument() {
-        return createDocument(UNFILED_DOC_NAME, null, DOCUMENT_TYPE_ID, true);
-    }
-
-    private List<String> prepareMultiFiledDocument(String docId) {
-        createFolders();
-
-        // add the document to three folders
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId1, true, null);
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId2, true, null);
-        fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId11, true, null);
-
-        List<String> folderIds = new ArrayList<String>();
-        folderIds.add(fId1);
-        folderIds.add(fId2);
-        folderIds.add(fId11);
-
-        return folderIds;
-    }
-
-    private void renameDocumentAndCheckResult(String docId) {
-        Holder<String> idHolder = new Holder<String>(docId);
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, RENAMED_DOC_NAME));
-        Properties newProps = fFactory.createPropertiesData(properties);
-        Holder<String> changeTokenHolder = new Holder<String>();
-        fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-        docId = idHolder.getValue();
-        ObjectData res = fObjSvc.getObject(fRepositoryId, docId, "*", false, IncludeRelationships.NONE, null, false,
-                false, null);
-        assertNotNull(res);
-        Map<String, PropertyData<?>> propMap = res.getProperties().getProperties();
-        PropertyData<?> pd = propMap.get(PropertyIds.NAME);
-        assertNotNull(pd);
-        assertEquals(RENAMED_DOC_NAME, pd.getFirstValue());
-    }
-
-    private String createVersionedDocument() {
-
-        return createDocument(UNFILED_DOC_NAME, null, UnitTestTypeSystemCreator.VERSIONED_TYPE, VersioningState.MAJOR,
-                true);
-
-    }
-
-    private void switchCallContext(String user) {
-        ((DummyCallContext) fTestCallContext).put(CallContext.USERNAME, user);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java
deleted file mode 100644
index 741e75c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class NavigationServiceTest extends AbstractServiceTest {
-    private static final Logger log = LoggerFactory.getLogger(NavigationServiceTest.class);
-    private static final int NUM_ROOT_FOLDERS = 10;
-    private String fLevel1FolderId;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setUp();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testGetChildren() {
-        log.info("starting testGetChildren() ...");
-        createLevel1Folders();
-
-        log.info("test getting all objects with getChildren");
-        BigInteger maxItems = BigInteger.valueOf(NUM_ROOT_FOLDERS * 2);
-        BigInteger skipCount = BigInteger.valueOf(0);
-        ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
-                IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
-        List<ObjectInFolderData> folders = result.getObjects();
-        log.info(" found " + folders.size() + " folders in getChildren()");
-        for (ObjectInFolderData folder : folders) {
-            log.info("   found folder id " + folder.getObject().getId() + " path segment " + folder.getPathSegment());
-        }
-        assertEquals(NUM_ROOT_FOLDERS, folders.size());
-
-        log.info("test paging with getChildren");
-        maxItems = BigInteger.valueOf(3);
-        skipCount = BigInteger.valueOf(3);
-        result = fNavSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false, IncludeRelationships.NONE, null,
-                true, maxItems, skipCount, null);
-        folders = result.getObjects();
-        log.info(" found " + folders.size() + " folders in getChildren()");
-        for (ObjectInFolderData folder : folders) {
-            log.info("   found folder id " + folder.getObject().getId() + " path segment " + folder.getPathSegment());
-        }
-        assertEquals(3, folders.size());
-        assertEquals("Folder 3", folders.get(0).getPathSegment());
-        assertTrue(result.getNumItems().longValue() > 0);
-        log.info("... testGetChildren() finished.");
-    }
-
-    @Test
-    public void testGetFolderTree() {
-        log.info("starting testGetFolderTree() ...");
-        createFolderHierachy(3, 5);
-
-        log.info("test getting all objects with getFolderTree");
-        BigInteger depth = BigInteger.valueOf(-1);
-        Boolean includePathSegments = true;
-        String propertyFilter = "*";
-        String renditionFilter = null;
-        Boolean includeAllowableActions = false;
-        String objectId = fRootFolderId;
-
-        List<ObjectInFolderContainer> tree = fNavSvc.getFolderTree(fRepositoryId, objectId, depth, propertyFilter,
-                includeAllowableActions, IncludeRelationships.NONE, renditionFilter, includePathSegments, null);
-
-        log.info("Descendants for object id " + objectId + " are: ");
-        for (ObjectInFolderContainer folder : tree) {
-            logFolderContainer(folder, 0);
-        }
-
-        log.info("... testGetFolderTree() finished.");
-    }
-
-    private void logFolderContainer(ObjectInFolderContainer folder, int depth) {
-        StringBuilder prefix = new StringBuilder();
-        for (int i = 0; i < depth; i++) {
-            prefix.append("   ");
-        }
-
-        log.info(prefix + "name: " + folder.getObject().getPathSegment());
-        List<ObjectInFolderContainer> children = folder.getChildren();
-        if (null != children) {
-            for (ObjectInFolderContainer child : children) {
-                logFolderContainer(child, depth + 1);
-            }
-        }
-    }
-
-    @Test
-    public void testGetDescendants() {
-        log.info("starting testGetDescendants() ...");
-        final int numLevels = 3;
-        final int childrenPerLevel = 3;
-        int objCount = createFolderHierachy(numLevels, childrenPerLevel);
-
-        log.info("test getting all objects with getDescendants");
-        List<ObjectInFolderContainer> result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId,
-                BigInteger.valueOf(-1), "*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
-
-        for (ObjectInFolderContainer obj : result) {
-            log.info("   found folder id " + obj.getObject().getObject().getId() + " path segment "
-                    + obj.getObject().getPathSegment());
-        }
-        int sizeOfDescs = getSizeOfDescendants(result);
-        assertEquals(objCount, sizeOfDescs);
-
-        log.info("test getting one level with getDescendants");
-        result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(1), "*", Boolean.TRUE,
-                IncludeRelationships.NONE, null, Boolean.TRUE, null);
-
-        for (ObjectInFolderContainer obj : result) {
-            log.info("   found folder id " + obj.getObject().getObject().getId() + " path segment "
-                    + obj.getObject().getPathSegment());
-        }
-        sizeOfDescs = getSizeOfDescendants(result);
-        assertEquals(childrenPerLevel, sizeOfDescs);
-
-        log.info("test getting two levels with getDescendants");
-        result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(2), "*", Boolean.TRUE,
-                IncludeRelationships.NONE, null, Boolean.TRUE, null);
-
-        for (ObjectInFolderContainer obj : result) {
-            log.info("   found folder id " + obj.getObject().getObject().getId() + " path segment "
-                    + obj.getObject().getPathSegment());
-        }
-        sizeOfDescs = getSizeOfDescendants(result);
-        assertEquals(childrenPerLevel * childrenPerLevel + childrenPerLevel, sizeOfDescs);
-
-        log.info("... testGetDescendants() finished.");
-    }
-
-    @Test
-    public void testGetFolderParent() {
-        log.info("starting testGetFolderParent() ...");
-        createLevel1Folders();
-        String folderId = fLevel1FolderId;
-
-        ObjectData result = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
-        log.info(" found parent for id \'" + folderId + "\' is \'" + result.getId() + "\'");
-        assertEquals(fRootFolderId, result.getId()); // should be root folder
-
-        folderId = fRootFolderId;
-        try {
-            result = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
-            log.info(" found parent for id " + folderId + " is " + result.getId());
-            fail("Should not be possible to get parent for root folder");
-        } catch (Exception e) {
-            assertEquals(CmisInvalidArgumentException.class, e.getClass());
-            log.info(" getParent() for root folder raised expected exception");
-        }
-        log.info("... testGetFolderParent() finished.");
-    }
-
-    @Test
-    public void testGetPaging() {
-        log.info("starting testGetPaging() ...");
-        // create a folder
-        String folderId = super.createFolder("PagingFolder", fRootFolderId, DocumentTypeCreationHelper
-                .getCmisFolderType().getId());
-
-        // create some documents
-        for (int i = 0; i < 10; i++) {
-            super.createDocument("File-" + i, folderId, "cmis:document", true);
-        }
-        log.info("test getting all objects with getChildren");
-        // get first page
-        BigInteger maxItems = BigInteger.valueOf(3);
-        BigInteger skipCount = BigInteger.valueOf(0);
-        ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, folderId, "*", null, false,
-                IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
-        List<ObjectInFolderData> files = result.getObjects();
-        log.info(" found " + files.size() + " files in getChildren()");
-        for (ObjectInFolderData file : files) {
-            log.info("   found folder id " + file.getObject().getId() + " path segment " + file.getPathSegment());
-        }
-        assertEquals(3, files.size());
-        assertEquals(BigInteger.valueOf(10), result.getNumItems());
-        assertTrue(result.hasMoreItems());
-
-        // get second page
-        maxItems = BigInteger.valueOf(3);
-        skipCount = BigInteger.valueOf(3);
-        result = fNavSvc.getChildren(fRepositoryId, folderId, "*", null, false, IncludeRelationships.NONE, null, true,
-                maxItems, skipCount, null);
-        files = result.getObjects();
-        log.info(" found " + files.size() + " files in getChildren()");
-        for (ObjectInFolderData file : files) {
-            log.info("   found folder id " + file.getObject().getId() + " path segment " + file.getPathSegment());
-        }
-        assertEquals(3, files.size());
-        assertEquals(BigInteger.valueOf(10), result.getNumItems());
-        assertTrue(result.hasMoreItems());
-
-        // get third page
-        maxItems = BigInteger.valueOf(3);
-        skipCount = BigInteger.valueOf(9);
-        result = fNavSvc.getChildren(fRepositoryId, folderId, "*", null, false, IncludeRelationships.NONE, null, true,
-                maxItems, skipCount, null);
-        files = result.getObjects();
-        log.info(" found " + files.size() + " files in getChildren()");
-        for (ObjectInFolderData file : files) {
-            log.info("   found folder id " + file.getObject().getId() + " path segment " + file.getPathSegment());
-        }
-        assertEquals(1, files.size());
-        assertEquals(BigInteger.valueOf(10), result.getNumItems());
-        assertFalse(result.hasMoreItems());
-        log.info("... testGetPaging() finished.");
-
-    }
-
-    private int getSizeOfDescendants(List<ObjectInFolderContainer> objs) {
-        int sum = 0;
-        if (null != objs) {
-            sum = objs.size();
-            for (ObjectInFolderContainer obj : objs) {
-                if (null != obj.getChildren()) {
-                    sum += getSizeOfDescendants(obj.getChildren());
-                }
-            }
-        }
-        return sum;
-    }
-
-    private void createLevel1Folders() {
-        for (int i = 0; i < NUM_ROOT_FOLDERS; i++) {
-            List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, "Folder " + i));
-            properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, DocumentTypeCreationHelper
-                    .getCmisFolderType().getId()));
-            Properties props = fFactory.createPropertiesData(properties);
-            String id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
-            if (i == 3) {
-                fLevel1FolderId = id;
-            }
-        }
-    }
-
-    private int createFolderHierachy(int levels, int childrenPerLevel) {
-
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        gen.createFolderHierachy(levels, childrenPerLevel, fRootFolderId);
-        int objCount = gen.getObjectsInTotal();
-        return objCount;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java
deleted file mode 100644
index 2885b79..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import junit.framework.Assert;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-
-public class ObjectCreator {
-
-    private final BindingsObjectFactory fFactory;
-    private final ObjectService fObjSvc;
-    private final String fRepositoryId;
-
-    public ObjectCreator(BindingsObjectFactory factory, ObjectService objSvc, String repositoryId) {
-        fObjSvc = objSvc;
-        fFactory = factory;
-        fRepositoryId = repositoryId;
-    }
-
-    public String createDocument(String name, String typeId, String folderId, VersioningState versioningState,
-            Map<String, String> propsToSet) {
-        ContentStream contentStream = null;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        Properties props = createStringDocumentProperties(name, typeId, propsToSet);
-
-        contentStream = createContent();
-
-        String id = null;
-        id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies, addACEs,
-                removeACEs, extension);
-        if (null == id) {
-            Assert.fail("createDocument failed.");
-        }
-
-        return id;
-    }
-
-    public Properties createStringDocumentProperties(String name, String typeId, Map<String, String> propsToSet) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        if (null != propsToSet) {
-            for (Entry<String, String> propToSet : propsToSet.entrySet()) {
-                properties.add(fFactory.createPropertyStringData(propToSet.getKey(), propToSet.getValue()));
-            }
-        }
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    public ContentStream createContent() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = 32 * 1024;
-        byte[] b = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
-                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a }; // 32
-        // Bytes
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int i = 0; i < 1024; i++) {
-                ba.write(b);
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        content.setStream(new ByteArrayInputStream(ba.toByteArray()));
-        content.setLength(BigInteger.valueOf(len));
-        return content;
-    }
-
-    public ContentStream createAlternateContent() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = 32 * 1024;
-        byte[] b = { 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
-                0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61 }; // 32
-        // Bytes
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int i = 0; i < 1024; i++) {
-                ba.write(b);
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        content.setStream(new ByteArrayInputStream(ba.toByteArray()));
-        content.setLength(BigInteger.valueOf(len));
-        return content;
-    }
-
-    /**
-     * Compare two streams and return true if they are equal.
-     */
-    public boolean verifyContent(ContentStream csd1, ContentStream csd2) {
-        if (!csd1.getFileName().equals(csd2.getFileName())) {
-            return false;
-        }
-        if (!csd1.getBigLength().equals(csd2.getBigLength())) {
-            return false;
-        }
-        if (!csd1.getMimeType().equals(csd2.getMimeType())) {
-            return false;
-        }
-        long len = csd1.getBigLength().longValue();
-        InputStream s1 = csd1.getStream();
-        InputStream s2 = csd2.getStream();
-        try {
-            for (int i = 0; i < len; i++) {
-                int val1 = s1.read();
-                int val2 = s2.read();
-                if (val1 != val2) {
-                    return false;
-                }
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    public void updateProperty(String id, String propertyId, String propertyValue) {
-        Properties properties = getUpdatePropertyList(propertyId, propertyValue);
-
-        Holder<String> idHolder = new Holder<String>(id);
-        Holder<String> changeTokenHolder = new Holder<String>();
-        fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, properties, null);
-    }
-
-    public Properties getUpdatePropertyList(String propertyId, String propertyValue) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(propertyId, propertyValue));
-        Properties newProps = fFactory.createPropertiesData(properties);
-        return newProps;
-    }
-
-    public List<PropertyData<?>> getUpdatePropertyDataList(String propertyId, String propertyValue) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(propertyId, propertyValue));
-        return properties;
-    }
-    
-    public boolean verifyProperty(String id, String propertyId, String propertyValue) {
-        Properties props = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        Map<String, PropertyData<?>> propsMap = props.getProperties();
-        PropertyString pd = (PropertyString) propsMap.get(propertyId);
-        return propertyValue.equals(pd.getFirstValue());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
deleted file mode 100644
index 762629b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
+++ /dev/null
@@ -1,2097 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.RenditionUtil;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ObjectServiceTest extends AbstractServiceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(ObjectServiceTest.class);
-    public static final String TEST_FOLDER_TYPE_ID = "MyFolderType";
-    public static final String TEST_DOCUMENT_TYPE_ID = "MyDocumentType";
-    public static final String TEST_DOC_TYPE_WITH_DEFAULTS_ID = "DocumentTypeWithDefault";
-    public static final String TEST_FOLDER_TYPE_WITH_DEFAULTS_ID = "FolderTypeWithDefault";
-    public static final String TEST_FOLDER_STRING_PROP_ID = "MyFolderStringProp";
-    public static final String TEST_DOCUMENT_STRING_PROP_ID = "MyDocumentStringProp";
-    public static final String TEST_VERSION_DOCUMENT_TYPE_ID = "MyVersionedType";
-    public static final String TEST_VER_PROPERTY_ID = "VerStringProp";
-    public static final String TEST_CUSTOM_DOCUMENT_TYPE_ID = "MyCustomDocumentType";
-    public static final String TEST_INHERITED_CUSTOM_DOCUMENT_TYPE_ID = "MyCustomInheritedDocType";
-    public static final String TEST_CUSTOM_NO_CONTENT_TYPE_ID = "NoContentType";
-    public static final String TEST_CUSTOM_MUST_CONTENT_TYPE_ID = "MustHaveContentType";
-    public static final String TEST_DOCUMENT_MY_STRING_PROP_ID = "MyCustomDocumentStringProp";
-    public static final String TEST_DOCUMENT_MY_MULTI_STRING_PROP_ID = "MyCustomDocumentMultiStringProp";
-    public static final String TEST_DOCUMENT_MY_INT_PROP_ID = "MyCustomDocumentIntProp";
-    public static final String TEST_DOCUMENT_MY_INT_PROP_ID_MANDATORY_DEFAULT = "MyCustomDocumentIntPropMandatoryDefault";
-    public static final String TEST_FOLDER_MY_MULTI_STRING_PROP_ID = "MyCustomDocumentMultiStringProp";
-    public static final String TEST_FOLDER_MY_INT_PROP_ID = "MyCustomDocumentIntProp";
-    public static final String TEST_FOLDER_MY_INT_PROP_ID_MANDATORY_DEFAULT = "MyCustomDocumentIntPropMandatoryDefault";
-    public static final String TEST_DOCUMENT_MY_SUB_STRING_PROP_ID = "MyInheritedStringProp";
-    public static final String TEST_DOCUMENT_MY_SUB_INT_PROP_ID = "MyInheritedIntProp";
-    public static final String TEST_ITEM_TYPE_ID = "MyItemType";
-    public static final String ITEM_STRING_PROP = "ItemStringProp";
-    private static final String DOCUMENT_TYPE_ID = DocumentTypeCreationHelper.getCmisDocumentType().getId();
-    private static final String DOCUMENT_ID = "Document_1";
-    private static final String FOLDER_TYPE_ID = DocumentTypeCreationHelper.getCmisFolderType().getId();
-    private static final String FOLDER_ID = "Folder_1";
-    private static final String MY_CUSTOM_NAME = "My Custom Document";
-    private static final int MAX_SIZE = 100;
-    private static final String PNG = "image/png";
-    private static final String JPEG = "image/jpeg";
-    private static final String NEW_STRING_PROP_VAL = "My ugly string 1";
-    private static final BigInteger NEW_INT_PROP_VAL = BigInteger.valueOf(815);
-    public static final String TEST_SECONDARY_TYPE_ID = "MySecondaryType";
-    public static final String SECONDARY_STRING_PROP = "SecondaryStringProp";
-    public static final String SECONDARY_INTEGER_PROP = "SecondaryIntegerProp";
-    public static final String REL_STRING_PROP = "CrossReferenceKind";
-    public static final String TEST_RELATION_TYPE_ID = "CrossReferenceType";
-    public static final String TEST_RESTRICTED_RELATION_TYPE_ID = "RestrictedRelationType";
-    public static final String TEST_POLICY_TYPE_ID = "AuditPolicy";
-    public static final String TEST_POLICY_PROPERTY_ID = "AuditSettings";
-	private static final String ENCODING_UTF8 = "UTF-8";
-
-    ObjectCreator fCreator;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
-        super.setUp();
-        fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Override
-    protected void addParameters(Map<String, String> parameters) {
-        parameters.put(ConfigConstants.MAX_CONTENT_SIZE_KB, Integer.valueOf(MAX_SIZE).toString());
-    }
-
-    @Test
-    public void testCreateDocument() {
-        log.info("starting testCreateObject() ...");
-        String id = createDocument(fRootFolderId, false);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-        log.info("... testCreateObject() finished.");
-
-        // test create a document with a folder type, should fail:
-        try {
-            Properties props = createDocumentProperties("DocumentWithAFolderType", FOLDER_TYPE_ID);
-            id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                    null, null);
-            assertNotNull(id);
-            fail("Creating  document with a folder type should fail.");
-        } catch (Exception e) {
-            log.info("Creating  document with a folder type failed as expected.");
-        }
-        // test create a document with an illegal name, should fail:
-        try {
-            Properties props = createDocumentProperties("abc (:*)", DOCUMENT_TYPE_ID);
-            fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null, null,
-                    null);
-            fail("Creating  document with an illegal name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-            log.info("Creating  document with an illegal name failed as expected.");
-        }
-    }
-
-    @Test
-    public void testCreateDocumentInvalidNames() {
-        try {
-            createDocumentNoCatch(null, fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
-            fail("Document creation with null name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createDocumentNoCatch("", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
-            fail("Document creation with empty name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createDocumentNoCatch("/(%#$a������������", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
-            fail("Document creation with ilegal name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createDocumentNoCatch("DuplicatedName", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
-            createDocumentNoCatch("DuplicatedName", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
-            fail("Document creation with existing name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisNameConstraintViolationException);
-        }
-    }
-
-    @Test
-    public void testCreateFolderInvalidNames() {
-        try {
-            createFolderNoCatch(null, fRootFolderId, FOLDER_TYPE_ID);
-            fail("Folder creation with null name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createFolderNoCatch("", fRootFolderId, FOLDER_TYPE_ID);
-            fail("Folder creation with empty name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createFolderNoCatch(
-                    "/(%#$���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������",
-                    fRootFolderId, FOLDER_TYPE_ID);
-            fail("Folder creation with ilegal name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        try {
-            createFolderNoCatch("DuplicatedName", fRootFolderId, FOLDER_TYPE_ID);
-            createFolderNoCatch("DuplicatedName", fRootFolderId, FOLDER_TYPE_ID);
-            fail("Folder creation with existing name should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisNameConstraintViolationException || e instanceof IllegalArgumentException);
-        }
-    }
-
-    @Test
-    public void testGetObject() {
-        log.info("starting testGetObject() ...");
-        log.info("  creating object");
-        String id = createDocument(fRootFolderId, false);
-        if (id != null) {
-            log.info("  createDocument succeeded with created id: " + id);
-        }
-
-        log.info("  getting object");
-        retrieveDocument(id);
-        log.info("... testGetObject() finished.");
-    }
-
-    @Test
-    public void testGetObjectByPath() {
-        log.info("starting testGetObjectByPath() ...");
-        log.info("  creating object");
-
-        // create a tree for testing paths
-        String f1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
-        String f2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
-        String f3 = createFolder("folder3", fRootFolderId, FOLDER_TYPE_ID);
-        String f11 = createFolder("folder1.1", f1, FOLDER_TYPE_ID);
-        String f12 = createFolder("folder1.2", f1, FOLDER_TYPE_ID);
-        String f13 = createFolder("folder1.3", f1, FOLDER_TYPE_ID);
-        String f31 = createFolder("folder3.1", f3, FOLDER_TYPE_ID);
-        String f32 = createFolder("folder3.2", f3, FOLDER_TYPE_ID);
-        String f33 = createFolder("folder3.3", f3, FOLDER_TYPE_ID);
-        String f121 = createFolder("folder1.2.1", f12, FOLDER_TYPE_ID);
-        String f122 = createFolder("folder1.2.2", f12, FOLDER_TYPE_ID);
-        String f123 = createFolder("folder1.2.3", f12, FOLDER_TYPE_ID);
-        String f331 = createFolder("folder3.3.1", f33, FOLDER_TYPE_ID);
-        String f332 = createFolder("folder3.3.2", f33, FOLDER_TYPE_ID);
-        String f333 = createFolder("folder3.3.3", f33, FOLDER_TYPE_ID);
-        String doc12 = createDocument("Document1.2.Doc", f12, false);
-        String doc33 = createDocument("Document3.3.Doc", f33, false);
-        String doc331 = createDocument("Document3.3.1.Doc", f331, false);
-        String doc333 = createDocument("Document3.3.3.Doc", f333, false);
-
-        log.info("  getting object by path");
-        getByPath(f1, "/folder1");
-        getByPath(f2, "/folder2");
-        getByPath(f3, "/folder3");
-        getByPath(f11, "/folder1/folder1.1");
-        getByPath(f12, "/folder1/folder1.2");
-        getByPath(f13, "/folder1/folder1.3");
-        getByPath(f31, "/folder3/folder3.1");
-        getByPath(f32, "/folder3/folder3.2");
-        getByPath(f33, "/folder3/folder3.3");
-        getByPath(f121, "/folder1/folder1.2/folder1.2.1");
-        getByPath(f122, "/folder1/folder1.2/folder1.2.2");
-        getByPath(f123, "/folder1/folder1.2/folder1.2.3");
-        getByPath(f331, "/folder3/folder3.3/folder3.3.1");
-        getByPath(f332, "/folder3/folder3.3/folder3.3.2");
-        getByPath(f333, "/folder3/folder3.3/folder3.3.3");
-        getByPath(doc12, "/folder1/folder1.2/Document1.2.Doc");
-        getByPath(doc33, "/folder3/folder3.3/Document3.3.Doc");
-        getByPath(doc331, "/folder3/folder3.3/folder3.3.1/Document3.3.1.Doc");
-        getByPath(doc333, "/folder3/folder3.3/folder3.3.3/Document3.3.3.Doc");
-
-        log.info("... testGetObjectByPath() finished.");
-    }
-
-    @Test
-    public void testCreateDocumentWithContent() {
-        log.info("starting testCreateDocumentWithContent() ...");
-        String id = createDocument(fRootFolderId, true);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-
-        ContentStream sd = fObjSvc.getContentStream(fRepositoryId, id, null, BigInteger.valueOf(-1) /* offset */,
-                BigInteger.valueOf(-1) /* length */, null);
-        verifyContentResult(sd);
-
-        // delete content again
-        Holder<String> idHolder = new Holder<String>(id);
-        Properties props = fObjSvc.getProperties(fRepositoryId, id, PropertyIds.CHANGE_TOKEN, null);
-        String changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-        Holder<String> tokenHolder = new Holder<String>(changeToken);
-        fObjSvc.deleteContentStream(fRepositoryId, idHolder, tokenHolder, null);
-
-        try {
-            props = fObjSvc.getProperties(fRepositoryId, id, PropertyIds.CHANGE_TOKEN, null);
-            changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-            tokenHolder = new Holder<String>(changeToken);
-            sd = fObjSvc.getContentStream(fRepositoryId, id, null, BigInteger.valueOf(-1) /* offset */,
-                    BigInteger.valueOf(-1) /* length */, null);
-            fail("getContentStream with non existing content should raise a CmisConstraintException");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        // create content again in a second call
-        ContentStream contentStream = createContent();
-        fObjSvc.setContentStream(fRepositoryId, idHolder, true, tokenHolder, contentStream, null);
-        sd = fObjSvc.getContentStream(fRepositoryId, id, null, BigInteger.valueOf(-1) /* offset */,
-                BigInteger.valueOf(-1) /* length */, null);
-        verifyContentResult(sd);
-
-        // update content and do not set overwrite flag, expect failure
-        try {
-            props = fObjSvc.getProperties(fRepositoryId, id, PropertyIds.CHANGE_TOKEN, null);
-            changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-            tokenHolder = new Holder<String>(changeToken);
-            fObjSvc.setContentStream(fRepositoryId, idHolder, false, tokenHolder, contentStream, null);
-            fail("setContentStream with existing content and no overWriteFlag should fail");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisContentAlreadyExistsException);
-        }
-
-        // cleanup
-        fObjSvc.deleteObject(fRepositoryId, id, true, null);
-
-        log.info("... testCreateDocumentWithContent() finished.");
-    }
-
-    @Test
-    public void testCreateDocumentWithContentNoFileNameNoMimeType() {
-        log.info("starting testCreateDocumentWithContent() ...");
-        ContentStreamDataImpl contentStream = null;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        Properties props = createDocumentProperties(DOCUMENT_ID, DOCUMENT_TYPE_ID);
-
-        contentStream = (ContentStreamDataImpl) createContent();
-        contentStream.setFileName(null);
-        contentStream.setMimeType(null);
-
-        String id = null;
-        try {
-            id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, contentStream, VersioningState.NONE,
-                    policies, addACEs, removeACEs, extension);
-            if (null == id) {
-                fail("createDocument failed.");
-            }
-
-            ContentStream sd = fObjSvc.getContentStream(fRepositoryId, id, null, BigInteger.valueOf(-1) /* offset */,
-                    BigInteger.valueOf(-1) /* length */, null);
-            assertNotNull(sd.getMimeType());
-            assertNotNull(sd.getFileName());
-        } catch (Exception e) {
-            fail("createDocument() failed with exception: " + e);
-        }
-    }
-
-    @Test
-    public void testCreateDocumentFromSource() {
-        log.info("starting testCreateDocumentFromSource() ...");
-        // create a 1st document
-        String id1 = createDocument(fRootFolderId, true);
-        // create a second document with first as source
-        String id2 = null;
-        try {
-            VersioningState versioningState = VersioningState.NONE;
-            Properties props = createDocumentPropertiesForDocumentFromSource("Document From Source");
-            id2 = fObjSvc.createDocumentFromSource(fRepositoryId, id1, props, fRootFolderId, versioningState, null,
-                    null, null, null);
-            if (null == id2) {
-                fail("createDocumentFromSource failed.");
-            }
-        } catch (Exception e) {
-            fail("createDocumentFromSource() failed with exception: " + e);
-        }
-
-        // get content from second document and compare it with original one
-        ContentStream sd = fObjSvc.getContentStream(fRepositoryId, id2, null, BigInteger.valueOf(-1) /* offset */,
-                BigInteger.valueOf(-1) /* length */, null);
-        verifyContentResult(sd);
-
-        // cleanup
-        fObjSvc.deleteObject(fRepositoryId, id1, true, null);
-        fObjSvc.deleteObject(fRepositoryId, id2, true, null);
-
-        log.info("... testCreateDocumentFromSource() finished.");
-    }
-
-    @Test
-    public void testCreatedDocumentInherited() {
-        log.info("starting testCreatedDocumentInherited() ...");
-        log.info("  creating object");
-
-        String id = createDocumentInheritedProperties(fRootFolderId, false);
-        if (id != null) {
-            log.info("  createDocument succeeded with created id: " + id);
-        }
-
-        log.info("  getting object");
-        try {
-            ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                    false, null);
-            assertNotNull(res);
-
-            String returnedId = res.getId();
-            assertEquals(id, returnedId);
-            Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-            for (PropertyData<?> pd : props.values()) {
-                log.info("return property id: " + pd.getId() + ", value: " + pd.getValues());
-            }
-
-            PropertyData<?> pd = props.get(PropertyIds.NAME);
-            assertNotNull(pd);
-            assertEquals(MY_CUSTOM_NAME, pd.getFirstValue());
-
-            pd = props.get(PropertyIds.OBJECT_TYPE_ID);
-            assertEquals(TEST_INHERITED_CUSTOM_DOCUMENT_TYPE_ID, pd.getFirstValue());
-
-            pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
-            assertEquals("My pretty string", pd.getFirstValue());
-
-            pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
-            assertEquals(BigInteger.valueOf(4711), pd.getFirstValue());
-
-            pd = props.get(TEST_DOCUMENT_MY_SUB_STRING_PROP_ID);
-            assertEquals("another cool string", pd.getFirstValue());
-
-            pd = props.get(TEST_DOCUMENT_MY_SUB_INT_PROP_ID);
-            assertEquals(BigInteger.valueOf(4712), pd.getFirstValue());
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-        log.info("... testCreatedDocumentInherited() finished.");
-    }
-
-    @Test
-    public void testBuildFolderAndDocuments() {
-        // Create a hierarchy of folders and fill it with some documents
-
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        int levels = 2; // create a hierarchy with two levels
-        int childrenPerLevel = 2; // create two folders on each level
-
-        gen.setNumberOfDocumentsToCreatePerFolder(1); // create one document in
-        // each folder
-
-        // Set the type id for all created documents:
-        gen.setDocumentTypeId(TEST_DOCUMENT_TYPE_ID);
-
-        // Set the type id for all created folders:
-        gen.setFolderTypeId(TEST_FOLDER_TYPE_ID);
-
-        // set the properties the generator should fill with values for
-        // documents:
-        // Note: must be valid properties in type TEST_DOCUMENT_TYPE_ID
-        List<String> propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_DOCUMENT_STRING_PROP_ID);
-        gen.setDocumentPropertiesToGenerate(propsToSet);
-
-        // set the properties the generator should fill with values for folders:
-        // Note: must be valid properties in type TEST_FOLDER_TYPE_ID
-        propsToSet = new ArrayList<String>();
-        propsToSet.add(TEST_FOLDER_STRING_PROP_ID);
-        gen.setFolderPropertiesToGenerate(propsToSet);
-
-        // Build the tree
-        try {
-            gen.createFolderHierachy(levels, childrenPerLevel, fRootFolderId);
-            // Dump the tree
-            gen.dumpFolder(fRootFolderId, "*");
-        } catch (Exception e) {
-            fail("Could not create folder hierarchy with documents. " + e);
-        }
-    }
-
-    @Test
-    public void testDeleteObject() {
-        log.info("starting testDeleteObject() ...");
-        log.info("Testing to delete a document");
-        log.info("  creating object");
-        String id = createDocument(fRootFolderId, false);
-        if (id != null) {
-            log.info("  createDocument succeeded with created id: " + id);
-        }
-
-        log.info("  getting object");
-        retrieveDocument(id);
-        log.info("  deleting object");
-        try {
-            fObjSvc.deleteObject(fRepositoryId, id, true, null);
-        } catch (Exception e) {
-            fail("deleteObject() for document failed with exception: " + e);
-        }
-
-        // check that it does not exist anymore
-        try {
-            fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            fail("object should not longer exist after it was deleted.");
-        } catch (CmisObjectNotFoundException e) {
-            assertTrue(e instanceof CmisObjectNotFoundException);
-        } catch (Exception e) {
-            fail("getting deleted object should raise CMISObjectNotFoundException, but got " + e);
-        }
-
-        log.info("Testing to delete an empty folder");
-        // create and delete an empty folder
-        id = createFolder();
-        try {
-            fObjSvc.deleteObject(fRepositoryId, id, true, null);
-        } catch (Exception e) {
-            fail("deleteObject() for folder failed with exception: " + e);
-        }
-        // check that it does not exist anymore
-        try {
-            fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            fail("object should not longer exist after it was deleted.");
-        } catch (CmisObjectNotFoundException e) {
-            assertTrue(e instanceof CmisObjectNotFoundException);
-        } catch (Exception e) {
-            fail("getting deleted object should raise CMISObjectNotFoundException, but got " + e);
-        }
-
-        // create a folder with a document and delete should fail
-        // create and delete an empty folder
-        log.info("Testing to delete a folder with a contained document");
-        String folderId;
-        folderId = createFolder();
-        id = createDocument(folderId, false);
-
-        try {
-            fObjSvc.deleteObject(fRepositoryId, folderId, true, null);
-            fail("deleteObject() for folder with a document should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-        // should succeed if we first delete document then folder
-        try {
-            fObjSvc.deleteObject(fRepositoryId, id, true, null);
-            fObjSvc.deleteObject(fRepositoryId, folderId, true, null);
-        } catch (Exception e) {
-            fail("deleteObject() for document and folder failed with exception: " + e);
-        }
-        // check that it does not exist anymore
-        try {
-            fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            fail("object should not longer exist after it was deleted.");
-        } catch (CmisObjectNotFoundException e) {
-            assertTrue(e instanceof CmisObjectNotFoundException);
-        } catch (Exception e) {
-            fail("getting deleted object should raise CMISObjectNotFoundException, but got " + e);
-        }
-        try {
-            fObjSvc.getObject(fRepositoryId, folderId, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            fail("object should not longer exist after it was deleted.");
-        } catch (CmisObjectNotFoundException e) {
-            assertTrue(e instanceof CmisObjectNotFoundException);
-        } catch (Exception e) {
-            fail("getting deleted object should raise CMISObjectNotFoundException, but got " + e);
-        }
-        log.info("... testDeleteObject() finished.");
-    }
-
-    @Test
-    public void testDeleteTree() {
-        log.info("starting testDeleteTree() ...");
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        String rootFolderId = createFolder();
-        // Set the type id for all created documents:
-        gen.setDocumentTypeId(DocumentTypeCreationHelper.getCmisDocumentType().getId());
-        // Set the type id for all created folders:
-        gen.setFolderTypeId(DocumentTypeCreationHelper.getCmisFolderType().getId());
-        gen.setNumberOfDocumentsToCreatePerFolder(2); // create two documents in
-        // each folder
-        gen.createFolderHierachy(1, 1, rootFolderId);
-        try {
-            fObjSvc.deleteTree(fRepositoryId, rootFolderId, null /* true */, UnfileObject.DELETE, true, null);
-        } catch (Exception e) {
-            fail("deleteTree failed unexpected. " + e);
-        }
-        log.info("Dumping folder, should only contain one empty folder under root");
-        gen.dumpFolder(fRootFolderId, "*");
-
-        // After that we should be not be able to get the root folder, because
-        // it should be deleted
-        try {
-            fObjSvc.getObject(fRepositoryId, rootFolderId, "*", false, IncludeRelationships.NONE, null, false, false,
-                    null);
-            fail("object should not longer exist after it was deleted.");
-        } catch (CmisObjectNotFoundException e) {
-            assertTrue(e instanceof CmisObjectNotFoundException);
-        } catch (Exception e) {
-            fail("getting deleted object should raise CMISObjectNotFoundException, but got " + e);
-        }
-        log.info("... testDeleteTree() finished.");
-    }
-
-    @Test
-    public void testMoveFolder() {
-        log.info("starting testMoveFolder() ...");
-        moveObjectTest(true);
-        log.info("... testMoveFolder() finished.");
-    }
-
-    @Test
-    public void testMoveDocument() {
-        log.info("starting testMoveDocument() ...");
-        moveObjectTest(false);
-        log.info("... testMoveDocument() finished.");
-    }
-
-    @Test
-    public void testUpdateProperties() {
-        // TODO add test rename root folder and non root folder (must be a
-        // folder)
-        log.info("starting testUpdateProperties() ...");
-        String oldChangeToken, newChangeToken;
-        String id = createDocumentWithCustomType(MY_CUSTOM_NAME, fRootFolderId, false);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-
-        log.info("  getting object");
-        try {
-            ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                    false, null);
-            assertNotNull(res);
-            Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-
-            // check returned properties
-            for (PropertyData<?> pd : props.values()) {
-                log.info("  return property id: " + pd.getId() + ", value: " + pd.getValues());
-            }
-
-            String returnedId = res.getId();
-            assertEquals(id, returnedId);
-            PropertyData<?> pd = props.get(PropertyIds.NAME);
-            assertNotNull(pd);
-            assertEquals(MY_CUSTOM_NAME, pd.getFirstValue());
-            pd = props.get(PropertyIds.OBJECT_TYPE_ID);
-            assertEquals(TEST_CUSTOM_DOCUMENT_TYPE_ID, pd.getFirstValue());
-            pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
-            assertEquals("My pretty string", pd.getFirstValue());
-            pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
-            assertEquals(BigInteger.valueOf(4711), pd.getFirstValue());
-
-            // update properties:
-            log.info("updating property");
-            List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-            // properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME
-            // , MY_CUSTOM_NAME));
-            // properties.add(fFactory.createPropertyIdData(PropertyIds.
-            // CMIS_OBJECT_TYPE_ID, TEST_CUSTOM_DOCUMENT_TYPE_ID));
-            // Generate some property values for custom attributes
-            properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, NEW_STRING_PROP_VAL));
-            properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, NEW_INT_PROP_VAL));
-            Properties newProps = fFactory.createPropertiesData(properties);
-
-            Holder<String> idHolder = new Holder<String>(id);
-            Holder<String> changeTokenHolder = new Holder<String>();
-            fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-            oldChangeToken = changeTokenHolder.getValue(); // store for later
-            verifyUpdatedProperties(id, MY_CUSTOM_NAME);
-
-            // Test delete properties
-            log.info("deleting property");
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, (String) null));
-            newProps = fFactory.createPropertiesData(properties);
-            Thread.sleep(100); // ensure new change token, timer resolution is
-            // not good enough
-            fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-            res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            assertNotNull(res);
-            props = res.getProperties().getProperties();
-            for (PropertyData<?> pd2 : props.values()) {
-                log.info("  return property id: " + pd2.getId() + ", value: " + pd2.getValues());
-            }
-            pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
-            assertNull(pd.getFirstValue());
-            // delete a required property and expect exception:
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, (BigInteger) null));
-            newProps = fFactory.createPropertiesData(properties);
-            idHolder = new Holder<String>(id);
-            try {
-                fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-                fail("Deleteing a required property should fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisConstraintException);
-            }
-
-            // Test violation of property definition constraints
-            log.info("Test violation of property definition constraints");
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID,
-                    "A very long String ABCDEFHIJKLMNOPQRSTUVWXYZ"));
-            newProps = fFactory.createPropertiesData(properties);
-            idHolder = new Holder<String>(id);
-            try {
-                fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-                fail("Exceeding max String lengt h should fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisConstraintException);
-            }
-            // Test stale token
-            log.info("Test stale token");
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, "ABC"));
-            newProps = fFactory.createPropertiesData(properties);
-            // set outdated token
-            newChangeToken = changeTokenHolder.getValue();
-            changeTokenHolder.setValue(oldChangeToken);
-            assertFalse(oldChangeToken.equals(newChangeToken));
-            try {
-                fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-                fail("Update with an outdated changeToken should fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisUpdateConflictException);
-            }
-
-            // test a rename
-            log.info("Test renaming");
-            final String newName = "My Renamed Document"; // MY_CUSTOM_NAME
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, newName));
-            newProps = fFactory.createPropertiesData(properties);
-            changeTokenHolder.setValue(newChangeToken);
-            fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-            id = idHolder.getValue(); // note that id is path and has changed!
-            res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            assertNotNull(res);
-            props = res.getProperties().getProperties();
-            pd = props.get(PropertyIds.NAME);
-            assertNotNull(pd);
-            assertEquals(newName, pd.getFirstValue());
-
-            // test rename with a conflicting name
-            createDocumentWithCustomType(MY_CUSTOM_NAME, fRootFolderId, false);
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, MY_CUSTOM_NAME));
-            newProps = fFactory.createPropertiesData(properties);
-            // now rename to old name
-            try {
-                fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-                fail("Update with a conflicting name should fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisNameConstraintViolationException);
-            }
-
-            // test an invalid name
-            properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, "Invalid/Name"));
-            newProps = fFactory.createPropertiesData(properties);
-            try {
-                fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
-                fail("Update with an invalid name should fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisInvalidArgumentException);
-            }
-
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-        log.info("... testUpdateProperties() finished.");
-    }
-
-    @Test
-    public void testAllowableActions() {
-        log.info("starting testAllowableActions() ...");
-        final boolean withContent = false;
-        String id = createDocument(fRootFolderId, withContent);
-
-        // get allowable actions via getObject
-        ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", true, IncludeRelationships.NONE, null, false, false,
-                null);
-        assertNotNull(res.getAllowableActions());
-        Set<Action> actions = res.getAllowableActions().getAllowableActions();
-        assertNotNull(actions);
-        verifyAllowableActionsDocument(actions, false, withContent);
-
-        // get allowable actions via getAllowableActions
-        AllowableActions allowableActions = fObjSvc.getAllowableActions(fRepositoryId, id, null);
-        assertNotNull(allowableActions);
-        actions = allowableActions.getAllowableActions();
-        assertNotNull(actions);
-        verifyAllowableActionsDocument(actions, false, withContent);
-
-        // cleanup
-        fObjSvc.deleteObject(fRepositoryId, id, true, null);
-        log.info("... testAllowableActions() finished.");
-    }
-
-    @Test
-    public void testDefaultPropertiesDocument() {
-        log.info("starting testDefaultPropertiesDocument() ...");
-        String id = createDocument("DefPropDoc", fRootFolderId, TEST_DOC_TYPE_WITH_DEFAULTS_ID, false);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-        ObjectData res = getDocumentObjectData(id);
-        Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-        PropertyData<?> pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
-        assertNotNull(pd);
-        Object bi = pd.getFirstValue();
-        assertNotNull(bi);
-        assertEquals(BigInteger.valueOf(100), bi);
-
-        pd = props.get(TEST_DOCUMENT_MY_MULTI_STRING_PROP_ID);
-        assertNotNull(pd);
-        List<String> valueList = (List<String>) pd.getValues();
-        assertNotNull(valueList);
-        assertTrue(valueList.contains("Apache"));
-        assertTrue(valueList.contains("CMIS"));
-
-        pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID_MANDATORY_DEFAULT);
-        assertNotNull(pd);
-        bi = pd.getFirstValue();
-        assertNotNull(bi);
-        assertEquals(BigInteger.valueOf(100), bi);
-
-        log.info("... testDefaultPropertiesDocument() finished.");
-    }
-
-    @Test
-    public void testDefaultPropertiesFolder() {
-        log.info("starting testDefaultPropertiesFolder() ...");
-        String id = createFolder("DefPropFolder", fRootFolderId, TEST_FOLDER_TYPE_WITH_DEFAULTS_ID);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-        ObjectData res = getDocumentObjectData(id);
-        Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-        PropertyData<?> pd = props.get(TEST_FOLDER_MY_INT_PROP_ID);
-        assertNotNull(pd);
-        Object bi = pd.getFirstValue();
-        assertNotNull(bi);
-        assertEquals(BigInteger.valueOf(100), bi);
-
-        pd = props.get(TEST_FOLDER_MY_MULTI_STRING_PROP_ID);
-        assertNotNull(pd);
-        List<String> valueList = (List<String>) pd.getValues();
-        assertNotNull(valueList);
-        assertTrue(valueList.contains("Apache"));
-        assertTrue(valueList.contains("CMIS"));
-
-        pd = props.get(TEST_FOLDER_MY_INT_PROP_ID_MANDATORY_DEFAULT);
-        assertNotNull(pd);
-        bi = pd.getFirstValue();
-        assertNotNull(bi);
-        assertEquals(BigInteger.valueOf(100), bi);
-
-        log.info("... testDefaultPropertiesFolder() finished.");
-    }
-
-    @Test
-    public void testGetObjectNoObjectIdInFilter() {
-        log.info("starting testGetObjectNoObjectIdInFilter() ...");
-        log.info("  creating object");
-        String id = createDocument(fRootFolderId, false);
-        if (id != null) {
-            log.info("  createDocument succeeded with created id: " + id);
-        }
-
-        log.info("  getting object");
-        String filter = PropertyIds.NAME + "," + PropertyIds.CREATION_DATE + "," + PropertyIds.LAST_MODIFICATION_DATE;
-        ObjectData res = fObjSvc.getObject(fRepositoryId, id, filter, false, IncludeRelationships.NONE, null, false,
-                false, null);
-
-        String returnedId = res.getId();
-        assertEquals(id, returnedId);
-        log.info("... testGetObjectNoObjectIdInFilter() finished.");
-    }
-
-    @Test
-    public void testSpecialChars() {
-
-        log.info("starting testGetObjectByPath() with specal chars...");
-        log.info("  creating object");
-
-        String docID = createDocument("H������nschen", fRootFolderId, false);
-        log.info("  getting object by path with special chars");
-        try {
-            ObjectData res = fObjSvc.getObjectByPath(fRepositoryId, "/H������nschen", "*", false,
-                    IncludeRelationships.NONE, null, false, false, null);
-            assertNotNull(res);
-            assertNotNull(res.getId());
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-    }
-
-    @Test
-    public void testNoContentAllowed() {
-        log.info("starting testNoContentAllowed() ...");
-        String id = createDocument("NoContentAllowedDoc1", fRootFolderId, TEST_CUSTOM_NO_CONTENT_TYPE_ID, false);
-        assertNotNull(id);
-
-        try {
-            id = createDocumentNoCatch("NoContentAllowedDoc2", fRootFolderId, TEST_CUSTOM_NO_CONTENT_TYPE_ID,
-                    VersioningState.NONE, true);
-            fail("Creating  document with content and type allows no content should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-            log.info("Creating  document with content for no-content type failed as expected.");
-        }
-        log.info("... testNoContentAllowed finished.");
-    }
-
-    @Test
-    public void testMustHaveContent() {
-        log.info("starting testMustHaveContent() ...");
-        String id = createDocument("MustHaveContentAllowedDoc1", fRootFolderId, TEST_CUSTOM_MUST_CONTENT_TYPE_ID, true);
-        assertNotNull(id);
-
-        try {
-            id = createDocumentNoCatch("MustHaveContentAllowedDoc2", fRootFolderId, TEST_CUSTOM_MUST_CONTENT_TYPE_ID,
-                    VersioningState.NONE, false);
-            fail("Creating document without content and type requires content should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-            log.info("Creating document with content for must-have-content type failed as expected.");
-        }
-        log.info("... testMustHaveContent finished.");
-    }
-
-    @Test
-    public void testMaxContentSize() {
-        log.info("starting testMaxContentSize() ...");
-        try {
-            createContent(MAX_SIZE + 1, MAX_SIZE, null);
-            fail("createContent with exceeded content size should fail.");
-        } catch (CmisInvalidArgumentException e) {
-            log.debug("createDocument with exceeded failed as excpected.");
-        } catch (Exception e1) {
-            log.debug("createDocument with exceeded failed with wrong exception (expected CmisInvalidArgumentException, got "
-                    + e1.getClass().getName() + ").");
-        }
-
-        try {
-            ContentStream contentStream = createContent(MAX_SIZE + 1, MAX_SIZE, null);
-            Properties props = createDocumentProperties("TestMaxContentSize", DOCUMENT_TYPE_ID);
-            fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, contentStream, VersioningState.NONE, null,
-                    null, null, null);
-            fail("createDocument with exceeded content size should fail.");
-        } catch (CmisInvalidArgumentException e) {
-            log.debug("createDocument with exceeded failed as expected.");
-        } catch (Exception e1) {
-            log.debug("createDocument with exceeded failed with wrong exception (expected CmisInvalidArgumentException, got "
-                    + e1.getClass().getName() + ").");
-        }
-    }
-
-    @Test
-    public void testRenditionImage() {
-        // upload an image as JPEG picture
-        log.info("starting testRendition() ...");
-
-        try {
-            InputStream imageStream = this.getClass().getResourceAsStream("/image.jpg");
-            assertNotNull("Test setup failure no 'image.jpg' in test resources, getResourceAsStream failed",
-                    imageStream);
-            String id = createDocumentFromStream("TestJpegImage", fRootFolderId, DOCUMENT_TYPE_ID, imageStream, JPEG);
-
-            assertNotNull(id);
-            String renditionFilter = "*";
-            List<RenditionData> renditions = fObjSvc
-                    .getRenditions(fRepositoryId, id, renditionFilter, null, null, null);
-            assertNotNull(renditions);
-            assertEquals(1, renditions.size());
-            RenditionData rd = renditions.get(0);
-            assertEquals(JPEG, rd.getMimeType());
-            assertEquals("cmis:thumbnail", rd.getKind());
-            assertEquals(id, rd.getRenditionDocumentId());
-            assertNotNull(rd.getBigHeight());
-            assertNotNull(rd.getBigWidth());
-            assertEquals(RenditionUtil.THUMBNAIL_SIZE, rd.getBigHeight().longValue());
-            assertEquals(RenditionUtil.THUMBNAIL_SIZE, rd.getBigWidth().longValue());
-            assertNotNull(rd.getStreamId());
-            ContentStream renditionContent = fObjSvc.getContentStream(fRepositoryId, id, rd.getStreamId(), null, null,
-                    null);
-            assertEquals(rd.getMimeType(), renditionContent.getMimeType());
-            readThumbnailStream(renditionContent.getStream());
-        } catch (Exception e) {
-            log.error("testRendition failed with exception ", e);
-            fail("testRendition failed with exceetion " + e);
-        }
-        log.info("... testRendition finished.");
-    }
-
-    @Test
-    public void testRenditionIcon() {
-        // fake an office document
-        log.info("starting testRendition() ...");
-
-        try {
-            ContentStream content = createContent(4, 0,
-                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
-            Properties props = createDocumentProperties("TestJOffice", DOCUMENT_TYPE_ID);
-            String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, content, VersioningState.NONE,
-                    null, null, null, null);
-
-            assertNotNull(id);
-            String renditionFilter = "*";
-            List<RenditionData> renditions = fObjSvc
-                    .getRenditions(fRepositoryId, id, renditionFilter, null, null, null);
-            assertNotNull(renditions);
-            assertEquals(1, renditions.size());
-            RenditionData rd = renditions.get(0);
-            assertEquals(PNG, rd.getMimeType());
-            assertEquals("cmis:thumbnail", rd.getKind());
-            assertEquals(id, rd.getRenditionDocumentId());
-            assertNotNull(rd.getBigHeight());
-            assertNotNull(rd.getBigWidth());
-            assertEquals(RenditionUtil.ICON_SIZE, rd.getBigHeight().longValue());
-            assertEquals(RenditionUtil.ICON_SIZE, rd.getBigWidth().longValue());
-            assertNotNull(rd.getStreamId());
-            ContentStream renditionContent = fObjSvc.getContentStream(fRepositoryId, id, rd.getStreamId(), null, null,
-                    null);
-            assertEquals(rd.getMimeType(), renditionContent.getMimeType());
-            readThumbnailStream(renditionContent.getStream());
-        } catch (Exception e) {
-            log.error("testRendition failed with exception ", e);
-            fail("testRendition failed with exceetion " + e);
-        }
-        log.info("... testRendition finished.");
-    }
-
-    @Test
-    public void testFolderRendition() {
-        // upload an image as JPEG picture
-        log.info("starting testFolderRendition() ...");
-
-        try {
-            InputStream imageStream = this.getClass().getResourceAsStream("/image.jpg");
-            assertNotNull("Test setup failure no 'image.jpg' in test resources, getResourceAsStream failed",
-                    imageStream);
-            String id = createFolder();
-
-            assertNotNull(id);
-            String renditionFilter = "*";
-            List<RenditionData> renditions = fObjSvc
-                    .getRenditions(fRepositoryId, id, renditionFilter, null, null, null);
-            assertNotNull(renditions);
-            assertEquals(1, renditions.size());
-            RenditionData rd = renditions.get(0);
-            assertEquals(PNG, rd.getMimeType());
-            assertEquals("cmis:thumbnail", rd.getKind());
-            assertEquals(id, rd.getRenditionDocumentId());
-            assertNotNull(rd.getBigHeight());
-            assertNotNull(rd.getBigWidth());
-            assertEquals(RenditionUtil.ICON_SIZE, rd.getBigHeight().longValue());
-            assertEquals(RenditionUtil.ICON_SIZE, rd.getBigWidth().longValue());
-            assertNotNull(rd.getStreamId());
-            ContentStream renditionContent = fObjSvc.getContentStream(fRepositoryId, id, rd.getStreamId(), null, null,
-                    null);
-            assertEquals(rd.getMimeType(), renditionContent.getMimeType());
-            readThumbnailStream(renditionContent.getStream());
-        } catch (Exception e) {
-            log.error("testFolderRendition failed with exception ", e);
-            fail("testFolderRendition failed with exceetion " + e);
-        }
-        log.info("... testFolderRendition finished.");
-
-    }
-
-    @Test
-    public void testAppendContent() {
-        log.info("starting testAppendContent() ...");
-        String id = createDocument(fRootFolderId, true);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-
-        // append content again in a second call
-        Holder<String> idHolder = new Holder<String>(id);
-
-        ContentStream contentStream = createContent();
-        fObjSvc.appendContentStream(fRepositoryId, idHolder, null, contentStream, false, null);
-        ContentStream sd = fObjSvc.getContentStream(fRepositoryId, id, null, null, null, null);
-        verifyContentResult(sd, 64);
-
-        // cleanup
-        fObjSvc.deleteObject(fRepositoryId, id, true, null);
-
-        log.info("... testAppendContent() finished.");
-    }
-
-    @Test
-    public void testGetPartialContent() throws IOException, UnsupportedEncodingException {
-        log.info("starting testGetPartialContent() ...");
-        final String STREAM_NAME  = "data.txt";
-        final String MIME_TYPE = "text/plain";
-        // append content again in a second call
-
-        ContentStreamDataImpl content = new ContentStreamDataImpl(-1);
-        content.setFileName(STREAM_NAME);
-        content.setMimeType(MIME_TYPE);
-
-        String prefix = "################ ~~~~This is a completeley irrelevant prefix header. ~~~~ ################";
-		String main = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.";
-        String postfix = "################ ~~~~POSTFIX Please ignore POSTFIX POSTFIX POSTFIX ~~~~ ################";
-
-        ByteArrayOutputStream ba = new ByteArrayOutputStream();
-        PrintStream printStream = new PrintStream(ba, false, ENCODING_UTF8); 
-        printStream.println(prefix);
-        printStream.println(main);
-        printStream.println(postfix);
-
-        content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-        
-        // Create document with content
-        Properties props = createDocumentProperties("PartialContentTest", BaseTypeId.CMIS_DOCUMENT.value());
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, content, VersioningState.NONE, null,
-                null, null, null);
-        if (id != null) {
-            log.info("createDocument succeeded with created id: " + id);
-        }
-        
-        int offset = prefix.length() + System.getProperty("line.separator").length(); // for \n
-        int length = main.length();
-		ContentStream readContent = fObjSvc.getContentStream(fRepositoryId, id, null,
-				BigInteger.valueOf(offset), BigInteger.valueOf(length), null);
-		
-        assertEquals(MIME_TYPE, readContent.getMimeType());
-        assertEquals(STREAM_NAME, readContent.getFileName());
-        assertEquals(length, readContent.getBigLength().longValue());
-
-        byte[] bytesRead = new byte[10240];
-        InputStream is = readContent.getStream();
-        int lengthRead = is.read(bytesRead);
-        String result = new String(bytesRead, 0, lengthRead, ENCODING_UTF8);
-        assertEquals(length, lengthRead);
-        assertEquals(main, result);
-        
-        // cleanup
-        fObjSvc.deleteObject(fRepositoryId, id, true, null);
-
-        log.info("... testGetPartialContent() finished.");
-    }
-
-    @Test
-    public void testBulkUpdateProperties() {
-        log.info("starting testBulkUpdateProperties() ...");
-        String MY_CUSTOM_NAME_2 = MY_CUSTOM_NAME + "_2";
-        String id1 = createDocumentWithCustomType(MY_CUSTOM_NAME, fRootFolderId, false);
-        String id2 = createDocumentWithCustomType(MY_CUSTOM_NAME_2, fRootFolderId, false);
-        String changeToken1, changeToken2;
-        try {
-            ObjectData res = fObjSvc.getObject(fRepositoryId, id1, "*", false, IncludeRelationships.NONE, null, false,
-                    false, null);
-            assertNotNull(res);
-            Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-            changeToken1 = (String) props.get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-
-            res = fObjSvc
-                    .getObject(fRepositoryId, id2, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            assertNotNull(res);
-            props = res.getProperties().getProperties();
-            changeToken2 = (String) props.get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-
-            // check returned properties
-            for (PropertyData<?> pd : props.values()) {
-                log.info("  return property id: " + pd.getId() + ", value: " + pd.getValues());
-            }
-
-            // update properties:
-            log.info("updating property");
-            List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, NEW_STRING_PROP_VAL));
-            properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, NEW_INT_PROP_VAL));
-            Properties newProps = fFactory.createPropertiesData(properties);
-            // wait some time to get a newer change token
-
-            List<BulkUpdateObjectIdAndChangeToken> objs = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
-            objs.add(new BulkUpdateObjectIdAndChangeTokenImpl(id1, changeToken1));
-            objs.add(new BulkUpdateObjectIdAndChangeTokenImpl(id2, changeToken2));
-
-            List<BulkUpdateObjectIdAndChangeToken> newObjs;
-            newObjs = fObjSvc.bulkUpdateProperties(fRepositoryId, objs, newProps, null, null, null);
-            assertNotNull(newObjs);
-            assertEquals(objs.size(), newObjs.size());
-            for (int i = 0; i < newObjs.size(); i++) {
-                assertEquals(objs.get(i).getId(), newObjs.get(i).getId());
-                assertTrue(!objs.get(i).getChangeToken().equals(newObjs.get(i).getChangeToken()));
-            }
-            // check that new properties are set
-            verifyUpdatedProperties(id1, MY_CUSTOM_NAME);
-            verifyUpdatedProperties(id2, MY_CUSTOM_NAME_2);
-
-        } catch (Exception e) {
-            fail("testBulkUpdateProperties() failed with exception: " + e);
-        }
-        log.info("... testBulkUpdateProperties() finished.");
-    }
-
-    // CMIS 1.1: test item typpe
-    @Test
-    public void testItemCreation() {
-
-        log.info("starting testItemCreation() ...");
-        String propVal = "abc123";
-        String name = "CoolItem";
-        String id = createItem(name, fRootFolderId, propVal);
-        if (id != null) {
-            log.info("testItemCreation succeeded with created id: " + id);
-        }
-        log.info("... testCreateObject() finished.");
-
-        // read document again and check properties
-        ObjectData res = getDocumentObjectData(id);
-        String returnedId = res.getId();
-        Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-        testReturnedProperties(returnedId, name, TEST_ITEM_TYPE_ID, props);
-        PropertyData<?> pd = props.get(ITEM_STRING_PROP);
-        assertEquals(propVal, pd.getFirstValue());
-        assertEquals(12, props.size()); // should not contain all the document
-                                        // properties
-        log.info("... finished testItemCreation()");
-    }
-
-    @Test
-    public void testSecondaryTypes() {
-        log.info("starting testItemCreation() ...");
-        final String strPropVal = "Secondary";
-        final BigInteger intPropVal = BigInteger.valueOf(100);
-        final String primaryPropVal = "Sample Doc String Property";
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, "ObjectWithSecondaryType"));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_DOCUMENT_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, TEST_SECONDARY_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(SECONDARY_STRING_PROP, strPropVal));
-        properties.add(fFactory.createPropertyIntegerData(SECONDARY_INTEGER_PROP, intPropVal));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                null, null);
-        assertNotNull(id);
-
-        Properties res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        assertNotNull(res.getProperties());
-        Map<String, PropertyData<?>> returnedProps = res.getProperties();
-        assertNotNull(returnedProps);
-        String returnedValueStr = (String) returnedProps.get(SECONDARY_STRING_PROP).getFirstValue();
-        BigInteger returnedValueInt = (BigInteger) returnedProps.get(SECONDARY_INTEGER_PROP).getFirstValue();
-        assertEquals(strPropVal, returnedValueStr);
-        assertEquals(intPropVal, returnedValueInt);
-        String returnedPrimaryPropVal = (String) returnedProps.get(TEST_DOCUMENT_STRING_PROP_ID).getFirstValue();
-        assertEquals(primaryPropVal, returnedPrimaryPropVal);
-
-        // test updating properties
-        final String strPropVal2 = "Secondary updated";
-        final String primaryPropVal2 = "Sample Doc String Property updated";
-        properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(SECONDARY_STRING_PROP, strPropVal2));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal2));
-        props = fFactory.createPropertiesData(properties);
-        fObjSvc.updateProperties(fRepositoryId, new Holder<String>(id), new Holder<String>(), props, null);
-
-        res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        assertNotNull(res.getProperties());
-        returnedProps = res.getProperties();
-        assertNotNull(returnedProps);
-        returnedValueStr = (String) returnedProps.get(SECONDARY_STRING_PROP).getFirstValue();
-        returnedValueInt = (BigInteger) returnedProps.get(SECONDARY_INTEGER_PROP).getFirstValue();
-        assertEquals(strPropVal2, returnedValueStr);
-        assertEquals(intPropVal, returnedValueInt);
-        returnedPrimaryPropVal = (String) returnedProps.get(TEST_DOCUMENT_STRING_PROP_ID).getFirstValue();
-        assertEquals(primaryPropVal2, returnedPrimaryPropVal);
-
-        log.info("... finished testSecondaryTypes()");
-    }
-
-    @Test
-    public void testSecondaryTypePropertiesNotSet() {
-        log.info("starting testSecondaryTypePropertiesNotSet() ...");
-
-        final String primaryPropVal = "Sample Doc String Property";
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, "ObjectWithSecondaryType"));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_DOCUMENT_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, TEST_SECONDARY_TYPE_ID));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                null, null);
-        assertNotNull(id);
-
-        Properties res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        assertNotNull(res.getProperties());
-        Map<String, PropertyData<?>> returnedProps = res.getProperties();
-        assertNotNull(returnedProps);
-        boolean hasProp = returnedProps.containsKey(SECONDARY_STRING_PROP);
-        assertTrue(hasProp);
-        hasProp = returnedProps.containsKey(SECONDARY_INTEGER_PROP);
-        assertTrue(hasProp);
-        PropertyData<?> returnedValue = returnedProps.get(SECONDARY_STRING_PROP);
-        assertNotNull(returnedValue);
-        assertTrue(returnedValue.getValues().isEmpty());
-        returnedValue = returnedProps.get(SECONDARY_INTEGER_PROP);
-        assertNotNull(returnedValue);
-        assertTrue(returnedValue.getValues().isEmpty());
-
-        log.info("... finished testSecondaryTypePropertiesNotSet()");
-    }
-
-    @Test
-    public void testUpdatePropertiesWithTypeCreation() {
-        final String strPropVal = "Secondary";
-        final BigInteger intPropVal = BigInteger.valueOf(100);
-        final String primaryPropVal = "Sample Doc String Property";
-        final String primaryPropVal2 = "Sample Doc String Property updated";
-
-        log.info("starting testUpdatePropertiesWithTypeCreation() ...");
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, "SimpleDocument"));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_DOCUMENT_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                null, null);
-        assertNotNull(id);
-
-        properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal2));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, TEST_SECONDARY_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(SECONDARY_STRING_PROP, strPropVal));
-        properties.add(fFactory.createPropertyIntegerData(SECONDARY_INTEGER_PROP, intPropVal));
-        props = fFactory.createPropertiesData(properties);
-        fObjSvc.updateProperties(fRepositoryId, new Holder<String>(id), new Holder<String>(), props, null);
-
-        Properties res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        assertNotNull(res.getProperties());
-        Map<String, PropertyData<?>> returnedProps = res.getProperties();
-        assertNotNull(returnedProps);
-        assertEquals(1, returnedProps.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues().size());
-        String secIds = (String) returnedProps.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getFirstValue();
-        assertEquals(TEST_SECONDARY_TYPE_ID, secIds);
-        String returnedValueStr = (String) returnedProps.get(SECONDARY_STRING_PROP).getFirstValue();
-        BigInteger returnedValueInt = (BigInteger) returnedProps.get(SECONDARY_INTEGER_PROP).getFirstValue();
-        assertEquals(strPropVal, returnedValueStr);
-        assertEquals(intPropVal, returnedValueInt);
-        String returnedPrimaryPropVal = (String) returnedProps.get(TEST_DOCUMENT_STRING_PROP_ID).getFirstValue();
-        assertEquals(primaryPropVal2, returnedPrimaryPropVal);
-
-        log.info("... finished testUpdatePropertiesWithTypeCreation()");
-    }
-
-    @Test
-    public void testDeleteSecondaryType() {
-        final String primaryPropVal = "Sample Doc String Property";
-        final String primaryPropVal2 = "Sample Doc String Property updated";
-        final String strPropVal = "Secondary";
-        final BigInteger intPropVal = BigInteger.valueOf(100);
-
-        log.info("starting testDeleteSecondaryType() ...");
-
-        // create a document with a secondary type
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, "ObjectWithSecondaryType"));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_DOCUMENT_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, TEST_SECONDARY_TYPE_ID));
-        properties.add(fFactory.createPropertyStringData(SECONDARY_STRING_PROP, strPropVal));
-        properties.add(fFactory.createPropertyIntegerData(SECONDARY_INTEGER_PROP, intPropVal));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                null, null);
-        assertNotNull(id);
-
-        // delete the secondary type
-        properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal2));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, (String) null)); // set
-                                                                                                             // list
-                                                                                                             // to
-                                                                                                             // empty
-        props = fFactory.createPropertiesData(properties);
-        fObjSvc.updateProperties(fRepositoryId, new Holder<String>(id), new Holder<String>(), props, null);
-
-        // test that properties are gone
-        Properties res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
-        assertNotNull(res.getProperties());
-        Map<String, PropertyData<?>> returnedProps = res.getProperties();
-        assertNotNull(returnedProps);
-        assertEquals(0, returnedProps.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues().size());
-        PropertyData<?> pd = returnedProps.get(SECONDARY_STRING_PROP);
-        assertNull(pd); // property must not exist any longer
-        pd = returnedProps.get(SECONDARY_INTEGER_PROP);
-        assertNull(pd); // property must not exist any longer
-        String returnedPrimaryPropVal = (String) returnedProps.get(TEST_DOCUMENT_STRING_PROP_ID).getFirstValue();
-        assertEquals(primaryPropVal2, returnedPrimaryPropVal); // other
-                                                               // properties
-                                                               // should be
-                                                               // updated
-        // test that system properties are there
-        pd = returnedProps.get(PropertyIds.NAME);
-        assertNotNull(pd);
-        pd = returnedProps.get(PropertyIds.OBJECT_ID);
-        assertNotNull(pd);
-        pd = returnedProps.get(PropertyIds.OBJECT_TYPE_ID);
-        assertNotNull(pd);
-
-        log.info("... finished testDeleteSecondaryType()");
-    }
-
-    // TODO: test constraints on secondary types
-
-    private void verifyUpdatedProperties(String id, String name) {
-
-        ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                false, null);
-        assertNotNull(res);
-        Map<String, PropertyData<?>> props = res.getProperties().getProperties();
-        for (PropertyData<?> pd2 : props.values()) {
-            log.info("  return property id: " + pd2.getId() + ", value: " + pd2.getValues());
-        }
-
-        PropertyData<?> pd;
-        pd = props.get(PropertyIds.NAME);
-        assertNotNull(pd);
-        assertEquals(name, pd.getFirstValue());
-        pd = props.get(PropertyIds.OBJECT_TYPE_ID);
-        assertEquals(TEST_CUSTOM_DOCUMENT_TYPE_ID, pd.getFirstValue());
-        pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
-        assertEquals(NEW_STRING_PROP_VAL, pd.getFirstValue());
-        pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
-        assertEquals(NEW_INT_PROP_VAL, pd.getFirstValue());
-    }
-
-    protected String createDocumentFromStream(String name, String folderId, String typeId, InputStream is,
-            String contentType) throws IOException {
-
-        Properties props = createDocumentProperties(name, typeId);
-
-        ContentStreamDataImpl content = new ContentStreamDataImpl(0);
-        content.setFileName(name);
-        content.setMimeType(contentType);
-
-        ByteArrayOutputStream ba = new ByteArrayOutputStream();
-
-        IOUtils.copy(is, ba, 64 * 1024);
-
-        content.setContent(new ByteArrayInputStream(ba.toByteArray()));
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, folderId, content, VersioningState.NONE, null, null,
-                null, null);
-        return id;
-    }
-
-    private void readThumbnailStream(InputStream stream) {
-
-        byte[] buffer = new byte[65536];
-        int noBytesRead = 0;
-        int count = 0;
-        try {
-            while ((noBytesRead = stream.read(buffer)) >= 0) {
-                count += noBytesRead;
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-            fail("Reading rendition stream failed with exception " + e);
-        }
-        assertTrue(count > 0);
-    }
-
-    private static void verifyAllowableActionsDocument(Set<Action> actions, boolean isVersioned, boolean hasContent) {
-        assertTrue(actions.contains(Action.CAN_DELETE_OBJECT));
-        assertTrue(actions.contains(Action.CAN_UPDATE_PROPERTIES));
-        assertTrue(actions.contains(Action.CAN_GET_PROPERTIES));
-        assertFalse(actions.contains(Action.CAN_GET_OBJECT_RELATIONSHIPS));
-        assertTrue(actions.contains(Action.CAN_GET_OBJECT_PARENTS));
-
-        assertFalse(actions.contains(Action.CAN_GET_FOLDER_PARENT));
-        assertFalse(actions.contains(Action.CAN_GET_FOLDER_TREE));
-        assertFalse(actions.contains(Action.CAN_GET_DESCENDANTS));
-        assertTrue(actions.contains(Action.CAN_MOVE_OBJECT));
-        if (hasContent) {
-            assertTrue(actions.contains(Action.CAN_DELETE_CONTENT_STREAM));
-            assertTrue(actions.contains(Action.CAN_GET_CONTENT_STREAM));
-            assertTrue(actions.contains(Action.CAN_GET_RENDITIONS));
-        } else {
-            assertFalse(actions.contains(Action.CAN_DELETE_CONTENT_STREAM));
-            assertFalse(actions.contains(Action.CAN_GET_CONTENT_STREAM));
-            assertFalse(actions.contains(Action.CAN_GET_RENDITIONS));
-        }
-        assertTrue(actions.contains(Action.CAN_ADD_OBJECT_TO_FOLDER));
-        assertTrue(actions.contains(Action.CAN_REMOVE_OBJECT_FROM_FOLDER));
-
-        if (isVersioned) {
-            assertTrue(actions.contains(Action.CAN_CANCEL_CHECK_OUT));
-            assertTrue(actions.contains(Action.CAN_CHECK_IN));
-            assertTrue(actions.contains(Action.CAN_CHECK_OUT));
-            assertTrue(actions.contains(Action.CAN_GET_ALL_VERSIONS));
-
-        } else {
-            assertFalse(actions.contains(Action.CAN_CANCEL_CHECK_OUT));
-            assertFalse(actions.contains(Action.CAN_CHECK_IN));
-            assertFalse(actions.contains(Action.CAN_CHECK_OUT));
-            assertFalse(actions.contains(Action.CAN_GET_ALL_VERSIONS));
-        }
-        assertTrue(actions.contains(Action.CAN_SET_CONTENT_STREAM));
-        assertTrue(actions.contains(Action.CAN_APPLY_POLICY));
-        assertTrue(actions.contains(Action.CAN_GET_APPLIED_POLICIES));
-        assertFalse(actions.contains(Action.CAN_REMOVE_POLICY));
-        assertFalse(actions.contains(Action.CAN_GET_CHILDREN));
-        assertFalse(actions.contains(Action.CAN_CREATE_DOCUMENT));
-        assertFalse(actions.contains(Action.CAN_CREATE_FOLDER));
-        assertFalse(actions.contains(Action.CAN_CREATE_RELATIONSHIP));
-        assertFalse(actions.contains(Action.CAN_DELETE_TREE));
-        assertTrue(actions.contains(Action.CAN_GET_ACL));
-        assertTrue(actions.contains(Action.CAN_APPLY_ACL));
-    }
-
-    private String retrieveDocument(String id) {
-        ObjectData res = getDocumentObjectData(id);
-        String returnedId = res.getId();
-        testReturnedProperties(returnedId, DOCUMENT_ID, DOCUMENT_TYPE_ID, res.getProperties().getProperties());
-        return returnedId;
-    }
-
-    private void moveObjectTest(boolean isFolder) {
-        final String propertyFilter = PropertyIds.OBJECT_ID + "," + PropertyIds.NAME;
-        String rootFolderId = createFolder();
-        ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepSvc, fRepositoryId,
-                ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT);
-        // Set the type id for all created documents:
-        gen.setDocumentTypeId(DocumentTypeCreationHelper.getCmisDocumentType().getId());
-        // Set the type id for all created folders:
-        gen.setNumberOfDocumentsToCreatePerFolder(1); // create one document in
-        // each folder
-        gen.createFolderHierachy(3, 2, rootFolderId);
-        gen.setFolderTypeId(DocumentTypeCreationHelper.getCmisFolderType().getId());
-        gen.dumpFolder(fRootFolderId, propertyFilter);
-        Holder<String> holder = new Holder<String>();
-        String sourceIdToMove = gen.getFolderId(rootFolderId, 2, 1);
-        if (!isFolder) {
-            sourceIdToMove = gen.getDocumentId(sourceIdToMove, 0);
-        }
-        holder.setValue(sourceIdToMove); // "/Folder_1/My Folder 0/My Folder 1");
-        String sourceFolderId = getSourceFolder(sourceIdToMove);
-        log.info("Id before moveObject: " + holder.getValue());
-        fObjSvc.moveObject(fRepositoryId, holder, rootFolderId, sourceFolderId, null);
-        log.info("Id after moveObject: " + holder.getValue());
-        gen.dumpFolder(fRootFolderId, propertyFilter);
-
-        List<ObjectParentData> result = fNavSvc.getObjectParents(fRepositoryId, holder.getValue(), null, Boolean.FALSE,
-                IncludeRelationships.NONE, null, Boolean.FALSE, null);
-        // check that new parent is set correctly
-        String newParentId = result.get(0).getObject().getId();
-        assertEquals(rootFolderId, newParentId);
-
-        if (isFolder) {
-            log.info("testing moveFolder to a subfolder");
-            ObjectInFolderList ch = fNavSvc.getChildren(fRepositoryId, holder.getValue(), propertyFilter, null, false,
-                    IncludeRelationships.NONE, null, false, null, null, null);
-            String subFolderId = ch.getObjects().get(0).getObject().getId();
-
-            try {
-                fObjSvc.moveObject(fRepositoryId, holder, subFolderId, sourceFolderId, null);
-                fail("moveObject to a folder that is a descendant of the source must fail.");
-            } catch (Exception e) {
-                assertTrue(e instanceof CmisNotSupportedException);
-            }
-        }
-    }
-
-    private String createFolder() {
-        return createFolder(FOLDER_ID, fRootFolderId, FOLDER_TYPE_ID);
-    }
-
-    private String createDocument(String folderId, boolean withContent) {
-        return createDocument(DOCUMENT_ID, folderId, withContent);
-    }
-
-    private String createDocument(String name, String folderId, boolean withContent) {
-        return createDocument(name, folderId, DOCUMENT_TYPE_ID, withContent);
-    }
-
-    private String createItem(String name, String folderId, String itemPropVal) {
-
-        // create the properties:
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyStringData(ITEM_STRING_PROP, itemPropVal));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_ITEM_TYPE_ID));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        return fObjSvc.createItem(fRepositoryId, props, folderId, null, null, null, null);
-    }
-
-    private Properties createDocumentPropertiesForDocumentFromSource(String name) {
-        // We only provide a name but not a type id, as spec says to copy
-        // missing attributes
-        // from the existing one
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private void testReturnedProperties(String objectId, String objectName, String typeId,
-            Map<String, PropertyData<?>> props) {
-        super.testReturnedProperties(objectId, props);
-
-        if (null != objectName) {
-            PropertyData<?> pd = props.get(PropertyIds.NAME);
-            assertNotNull(pd);
-            assertEquals(objectName, pd.getFirstValue());
-        }
-        if (null != typeId) {
-            PropertyData<?> pd = props.get(PropertyIds.OBJECT_TYPE_ID);
-            assertEquals(typeId, pd.getFirstValue());
-        }
-    }
-
-    private String createDocumentWithCustomType(String name, String folderId, boolean withContent) {
-        ContentStream contentStream = null;
-        VersioningState versioningState = VersioningState.NONE;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        // create the properties:
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_CUSTOM_DOCUMENT_TYPE_ID));
-        // Generate some property values for custom attributes
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, "My pretty string"));
-        properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, BigInteger.valueOf(4711)));
-
-        Properties props = fFactory.createPropertiesData(properties);
-
-        if (withContent) {
-            contentStream = createContent();
-        }
-
-        // create the document
-        String id = null;
-        id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies, addACEs,
-                removeACEs, extension);
-        if (null == id) {
-            throw new RuntimeException("createDocument failed.");
-        }
-        return id;
-    }
-
-    private String createDocumentInheritedProperties(String folderId, boolean withContent) {
-        ContentStream contentStream = null;
-        VersioningState versioningState = VersioningState.NONE;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        // create the properties:
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, MY_CUSTOM_NAME));
-        properties.add(fFactory
-                .createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_INHERITED_CUSTOM_DOCUMENT_TYPE_ID));
-        // Generate some property values for custom attributes
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, "My pretty string"));
-        properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, BigInteger.valueOf(4711)));
-        properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_SUB_STRING_PROP_ID, "another cool string"));
-        properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_SUB_INT_PROP_ID, BigInteger.valueOf(4712)));
-
-        Properties props = fFactory.createPropertiesData(properties);
-
-        if (withContent) {
-            contentStream = createContent();
-        }
-
-        // create the document
-        String id = null;
-        id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies, addACEs,
-                removeACEs, extension);
-        if (null == id) {
-            throw new RuntimeException("createDocument failed.");
-        }
-        return id;
-    }
-
-    private String getSourceFolder(String objectId) {
-        // return the first parent found in the result list of all parents
-        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, objectId, "*", false,
-                IncludeRelationships.NONE, null, true, null);
-        return parents.get(0).getObject().getId();
-    }
-
-    // Helper class to create some type for testing the ObjectService
-
-    public static class ObjectTestTypeSystemCreator implements TypeCreator {
-
-        static final TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-
-        /**
-         * create root types and a sample type for folder and document
-         * 
-         * @return typesMap map filled with created types
-         */
-        @Override
-        public List<TypeDefinition> createTypesList() {
-            List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-            try {
-                MutableTypeDefinition cmisDocumentType;
-                cmisDocumentType = typeFactory.createChildTypeDefinition(
-                        DocumentTypeCreationHelper.getCmisDocumentType(), TEST_DOCUMENT_TYPE_ID);
-                cmisDocumentType.setDisplayName("My Document Type");
-                cmisDocumentType.setDescription("InMemory test type definition " + TEST_DOCUMENT_TYPE_ID);
-
-                MutableFolderTypeDefinition cmisFolderType;
-                cmisFolderType = typeFactory.createFolderTypeDefinition(CmisVersion.CMIS_1_1,
-                        DocumentTypeCreationHelper.getCmisFolderType().getId());
-                cmisFolderType.setId(TEST_FOLDER_TYPE_ID);
-                cmisFolderType.setDisplayName("My Folder Type");
-                cmisFolderType.setDescription("InMemory test type definition " + TEST_FOLDER_TYPE_ID);
-                // create a simple string property type and
-                // attach the property definition to the type definition for
-                // document and folder type
-                Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-                PropertyStringDefinitionImpl prop = PropertyCreationHelper.createStringDefinition(
-                        TEST_DOCUMENT_STRING_PROP_ID, "Sample Doc String Property", Updatability.READWRITE);
-                propertyDefinitions.put(prop.getId(), prop);
-                cmisDocumentType.addPropertyDefinition(prop);
-
-                propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-                prop = PropertyCreationHelper.createStringDefinition(TEST_FOLDER_STRING_PROP_ID,
-                        "Sample Folder String Property", Updatability.READWRITE);
-                propertyDefinitions.put(prop.getId(), prop);
-                cmisFolderType.addPropertyDefinition(prop);
-
-                DocumentTypeDefinition customDocType = createCustomTypeWithStringIntProperty();
-                TypeDefinition noContentType = createCustomTypeNoContent();
-                TypeDefinition mustHaveContentType = createCustomTypeMustHaveContent();
-                TypeDefinition relType = createRelationshipType();
-                TypeDefinition relTypeRestricted = createRelationshipTypeRestricted();
-                TypeDefinition verType = createVersionableType();
-                TypeDefinition polType = createPolicyType();
-
-                // add type to types collection
-                typesList.add(cmisDocumentType);
-                typesList.add(cmisFolderType);
-                typesList.add(customDocType);
-                typesList.add(noContentType);
-                typesList.add(mustHaveContentType);
-                typesList.add(createCustomInheritedType(customDocType));
-                typesList.add(createDocumentTypeWithDefault());
-                typesList.add(createFolderTypeWithDefault());
-                typesList.add(createItemType());
-                typesList.add(createSecondaryType());
-                typesList.add(relType);
-                typesList.add(relTypeRestricted);
-                typesList.add(verType);
-                typesList.add(polType);
-                return typesList;
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Failed to create types.", e);
-            }
-        }
-
-        private static DocumentTypeDefinition createCustomTypeWithStringIntProperty() throws InstantiationException,
-                IllegalAccessException {
-            MutableDocumentTypeDefinition cmisDocumentType;
-            cmisDocumentType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), TEST_CUSTOM_DOCUMENT_TYPE_ID);
-            cmisDocumentType.setDisplayName("My Custom Document Type");
-            cmisDocumentType.setDescription("InMemory test type definition " + TEST_CUSTOM_DOCUMENT_TYPE_ID);
-
-            PropertyStringDefinitionImpl prop = PropertyCreationHelper.createStringDefinition(
-                    TEST_DOCUMENT_MY_STRING_PROP_ID, "My String Property", Updatability.READWRITE);
-            prop.setIsRequired(false);
-            prop.setMaxLength(BigInteger.valueOf(20)); // max len to 20
-            cmisDocumentType.addPropertyDefinition(prop);
-
-            PropertyIntegerDefinitionImpl prop2 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_DOCUMENT_MY_INT_PROP_ID, "My Integer Property", Updatability.READWRITE);
-            prop2.setIsRequired(true);
-            prop2.setMinValue(BigInteger.valueOf(-10000));
-            prop2.setMaxValue(BigInteger.valueOf(10000));
-            cmisDocumentType.addPropertyDefinition(prop2);
-            return cmisDocumentType;
-        }
-
-        private static TypeDefinition createCustomInheritedType(DocumentTypeDefinition baseType)
-                throws InstantiationException, IllegalAccessException {
-            MutableTypeDefinition cmisDocumentType;
-            cmisDocumentType = typeFactory.createChildTypeDefinition(baseType, TEST_INHERITED_CUSTOM_DOCUMENT_TYPE_ID);
-            cmisDocumentType.setDisplayName("My Custom Document Type");
-            cmisDocumentType.setDescription("InMemory test type definition " + TEST_INHERITED_CUSTOM_DOCUMENT_TYPE_ID);
-
-            PropertyStringDefinitionImpl prop = PropertyCreationHelper.createStringDefinition(
-                    TEST_DOCUMENT_MY_SUB_STRING_PROP_ID, "Subtype String Property", Updatability.READWRITE);
-            prop.setIsRequired(false);
-            cmisDocumentType.addPropertyDefinition(prop);
-
-            PropertyIntegerDefinitionImpl prop2 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_DOCUMENT_MY_SUB_INT_PROP_ID, "Subtype", Updatability.READWRITE);
-            prop2.setIsRequired(true);
-            cmisDocumentType.addPropertyDefinition(prop2);
-            return cmisDocumentType;
-        }
-
-        private static TypeDefinition createDocumentTypeWithDefault() throws InstantiationException,
-                IllegalAccessException {
-            MutableTypeDefinition cmisDocumentType;
-            cmisDocumentType = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    TEST_DOC_TYPE_WITH_DEFAULTS_ID);
-            cmisDocumentType.setDisplayName("Document Type With default values");
-            cmisDocumentType.setDescription("InMemory test type definition " + TEST_DOC_TYPE_WITH_DEFAULTS_ID);
-
-            PropertyStringDefinitionImpl prop = PropertyCreationHelper.createStringMultiDefinition(
-                    TEST_DOCUMENT_MY_MULTI_STRING_PROP_ID, "Test Multi String Property", Updatability.READWRITE);
-            prop.setIsRequired(false);
-            List<String> defValS = new ArrayList<String>() {
-                {
-                    add("Apache");
-                    add("CMIS");
-                }
-            };
-            prop.setDefaultValue(defValS);
-            cmisDocumentType.addPropertyDefinition(prop);
-
-            PropertyIntegerDefinitionImpl prop2 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_DOCUMENT_MY_INT_PROP_ID, "Test Integer Property", Updatability.READWRITE);
-            prop2.setIsRequired(false);
-            List<BigInteger> defVal = new ArrayList<BigInteger>() {
-                {
-                    add(BigInteger.valueOf(100));
-                }
-            };
-            prop2.setDefaultValue(defVal);
-            cmisDocumentType.addPropertyDefinition(prop2);
-
-            PropertyIntegerDefinitionImpl prop3 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_DOCUMENT_MY_INT_PROP_ID_MANDATORY_DEFAULT, "Test Integer Property Mandatory default",
-                    Updatability.READWRITE);
-            prop3.setIsRequired(true);
-            List<BigInteger> defVal2 = new ArrayList<BigInteger>() {
-                {
-                    add(BigInteger.valueOf(100));
-                }
-            };
-            prop3.setDefaultValue(defVal2);
-            cmisDocumentType.addPropertyDefinition(prop3);
-
-            return cmisDocumentType;
-        }
-
-        private static TypeDefinition createCustomTypeNoContent() throws InstantiationException, IllegalAccessException {
-            MutableDocumentTypeDefinition cmisDocumentType;
-            cmisDocumentType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), TEST_CUSTOM_NO_CONTENT_TYPE_ID);
-            cmisDocumentType.setDisplayName("No Content Document Type");
-            cmisDocumentType.setDescription("InMemory test type definition " + TEST_CUSTOM_NO_CONTENT_TYPE_ID);
-            cmisDocumentType.setContentStreamAllowed(ContentStreamAllowed.NOTALLOWED);
-            return cmisDocumentType;
-        }
-
-        private static TypeDefinition createCustomTypeMustHaveContent() throws InstantiationException,
-                IllegalAccessException {
-            MutableDocumentTypeDefinition cmisDocumentType;
-            cmisDocumentType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), TEST_CUSTOM_MUST_CONTENT_TYPE_ID);
-            cmisDocumentType.setDisplayName("Must Have Content Document Type");
-            cmisDocumentType.setDescription("InMemory test type definition " + TEST_CUSTOM_MUST_CONTENT_TYPE_ID);
-            cmisDocumentType.setContentStreamAllowed(ContentStreamAllowed.NOTALLOWED);
-            cmisDocumentType.setContentStreamAllowed(ContentStreamAllowed.REQUIRED);
-            return cmisDocumentType;
-        }
-
-        private static TypeDefinition createFolderTypeWithDefault() throws InstantiationException,
-                IllegalAccessException {
-            MutableFolderTypeDefinition cmisFolderType;
-            cmisFolderType = typeFactory.createFolderTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisFolderType().getId());
-            cmisFolderType.setId(TEST_FOLDER_TYPE_WITH_DEFAULTS_ID);
-            cmisFolderType.setDisplayName("Folder Type With default values");
-            cmisFolderType.setDescription("InMemory test type definition " + TEST_FOLDER_TYPE_WITH_DEFAULTS_ID);
-
-            PropertyStringDefinitionImpl prop = PropertyCreationHelper.createStringMultiDefinition(
-                    TEST_FOLDER_MY_MULTI_STRING_PROP_ID, "Test Multi String Property", Updatability.READWRITE);
-            prop.setIsRequired(false);
-            List<String> defValS = new ArrayList<String>() {
-                {
-                    add("Apache");
-                    add("CMIS");
-                }
-            };
-            prop.setDefaultValue(defValS);
-            cmisFolderType.addPropertyDefinition(prop);
-
-            PropertyIntegerDefinitionImpl prop2 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_FOLDER_MY_INT_PROP_ID, "Test Integer Property", Updatability.READWRITE);
-            prop2.setIsRequired(false);
-            List<BigInteger> defVal = new ArrayList<BigInteger>() {
-                {
-                    add(BigInteger.valueOf(100));
-                }
-            };
-            prop2.setDefaultValue(defVal);
-            cmisFolderType.addPropertyDefinition(prop2);
-
-            PropertyIntegerDefinitionImpl prop3 = PropertyCreationHelper.createIntegerDefinition(
-                    TEST_FOLDER_MY_INT_PROP_ID_MANDATORY_DEFAULT, "Test Integer Property Mandatory default",
-                    Updatability.READWRITE);
-            prop3.setIsRequired(true);
-            List<BigInteger> defVal2 = new ArrayList<BigInteger>() {
-                {
-                    add(BigInteger.valueOf(100));
-                }
-            };
-            prop3.setDefaultValue(defVal2);
-            cmisFolderType.addPropertyDefinition(prop3);
-
-            return cmisFolderType;
-        }
-
-        private TypeDefinition createRelationshipType() throws InstantiationException, IllegalAccessException {
-            MutableRelationshipTypeDefinition cmisRelType;
-            cmisRelType = typeFactory.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisRelationshipType().getId());
-            cmisRelType.setId(TEST_RELATION_TYPE_ID);
-            cmisRelType.setDisplayName("MyRelationshipType");
-            cmisRelType.setDescription("InMemory test type definition " + TEST_RELATION_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisRelType);
-            cmisRelType.setIsFileable(false);
-
-            // create a single String property definition
-
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(REL_STRING_PROP,
-                    "CrossReferenceType", Updatability.READWRITE);
-            cmisRelType.addPropertyDefinition(prop1);
-
-            return cmisRelType;
-        }
-
-        private TypeDefinition createRelationshipTypeRestricted() throws InstantiationException, IllegalAccessException {
-            MutableRelationshipTypeDefinition cmisRelType;
-            cmisRelType = typeFactory.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisRelationshipType().getId());
-            cmisRelType.setId(TEST_RESTRICTED_RELATION_TYPE_ID);
-            cmisRelType.setDisplayName("RestrictedRelationshipType");
-            cmisRelType.setDescription("InMemory test type definition " + TEST_RESTRICTED_RELATION_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisRelType);
-            cmisRelType.setIsFileable(false);
-
-            List<String> allowedTypeIds = Collections.singletonList(TEST_CUSTOM_DOCUMENT_TYPE_ID);
-            cmisRelType.setAllowedSourceTypes(allowedTypeIds);
-            cmisRelType.setAllowedTargetTypes(allowedTypeIds);
-            return cmisRelType;
-        }
-
-        private static TypeDefinition createItemType() throws InstantiationException, IllegalAccessException {
-            // CMIS 1.1 create an item item type
-            MutableItemTypeDefinition cmisItemType;
-            cmisItemType = typeFactory.createItemTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisItemType().getId()); // ???
-                                                 // DocumentTypeCreationHelper.getCmisItemType());
-            cmisItemType.setId(TEST_ITEM_TYPE_ID);
-            cmisItemType.setDisplayName("MyItemType");
-            cmisItemType.setDescription("Builtin InMemory type definition " + TEST_ITEM_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisItemType);
-
-            // create a single String property definition
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(ITEM_STRING_PROP,
-                    "Item String Property", Updatability.READWRITE);
-            cmisItemType.addPropertyDefinition(prop1);
-            // add type to types collection
-            return cmisItemType;
-        }
-
-        private static TypeDefinition createSecondaryType() throws InstantiationException, IllegalAccessException {
-            // CMIS 1.1 create an item item type
-            MutableSecondaryTypeDefinition cmisSecondaryType;
-            cmisSecondaryType = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisSecondaryType().getId());
-            cmisSecondaryType.setId(TEST_SECONDARY_TYPE_ID);
-            cmisSecondaryType.setDisplayName("MySecondaryType");
-            cmisSecondaryType.setDescription("InMemory test type definition " + TEST_SECONDARY_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisSecondaryType);
-            cmisSecondaryType.setIsFileable(false);
-
-            // create a single String property definition
-
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(SECONDARY_STRING_PROP,
-                    "Secondary String Property", Updatability.READWRITE);
-            cmisSecondaryType.addPropertyDefinition(prop1);
-
-            PropertyIntegerDefinitionImpl prop2 = PropertyCreationHelper.createIntegerDefinition(
-                    SECONDARY_INTEGER_PROP, "Secondary Integer Property", Updatability.READWRITE);
-            prop2.setIsRequired(true);
-            cmisSecondaryType.addPropertyDefinition(prop2);
-
-            return cmisSecondaryType;
-        }
-
-        private static TypeDefinition createVersionableType() throws InstantiationException, IllegalAccessException {
-            // create a complex type with properties
-            MutableDocumentTypeDefinition verType;
-            verType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), TEST_VERSION_DOCUMENT_TYPE_ID);
-            verType.setDisplayName("VersionedType");
-            verType.setDescription("InMemory test type definition " + TEST_VERSION_DOCUMENT_TYPE_ID);
-
-            verType.setIsVersionable(true); // make it a versionable type;
-
-            // create a String property definition
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(TEST_VER_PROPERTY_ID,
-                    "Sample String Property", Updatability.WHENCHECKEDOUT);
-            verType.addPropertyDefinition(prop1);
-            return verType;
-        }
-
-        private static TypeDefinition createPolicyType() throws InstantiationException, IllegalAccessException {
-            MutablePolicyTypeDefinition polType;
-            polType = typeFactory.createPolicyTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisPolicyType().getId());
-            polType.setId(TEST_POLICY_TYPE_ID);
-            polType.setDisplayName("Audit Policy");
-            polType.setDescription("InMemory type definition " + TEST_POLICY_TYPE_ID);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(polType);
-            polType.setIsFileable(false);
-
-            // create a String property definition
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(TEST_POLICY_PROPERTY_ID,
-                    "Audit Kind Property", Updatability.READWRITE);
-            polType.addPropertyDefinition(prop1);
-            return polType;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/PolicyTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/PolicyTest.java
deleted file mode 100644
index 8ff0021..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/PolicyTest.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class PolicyTest extends AbstractServiceTest {
-    private static final String TEST_CUSTOM_VALUE = "SimpleAuditPolicy";
-    private static final String TEST_POLICY_TEXT = "Test Policy Unit Test";
-    private static final String TEST_POLICY_NAME = "TestPolicy";
-    private static final String TEST_POLICY_2_NAME = "TestPolicy2";
-    private static final String MY_DOC_1 = "Document_1";
-    private static final String VER_DOC_NAME = "VersionedDocument";
-
-    private String polId;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
-        super.setUp();
-        createPolicy();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void createGetPolicy() {
-        assertNotNull(polId);
-        ObjectData od = fObjSvc.getObject(fRepositoryId, polId, null, false, IncludeRelationships.NONE, null, false,
-                false, null);
-        assertEquals(od.getBaseTypeId(), BaseTypeId.CMIS_POLICY);
-        assertEquals(polId, od.getId());
-        assertNull(od.getPolicyIds());
-        assertEquals(TEST_POLICY_NAME, od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
-        assertEquals(TEST_POLICY_TEXT, od.getProperties().getProperties().get(PropertyIds.POLICY_TEXT).getFirstValue());
-        assertEquals(TEST_CUSTOM_VALUE,
-                od.getProperties().getProperties().get(ObjectServiceTest.TEST_POLICY_PROPERTY_ID).getFirstValue());
-    }
-
-    @Test
-    public void applyGetPolicyTest() {
-        String docId1 = createDocumentWithPolicy(polId);
-        assertNotNull(docId1);
-        ObjectData od = fObjSvc.getObject(fRepositoryId, docId1, null, false, IncludeRelationships.NONE, null, true,
-                false, null);
-        assertEquals(docId1, od.getId());
-        PolicyIdList polIds = od.getPolicyIds();
-        assertNotNull(polIds.getPolicyIds());
-        assertEquals(1, polIds.getPolicyIds().size());
-        String polIdRes = polIds.getPolicyIds().get(0);
-        assertEquals(polId, polIdRes);
-
-        String path = "/" + MY_DOC_1;
-        od = fObjSvc.getObjectByPath(fRepositoryId, path, null, false, IncludeRelationships.NONE, null, true, false,
-                null);
-        polIds = od.getPolicyIds();
-        assertNotNull(polIds.getPolicyIds());
-        assertEquals(1, polIds.getPolicyIds().size());
-        polIdRes = polIds.getPolicyIds().get(0);
-        assertEquals(polId, polIdRes);
-    }
-
-    @Test
-    public void applyGetPolicyTestVersioned() {
-        String docId = createCheckedOutDocument();
-        Holder<String> holder = new Holder<String>(docId);
-        List<String> policies = Collections.singletonList(polId);
-        fVerSvc.checkIn(fRepositoryId, holder, true, null, null, "Version with policies", policies, null, null, null);
-        ObjectData od = fObjSvc.getObject(fRepositoryId, docId, null, false, IncludeRelationships.NONE, null, true,
-                false, null);
-        PolicyIdList polIds = od.getPolicyIds();
-        assertNotNull(polIds.getPolicyIds());
-        assertEquals(1, polIds.getPolicyIds().size());
-        String polIdRes = polIds.getPolicyIds().get(0);
-        assertEquals(polId, polIdRes);
-
-        String versionSeriesId = (String) od.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID)
-                .getFirstValue();
-        assertNotNull(versionSeriesId);
-        od = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, versionSeriesId, false, null, false,
-                IncludeRelationships.NONE, null, true, false, null);
-        polIds = od.getPolicyIds();
-        assertNotNull(polIds);
-        assertNotNull(polIds.getPolicyIds());
-        assertEquals(1, polIds.getPolicyIds().size());
-        polIdRes = polIds.getPolicyIds().get(0);
-        assertEquals(polId, polIdRes);
-    }
-
-    @Test
-    public void testPolicyServiceGetAppliedPolicies() {
-        assertNotNull(polId);
-        String docId1 = createDocumentWithPolicy(polId);
-        List<ObjectData> pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId1, null, null);
-        assertEquals(1, pols.size());
-        ObjectData od = pols.get(0);
-        assertEquals(polId, od.getId());
-        assertNull(od.getPolicyIds());
-    }
-
-    @Test
-    public void testPolicyServiceApplyPolicies() {
-
-        assertNotNull(polId);
-        String docId = createDocumentWithoutPolicy("Document_2", polId);
-        List<ObjectData> pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId, null, null);
-        assertEquals(0, pols.size());
-
-        // apply a policy
-        fPolSvc.applyPolicy(fRepositoryId, polId, docId, null);
-        pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId, null, null);
-        assertEquals(1, pols.size());
-        ObjectData od = pols.get(0);
-        assertEquals(polId, od.getId());
-        assertNull(od.getPolicyIds());
-
-        String polId2 = createPolicy2();
-        fPolSvc.applyPolicy(fRepositoryId, polId2, docId, null);
-        pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId, null, null);
-        assertEquals(2, pols.size());
-        od = pols.get(0);
-        assertEquals(polId, od.getId());
-        assertNull(od.getPolicyIds());
-        od = pols.get(1);
-        assertEquals(polId2, od.getId());
-
-        // assign an unknown id as policy
-        docId = createDocumentWithoutPolicy("Document_3", polId);
-        try {
-            fPolSvc.applyPolicy(fRepositoryId, "UnknownId", docId, null);
-            fail("applyPolicy with unknown id should fail.");
-        } catch (CmisObjectNotFoundException e) {
-        } catch (Exception ex) {
-            fail("applyPolicy with unknown id should throw a CmisInvalidArgumentException, but was a " + ex.getClass());
-        }
-
-        // apply policy with a doc id
-        try {
-            String docId2 = createDocumentWithoutPolicy(polId);
-            fPolSvc.applyPolicy(fRepositoryId, docId2, docId, null);
-            fail("applyPolicy with document id as policy should fail.");
-        } catch (CmisInvalidArgumentException e) {
-        } catch (Exception ex) {
-            fail("applyPolicy with unknown id should throw a CmisInvalidArgumentException, but was a " + ex.getClass());
-        }
-
-        // apply a policy to a policy
-        try {
-            fPolSvc.applyPolicy(fRepositoryId, polId2, polId, null);
-            fail("applyPolicy to a policy id should fail.");
-        } catch (CmisInvalidArgumentException e) {
-        } catch (Exception ex) {
-            fail("applyPolicy with unknown id should throw a CmisInvalidArgumentException, but was a " + ex.getClass());
-        }
-
-    }
-
-    @Test
-    public void testPolicyServiceRemovePolicies() {
-        assertNotNull(polId);
-        String docId = createDocumentWithPolicy(polId);
-        String polId2 = createPolicy2();
-        String docId2 = createDocumentWithoutPolicy("Document_3", polId);
-
-        fPolSvc.applyPolicy(fRepositoryId, polId2, docId, null);
-
-        fPolSvc.removePolicy(fRepositoryId, polId, docId, null);
-        List<ObjectData> pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId, null, null);
-        assertEquals(1, pols.size());
-        ObjectData od = pols.get(0);
-        assertEquals(polId2, od.getId());
-
-        fPolSvc.removePolicy(fRepositoryId, polId2, docId, null);
-        pols = fPolSvc.getAppliedPolicies(fRepositoryId, docId, null, null);
-        assertEquals(0, pols.size());
-
-        // try again should fail
-        try {
-            fPolSvc.removePolicy(fRepositoryId, polId2, docId, null);
-            fail("Removing a non-existing policy should fail.");
-        } catch (CmisInvalidArgumentException e) {
-
-        } catch (Exception e) {
-            fail("Removing a non-existing policy should raise a CmisObjectNotFoundException, but was a " + e);
-        }
-
-        // try removing a non existing id
-        try {
-            fPolSvc.removePolicy(fRepositoryId, polId2, docId, null);
-            fail("Removing a non-existing policy should fail.");
-        } catch (CmisInvalidArgumentException e) {
-        } catch (Exception e) {
-            fail("Removing a non-existing policy should raise a CmisInvalidArgumentException, but was a " + e);
-        }
-
-        // try removing a non policy id
-        try {
-            fPolSvc.removePolicy(fRepositoryId, docId2, docId, null);
-            fail("Removing a non-existing policy should fail.");
-        } catch (CmisInvalidArgumentException e) {
-        } catch (Exception e) {
-            fail("Removing a non-policy should raise a CmisInvalidArgumentException, but was a " + e);
-        }
-
-    }
-
-    private void createPolicy() {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, TEST_POLICY_NAME));
-        properties
-                .add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, ObjectServiceTest.TEST_POLICY_TYPE_ID));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.POLICY_TEXT, TEST_POLICY_TEXT));
-        properties.add(fFactory.createPropertyIdData(ObjectServiceTest.TEST_POLICY_PROPERTY_ID, TEST_CUSTOM_VALUE));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        polId = fObjSvc.createPolicy(fRepositoryId, props, null, null, null, null, null);
-    }
-
-    private String createPolicy2() {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, TEST_POLICY_2_NAME));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_POLICY.value()));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.POLICY_TEXT, "ReadAuditLogging"));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        return fObjSvc.createPolicy(fRepositoryId, props, null, null, null, null, null);
-    }
-
-    private String createDocumentWithPolicy(String policyId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, MY_DOC_1));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value()));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        List<String> policies = Collections.singletonList(policyId);
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, policies,
-                null, null, null);
-        return id;
-    }
-
-    private String createDocumentWithoutPolicy(String policyId) {
-        return createDocumentWithoutPolicy(MY_DOC_1, policyId);
-    }
-
-    private String createDocumentWithoutPolicy(String name, String policyId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value()));
-        Properties props = fFactory.createPropertiesData(properties);
-        String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null, null,
-                null, null);
-        return id;
-    }
-
-    private String createVersionedDocument() {
-        String id = null;
-        ContentStream contentStream = null;
-        List<String> policies = null;
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, VER_DOC_NAME));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID,
-                ObjectServiceTest.TEST_VERSION_DOCUMENT_TYPE_ID));
-        Properties props = fFactory.createPropertiesData(properties);
-
-        id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, contentStream, VersioningState.MAJOR,
-                policies, null, null, null);
-
-        return id;
-    }
-
-    private String createCheckedOutDocument() {
-        String id = createVersionedDocument();
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> checkedOutId = new Holder<String>(id);
-        fVerSvc.checkOut(fRepositoryId, checkedOutId, null, contentCopied);
-        assertTrue(!id.equals(checkedOutId.getValue()));
-        return checkedOutId.getValue();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RelationshipServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RelationshipServiceTest.java
deleted file mode 100644
index 652da2a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RelationshipServiceTest.java
+++ /dev/null
@@ -1,691 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RelationshipServiceTest extends AbstractServiceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(ObjectServiceTest.class);
-    private static final String MY_DOC_1 = "SourceDocument_1";
-    private static final String MY_DOC_2 = "SourceDocument_2";
-    private static final String MY_DOC_3 = "SourceDocument_3";
-    private static final String MY_DOC_4 = "SourceDocument_4";
-    private static final String MY_DOC_TARGET = "TargetDocument";
-    private static final String REL_CUSTOM_PROP_VALUE = "Simple Cross Reference";
-
-    ObjectCreator fCreator;
-    String docId1;
-    String docId2;
-    String docId3;
-    String docId4;
-    String targetId;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
-        super.setUp();
-        fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-
-        // create test data
-        docId1 = createDocument(MY_DOC_1, fRootFolderId, BaseTypeId.CMIS_DOCUMENT.value(), false);
-        docId2 = createDocument(MY_DOC_2, fRootFolderId, BaseTypeId.CMIS_DOCUMENT.value(), true);
-        targetId = createDocument(MY_DOC_TARGET, fRootFolderId, BaseTypeId.CMIS_DOCUMENT.value(), false);
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testCreateGetRelationship() {
-
-        log.info("starting testCreateRelationship() ...");
-        List<PropertyData<?>> relProps1 = createRelationshipProperties(REL_CUSTOM_PROP_VALUE);
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1,
-                targetId, relProps1);
-        assertNotNull(id1);
-        List<PropertyData<?>> relProps2 = createRelationshipProperties(REL_CUSTOM_PROP_VALUE);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                targetId, relProps2);
-        if (id2 != null) {
-            log.info("createRelationship succeeded with created id: " + id2);
-        }
-        assertNotNull(id2);
-
-        List<String> relIds = new ArrayList<String>() {
-            {
-                add(id1);
-                add(id2);
-            }
-        };
-
-        // Get the relationships back
-        // source
-        ObjectList objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, targetId, false,
-                RelationshipDirection.TARGET, ObjectServiceTest.TEST_RELATION_TYPE_ID, null, null, null, null, null);
-        assertEquals(2, objectList.getNumItems().longValue());
-        List<ObjectData> objectDataList = objectList.getObjects();
-        List<String> ids = new ArrayList<String>(relIds);
-        for (ObjectData objectData : objectDataList) {
-            verifyRelation(objectData, ids, ObjectServiceTest.TEST_RELATION_TYPE_ID, targetId,
-                    RelationshipDirection.TARGET);
-        }
-        assertTrue(ids.isEmpty());
-
-        // target
-        objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, docId1, false, RelationshipDirection.SOURCE,
-                ObjectServiceTest.TEST_RELATION_TYPE_ID, null, null, null, null, null);
-
-        assertEquals(1, objectList.getNumItems().longValue());
-        ObjectData objectData = objectList.getObjects().get(0);
-        ids = new ArrayList<String>(Collections.singletonList(id1));
-        verifyRelation(objectData, ids, ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1, RelationshipDirection.SOURCE);
-        assertTrue(ids.isEmpty());
-
-        // both
-        ids = new ArrayList<String>(relIds);
-        objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, targetId, false, RelationshipDirection.EITHER,
-                ObjectServiceTest.TEST_RELATION_TYPE_ID, null, null, null, null, null);
-        assertEquals(2, objectList.getNumItems().longValue());
-        objectDataList = objectList.getObjects();
-        ids = new ArrayList<String>(relIds);
-        for (ObjectData od : objectDataList) {
-            verifyRelation(od, ids, ObjectServiceTest.TEST_RELATION_TYPE_ID, targetId, RelationshipDirection.EITHER);
-        }
-        assertTrue(ids.isEmpty());
-
-        log.info("... testCreateRelationship() finished.");
-
-    }
-
-    @Test
-    public void testRelationToFolder() {
-        // test create with a folder as source
-        String folderId = createFolder("folder1", fRootFolderId, BaseTypeId.CMIS_FOLDER.value());
-        List<PropertyData<?>> relProps = createRelationshipProperties(REL_CUSTOM_PROP_VALUE);
-        final String id = createRelationship("CrossReference3", ObjectServiceTest.TEST_RELATION_TYPE_ID, folderId,
-                targetId, relProps);
-        assertNotNull(id);
-
-        ObjectList objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, folderId, false,
-                RelationshipDirection.SOURCE, ObjectServiceTest.TEST_RELATION_TYPE_ID, null, null, null, null, null);
-
-        assertEquals(1, objectList.getNumItems().longValue());
-        ObjectData objectData = objectList.getObjects().get(0);
-        ArrayList<String> ids = new ArrayList<String>(Collections.singletonList(id));
-        verifyRelation(objectData, ids, ObjectServiceTest.TEST_RELATION_TYPE_ID, folderId, RelationshipDirection.SOURCE);
-        assertTrue(ids.isEmpty());
-
-    }
-
-    @Test
-    public void testCreateIllegalTypes() {
-        // test create a relationship with a folder type, should fail:
-        try {
-            createRelationship("CrossReference1", BaseTypeId.CMIS_FOLDER.value(), docId1, docId2, null);
-            fail("Creating  document with a folder type should fail.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("Creating a relationship with a folder type failed as expected.");
-        } catch (Exception e) {
-            fail("Creating a relationship with a folder type should fail with a CmisInvalidArgumentException, but was: "
-                    + e);
-        }
-    }
-
-    @Test
-    public void getRelationshipSubTypes() {
-        log.info("starting testCreateRelationship() ...");
-        final String id1 = createRelationship("CrossReference1", BaseTypeId.CMIS_RELATIONSHIP.value(), docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                targetId, null);
-        if (id2 != null) {
-            log.info("createRelationship succeeded with created id: " + id2);
-        }
-        assertNotNull(id2);
-
-        List<String> relIds = new ArrayList<String>() {
-            {
-                add(id1);
-                add(id2);
-            }
-        };
-
-        // Get the relationships back
-        ObjectList objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, targetId, false,
-                RelationshipDirection.TARGET, BaseTypeId.CMIS_RELATIONSHIP.value(), null, null, null, null, null);
-        assertEquals(1, objectList.getNumItems().longValue());
-        List<ObjectData> objectDataList = objectList.getObjects();
-        List<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-        verifyRelation(objectDataList.get(0), ids, BaseTypeId.CMIS_RELATIONSHIP.value(), targetId,
-                RelationshipDirection.TARGET);
-        assertTrue(ids.isEmpty());
-
-        objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, targetId, true, RelationshipDirection.TARGET,
-                BaseTypeId.CMIS_RELATIONSHIP.value(), null, null, null, null, null);
-        assertEquals(2, objectList.getNumItems().longValue());
-        objectDataList = objectList.getObjects();
-        ids = new ArrayList<String>(relIds);
-        for (ObjectData objectData : objectDataList) {
-            verifyRelation(objectData, ids, null, targetId, RelationshipDirection.TARGET);
-        }
-        assertTrue(ids.isEmpty());
-
-        // Test the same with passing null for the type id
-        objectList = fRelSvc.getObjectRelationships(REPOSITORY_ID, targetId, true, RelationshipDirection.TARGET, null,
-                null, null, null, null, null);
-        assertEquals(2, objectList.getNumItems().longValue());
-        objectDataList = objectList.getObjects();
-        ids = new ArrayList<String>(relIds);
-        for (ObjectData objectData : objectDataList) {
-            verifyRelation(objectData, ids, null, targetId, RelationshipDirection.TARGET);
-        }
-        assertTrue(ids.isEmpty());
-
-    }
-
-    @Test
-    public void testAllowedTypes() {
-        String docSub1 = createDocument("CustomDoc1", fRootFolderId, ObjectServiceTest.TEST_CUSTOM_DOCUMENT_TYPE_ID,
-                false);
-        String docSub2 = createDocument("CustomDoc2", fRootFolderId, ObjectServiceTest.TEST_CUSTOM_DOCUMENT_TYPE_ID,
-                false);
-
-        try {
-            createRelationship(fRootFolderId, ObjectServiceTest.TEST_RESTRICTED_RELATION_TYPE_ID, docId1, targetId,
-                    null);
-            fail("Creating a relationship with a type cmis:document as source should fail, not an allowedSourceType.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-            log.info("Creating document with a folder as source and target failed as expected due to alledSourceType restriction.");
-        }
-
-        try {
-            createRelationship(fRootFolderId, ObjectServiceTest.TEST_RESTRICTED_RELATION_TYPE_ID, docSub1, targetId,
-                    null);
-            fail("Creating a relationship with a type cmis:document as target should fail, not an allowedSourceType.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-            log.info("Creating document with a folder as source failed as expected due to alledSourceType restriction.");
-        }
-
-        try {
-            createRelationship(fRootFolderId, ObjectServiceTest.TEST_RESTRICTED_RELATION_TYPE_ID, docId1, docSub1, null);
-            fail("Creating a relationship with a type cmis:document as source should fail, not an allowedSourceType.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-            log.info("Creating document with a folder as source failed as expected due to alledSourceType restriction.");
-        }
-        try {
-            String id = createRelationship(fRootFolderId, ObjectServiceTest.TEST_RESTRICTED_RELATION_TYPE_ID, docSub1,
-                    docSub2, null);
-            assertNotNull(id);
-        } catch (Exception e) {
-            fail("Creating a relationship with an allowed type as source and target should succeed.");
-        }
-
-    }
-
-    @Test
-    public void testGetObject() {
-
-        final String id1 = createRelationship("CrossReference1", BaseTypeId.CMIS_RELATIONSHIP.value(), docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", BaseTypeId.CMIS_RELATIONSHIP.value(), docId2,
-                targetId, null);
-        assertNotNull(id1);
-        List<String> relIds = new ArrayList<String>() {
-            {
-                add(id1);
-                add(id2);
-            }
-        };
-
-        // get document object, source
-        ObjectData objectData = fObjSvc.getObject(fRepositoryId, docId1, null, false, IncludeRelationships.SOURCE,
-                null, false, false, null);
-        List<ObjectData> odRelationships = objectData.getRelationships();
-
-        assertEquals(1, odRelationships.size());
-        List<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, docId1, RelationshipDirection.SOURCE);
-        }
-        assertTrue(ids.isEmpty());
-
-        // get document object, target
-        objectData = fObjSvc.getObject(fRepositoryId, targetId, null, false, IncludeRelationships.TARGET, null, false,
-                false, null);
-        odRelationships = objectData.getRelationships();
-
-        assertEquals(2, odRelationships.size());
-        ids = new ArrayList<String>(relIds);
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, targetId, RelationshipDirection.TARGET);
-        }
-        assertTrue(ids.isEmpty());
-
-        // get document object, BOTH
-        objectData = fObjSvc.getObject(fRepositoryId, targetId, null, false, IncludeRelationships.BOTH, null, false,
-                false, null);
-        odRelationships = objectData.getRelationships();
-
-        assertEquals(2, odRelationships.size());
-        ids = new ArrayList<String>(relIds);
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, targetId, RelationshipDirection.EITHER);
-        }
-        assertTrue(ids.isEmpty());
-
-        // get document object, none
-        objectData = fObjSvc.getObject(fRepositoryId, targetId, null, false, IncludeRelationships.NONE, null, false,
-                false, null);
-        assertTrue(objectData.getRelationships().isEmpty());
-
-        // Folder
-        String folderId = createFolder("folder1", fRootFolderId, BaseTypeId.CMIS_FOLDER.value());
-        String id = createRelationship("FolderRelationship", ObjectServiceTest.TEST_RELATION_TYPE_ID, folderId,
-                targetId, null);
-        assertNotNull(id);
-        objectData = fObjSvc.getObject(fRepositoryId, folderId, null, false, IncludeRelationships.SOURCE, null, false,
-                false, null);
-        odRelationships = objectData.getRelationships();
-
-        assertEquals(1, odRelationships.size());
-        ids = new ArrayList<String>(Collections.singletonList(id));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, folderId, RelationshipDirection.SOURCE);
-        }
-        assertTrue(ids.isEmpty());
-
-        // Versioned document
-        String verId = createVersionedDocument();
-        id = createRelationship("VersionRelationship", ObjectServiceTest.TEST_RELATION_TYPE_ID, verId, targetId, null);
-        assertNotNull(id);
-        objectData = fObjSvc.getObject(fRepositoryId, verId, null, false, IncludeRelationships.SOURCE, null, false,
-                false, null);
-        odRelationships = objectData.getRelationships();
-
-        assertEquals(1, odRelationships.size());
-        ids = new ArrayList<String>(Collections.singletonList(id));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, verId, RelationshipDirection.SOURCE);
-        }
-        assertTrue(ids.isEmpty());
-
-        // item
-        String itemId = createItem();
-        id = createRelationship("ItemRelationship", ObjectServiceTest.TEST_RELATION_TYPE_ID, itemId, targetId, null);
-        assertNotNull(id);
-        objectData = fObjSvc.getObject(fRepositoryId, itemId, null, false, IncludeRelationships.SOURCE, null, false,
-                false, null);
-        odRelationships = objectData.getRelationships();
-
-        assertEquals(1, odRelationships.size());
-        ids = new ArrayList<String>(Collections.singletonList(id));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, itemId, RelationshipDirection.SOURCE);
-        }
-        assertTrue(ids.isEmpty());
-    }
-
-    @Test
-    public void testGetObjetByPath() {
-        // getObjectByPath
-        final String id1 = createRelationship("CrossReference1", BaseTypeId.CMIS_RELATIONSHIP.value(), docId1,
-                targetId, null);
-        assertNotNull(id1);
-        ObjectData objectData = fObjSvc.getObjectByPath(fRepositoryId, "/" + MY_DOC_1, null, null,
-                IncludeRelationships.SOURCE, null, false, false, null);
-        List<ObjectData> odRelationships = objectData.getRelationships();
-
-        assertEquals(1, odRelationships.size());
-        List<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, docId1, RelationshipDirection.SOURCE);
-        }
-        assertTrue(ids.isEmpty());
-    }
-
-    @Test
-    public void testGetCheckedOut() {
-        // getObjectByPath
-        final String did = createCheckedOutDocument();
-        assertNotNull(did);
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, did,
-                targetId, null);
-
-        ObjectList objectList = fNavSvc.getCheckedOutDocs(fRepositoryId, fRootFolderId, null, null, false,
-                IncludeRelationships.BOTH, null, null, null, null);
-        assertEquals(1, objectList.getNumItems().intValue());
-        List<ObjectData> odRelationships = objectList.getObjects().get(0).getRelationships();
-        assertEquals(1, odRelationships.size());
-        List<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-        for (ObjectData objectDataRel : odRelationships) {
-            verifyRelation(objectDataRel, ids, null, did, RelationshipDirection.EITHER);
-        }
-        assertTrue(ids.isEmpty());
-    }
-
-    @Test
-    public void testGetDescendants() {
-        boolean found1 = false;
-        boolean found2 = false;
-        boolean found3 = false;
-        boolean found4 = false;
-        boolean found5 = false;
-
-        createHierarchy();
-
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                targetId, null);
-        assertNotNull(id2);
-        final String id3 = createRelationship("CrossReference3", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId3,
-                targetId, null);
-        assertNotNull(id3);
-        final String id4 = createRelationship("CrossReference4", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId4,
-                targetId, null);
-        assertNotNull(id4);
-
-        List<ObjectInFolderContainer> ofcs = fNavSvc.getDescendants(fRepositoryId, fRootFolderId,
-                BigInteger.valueOf(-1), null, false, IncludeRelationships.BOTH, null, false, null);
-
-        Map<String, List<ObjectData>> relMap = new HashMap<String, List<ObjectData>>();
-        getRelationshipsOfDescendants(ofcs, relMap);
-        assertEquals(5, relMap.size());
-
-        for (Entry<String, List<ObjectData>> relEntry : relMap.entrySet()) {
-            List<ObjectData> rels = relEntry.getValue();
-            String srcId = relEntry.getKey();
-            if (srcId.equals(docId1)) {
-                assertEquals(1, rels.size());
-                assertEquals(id1, rels.get(0).getId());
-                found1 = true;
-            } else if (srcId.equals(docId2)) {
-                assertEquals(1, rels.size());
-                assertEquals(id2, rels.get(0).getId());
-                found2 = true;
-            } else if (srcId.equals(docId3)) {
-                assertEquals(1, rels.size());
-                assertEquals(id3, rels.get(0).getId());
-                found3 = true;
-            } else if (srcId.equals(docId4)) {
-                assertEquals(1, rels.size());
-                assertEquals(id4, rels.get(0).getId());
-                found4 = true;
-            } else if (srcId.equals(targetId)) {
-                assertEquals(4, rels.size());
-                found5 = true;
-            }
-        }
-        assertTrue(found1 && found2 && found3 && found4 && found5);
-    }
-
-    @Test
-    public void testGetChildren() {
-        final String id1 = createRelationship("CrossReference1", BaseTypeId.CMIS_RELATIONSHIP.value(), docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference1", BaseTypeId.CMIS_RELATIONSHIP.value(), docId2,
-                targetId, null);
-        assertNotNull(id2);
-
-        ObjectInFolderList ods = fNavSvc.getChildren(fRepositoryId, fRootFolderId, null, null, false,
-                IncludeRelationships.SOURCE, null, false, null, null, null);
-        assertEquals(3, ods.getNumItems().intValue());
-        for (ObjectInFolderData of : ods.getObjects()) {
-            String id = of.getObject().getId();
-            List<ObjectData> rels = of.getObject().getRelationships();
-            if (id.equals(docId1)) {
-                assertEquals(1, rels.size());
-                ArrayList<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-                verifyRelation(rels.get(0), ids, null, docId1, RelationshipDirection.SOURCE);
-                assertTrue(ids.isEmpty());
-            } else if (id.equals(docId2)) {
-                assertEquals(1, rels.size());
-                ArrayList<String> ids = new ArrayList<String>(Collections.singletonList(id2));
-                verifyRelation(rels.get(0), ids, null, docId2, RelationshipDirection.SOURCE);
-                assertTrue(ids.isEmpty());
-            } else if (id.equals(targetId)) {
-                assertEquals(0, rels.size());
-            } else {
-                fail("Unexpected object in getChildren");
-            }
-        }
-    }
-
-    @Test
-    public void testGetParents() {
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1,
-                fRootFolderId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                fRootFolderId, null);
-
-        List<ObjectParentData> ods = fNavSvc.getObjectParents(fRepositoryId, docId1, null, false,
-                IncludeRelationships.TARGET, null, false, null);
-        assertEquals(1, ods.size());
-        List<ObjectData> rels = ods.get(0).getObject().getRelationships();
-        assertEquals(2, rels.size());
-        List<String> relIds = new ArrayList<String>() {
-            {
-                add(id1);
-                add(id2);
-            }
-        };
-        for (ObjectData rel : rels) {
-            verifyRelation(rel, relIds, null, fRootFolderId, RelationshipDirection.TARGET);
-        }
-        assertTrue(relIds.isEmpty());
-    }
-
-    @Test
-    public void testQueryIncludeRelationships() {
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                targetId, null);
-
-        String statement = "SELECT * from cmis:document WHERE cmis:name = '" + MY_DOC_1 + "'";
-        ObjectList res = fDiscSvc.query(fRepositoryId, statement, false, false, IncludeRelationships.SOURCE, null,
-                null, null, null);
-        assertEquals(1, res.getNumItems().intValue());
-
-        List<ObjectData> rels = res.getObjects().get(0).getRelationships();
-        assertEquals(1, rels.size());
-        ArrayList<String> ids = new ArrayList<String>(Collections.singletonList(id1));
-        verifyRelation(rels.get(0), ids, null, docId1, RelationshipDirection.SOURCE);
-        assertTrue(ids.isEmpty());
-    }
-
-    @Test
-    public void testQueryRelationships() {
-        final String id1 = createRelationship("CrossReference1", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId1,
-                targetId, null);
-        assertNotNull(id1);
-        final String id2 = createRelationship("CrossReference2", ObjectServiceTest.TEST_RELATION_TYPE_ID, docId2,
-                targetId, null);
-
-        String statement = "SELECT * from cmis:relationship WHERE " + PropertyIds.TARGET_ID + " = '" + targetId + "'";
-        ObjectList res = fDiscSvc.query(fRepositoryId, statement, false, false, IncludeRelationships.NONE, null, null,
-                null, null);
-        assertEquals(2, res.getNumItems().intValue());
-        ArrayList<String> ids = new ArrayList<String>() {
-            {
-                add(id1);
-                add(id2);
-            }
-        };
-        for (ObjectData od : res.getObjects()) {
-            ids.remove(od.getId());
-        }
-        assertTrue(ids.isEmpty());
-    }
-
-    private void verifyRelation(ObjectData objectData, List<String> expectedRelIds, String expectedTypeId,
-            String refId, RelationshipDirection direction) {
-        String relId = (String) objectData.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue();
-        assertTrue(expectedRelIds.remove(relId));
-        assertEquals(BaseTypeId.CMIS_RELATIONSHIP, objectData.getBaseTypeId());
-        if (null != expectedTypeId) {
-            assertEquals(expectedTypeId, objectData.getProperties().getProperties().get(PropertyIds.OBJECT_TYPE_ID)
-                    .getFirstValue());
-        }
-        if (expectedTypeId != null && expectedTypeId.equals(ObjectServiceTest.TEST_RELATION_TYPE_ID)) {
-            assertEquals(REL_CUSTOM_PROP_VALUE,
-                    objectData.getProperties().getProperties().get(ObjectServiceTest.REL_STRING_PROP).getFirstValue());
-        }
-        String sourceId = (String) objectData.getProperties().getProperties().get(PropertyIds.SOURCE_ID)
-                .getFirstValue();
-        String targetId = (String) objectData.getProperties().getProperties().get(PropertyIds.TARGET_ID)
-                .getFirstValue();
-        if (RelationshipDirection.SOURCE == direction) {
-            assertEquals(refId, sourceId);
-        } else if (RelationshipDirection.TARGET == direction) {
-            assertEquals(refId, targetId);
-        } else {
-            assertTrue(refId.equals(sourceId) || refId.equals(targetId));
-        }
-    }
-
-    private String createRelationship(String name, String typeId, String sourceId, String targetId,
-            List<PropertyData<?>> additionalProperties) {
-        Properties props = createRelationshipProperties(name, typeId, sourceId, targetId, additionalProperties);
-
-        String id = fObjSvc.createRelationship(fRepositoryId, props, null, null, null, null);
-        return id;
-    }
-
-    private List<PropertyData<?>> createRelationshipProperties(String crossReferenceType) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(ObjectServiceTest.REL_STRING_PROP, crossReferenceType));
-        return properties;
-    }
-
-    // create with a name
-    private Properties createRelationshipProperties(String name, String typeId, String sourceId, String targetId,
-            List<PropertyData<?>> additionalProperties) {
-
-        List<PropertyData<?>> properties = additionalProperties;
-        if (null == additionalProperties) {
-            properties = new ArrayList<PropertyData<?>>();
-        }
-
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.SOURCE_ID, sourceId));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.TARGET_ID, targetId));
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private String createVersionedDocument() {
-        String id = null;
-        id = fCreator.createDocument("VersionedDocument1", ObjectServiceTest.TEST_VERSION_DOCUMENT_TYPE_ID,
-                fRootFolderId, VersioningState.MAJOR, null);
-        return id;
-    }
-
-    private String createCheckedOutDocument() {
-        String id = createVersionedDocument();
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> checkedOutId = new Holder<String>(id);
-        fVerSvc.checkOut(fRepositoryId, checkedOutId, null, contentCopied);
-        return checkedOutId.getValue();
-    }
-
-    private String createItem() {
-        String id;
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, "Item1"));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, ObjectServiceTest.TEST_ITEM_TYPE_ID));
-        Properties props = fFactory.createPropertiesData(properties);
-        id = fObjSvc.createItem(fRepositoryId, props, fRootFolderId, null, null, null, null);
-        return id;
-    }
-
-    private void createHierarchy() {
-        String folderId1 = createFolder("MyFolder", fRootFolderId, BaseTypeId.CMIS_FOLDER.value());
-        assertNotNull(folderId1);
-        String folderId2 = createFolder("MySubFolder", folderId1, BaseTypeId.CMIS_FOLDER.value());
-        assertNotNull(folderId2);
-        docId3 = createDocument(MY_DOC_3, folderId1, BaseTypeId.CMIS_DOCUMENT.value(), true);
-        assertNotNull(docId2);
-        docId4 = createDocument(MY_DOC_4, folderId2, BaseTypeId.CMIS_DOCUMENT.value(), true);
-        assertNotNull(docId3);
-    }
-
-    private void getRelationshipsOfDescendants(List<ObjectInFolderContainer> ofcs, Map<String, List<ObjectData>> rels) {
-        for (ObjectInFolderContainer ofc : ofcs) {
-            log.debug("found desc: " + ofc.getObject().getObject().getProperties().getProperties().get("cmis:name"));
-            log.debug("   base: " + ofc.getObject().getObject().getBaseTypeId());
-            if (ofc.getObject().getObject().getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-                rels.put(ofc.getObject().getObject().getId(), ofc.getObject().getObject().getRelationships());
-            } else {
-                getRelationshipsOfDescendants(ofc.getChildren(), rels);
-                // for ( ObjectInFolderContainer child : ofc.getChildren()) {
-                // }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceMutabilityTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceMutabilityTest.java
deleted file mode 100644
index d389d18..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceMutabilityTest.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Temporary test class until CMIS 1.1 bindings are completed. Until then we use
- * a special setup procedure to directly connect to the repository service
- * implementation of InMemory.
- */
-public class RepositoryServiceMutabilityTest extends AbstractServiceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(RepositoryServiceTest.class);
-    private static final String REPOSITORY_ID = "UnitTestRepository";
-    private static final String TYPE_ID_MUTABILITY = "BookTypeAddedLater";
-    private static final String PROPERTY_ID_TITLE = "Title";
-    private static final String PROPERTY_ID_NUMBER = "Number";
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
-        super.setUp();
-
-        Map<String, String> parameters = new HashMap<String, String>();
-
-        // attach repository info to the session:
-        parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, getTypeCreatorClass());
-        parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
-
-        InMemoryServiceFactoryImpl factory = new InMemoryServiceFactoryImpl();
-        factory.init(parameters);
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // This test is just added because this test class uses a different setup to
-    // connect to the
-    // server as long as the server bindings do not support the type mutability
-    // extension of
-    // CMIS 1.1. If this test fails then the setUp() fails!
-    @Test
-    public void testRepositoryInfo() {
-        log.info("starting testRepositoryInfo() ...");
-        List<RepositoryInfo> repositories = fRepSvc.getRepositoryInfos(null);
-        assertNotNull(repositories);
-        assertFalse(repositories.isEmpty());
-
-        log.info("geRepositoryInfo(), found " + repositories.size() + " repository/repositories).");
-
-        for (RepositoryInfo repository : repositories) {
-            RepositoryInfo repository2 = fRepSvc.getRepositoryInfo(repository.getId(), null);
-            assertNotNull(repository2);
-            assertEquals(repository.getId(), repository2.getId());
-            log.info("found repository" + repository2.getId());
-        }
-
-        log.info("... testRepositoryInfo() finished.");
-    }
-
-    @Test
-    public void testTypeMutabilityCreation() throws Exception {
-        log.info("");
-        log.info("starting testTypeMutabilityCreation() ...");
-        TypeDefinition typeDefRef = createTypeForAddingAtRuntime();
-        String repositoryId = getRepositoryId();
-        // add type.
-        fRepSvc.createType(repositoryId, typeDefRef, null);
-        TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId, typeDefRef.getId(), null);
-        assertEquals(typeDefRef.getId(), type.getId());
-        assertEquals(typeDefRef.getDescription(), type.getDescription());
-        assertEquals(typeDefRef.getDisplayName(), type.getDisplayName());
-        assertEquals(typeDefRef.getLocalName(), type.getLocalName());
-        assertEquals(typeDefRef.getLocalNamespace(), type.getLocalNamespace());
-        RepositoryServiceTest.containsAllBasePropertyDefinitions(type);
-        log.info("... testTypeMutabilityCreation() finished.");
-    }
-
-    @Test
-    public void testTypeMutabilityCreateDuplicate() throws Exception {
-        log.info("");
-        log.info("starting testTypeMutabilityCreateDuplicate() ...");
-        TypeDefinition typeDefRef = createTypeForAddingAtRuntime();
-        String repositoryId = getRepositoryId();
-        // add type.
-        fRepSvc.createType(repositoryId, typeDefRef, null);
-        // add type again should fail
-        checkAddingType(repositoryId, typeDefRef, CmisInvalidArgumentException.class);
-        // type should still exist then
-        TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId, typeDefRef.getId(), null);
-        assertEquals(typeDefRef.getId(), type.getId());
-        log.info("... testTypeMutabilityCreateDuplicate() finished.");
-    }
-
-    @Test
-    public void testTypeMutabilityTypeNameConstraints() throws Exception {
-        log.info("starting testTypeMutabilityTypeNameConstraints() ...");
-
-        String repositoryId = getRepositoryId();
-
-        // test illegal type id
-        MutableDocumentTypeDefinition typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setId(typeDefRef.getId() + "!!!");
-        TypeDefinition typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        assertEquals(TYPE_ID_MUTABILITY + "___", typeDefNew.getId());
-        fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY + "___", null);
-
-        // test illegal parent type id
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setParentTypeId("NonExistingParentType");
-        checkAddingType(repositoryId, typeDefRef, CmisInvalidArgumentException.class);
-
-        // test null type id
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setId(null);
-        typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        assertTrue(null != typeDefNew.getId() && typeDefNew.getId().length() > 0);
-        fRepSvc.deleteType(repositoryId, typeDefNew.getId(), null);
-
-        // test null query name
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setQueryName(null);
-        typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        assertEquals(TYPE_ID_MUTABILITY, typeDefNew.getQueryName());
-        fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-
-        // test illegal query name
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setQueryName(typeDefRef.getQueryName() + "!!!");
-        typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        assertEquals(TYPE_ID_MUTABILITY, typeDefNew.getQueryName());
-        fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-
-        // test null local name
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setLocalName(null);
-        assertEquals(TYPE_ID_MUTABILITY, typeDefNew.getLocalName());
-        typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-
-        // test illegal local name
-        typeDefRef = createTypeForAddingAtRuntime();
-        typeDefRef.setLocalName(typeDefRef.getLocalName() + "!!!");
-        assertEquals(TYPE_ID_MUTABILITY, typeDefNew.getLocalName());
-        typeDefNew = fRepSvc.createType(repositoryId, typeDefRef, null);
-        fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-
-        log.info("... testTypeMutabilityTypeNameConstraints() finished.");
-    }
-
-    @Test
-    public void testTypeMutabilityPropertyNameConstraints() throws Exception {
-        log.info("starting testTypeMutabilityPropertyNameConstraints() ...");
-
-        String repositoryId = getRepositoryId();
-
-        // test null property id
-        DocumentTypeDefinition typeDef = createTypeForAddingAtRuntime();
-        PropertyStringDefinitionImpl pd = getPropertyDefinitionImpl(typeDef);
-        pd.setId(null);
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        // test illegal property id
-        typeDef = createTypeForAddingAtRuntime();
-        pd = getPropertyDefinitionImpl(typeDef);
-        pd.setQueryName(pd.getQueryName() + "!*!");
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        // test null property query name
-        typeDef = createTypeForAddingAtRuntime();
-        pd = getPropertyDefinitionImpl(typeDef);
-        pd.setQueryName(null);
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        // test illegal property query name
-        typeDef = createTypeForAddingAtRuntime();
-        pd = getPropertyDefinitionImpl(typeDef);
-        pd.setQueryName(pd.getQueryName() + "!!!");
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        // test null property local name
-        typeDef = createTypeForAddingAtRuntime();
-        pd = getPropertyDefinitionImpl(typeDef);
-        pd.setLocalName(null);
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        // test illegal property local name
-        typeDef = createTypeForAddingAtRuntime();
-        pd = getPropertyDefinitionImpl(typeDef);
-        pd.setLocalName(typeDef.getLocalName() + "!!!");
-        checkAddingType(repositoryId, typeDef, CmisInvalidArgumentException.class);
-
-        log.info("... testTypeMutabilityPropertyNameConstraints() finished.");
-    }
-
-    private void checkAddingType(String repositoryId, TypeDefinition typeDef, Class<? extends Exception> clazz) {
-        try {
-            typeDef = fRepSvc.createType(repositoryId, typeDef, null);
-            fail("Illegal type should throw a " + clazz.getName());
-        } catch (RuntimeException e) {
-            assertTrue("Illegal type name threw wrong exception type (should be a " + clazz.getName() + ")",
-                    clazz.isInstance(e));
-        }
-    }
-
-    @Test
-    public void testTypeMutabilityUpdate() throws Exception {
-        log.info("");
-        log.info("starting testTypeMutabilityUpdate() ...");
-        TypeDefinition typeDefRef = createTypeForAddingAtRuntime();
-        String repositoryId = getRepositoryId();
-        fRepSvc.createType(repositoryId, typeDefRef, null);
-        // update type.
-        try {
-            fRepSvc.updateType(repositoryId, typeDefRef, null);
-            fail("updating a type should throw exception.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisNotSupportedException);
-        }
-        log.info("... testTypeMutabilityUpdate() finished.");
-    }
-
-    @Test
-    public void testTypeMutabilityDeletion() throws Exception {
-        log.info("");
-        log.info("starting testTypeMutabilityDeletion() ...");
-        TypeDefinition typeDefRef = createTypeForAddingAtRuntime();
-        String repositoryId = getRepositoryId();
-        fRepSvc.createType(repositoryId, typeDefRef, null);
-
-        String docId = createDoc("Book1", getRootFolderId(REPOSITORY_ID), TYPE_ID_MUTABILITY);
-
-        // try deleting type, should fail, because in use.
-        try {
-            fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-            fail("deleting a type which is in use should throw exception.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-
-        fObjSvc.deleteObject(fRepositoryId, docId, true, null);
-
-        try {
-            fRepSvc.deleteType(repositoryId, TYPE_ID_MUTABILITY, null);
-        } catch (Exception e) {
-            fail("deleting a type which is in not in use should not throw exception! Exception is: " + e);
-        }
-
-        try {
-            fRepSvc.getTypeDefinition(repositoryId, TYPE_ID_MUTABILITY, null);
-            fail("getting a type after it was deleted should fail.");
-        } catch (Exception e) {
-        }
-
-        try {
-            fRepSvc.deleteType(repositoryId, BaseTypeId.CMIS_DOCUMENT.value(), null);
-            fail("deleting a CMIS base type throw exception.");
-        } catch (Exception e) {
-            assertTrue (e instanceof CmisInvalidArgumentException);
-        }
-        try {
-            fRepSvc.deleteType(repositoryId, BaseTypeId.CMIS_FOLDER.value(), null);
-            fail("deleting a CMIS base type throw exception.");
-        } catch (Exception e) {
-            assertTrue (e instanceof CmisInvalidArgumentException);
-        }
-
-        log.info("... testTypeMutabilityDeletion() finished.");
-    }
-
-    private String getRepositoryId() {
-        List<RepositoryInfo> repositories = fRepSvc.getRepositoryInfos(null);
-        RepositoryInfo repository = repositories.get(0);
-        assertNotNull(repository);
-        return repository.getId();
-    }
-
-    private String getRootFolderId(String repositoryId) {
-        RepositoryInfo repository = fRepSvc.getRepositoryInfo(repositoryId, null);
-        assertNotNull(repository);
-        return repository.getRootFolderId();
-    }
-
-    private PropertyStringDefinitionImpl getPropertyDefinitionImpl(TypeDefinition typeDef) {
-        PropertyStringDefinitionImpl pd = (PropertyStringDefinitionImpl) typeDef.getPropertyDefinitions().get(
-                PROPERTY_ID_TITLE);
-        return pd;
-    }
-
-    private MutableDocumentTypeDefinition createTypeForAddingAtRuntime() {
-        try {
-            MutableDocumentTypeDefinition cmisLaterType;
-            cmisLaterType = DocumentTypeCreationHelper
-                    .createDocumentTypeDefinitionWithoutBaseProperties(DocumentTypeCreationHelper.getCmisDocumentType());
-            cmisLaterType.setId(TYPE_ID_MUTABILITY);
-            cmisLaterType.setDisplayName("Type with two properties");
-            cmisLaterType.setDescription("Builtin InMemory type definition " + TYPE_ID_MUTABILITY);
-            cmisLaterType.setIsIncludedInSupertypeQuery(false);
-
-            PropertyIntegerDefinitionImpl prop1 = PropertyCreationHelper.createIntegerDefinition(PROPERTY_ID_NUMBER,
-                    "Sample Int Property", Updatability.READWRITE);
-            cmisLaterType.addPropertyDefinition(prop1);
-
-            PropertyStringDefinitionImpl prop2 = PropertyCreationHelper.createStringDefinition(PROPERTY_ID_TITLE,
-                    "Sample String Property", Updatability.READWRITE);
-            cmisLaterType.addPropertyDefinition(prop2);
-
-            return cmisLaterType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    String createDoc(String name, String folderId, String typeId) {
-        ContentStream contentStream = null;
-        List<String> policies = null;
-        ExtensionsData extension = null;
-
-        Properties props = createDocumentProperties(name, typeId);
-
-        String id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, VersioningState.NONE,
-                policies, null, null, extension);
-        return id;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
deleted file mode 100644
index 16d3765..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RepositoryServiceTest extends AbstractServiceTest {
-
-    // private CmisProvider fProvider;
-
-    private static final Logger log = LoggerFactory.getLogger(RepositoryServiceTest.class);
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
-        super.setUp();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void testRepositoryInfo() {
-        log.info("starting testRepositoryInfo() ...");
-        List<RepositoryInfo> repositories = fRepSvc.getRepositoryInfos(null);
-        assertNotNull(repositories);
-        assertFalse(repositories.isEmpty());
-
-        log.info("geRepositoryInfo(), found " + repositories.size() + " repository/repositories).");
-
-        for (RepositoryInfo repository : repositories) {
-            RepositoryInfo repository2 = fRepSvc.getRepositoryInfo(repository.getId(), null);
-            assertNotNull(repository2);
-            assertEquals(repository.getId(), repository2.getId());
-            log.info("found repository" + repository2.getId());
-        }
-
-        log.info("... testRepositoryInfo() finished.");
-    }
-
-    @Test
-    public void testTypeDefinition() {
-        log.info("");
-        log.info("starting testTypeDefinition() ...");
-        String repositoryId = getRepositoryId();
-        String typeId = "MyDocType1";
-        TypeDefinition ref = UnitTestTypeSystemCreator.getTypeById(typeId);
-        TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId, typeId, null);
-        assertEquals(ref.getId(), type.getId());
-        assertEquals(ref.getDescription(), type.getDescription());
-        assertEquals(ref.getDisplayName(), type.getDisplayName());
-        assertEquals(ref.getLocalName(), type.getLocalName());
-        assertEquals(ref.getLocalNamespace(), type.getLocalNamespace());
-        containsAllBasePropertyDefinitions(type);
-        log.info("... testTypeDefinition() finished.");
-    }
-
-    @Test
-    public void testGetAllTypesUnlimitedDepth() {
-        log.info("");
-        log.info("starting testGetAllTypesUnlimitedDepth()...");
-        String repositoryId = getRepositoryId();
-
-        // get types
-        List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId, null, BigInteger.valueOf(-1),
-                Boolean.TRUE, null);
-        assertNotNull(types);
-
-        // check that we got all types
-        int expectedSize = UnitTestTypeSystemCreator.getTypesList().size()
-                + DocumentTypeCreationHelper.getDefaultTypes().size();
-        int totalSize = getRecursiveSize(types);
-
-        assertEquals(expectedSize, totalSize);
-        assertEquals(6, types.size());
-
-        for (TypeDefinitionContainer type : types) {
-            assertNotNull(type);
-            TypeDefinition typeDef = type.getTypeDefinition();
-            assertNotNull(typeDef);
-            assertNotNull(typeDef.getId());
-            assertNotNull(typeDef.getBaseTypeId());
-            log.info("Found type: " + typeDef.getId() + ", display name is: " + typeDef.getDisplayName());
-            log.info("  Base type is: " + typeDef.getBaseTypeId());
-            log.info("  Number of children types is: " + type.getChildren().size());
-            Map<String, PropertyDefinition<?>> propDefs = type.getTypeDefinition().getPropertyDefinitions();
-            log.info("  Number of properties is: " + (propDefs == null ? 0 : propDefs.size()));
-            containsAllBasePropertyDefinitions(typeDef);
-        }
-
-        log.info("... testGetAllTypesUnlimitedDepth() finished.");
-    }
-
-    @Test
-    public void testGetTypesWihtoutPropDefs() {
-        log.info("");
-        log.info("starting testGetTypesWihtoutPropDefs()...");
-        String repositoryId = getRepositoryId();
-
-        // get types
-        List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId,
-                BaseTypeId.CMIS_DOCUMENT.value(), BigInteger.valueOf(-1), Boolean.FALSE, null);
-        // List<TypeDefinitionContainer> types =
-        // fRepSvc.getTypeDescendants(repositoryId, "MyDocType1",
-        // BigInteger.valueOf(-1),
-        // Boolean.FALSE, null);
-        assertNotNull(types);
-
-        int totalSize = getRecursiveSize(types);
-        log.info("Found " + totalSize + " number of type definitions. ");
-
-        List<TypeDefinition> descendants = getTypeDefsFlattened(types);
-        for (TypeDefinition typeDef : descendants) {
-            assertNotNull(typeDef);
-            assertNotNull(typeDef.getId());
-            assertNotNull(typeDef.getBaseTypeId());
-            assertEquals(BaseTypeId.CMIS_DOCUMENT, typeDef.getBaseTypeId());
-            log.info("Found type: " + typeDef.getId() + ", display name is: " + typeDef.getDisplayName());
-            log.info("  Base type is: " + typeDef.getBaseTypeId());
-            Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-            log.info("  Property definitions (must be null): " + propDefs);
-            assertTrue(propDefs.isEmpty());
-        }
-
-        log.info("... testGetTypesWihtoutPropDefs() finished.");
-    }
-
-    @Test
-    public void testGetAllTypesLimitedDepth() {
-        log.info("");
-        log.info("starting testGetAllTypesLimitedDepth()...");
-        String repositoryId = getRepositoryId();
-
-        // get types
-        int depth = 1;
-        List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId,
-                BaseTypeId.CMIS_DOCUMENT.value(), BigInteger.valueOf(depth), Boolean.TRUE, null);
-        assertNotNull(types);
-        log.info("Found in repository " + repositoryId + " " + types.size() + " type(s) with depth " + depth + ".");
-
-        for (TypeDefinitionContainer type : types) {
-            TypeDefinition typeDef = type.getTypeDefinition();
-            log.info("Found type: " + typeDef.getId() + ", display name is: " + typeDef.getDisplayName());
-            log.info("  Base type is: " + typeDef.getBaseTypeId());
-            log.info("  Number of children types is: " + type.getChildren().size());
-            containsAllBasePropertyDefinitions(typeDef);
-        }
-
-        int totalSize = getRecursiveSize(types);
-        assertEquals(5, totalSize); // all RepositoryTestTypeSystemCreator types
-        // minus one in level two plus cmis.docment
-        assertFalse(containsTypeByIdRecursive(BaseTypeId.CMIS_DOCUMENT.value(), types));
-        assertFalse(containsTypeByIdRecursive(BaseTypeId.CMIS_FOLDER.value(), types));
-
-        assertTrue(containsTypeByIdRecursive("MyDocType1", types));
-        assertTrue(containsTypeByIdRecursive("MyDocType2", types));
-
-        assertFalse(containsTypeByIdRecursive(UnitTestTypeSystemCreator.LEVEL2_TYPE, types));
-
-        for (TypeDefinitionContainer type : types) {
-            assertNotNull(type);
-            TypeDefinition typeDef = type.getTypeDefinition();
-            assertNotNull(typeDef);
-            assertNotNull(typeDef.getId());
-            assertNotNull(typeDef.getBaseTypeId());
-        }
-
-        log.info("... testGetAllTypesLimitedDepth() finished.");
-    }
-
-    @Test
-    public void testGetSpecificTypeLimitedDepth() {
-        log.info("");
-        log.info("starting testGetSpecificTypeLimitedDepth()...");
-        String repositoryId = getRepositoryId();
-
-        // get types
-        int depth = 2;
-        String typeId = "MyDocType1";
-        List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId, typeId,
-                BigInteger.valueOf(depth), Boolean.TRUE, null);
-        assertNotNull(types);
-        log.info("Found in repository " + repositoryId + " for type " + typeId + ", " + types.size()
-                + " type(s) with depth " + depth + ".");
-
-        assertEquals(4, getRecursiveSize(types));
-        assertTrue(containsTypeByIdRecursive("MyDocType1.1", types));
-        assertTrue(containsTypeByIdRecursive("MyDocType1.2", types));
-        assertTrue(containsTypeByIdRecursive("MyDocType1.1.1", types));
-        assertTrue(containsTypeByIdRecursive("MyDocType1.1.2", types));
-        for (TypeDefinitionContainer type : types) {
-            assertNotNull(type);
-            TypeDefinition typeDef = type.getTypeDefinition();
-            assertNotNull(typeDef);
-            assertNotNull(typeDef.getId());
-            assertNotNull(typeDef.getBaseTypeId());
-            log.info("Found type: " + typeDef.getId() + ", display name is: " + typeDef.getDisplayName());
-            log.info("  Base type is: " + typeDef.getBaseTypeId());
-            log.info("  Number of children types is: " + type.getChildren().size());
-            containsAllBasePropertyDefinitions(typeDef);
-        }
-
-        log.info("... testGetSpecificTypeLimitedDepth() finished.");
-    }
-
-    @Test
-    public void testGetTypeChildren() {
-        log.info("");
-        log.info("starting testGetTypeChildren()...");
-        String repositoryId = getRepositoryId();
-        String typeId = "MyDocType2";
-
-        // get all children
-        BigInteger maxItems = BigInteger.valueOf(1000);
-        BigInteger skipCount = BigInteger.valueOf(0);
-        TypeDefinitionList children = fRepSvc.getTypeChildren(repositoryId, typeId, true, maxItems, skipCount, null);
-
-        for (TypeDefinition type : children.getList()) {
-            log.info("Found type: " + type.getId() + ", display name is: " + type.getDisplayName());
-            containsAllBasePropertyDefinitions(type);
-        }
-        assertEquals(9, children.getList().size());
-        assertEquals(9, children.getNumItems().intValue());
-        assertFalse(children.hasMoreItems());
-
-        // get a chunk
-        maxItems = BigInteger.valueOf(5);
-        skipCount = BigInteger.valueOf(3);
-        children = fRepSvc.getTypeChildren(repositoryId, typeId, true, maxItems, skipCount, null);
-
-        for (TypeDefinition type : children.getList()) {
-            log.info("Found type: " + type.getId() + ", display name is: " + type.getDisplayName());
-            containsAllBasePropertyDefinitions(type);
-        }
-        assertEquals(5, children.getList().size());
-        assertEquals(9, children.getNumItems().intValue());
-        assertTrue(children.hasMoreItems());
-
-        log.info("... testGetTypeChildren() finished.");
-    }
-
-    @Test
-    public void testGetTypeChildrenNoProperties() {
-        log.info("");
-        log.info("starting testGetTypeChildrenNoProperties()...");
-        String repositoryId = getRepositoryId();
-        String typeId = "cmis:document";
-
-        // get all children
-        BigInteger maxItems = BigInteger.valueOf(1000);
-        BigInteger skipCount = BigInteger.valueOf(0);
-        TypeDefinitionList children = fRepSvc.getTypeChildren(repositoryId, typeId, null, maxItems, skipCount, null);
-
-        children = fRepSvc.getTypeChildren(repositoryId, typeId, null, maxItems, null, null);
-
-        for (TypeDefinition type : children.getList()) {
-            assertTrue(type.getPropertyDefinitions().isEmpty());
-        }
-
-        log.info("... testGetTypeChildrenNoProperties() finished.");
-    }
-
-    @Test
-    public void testGetWrongParameters() {
-        log.info("");
-        log.info("starting testGetWrongParameters()...");
-        String repositoryId = getRepositoryId();
-        String wrongRepositoryId = "NonExistantRepository";
-
-        // get types
-        int depth = -1;
-        String wrongTypeId = "UnknownType";
-
-        try {
-            RepositoryInfo repInf = fRepSvc.getRepositoryInfo(wrongRepositoryId, null);
-            log.debug("getRepositoryInfo(): " + repInf);
-            fail("getRepositoryInfo() with illegal repository id should throw InvalidArgumentException.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getRepositoryInfo() with depth==0 raised expected exception: " + e);
-        }
-
-        try {
-            List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId, "CMISDocument",
-                    BigInteger.valueOf(0), Boolean.TRUE, null);
-            log.debug("getTypeDescendants(): " + types);
-            fail("getTypeDescendants() with depth 0 should throw InvalidArgumentException.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getTypeDescendants() with depth==0 raised expected exception: " + e);
-        }
-
-        try {
-            List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(repositoryId, wrongTypeId,
-                    BigInteger.valueOf(depth), Boolean.TRUE, null);
-            log.debug("getTypeDescendants(): " + types);
-            fail("getTypeDescendants() with unknown type should throw exception.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getTypeDescendants() with unknown type raised expected exception: " + e);
-        }
-
-        try {
-            TypeDefinition type = fRepSvc.getTypeDefinition(wrongRepositoryId, "CMISDocument", null);
-            log.debug("getTypeDefinition(): " + type);
-            fail("getTypeDefinition() with unknown repository id should throw exception.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getTypeDefinition() with unknown repository id raised expected exception: " + e);
-        }
-
-        try {
-            TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId, wrongTypeId, null);
-            log.debug("getTypeDefinition(): " + type);
-            fail("getTypeDefinition() with unknown type should throw exception.");
-        } catch (CmisObjectNotFoundException e) {
-            log.info("getTypeDefinition() with unknown type raised expected exception: " + e);
-        }
-
-        try {
-            TypeDefinitionList types = fRepSvc.getTypeChildren(wrongRepositoryId, "CMISDocument", Boolean.TRUE,
-                    BigInteger.valueOf(100), BigInteger.ZERO, null);
-            log.debug("getTypeChildren(): " + types);
-            fail("getTypeDescendants() with unknown type should throw InvalidArgumentException.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getTypeDescendants() with unknown repository id raised expected exception: " + e);
-        }
-
-        try {
-            TypeDefinitionList types = fRepSvc.getTypeChildren(repositoryId, wrongTypeId, Boolean.TRUE,
-                    BigInteger.valueOf(100), BigInteger.ZERO, null);
-            log.debug("getTypeChildren(): " + types);
-            fail("getTypeDescendants() with unknown type should throw exception.");
-        } catch (CmisInvalidArgumentException e) {
-            log.info("getTypeDescendants() with unknown type raised expected exception: " + e);
-        }
-
-        log.info("... testGetUnknownType() testGetWrongParameters.");
-
-    }
-
-    @Test
-    public void testInheritedProperties() {
-        log.info("");
-        log.info("starting testInheritedProperties()...");
-        String repositoryId = getRepositoryId();
-        String typeId = UnitTestTypeSystemCreator.TOPLEVEL_TYPE;
-
-        // get top level type
-        TypeDefinition typeContainer = fRepSvc.getTypeDefinition(repositoryId, typeId, null);
-        assertNotNull(typeContainer);
-        Map<String, PropertyDefinition<?>> propDefMap = typeContainer.getPropertyDefinitions();
-        assertTrue(propDefMap.containsKey("StringPropTopLevel"));
-        assertFalse(propDefMap.get("StringPropTopLevel").isInherited());
-        assertFalse(propDefMap.containsKey("StringPropLevel1"));
-        assertFalse(propDefMap.containsKey("StringPropLevel2"));
-        containsAllBasePropertyDefinitions(typeContainer);
-
-        // get level 1 type
-        typeId = UnitTestTypeSystemCreator.LEVEL1_TYPE;
-        typeContainer = fRepSvc.getTypeDefinition(repositoryId, typeId, null);
-        assertNotNull(typeContainer);
-        propDefMap = typeContainer.getPropertyDefinitions();
-        assertTrue(propDefMap.containsKey("StringPropTopLevel"));
-        assertTrue(propDefMap.get("StringPropTopLevel").isInherited());
-        assertTrue(propDefMap.containsKey("StringPropLevel1"));
-        assertFalse(propDefMap.get("StringPropLevel1").isInherited());
-        assertFalse(propDefMap.containsKey("StringPropLevel2"));
-        containsAllBasePropertyDefinitions(typeContainer);
-
-        // get level 2 type
-        typeId = UnitTestTypeSystemCreator.LEVEL2_TYPE;
-        typeContainer = fRepSvc.getTypeDefinition(repositoryId, typeId, null);
-        assertNotNull(typeContainer);
-        propDefMap = typeContainer.getPropertyDefinitions();
-        assertTrue(propDefMap.containsKey("StringPropTopLevel"));
-        assertTrue(propDefMap.get("StringPropTopLevel").isInherited());
-        assertTrue(propDefMap.containsKey("StringPropLevel1"));
-        assertTrue(propDefMap.get("StringPropLevel1").isInherited());
-        assertTrue(propDefMap.containsKey("StringPropLevel2"));
-        assertFalse(propDefMap.get("StringPropLevel2").isInherited());
-        containsAllBasePropertyDefinitions(typeContainer);
-
-        log.info("... testInheritedProperties() finished.");
-    }
-
-    private String getRepositoryId() {
-        List<RepositoryInfo> repositories = fRepSvc.getRepositoryInfos(null);
-        RepositoryInfo repository = repositories.get(0);
-        assertNotNull(repository);
-        return repository.getId();
-    }
-
-    private boolean containsTypeByIdRecursive(String typeId, List<TypeDefinitionContainer> types) {
-        for (TypeDefinitionContainer type : types) {
-            if (containsTypeByIdRecursive(typeId, type)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean containsTypeByIdRecursive(String typeId, TypeDefinitionContainer typeContainer) {
-        if (typeId.equals(typeContainer.getTypeDefinition().getId())) {
-            return true;
-        }
-
-        for (TypeDefinitionContainer type : typeContainer.getChildren()) {
-            if (containsTypeByIdRecursive(typeId, type)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    static void containsAllBasePropertyDefinitions(TypeDefinition typeDef) {
-        Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-        String baseTypeId = typeDef.getBaseTypeId().value();
-
-        if (!typeDef.getId().equals(BaseTypeId.CMIS_SECONDARY.value())) {
-            assertTrue(propDefs.containsKey(PropertyIds.NAME));
-            assertTrue(propDefs.containsKey(PropertyIds.OBJECT_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.OBJECT_TYPE_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.BASE_TYPE_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.CREATED_BY));
-            assertTrue(propDefs.containsKey(PropertyIds.CREATION_DATE));
-            assertTrue(propDefs.containsKey(PropertyIds.LAST_MODIFIED_BY));
-            assertTrue(propDefs.containsKey(PropertyIds.LAST_MODIFICATION_DATE));
-            assertTrue(propDefs.containsKey(PropertyIds.CHANGE_TOKEN));
-        }
-
-        if (baseTypeId.equals(BaseTypeId.CMIS_DOCUMENT.value())) {
-            assertTrue(propDefs.containsKey(PropertyIds.IS_IMMUTABLE));
-            assertTrue(propDefs.containsKey(PropertyIds.IS_LATEST_VERSION));
-            assertTrue(propDefs.containsKey(PropertyIds.IS_MAJOR_VERSION));
-            assertTrue(propDefs.containsKey(PropertyIds.IS_LATEST_MAJOR_VERSION));
-            assertTrue(propDefs.containsKey(PropertyIds.VERSION_LABEL));
-            assertTrue(propDefs.containsKey(PropertyIds.VERSION_SERIES_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT));
-            assertTrue(propDefs.containsKey(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY));
-            assertTrue(propDefs.containsKey(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.CHECKIN_COMMENT));
-            assertTrue(propDefs.containsKey(PropertyIds.CONTENT_STREAM_LENGTH));
-            assertTrue(propDefs.containsKey(PropertyIds.CONTENT_STREAM_MIME_TYPE));
-            assertTrue(propDefs.containsKey(PropertyIds.CONTENT_STREAM_FILE_NAME));
-            assertTrue(propDefs.containsKey(PropertyIds.CONTENT_STREAM_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.CHANGE_TOKEN));
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_FOLDER.value())) {
-            assertTrue(propDefs.containsKey(PropertyIds.PARENT_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS));
-            assertTrue(propDefs.containsKey(PropertyIds.PATH));
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_POLICY.value())) {
-            assertTrue(propDefs.containsKey(PropertyIds.POLICY_TEXT));
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_RELATIONSHIP.value())) {
-            assertTrue(propDefs.containsKey(PropertyIds.SOURCE_ID));
-            assertTrue(propDefs.containsKey(PropertyIds.TARGET_ID));
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_ITEM.value())) {
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_SECONDARY.value())) {
-        } else {
-            fail("Unknown base type id in type definition");
-        }
-    }
-
-    private int getRecursiveSize(List<TypeDefinitionContainer> types) {
-        if (null == types) {
-            return 0;
-        }
-
-        int size = types.size();
-        for (TypeDefinitionContainer type : types) {
-            size += getRecursiveSize(type.getChildren());
-        }
-
-        return size;
-    }
-
-    private List<TypeDefinition> getTypeDefsFlattened(List<TypeDefinitionContainer> types) {
-        List<TypeDefinition> flattened = new ArrayList<TypeDefinition>();
-
-        for (TypeDefinitionContainer type : types) {
-            flattened.add(type.getTypeDefinition());
-            if (null != type.getChildren()) {
-                List<TypeDefinition> children = getTypeDefsFlattened(type.getChildren());
-                flattened.addAll(children);
-            }
-        }
-
-        return flattened;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java
deleted file mode 100644
index 5af6fa8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.TypeValidator;
-import org.junit.Test;
-
-public class TypeValidationTest extends TestCase {
-
-    private static final String MY_DOC_TYPE = "MyDocType1";
-    private static final String STRING_DOC_TYPE = "StringDocType";
-    private static final String STRING_PROP_TYPE = "StringProp";
-    private static final String INT_DOC_TYPE = "IntegerDocType";
-    private static final String INT_PROP_TYPE = "IntegerProp";
-    private static final String DECIMAL_DOC_TYPE = "DecimalDocType";
-    private static final String DECIMAL_PROP_TYPE = "DecimalProp";
-    private static final String PICK_LIST_DOC_TYPE = "PickListDocType";
-    private static final String PICK_LIST_PROP_DEF = "PickListProp";
-    private static final String DOC_TYPE_SUPER = "SuperDocType";
-    private static final String DOC_TYPE_SUB = "SubDocType";
-    private static final String STRING_PROP_TYPE_SUPER = "StringPropSuper";
-    private static final String STRING_PROP_TYPE_SUB = "StringPropSub";
-    private static final BindingsObjectFactory FACTORY = new BindingsObjectFactoryImpl();
-    static TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-
-    private static List<PropertyData<?>> createPropertiesWithNameAndTypeId(String typeId) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(FACTORY.createPropertyIdData(PropertyIds.NAME, "Document_1"));
-        properties.add(FACTORY.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        return properties;
-    }
-
-    @Test
-    public void testMandatoryPropertyValidation() {
-        // create properties in the same way as we would pass them to a
-        // createDocument call
-        // of the ObjectService
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(MY_DOC_TYPE);
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // validate properties according to type
-        TypeDefinition typeDef = buildMyType();
-
-        // try missing mandatory Boolean property
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if mandatory property is missing.");
-        } catch (CmisConstraintException e) {
-            assertTrue(e.getMessage().contains("mandatory properties are missing"));
-        }
-
-        // add missing mandatory Boolean property and try again
-        properties.add(FACTORY.createPropertyBooleanData("BooleanProp", true));
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (CmisConstraintException e) {
-            fail("TypeValidator should not throw CMISConstraintException if mandatory property is present.");
-        }
-    }
-
-    @Test
-    public void testStringPropertyValidation() {
-        TypeDefinition typeDef = buildTypeWithStringProp(); // we only have one
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE,
-                "A String property with quite a long value exceeding the max. length."));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try exceeding string length
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE, "short val"));
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw exception if string length is valid" + e);
-        }
-    }
-
-    @Test
-    public void testIntegerPropertyValidation() {
-
-        TypeDefinition typeDef = buildTypeWithIntegerProp();
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
-        properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(-100))); // try
-        // wrong
-        // value
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try exceeding string length
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if integer value is out of range");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
-        properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(1))); // try
-        // correct
-        // value
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw exception if integer value is valid. " + e);
-        }
-
-    }
-
-    @Test
-    public void testDecimalPropertyValidation() {
-        TypeDefinition typeDef = buildTypeWithDecimalProp();
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
-        properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(-11.11)));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try exceeding string length
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if decimal value is out of range");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
-        properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(1.23)));
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw exception if decimal value is valid. " + e);
-        }
-    }
-
-    @Test
-    public void testPickListValidationSingleValue() {
-        TypeDefinition typeDef = buildTypeWithPickList(Cardinality.SINGLE);
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "pink"));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try wrong value
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "blue"));
-        props = FACTORY.createPropertiesData(properties);
-
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-                    + e);
-        }
-    }
-
-    @Test
-    public void testPickListValidationMultiValue() {
-        TypeDefinition typeDef = buildTypeWithPickList(Cardinality.MULTI);
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        List<String> propValues = new ArrayList<String>();
-        propValues.add("red");
-        propValues.add("pink");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try wrong value
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        propValues = new ArrayList<String>();
-        propValues.add("red");
-        propValues.add("green");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-                    + e);
-        }
-    }
-
-    @Test
-    public void testPickListValidationMultiUsingMultipleValueLists() {
-        TypeDefinition typeDef = buildTypeWithMultiPickList();
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        List<String> propValues = new ArrayList<String>();
-        propValues.add("red");
-        propValues.add("green");
-        propValues.add("pink");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try wrong value
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        propValues = new ArrayList<String>();
-        propValues.add("red");
-        propValues.add("green");
-        propValues.add("blue");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        props = FACTORY.createPropertiesData(properties);
-
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-                    + e);
-        }
-    }
-
-    @Test
-    public void testHierachicalPickListValidationSingleValue() {
-        TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.SINGLE);
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "frankfurt"));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try wrong value
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "munich"));
-        props = FACTORY.createPropertiesData(properties);
-
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-                    + e);
-        }
-    }
-
-    @Test
-    public void testHierachicalPickListValidationMultiValue() {
-        TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.MULTI);
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        List<String> propValues = new ArrayList<String>();
-        propValues.add("stuttgart");
-        propValues.add("hintertupfingen");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try wrong value
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-        propValues = new ArrayList<String>();
-        propValues.add("munich");
-        propValues.add("walldorf");
-        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-        props = FACTORY.createPropertiesData(properties);
-
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-                    + e);
-        }
-    }
-
-    @Test
-    public void testInheritedPropertyValidation() {
-        TypeManager tm = buildInheritedTypes();
-        TypeDefinition superType = tm.getTypeById(DOC_TYPE_SUPER).getTypeDefinition();
-        TypeDefinition subType = tm.getTypeById(DOC_TYPE_SUB).getTypeDefinition();
-
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB,
-                "A String property with quite a long value exceeding the max. length."));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // try exceeding string length on org property
-        try {
-            TypeValidator.validateProperties(superType, props, true);
-            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        // try exceeding string length on inherited property
-        properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER,
-                "A String property with quite a long value exceeding the max. length."));
-        props = FACTORY.createPropertiesData(properties);
-
-        // try exceeding string length
-        try {
-            TypeValidator.validateProperties(subType, props, true);
-            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisConstraintException);
-        }
-
-        properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER, "super val"));
-        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB, "sub val"));
-        props = FACTORY.createPropertiesData(properties);
-        try {
-            TypeValidator.validateProperties(subType, props, true);
-        } catch (Exception e) {
-            fail("TypeValidator should not throw exception if string length is valid" + e);
-        }
-    }
-
-    @Test
-    public void testAllPropertiesKnown() {
-
-        String unknownPropertyId = "UnknownProperty";
-        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(MY_DOC_TYPE);
-        properties.add(FACTORY.createPropertyBooleanData("BooleanProp", true));
-        // add unknown property
-        properties.add(FACTORY.createPropertyStringData(unknownPropertyId, "SomeValue"));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // validate properties according to type
-        TypeDefinition typeDef = buildMyType();
-
-        try {
-            TypeValidator.validateProperties(typeDef, props, true);
-            fail("TypeValidator should throw CMISConstraintException if property is not known in type.");
-        } catch (CmisConstraintException e) {
-            assertTrue(e.getMessage().contains("Unknown property"));
-            assertTrue(e.getMessage().contains(unknownPropertyId));
-        }
-    }
-
-    @Test
-    public void testAllPropertiesKnownSecondaryTypes() {
-
-        TypeDefinition primaryType = buildTypeWithStringProp();
-        TypeDefinition secondaryType1 = buildTypeWithIntegerProp();
-        TypeDefinition secondaryType2 = buildTypeWithDecimalProp();
-
-        String unknownPropertyId = "UnknownProperty";
-        List<PropertyData<?>> properties = createPropertiesWithSecondaryTypes(MY_DOC_TYPE,
-                Arrays.asList(INT_DOC_TYPE, DECIMAL_DOC_TYPE));
-
-        // add unknown property
-        properties.add(FACTORY.createPropertyStringData(unknownPropertyId, "SomeValue"));
-        Properties props = FACTORY.createPropertiesData(properties);
-
-        // validate properties according to type
-        try {
-            TypeValidator.validateProperties(Arrays.asList(primaryType, secondaryType1, secondaryType2), props, true);
-            fail("TypeValidator should throw CMISConstraintException if property is not known in type.");
-        } catch (CmisConstraintException e) {
-            assertTrue(e.getMessage().contains("properties are not known in any of the types"));
-            assertTrue(e.getMessage().contains(unknownPropertyId));
-        }
-    }
-
-    private static List<PropertyData<?>> createPropertiesWithSecondaryTypes(String typeIdPrimary,
-            List<String> secondaryTypeIds) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(FACTORY.createPropertyIdData(PropertyIds.NAME, "Document_1"));
-        properties.add(FACTORY.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeIdPrimary));
-        properties.add(FACTORY.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, secondaryTypeIds));
-        properties.add(FACTORY.createPropertyBooleanData("BooleanProp", true));
-        properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(0)));
-        properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(0.5)));
-        return properties;
-    }
-
-    /**
-     * create sample type
-     * 
-     * @return type definition of sample type
-     */
-    private static DocumentTypeDefinition buildMyType() {
-        // always add CMIS default types
-
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), MY_DOC_TYPE);
-            cmisType.setDisplayName("Document Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + MY_DOC_TYPE);
-
-            // create a boolean property definition
-
-            PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
-                    "Sample Boolean Property", Updatability.READONLY);
-            ((PropertyBooleanDefinitionImpl) prop).setIsRequired(true);
-            cmisType.addPropertyDefinition(prop);
-
-            prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
-                    "Sample Boolean multi-value Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop);
-
-            PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
-                    "Sample DateTime Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop2);
-
-            prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
-                    "Sample DateTime multi-value Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop2);
-
-            PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
-                    "Sample Decimal Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop3);
-
-            prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalPropMV",
-                    "Sample Decimal multi-value Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop3);
-
-            PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
-                    "Sample Html Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop4);
-
-            prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlPropMV", "Sample Html multi-value Property",
-                    Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop4);
-
-            PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property",
-                    Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop5);
-
-            prop5 = PropertyCreationHelper.createIdDefinition("IdPropMV", "Sample Id Html multi-value Property",
-                    Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop5);
-
-            PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
-                    "Sample Int Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop6);
-
-            prop6 = PropertyCreationHelper.createIntegerDefinition("IntPropMV", "Sample Int multi-value Property",
-                    Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop6);
-
-            PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
-                    "Sample String Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop7);
-
-            PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp",
-                    "Sample Uri Property", Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop8);
-
-            prop8 = PropertyCreationHelper.createUriDefinition("UriPropMV", "Sample Uri multi-value Property",
-                    Updatability.READONLY);
-            cmisType.addPropertyDefinition(prop8);
-
-            PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-                    "Sample Pick List Property", Updatability.READONLY);
-
-            PropertyCreationHelper.addElemToPicklist(prop9, "red");
-            PropertyCreationHelper.addElemToPicklist(prop9, "green");
-            PropertyCreationHelper.addElemToPicklist(prop9, "blue");
-            PropertyCreationHelper.addElemToPicklist(prop9, "black");
-            PropertyCreationHelper.setDefaultValue(prop9, "blue");
-            cmisType.addPropertyDefinition(prop9);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    private static DocumentTypeDefinition buildTypeWithStringProp() {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), STRING_DOC_TYPE);
-            cmisType.setDisplayName("String Document Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + STRING_DOC_TYPE);
-
-            // create a String property definition
-            PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE,
-                    "Sample String Property", Updatability.READONLY);
-            propDef.setMaxLength(BigInteger.valueOf(10));
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    private static DocumentTypeDefinition buildTypeWithIntegerProp() {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), INT_DOC_TYPE);
-            cmisType.setDisplayName("Int Document Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + INT_DOC_TYPE);
-
-            // create a String property definition
-
-            PropertyIntegerDefinitionImpl propDef = PropertyCreationHelper.createIntegerDefinition(INT_PROP_TYPE,
-                    "Sample Integer Property", Updatability.READONLY);
-            propDef.setMinValue(BigInteger.valueOf(-1));
-            propDef.setMaxValue(BigInteger.valueOf(1));
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    private static DocumentTypeDefinition buildTypeWithDecimalProp() {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), DECIMAL_DOC_TYPE);
-            cmisType.setDisplayName("Decimal Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + DECIMAL_DOC_TYPE);
-
-            // create a String property definition
-
-            PropertyDecimalDefinitionImpl propDef = PropertyCreationHelper.createDecimalDefinition(DECIMAL_PROP_TYPE,
-                    "Sample Decimal Property", Updatability.READONLY);
-            propDef.setMinValue(BigDecimal.valueOf(-1.5));
-            propDef.setMaxValue(BigDecimal.valueOf(1.5));
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    public static DocumentTypeDefinition buildTypeWithPickList(Cardinality cardinality) {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), PICK_LIST_DOC_TYPE);
-            cmisType.setDisplayName("PickList Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + PICK_LIST_DOC_TYPE);
-
-            // create a String property definition
-            PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-                    "Sample PickList (choice) Property", Updatability.READONLY);
-            List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-            ChoiceImpl<String> elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("red"));
-            elem.setDisplayName("Red");
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("green"));
-            elem.setDisplayName("Green");
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("blue"));
-            elem.setDisplayName("Blue");
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("black"));
-            elem.setDisplayName("Black");
-            choiceList.add(elem);
-            propDef.setChoices(choiceList);
-            propDef.setDefaultValue(Collections.singletonList("blue"));
-            propDef.setCardinality(cardinality);
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    public static DocumentTypeDefinition buildTypeWithMultiPickList() {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), PICK_LIST_DOC_TYPE);
-            cmisType.setDisplayName("MDocument Type for Validation");
-            cmisType.setDescription("PickList test type definition " + PICK_LIST_DOC_TYPE);
-
-            // create a String property definition
-            PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-                    "Sample PickList (choice) Property", Updatability.READONLY);
-            List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-            ChoiceImpl<String> elem = new ChoiceImpl<String>();
-            List<String> valueList = new ArrayList<String>();
-            valueList.add("red");
-            valueList.add("green");
-            valueList.add("blue");
-            elem.setValue(valueList);
-            elem.setDisplayName("RGB");
-            choiceList.add(elem);
-
-            elem = new ChoiceImpl<String>();
-            valueList = new ArrayList<String>();
-            valueList.add("cyan");
-            valueList.add("magenta");
-            valueList.add("yellow");
-            valueList.add("black");
-            elem.setValue(valueList);
-            elem.setDisplayName("CMYK");
-            choiceList.add(elem);
-
-            propDef.setChoices(choiceList);
-            // propDef.setDefaultValue(...);
-            propDef.setCardinality(Cardinality.MULTI);
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    public static DocumentTypeDefinition buildTypeWithHierachicalPickList(Cardinality cardinality) {
-        try {
-            MutableDocumentTypeDefinition cmisType;
-            cmisType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), PICK_LIST_DOC_TYPE);
-            cmisType.setDisplayName("PickList Type for Validation");
-            cmisType.setDescription("InMemory test type definition " + PICK_LIST_DOC_TYPE);
-
-            // create a String property definition
-
-            // Create a two-level pick list with an outer property list state
-            // and an
-            // inner
-            // list of city
-            PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-                    "Sample PickList (choice) Property", Updatability.READONLY);
-            List<Choice<String>> choiceListOuter = new ArrayList<Choice<String>>();
-
-            ChoiceImpl<String> elemOuter = new ChoiceImpl<String>();
-            elemOuter.setDisplayName("Bavaria");
-            List<Choice<String>> choiceListInner = new ArrayList<Choice<String>>();
-            ChoiceImpl<String> elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Munich");
-            elemInner.setValue(Collections.singletonList("munich"));
-            choiceListInner.add(elemInner);
-            elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Ingolstadt");
-            elemInner.setValue(Collections.singletonList("ingolstadt"));
-            choiceListInner.add(elemInner);
-            elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Passau");
-            elemInner.setValue(Collections.singletonList("passau"));
-            choiceListInner.add(elemInner);
-            elemOuter.setChoice(choiceListInner);
-            choiceListOuter.add(elemOuter);
-
-            elemOuter = new ChoiceImpl<String>();
-            elemOuter.setDisplayName("Baden Wurtemberg");
-            choiceListInner = new ArrayList<Choice<String>>();
-            elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Stuttgart");
-            elemInner.setValue(Collections.singletonList("stuttgart"));
-            choiceListInner.add(elemInner);
-            elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Karlsruhe");
-            elemInner.setValue(Collections.singletonList("karlsruhe"));
-            choiceListInner.add(elemInner);
-            elemInner = new ChoiceImpl<String>();
-            elemInner.setDisplayName("Walldorf");
-            elemInner.setValue(Collections.singletonList("walldorf"));
-            choiceListInner.add(elemInner);
-            elemOuter.setChoice(choiceListInner);
-            choiceListOuter.add(elemOuter);
-
-            propDef.setChoices(choiceListOuter);
-            propDef.setCardinality(cardinality);
-            cmisType.addPropertyDefinition(propDef);
-
-            return cmisType;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-    private static TypeManager buildInheritedTypes() {
-        try {
-
-            TypeManagerImpl tm = new TypeManagerImpl();
-            tm.initTypeSystem(null, true); // create CMIS default types
-
-            // create super type
-            MutableDocumentTypeDefinition cmisSuperType;
-            cmisSuperType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), DOC_TYPE_SUPER);
-            cmisSuperType.setDisplayName("Document Type With a child");
-            cmisSuperType.setDescription("InMemory test type definition " + DOC_TYPE_SUPER);
-
-            // create a String property definition
-            PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(
-                    STRING_PROP_TYPE_SUPER, "Sample String Property SuperType", Updatability.READONLY);
-            propDef.setMaxLength(BigInteger.valueOf(10));
-            cmisSuperType.addPropertyDefinition(propDef);
-
-            tm.addTypeDefinition(cmisSuperType, false);
-
-            // create sub type
-            MutableDocumentTypeDefinition cmisSubType;
-            cmisSubType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(cmisSuperType,
-                    DOC_TYPE_SUB);
-            cmisSubType.setDisplayName("Document Type With a parent");
-            cmisSubType.setDescription("InMemory test type definition " + DOC_TYPE_SUB);
-
-            // create a String property definition
-            propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE_SUB,
-                    "Sample String Property Subtype", Updatability.READONLY);
-            propDef.setMaxLength(BigInteger.valueOf(20));
-            cmisSubType.addPropertyDefinition(propDef);
-
-            tm.addTypeDefinition(cmisSubType, false);
-
-            return tm;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java
deleted file mode 100644
index 40a92c0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-
-public class UnitTestTypeSystemCreator implements TypeCreator {
-    private static final String PROP_ID_PICK_LIST = "PickListProp";
-    public static final List<TypeDefinition> singletonTypes = buildTypesList();
-    public static final String COMPLEX_TYPE = "ComplexType";
-    public static final String TOPLEVEL_TYPE = "DocumentTopLevel";
-    public static final String LEVEL1_TYPE = "DocumentLevel1";
-    public static final String LEVEL2_TYPE = "DocumentLevel2";
-    public static final String VERSIONED_TYPE = "MyVersionedType";
-    public static final String VERSION_PROPERTY_ID = "StringProp";
-    public static final String FOLDER_TYPE = "FolderType";
-    public static final String SECONDARY_TYPE = "MySecondaryType";
-    public static final String SECONDARY_TYPE_2 = "MySecondaryType2";
-
-    public static final String PROP_ID_BOOLEAN = "BooleanProp";
-    public static final String PROP_ID_DATETIME = "DateTimeProp";
-    public static final String PROP_ID_DECIMAL = "DecimalProp";
-    public static final String PROP_ID_HTML = "HtmlProp";
-    public static final String PROP_ID_ID = "IdProp";
-    public static final String PROP_ID_INT = "IntProp";
-    public static final String PROP_ID_STRING = "StringProp";
-    public static final String PROP_ID_URI = "UriProp";
-    public static final String PROP_ID_BOOLEAN_MULTI_VALUE = "BooleanPropMV";
-    public static final String PROP_ID_DATETIME_MULTI_VALUE = "DateTimePropMV";
-    public static final String PROP_ID_DECIMAL_MULTI_VALUE = "DecimalPropMV";
-    public static final String PROP_ID_HTML_MULTI_VALUE = "HtmlPropMV";
-    public static final String PROP_ID_ID_MULTI_VALUE = "IdPropMV";
-    public static final String PROP_ID_INT_MULTI_VALUE = "IntPropMV";
-    public static final String PROP_ID_STRING_MULTI_VALUE = "StringPropMV";
-    public static final String PROP_ID_URI_MULTI_VALUE = "UriPropMV";
-    public static final String SECONDARY_STRING_PROP = "SecondaryStringProp";
-    public static final String SECONDARY_INTEGER_PROP = "SecondaryIntegerProp";
-
-    /**
-     * in the public interface of this class we return the singleton containing
-     * the required types for testing
-     */
-    @Override
-    public List<TypeDefinition> createTypesList() {
-        return singletonTypes;
-    }
-
-    public static List<TypeDefinition> getTypesList() {
-        return singletonTypes;
-    }
-
-    public static TypeDefinition getTypeById(String typeId) {
-        for (TypeDefinition typeDef : singletonTypes) {
-            if (typeDef.getId().equals(typeId)) {
-                return typeDef;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * create root types and a collection of sample types
-     * 
-     * @return typesMap map filled with created types
-     */
-    private static List<TypeDefinition> buildTypesList() {
-        TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-        try {
-            MutableTypeDefinition cmisType1;
-            cmisType1 = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    LEVEL1_TYPE);
-            cmisType1.setDisplayName("Document type with inherited properties, Level 2");
-            cmisType1.setDescription("Builtin InMemory type definition " + LEVEL1_TYPE);
-
-            cmisType1 = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    "MyDocType1");
-            cmisType1.setDisplayName("My Type 1 Level 1");
-            cmisType1.setDescription("Builtin InMemory type definition MyDocType1");
-            typesList.add(cmisType1);
-
-            MutableTypeDefinition cmisType2;
-            cmisType2 = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    "MyDocType2");
-            cmisType2.setDisplayName("My Type 2 Level 1");
-            cmisType2.setDescription("Builtin InMemory type definition MyDocType2");
-            typesList.add(cmisType2);
-
-            MutableTypeDefinition cmisType11;
-            cmisType11 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.1");
-            cmisType11.setDisplayName("My Type 3 Level 2");
-            cmisType11.setDescription("Builtin InMemory type definition MyDocType1.1");
-            typesList.add(cmisType11);
-
-            MutableTypeDefinition cmisType111;
-            cmisType111 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.1");
-            cmisType111.setDisplayName("My Type 4 Level 3");
-            cmisType111.setDescription("Builtin InMemory type definition MyDocType1.1.1");
-            typesList.add(cmisType111);
-
-            MutableTypeDefinition cmisType112;
-            cmisType112 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.2");
-            cmisType112.setDisplayName("My Type 5 Level 3");
-            cmisType112.setDescription("Builtin InMemory type definition MyDocType1.1.2");
-            typesList.add(cmisType112);
-
-            MutableTypeDefinition cmisType12;
-            cmisType12 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.2");
-            cmisType12.setDisplayName("My Type 6 Level 2");
-            cmisType12.setDescription("Builtin InMemory type definition MyDocType1.2");
-            typesList.add(cmisType12);
-
-            MutableTypeDefinition cmisType21;
-            cmisType21 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.1");
-            cmisType21.setDisplayName("My Type 7 Level 2");
-            cmisType21.setDescription("Builtin InMemory type definition MyDocType2.1");
-            typesList.add(cmisType21);
-
-            MutableTypeDefinition cmisType22;
-            cmisType22 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.2");
-            cmisType22.setDisplayName("My Type 8 Level 2");
-            cmisType22.setDescription("Builtin InMemory type definition MyDocType2.2");
-            typesList.add(cmisType22);
-
-            MutableTypeDefinition cmisType23;
-            cmisType23 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.3");
-            cmisType23.setDisplayName("My Type 9 Level 2");
-            cmisType23.setDescription("Builtin InMemory type definition MyDocType2.3");
-            typesList.add(cmisType23);
-
-            MutableTypeDefinition cmisType24;
-            cmisType24 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.4");
-            cmisType24.setDisplayName("My Type 10 Level 2");
-            cmisType24.setDescription("Builtin InMemory type definition MyDocType2.4");
-            typesList.add(cmisType24);
-
-            MutableTypeDefinition cmisType25;
-            cmisType25 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.5");
-            cmisType25.setDisplayName("My Type 11 Level 2");
-            cmisType25.setDescription("Builtin InMemory type definition MyDocType2.5");
-            typesList.add(cmisType25);
-
-            MutableTypeDefinition cmisType26;
-            cmisType26 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.6");
-            cmisType26.setDisplayName("My Type 12 Level 2");
-            cmisType26.setDescription("Builtin InMemory type definition MyDocType2.6");
-            typesList.add(cmisType26);
-
-            MutableTypeDefinition cmisType27;
-            cmisType27 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.7");
-            cmisType27.setDisplayName("My Type 13 Level 2");
-            cmisType27.setDescription("Builtin InMemory type definition MyDocType2.7");
-            typesList.add(cmisType27);
-
-            MutableTypeDefinition cmisType28;
-            cmisType28 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.8");
-            cmisType28.setDisplayName("My Type 14 Level 2");
-            cmisType28.setDescription("Builtin InMemory type definition MyDocType2.8");
-            typesList.add(cmisType28);
-
-            MutableTypeDefinition cmisType29;
-            cmisType29 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.9");
-            cmisType29.setDisplayName("My Type 15 Level 2");
-            cmisType29.setDescription("Builtin InMemory type definition MyDocType2.9");
-            typesList.add(cmisType29);
-
-            // create a complex type with properties
-            MutableDocumentTypeDefinition cmisComplexType;
-            cmisComplexType = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisDocumentType().getId());
-            cmisComplexType.setId(COMPLEX_TYPE);
-            cmisComplexType.setDisplayName("Complex type with properties, Level 1");
-            cmisComplexType.setDescription("Builtin InMemory type definition ComplexType");
-
-            // create a boolean property definition
-
-            PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition(PROP_ID_BOOLEAN,
-                    "Sample Boolean Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop);
-
-            prop = PropertyCreationHelper.createBooleanMultiDefinition(PROP_ID_BOOLEAN_MULTI_VALUE,
-                    "Sample Boolean multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop);
-
-            PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition(PROP_ID_DATETIME,
-                    "Sample DateTime Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop2);
-
-            prop2 = PropertyCreationHelper.createDateTimeMultiDefinition(PROP_ID_DATETIME_MULTI_VALUE,
-                    "Sample DateTime multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop2);
-
-            PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition(PROP_ID_DECIMAL,
-                    "Sample Decimal Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop3);
-
-            prop3 = PropertyCreationHelper.createDecimalMultiDefinition(PROP_ID_DECIMAL_MULTI_VALUE,
-                    "Sample Decimal multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop3);
-
-            PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition(PROP_ID_HTML,
-                    "Sample Html Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop4);
-
-            prop4 = PropertyCreationHelper.createHtmlMultiDefinition(PROP_ID_HTML_MULTI_VALUE,
-                    "Sample Html multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop4);
-
-            PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition(PROP_ID_ID,
-                    "Sample Id Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop5);
-
-            prop5 = PropertyCreationHelper.createIdMultiDefinition(PROP_ID_ID_MULTI_VALUE,
-                    "Sample Id Html multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop5);
-
-            PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition(PROP_ID_INT,
-                    "Sample Int Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop6);
-
-            prop6 = PropertyCreationHelper.createIntegerMultiDefinition(PROP_ID_INT_MULTI_VALUE,
-                    "Sample Int multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop6);
-
-            PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition(PROP_ID_STRING,
-                    "Sample String Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop7);
-
-            prop7 = PropertyCreationHelper.createStringMultiDefinition(PROP_ID_STRING_MULTI_VALUE,
-                    "Sample String multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop7);
-
-            PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition(PROP_ID_URI,
-                    "Sample Uri Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop8);
-
-            prop8 = PropertyCreationHelper.createUriMultiDefinition(PROP_ID_URI_MULTI_VALUE,
-                    "Sample Uri multi-value Property", Updatability.READONLY);
-            cmisComplexType.addPropertyDefinition(prop8);
-
-            PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition(PROP_ID_PICK_LIST,
-                    "Sample Pick List Property", Updatability.READONLY);
-            List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-            ChoiceImpl<String> elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("red"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("green"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("blue"));
-            choiceList.add(elem);
-            elem = new ChoiceImpl<String>();
-            elem.setValue(Collections.singletonList("black"));
-            choiceList.add(elem);
-            prop9.setChoices(choiceList);
-            prop9.setDefaultValue(Collections.singletonList("blue"));
-            cmisComplexType.addPropertyDefinition(prop9);
-
-            // add type to types collection
-            typesList.add(cmisComplexType);
-
-            // create a type hierarchy with inherited properties
-            MutableDocumentTypeDefinition cmisDocTypeTopLevel;
-            cmisDocTypeTopLevel = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisDocumentType().getId());
-            cmisDocTypeTopLevel.setId(TOPLEVEL_TYPE);
-            cmisDocTypeTopLevel.setDisplayName("Document type with properties, Level 1");
-            cmisDocTypeTopLevel.setDescription("Builtin InMemory type definition " + TOPLEVEL_TYPE);
-
-            MutableTypeDefinition cmisDocTypeLevel1;
-            cmisDocTypeLevel1 = typeFactory.createChildTypeDefinition(cmisDocTypeTopLevel, LEVEL1_TYPE);
-            cmisDocTypeLevel1.setDisplayName("Document type with inherited properties, Level 2");
-            cmisDocTypeLevel1.setDescription("Builtin InMemory type definition " + LEVEL1_TYPE);
-
-            MutableTypeDefinition cmisDocTypeLevel2;
-            cmisDocTypeLevel2 = typeFactory.createChildTypeDefinition(cmisDocTypeLevel1, LEVEL2_TYPE);
-            cmisDocTypeLevel2.setDisplayName("Document type with inherited properties, Level 3");
-            cmisDocTypeLevel2.setDescription("Builtin InMemory type definition " + LEVEL2_TYPE);
-
-            PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
-                    "Sample String Property", Updatability.READWRITE);
-            cmisDocTypeTopLevel.addPropertyDefinition(propTop);
-
-            PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
-                    "String Property Level 1", Updatability.READWRITE);
-            cmisDocTypeLevel1.addPropertyDefinition(propLevel1);
-
-            PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
-                    "String Property Level 2", Updatability.READWRITE);
-            cmisDocTypeLevel2.addPropertyDefinition(propLevel2);
-
-            // create a versioned type with properties
-            MutableDocumentTypeDefinition cmisVersionedType;
-            cmisVersionedType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), VERSIONED_TYPE);
-            cmisVersionedType.setDisplayName("Versioned Type");
-            cmisVersionedType.setDescription("Builtin InMemory type definition " + VERSIONED_TYPE);
-            cmisVersionedType.setIsVersionable(true); // make it a versionable
-                                                      // type;
-
-            // create a single String property definition
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(VERSION_PROPERTY_ID,
-                    "Sample String Property", Updatability.WHENCHECKEDOUT);
-            cmisVersionedType.addPropertyDefinition(prop1);
-
-            // add type to types collection
-
-            // create a folder type
-            // create a complex type with properties
-            MutableFolderTypeDefinition cmisFolderType;
-            cmisFolderType = typeFactory.createFolderTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper
-                    .getCmisFolderType().getId());
-            cmisFolderType.setId(FOLDER_TYPE);
-            cmisFolderType.setDisplayName("Folder type with properties");
-            cmisFolderType.setDescription("InMemory test type definition " + FOLDER_TYPE);
-
-            // create a two property definitions for folder
-            prop6 = PropertyCreationHelper.createIntegerDefinition(PROP_ID_INT, "Sample Folder Int Property",
-                    Updatability.READONLY);
-            cmisFolderType.addPropertyDefinition(prop6);
-
-            prop7 = PropertyCreationHelper.createStringDefinition(PROP_ID_STRING, "Sample Folder String Property",
-                    Updatability.READONLY);
-            cmisFolderType.addPropertyDefinition(prop7);
-
-            // CMIS 1.1 create a secondary type
-            MutableSecondaryTypeDefinition cmisSecondaryType;
-            cmisSecondaryType = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisSecondaryType().getId());
-            cmisSecondaryType.setId(SECONDARY_TYPE);
-            cmisSecondaryType.setDisplayName("MySecondaryType");
-            cmisSecondaryType.setDescription("Builtin InMemory type definition " + SECONDARY_TYPE);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisSecondaryType);
-            cmisSecondaryType.setIsFileable(false);
-
-            // create a single String property definition
-            PropertyStringDefinitionImpl propS1 = PropertyCreationHelper.createStringDefinition(SECONDARY_STRING_PROP,
-                    "Secondary String Property", Updatability.READWRITE);
-            cmisSecondaryType.addPropertyDefinition(propS1);
-            PropertyIntegerDefinitionImpl propS2 = PropertyCreationHelper.createIntegerDefinition(
-                    SECONDARY_INTEGER_PROP, "Secondary Integer Property", Updatability.READWRITE);
-            propS2.setIsRequired(true);
-            cmisSecondaryType.addPropertyDefinition(propS2);
-
-            MutableSecondaryTypeDefinition cmisSecondaryType2;
-            cmisSecondaryType2 = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1,
-                    DocumentTypeCreationHelper.getCmisSecondaryType().getId());
-            cmisSecondaryType2.setId(SECONDARY_TYPE_2);
-            cmisSecondaryType2.setDisplayName("MySecondaryType-2");
-            cmisSecondaryType2.setDescription("Builtin InMemory type definition " + SECONDARY_TYPE_2);
-            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisSecondaryType2);
-
-            // add type to types collectio
-            typesList.add(cmisDocTypeTopLevel);
-            typesList.add(cmisDocTypeLevel1);
-            typesList.add(cmisDocTypeLevel2);
-            typesList.add(cmisVersionedType);
-            typesList.add(cmisFolderType);
-            typesList.add(cmisSecondaryType);
-            typesList.add(cmisSecondaryType2);
-            return typesList;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java
deleted file mode 100644
index fd6fd08..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-
-public class VersionTestTypeSystemCreator implements TypeCreator {
-    public static final String VERSION_TEST_DOCUMENT_TYPE_ID = "MyVersionedType";
-    public static final String PROPERTY_ID = "StringProp";
-    public static final List<TypeDefinition> singletonTypes = buildTypesList();
-
-    /**
-     * in the public interface of this class we return the singleton containing
-     * the required types for testing
-     */
-    @Override
-    public List<TypeDefinition> createTypesList() {
-        return singletonTypes;
-    }
-
-    public static List<TypeDefinition> getTypesList() {
-        return singletonTypes;
-    }
-
-    public static TypeDefinition getTypeById(String typeId) {
-        for (TypeDefinition typeDef : singletonTypes) {
-            if (typeDef.getId().equals(typeId)) {
-                return typeDef;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * create root types and a collection of sample types
-     * 
-     * @return typesMap map filled with created types
-     */
-    private static List<TypeDefinition> buildTypesList() {
-        TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-        // always add CMIS default types
-        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-        try {
-            // create a complex type with properties
-            MutableDocumentTypeDefinition cmisComplexType;
-            cmisComplexType = (MutableDocumentTypeDefinition) typeFactory.createChildTypeDefinition(
-                    DocumentTypeCreationHelper.getCmisDocumentType(), VERSION_TEST_DOCUMENT_TYPE_ID);
-            cmisComplexType.setDisplayName("VersionedType");
-            cmisComplexType.setDescription("InMemory test type definition " + VERSION_TEST_DOCUMENT_TYPE_ID);
-            cmisComplexType.setIsVersionable(true); // make it a versionable
-                                                    // type;
-
-            // create a boolean property definition
-
-            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(PROPERTY_ID,
-                    "Sample String Property", Updatability.WHENCHECKEDOUT);
-            cmisComplexType.addPropertyDefinition(prop1);
-
-            // add type to types collection
-            typesList.add(cmisComplexType);
-
-            return typesList;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating types.", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
deleted file mode 100644
index c95851b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class VersioningTest extends AbstractServiceTest {
-    private static final Logger log = LoggerFactory.getLogger(ObjectServiceTest.class);
-    private static final String PROP_VALUE = "Mickey Mouse";
-    private static final String PROP_VALUE_NEW = "Donald Duck";
-    private static final String PROP_NAME = "My Versioned Document";
-    private static final String PROP_NEW_NAME = "My Renamed Versioned Document";
-    private static final String TEST_USER = "TestUser";
-    private static final String TEST_USER_2 = "OtherUser";
-
-    ObjectCreator fCreator;
-
-    @Override
-    @Before
-    public void setUp() {
-        super.setTypeCreatorClass(VersionTestTypeSystemCreator.class.getName());
-        super.setUp();
-        fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-        setRuntimeContext(TEST_USER);
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    private void setRuntimeContext(String user) {
-
-        /*
-         * DummyCallContext ctx = new DummyCallContext();
-         * ctx.put(CallContext.USERNAME, user); // Attach the CallContext to a
-         * thread local context that can be accessed from everywhere
-         * RuntimeContext.attachCfg(ctx);
-         */
-        ((DummyCallContext) fTestCallContext).put(CallContext.USERNAME, user);
-    }
-
-    @Test
-    public void testCreateVersionedDocumentMinor() {
-        createVersionedDocument(VersioningState.MINOR);
-    }
-
-    @Test
-    public void testCreateVersionedDocumentCheckedOut() {
-        createVersionedDocument(VersioningState.CHECKEDOUT);
-    }
-
-    @Test
-    public void testCreateVersionedDocumentNone() {
-        try {
-            createVersionedDocument(VersioningState.NONE);
-            fail("creating a document of a versionable type with state VersioningState.NONE should fail.");
-        } catch (Exception e) {
-            assertEquals(CmisConstraintException.class, e.getClass());
-        }
-    }
-
-    @Test
-    public void testCheckOutBasic() {
-        String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-
-        assertFalse(isCheckedOut(version.getProperties().getProperties()));
-
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-        // test that object is checked out and that all properties are set
-        // correctly
-        Properties props = fObjSvc.getProperties(fRepositoryId, pwcId, "*", null);
-        String changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-        checkVersionProperties(pwcId, VersioningState.CHECKEDOUT, props.getProperties(), null);
-
-        // Test that a second checkout is not possible
-        try {
-            fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-            fail("Checking out a document that is already checked-out should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-        // version and version series should be checked out now
-        // assertTrue(isCheckedOut(docId));
-        assertTrue(isCheckedOut(pwcId));
-
-        // Set a new content and modify property
-        ContentStream altContent = fCreator.createAlternateContent();
-        idHolder = new Holder<String>(pwcId);
-        Holder<String> tokenHolder = new Holder<String>(changeToken);
-        fObjSvc.setContentStream(fRepositoryId, idHolder, true, tokenHolder, altContent, null);
-        fCreator.updateProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-
-        // Test that a check-in as same user is possible
-        String checkinComment = "Checkin without content and properties.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, checkinComment, null, null, null, null);
-        // Neither the version nor the version series should be checked out any
-        // longer:
-        assertFalse(isCheckedOut(idHolder.getValue()));
-        // assertFalse(isCheckedOut(docId));
-        ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idHolder.getValue(), null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-        assertTrue(fCreator.verifyContent(fCreator.createAlternateContent(), retrievedContent));
-        assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID,
-                PROP_VALUE_NEW));
-
-        List<ObjectData> allVersions = fVerSvc.getAllVersions(fRepositoryId, docId, docId, "*", false, null);
-        assertEquals(2, allVersions.size());
-    }
-
-    @Test
-    public void testCheckInWithContent() {
-        String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-
-        assertFalse(isCheckedOut(version.getProperties().getProperties()));
-
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-
-        ContentStream altContent = fCreator.createAlternateContent();
-
-        // update two properties custom and name:
-        List<PropertyData<?>> newProperties = fCreator.getUpdatePropertyDataList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-        newProperties.add(fFactory.createPropertyStringData(PropertyIds.NAME, PROP_NEW_NAME));
-        Properties newProps = fFactory.createPropertiesData(newProperties);
-
-        idHolder = new Holder<String>(pwcId);
-        // assertTrue(isCheckedOut(docId));
-        assertTrue(isCheckedOut(pwcId));
-
-        // Test check-in and pass content and properties
-        String checkinComment = "Checkin with content and properties.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, altContent, checkinComment, null, null, null, null);
-        // Neither the version nor the version series should be checked out any
-        // longer:
-        assertFalse(isCheckedOut(idHolder.getValue()));
-        // assertFalse(isCheckedOut(docId));
-        ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idHolder.getValue(), null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-
-        // New content and property should be set
-        assertTrue(fCreator.verifyContent(fCreator.createAlternateContent(), retrievedContent));
-        assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID,
-                PROP_VALUE_NEW));
-        assertTrue(fCreator.verifyProperty(idHolder.getValue(), PropertyIds.NAME,
-                PROP_NEW_NAME));
-    }
-
-    @Test
-    public void testCheckOutAndOtherUser() {
-        String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-        assertFalse(isCheckedOut(version.getProperties().getProperties()));
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-
-        // Test that a checkin as another user is not possible
-        setRuntimeContext(TEST_USER_2);
-        try {
-            fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, "My Comment", null, null, null, null);
-            fail("Checking in a document as another user should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-
-        // Test that a cancel checkout as another user is not possible
-        try {
-            fVerSvc.cancelCheckOut(fRepositoryId, pwcId, null);
-            fail("Checking in a document as another user should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-
-        // Test that an updateProperties as another user is not possible
-        try {
-            fCreator.updateProperty(pwcId, VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-            fail("updateProperty in a document as another user should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-
-        ContentStream altContent = fCreator.createAlternateContent();
-        Holder<String> pwcHolder = new Holder<String>(pwcId);
-        try {
-            fObjSvc.setContentStream(fRepositoryId, pwcHolder, true, null, altContent, null);
-            fail("setContentStream in a document as another user should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-
-        setRuntimeContext(TEST_USER);
-        // Test that a check-in as same user is possible
-        fVerSvc.checkIn(fRepositoryId, pwcHolder, true, null, null, "testCheckOutAndOtherUser", null, null, null, null);
-
-        // Because nothing was changed we should have a new version with
-        // identical content
-        ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, pwcHolder.getValue(), null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-        assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createContent()));
-        assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE));
-    }
-
-    @Test
-    public void testCancelCheckout() {
-        String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String idOfLastVersion = version.getId();
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-        assertFalse(isCheckedOut(version.getProperties().getProperties()));
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-
-        // Set a new content and modify property
-        Properties props = fObjSvc.getProperties(fRepositoryId, pwcId, "*", null);
-        String changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
-        ContentStream altContent = fCreator.createAlternateContent();
-        idHolder = new Holder<String>(pwcId);
-        Holder<String> tokenHolder = new Holder<String>(changeToken);
-        fObjSvc.setContentStream(fRepositoryId, idHolder, true, tokenHolder, altContent, null);
-        fCreator.updateProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-
-        // cancel checkout
-        fVerSvc.cancelCheckOut(fRepositoryId, pwcId, null);
-        try {
-            // Verify that pwc no longer exists
-            fObjSvc.getObject(fRepositoryId, pwcId, "*", false, IncludeRelationships.NONE, null, false, false, null);
-            fail("Getting pwc after cancel checkout should fail.");
-        } catch (CmisObjectNotFoundException e1) {
-        } catch (Exception e2) {
-            fail("Expected a CmisObjectNotFoundException after cancel checkin, but got a " + e2.getClass().getName());
-        }
-
-        // verify that the old content and properties are still valid
-        assertTrue(fCreator.verifyProperty(idOfLastVersion, VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE));
-        ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idOfLastVersion, null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-        assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createContent()));
-    }
-
-    @Test
-    public void testGetPropertiesOfLatestVersion() {
-        VersioningState versioningState = VersioningState.MAJOR;
-        String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
-        getDocument(verId);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-
-        ContentStream altContent = fCreator.createAlternateContent();
-        Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-        idHolder = new Holder<String>(pwcId);
-        // assertTrue(isCheckedOut(docId));
-        assertTrue(isCheckedOut(pwcId));
-
-        // Test check-in and pass content and properties
-        String checkinComment = "Checkin with content and properties.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, altContent, checkinComment, null, null, null, null);
-
-        Properties latest = fVerSvc.getPropertiesOfLatestVersion(fRepositoryId, docId, docId, true, "*", null);
-        assertNotNull(latest);
-
-        checkVersionProperties(verId, versioningState, latest.getProperties(), checkinComment);
-    }
-
-    @Test
-    public void testGetLatestVersion() {
-        VersioningState versioningState = VersioningState.MINOR;
-        String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
-        getDocument(verId);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verId); // or should this
-        // be version
-        // series?
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        String pwcId = idHolder.getValue();
-
-        ContentStream altContent = fCreator.createAlternateContent();
-        Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
-        idHolder = new Holder<String>(pwcId);
-        // assertTrue(isCheckedOut(docId));
-        assertTrue(isCheckedOut(pwcId));
-
-        // Test check-in and pass content and properties
-        String checkinComment = "Checkin with content and properties.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, altContent, checkinComment, null, null, null, null);
-
-        // get latest major version
-        versioningState = VersioningState.MAJOR;
-        boolean isMajor = true;
-        ObjectData objData = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, docId, isMajor, "*", false,
-                IncludeRelationships.NONE, null, false, false, null);
-        checkVersionProperties(verId, versioningState, objData.getProperties().getProperties(), checkinComment);
-        ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, objData.getId(), null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-        assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createAlternateContent()));
-
-        // get latest non-major version, must be the same as before
-        versioningState = VersioningState.MAJOR;
-        isMajor = false;
-        objData = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, docId, isMajor, "*", false,
-                IncludeRelationships.NONE, null, false, false, null);
-        checkVersionProperties(verId, versioningState, objData.getProperties().getProperties(), checkinComment);
-        retrievedContent = fObjSvc.getContentStream(fRepositoryId, objData.getId(), null,
-                BigInteger.valueOf(-1) /* offset */, BigInteger.valueOf(-1) /* length */, null);
-        assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createAlternateContent()));
-    }
-
-    @Test
-    public void testGetCheckedOutDocuments() {
-        // create two folders with each having two documents, one of them being
-        // checked out
-        final int count = 2;
-        String[] folderIds = createLevel1Folders();
-        String[] verSeriesIds = new String[folderIds.length * count];
-        for (int i = 0; i < folderIds.length; i++) {
-            for (int j = 0; j < count; j++) {
-                String verId = createDocument("MyDoc" + j, folderIds[i], VersioningState.MAJOR);
-                ObjectData od = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                        false, false, null);
-                verSeriesIds[i * folderIds.length + j] = verId;
-            }
-        }
-        // checkout first in each folder
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(verSeriesIds[0]);
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        idHolder = new Holder<String>(verSeriesIds[2]);
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-
-        // must be one in first folder
-        ObjectList checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, folderIds[0], "*", null, false,
-                IncludeRelationships.NONE, null, BigInteger.valueOf(-1), BigInteger.valueOf(-1), null);
-        assertEquals(1, checkedOutDocuments.getNumItems().longValue());
-        assertEquals(1, checkedOutDocuments.getObjects().size());
-
-        // must be one in second folder
-        checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, folderIds[1], "*", null, false,
-                IncludeRelationships.NONE, null, BigInteger.valueOf(-1), BigInteger.valueOf(-1), null);
-        assertEquals(1, checkedOutDocuments.getNumItems().longValue());
-        assertEquals(1, checkedOutDocuments.getObjects().size());
-
-        // must be two in repository
-        checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, null, "*", null, false,
-                IncludeRelationships.NONE, null, BigInteger.valueOf(-1), BigInteger.valueOf(-1), null);
-        assertEquals(2, checkedOutDocuments.getNumItems().longValue());
-        assertEquals(2, checkedOutDocuments.getObjects().size());
-    }
-
-    @Test
-    public void testModifyOldVersions() {
-        String versionSeriesId = createVersionSeriesWithThreeVersions();
-        List<ObjectData> allVersions = fVerSvc.getAllVersions(fRepositoryId, null, versionSeriesId, "*", false, null);
-        assertEquals(3, allVersions.size());
-
-    }
-
-    private String[] createLevel1Folders() {
-        final int num = 2;
-        String[] res = new String[num];
-
-        for (int i = 0; i < num; i++) {
-            List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, "Folder " + i));
-            properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_FOLDER.value()));
-            Properties props = fFactory.createPropertiesData(properties);
-            String id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
-            res[i] = id;
-        }
-        return res;
-    }
-
-    private void createVersionedDocument(VersioningState versioningState) {
-        // type id is:
-        // VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID
-        String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
-        getDocument(verId);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
-        assertTrue(null != docId && docId.length() > 0);
-
-        List<ObjectData> allVersions = fVerSvc.getAllVersions(fRepositoryId, docId, docId, "*", false, null);
-        assertEquals(1, allVersions.size());
-
-        checkVersionProperties(verId, versioningState, allVersions.get(0).getProperties().getProperties(), null);
-    }
-
-    private static String getVersionSeriesId(String docId, Map<String, PropertyData<?>> props) {
-        PropertyId pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_ID);
-        assertNotNull(pdid);
-        String sVal = pdid.getFirstValue();
-        assertNotNull(sVal);
-        return sVal;
-    }
-
-    private boolean isCheckedOut(String objectId) {
-        Properties props = fObjSvc.getProperties(fRepositoryId, objectId, "*", null);
-        return isCheckedOut(props.getProperties());
-    }
-
-    private static boolean isCheckedOut(Map<String, PropertyData<?>> props) {
-        PropertyBoolean pdb = (PropertyBoolean) props.get(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-        assertNotNull(pdb);
-        boolean bVal = pdb.getFirstValue();
-        return bVal;
-    }
-
-    private void checkVersionProperties(String docId, VersioningState versioningState,
-            Map<String, PropertyData<?>> props, String checkinComment) {
-        for (PropertyData<?> pd : props.values()) {
-            log.info("return property id: " + pd.getId() + ", value: " + pd.getValues());
-        }
-
-        DocumentTypeDefinition typeDef = (DocumentTypeDefinition) fRepSvc.getTypeDefinition(fRepositoryId,
-                VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, null);
-        PropertyBoolean pdb = (PropertyBoolean) props.get(PropertyIds.IS_LATEST_VERSION);
-        assertNotNull(pdb);
-        boolean bVal = pdb.getFirstValue();
-        if (versioningState != VersioningState.CHECKEDOUT) {
-            assertTrue(bVal);
-        } else {
-            assertFalse(bVal);
-        }
-        pdb = (PropertyBoolean) props.get(PropertyIds.IS_MAJOR_VERSION);
-        assertNotNull(pdb);
-        bVal = pdb.getFirstValue();
-        assertEquals(versioningState == VersioningState.MAJOR, bVal);
-
-        pdb = (PropertyBoolean) props.get(PropertyIds.IS_LATEST_MAJOR_VERSION);
-        assertNotNull(pdb);
-        bVal = pdb.getFirstValue();
-        assertEquals(versioningState == VersioningState.MAJOR, bVal);
-
-        PropertyId pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_ID);
-        assertNotNull(pdid);
-        String sVal = pdid.getFirstValue();
-        // if (typeDef.isVersionable()) // need not be
-        // assertFalse(docId.equals(sVal));
-        // else
-        // assertEquals(docId, sVal);
-
-        pdb = (PropertyBoolean) props.get(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-        assertNotNull(pdb);
-        bVal = pdb.getFirstValue();
-        assertEquals(versioningState == VersioningState.CHECKEDOUT, bVal);
-
-        PropertyString pds = (PropertyString) props.get(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
-        assertNotNull(pds);
-        sVal = pds.getFirstValue();
-        if (versioningState == VersioningState.CHECKEDOUT) {
-            assertTrue(sVal != null && sVal.length() > 0);
-        } else {
-            assertTrue(null == sVal || sVal.equals(""));
-        }
-
-        pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
-        assertNotNull(pdid);
-        sVal = pdid.getFirstValue();
-        if (versioningState == VersioningState.CHECKEDOUT) {
-            assertTrue(sVal != null && sVal.length() > 0);
-        } else {
-            assertTrue(null == sVal || sVal.equals(""));
-        }
-
-        pds = (PropertyString) props.get(PropertyIds.CHECKIN_COMMENT);
-        assertNotNull(pdb);
-        sVal = pds.getFirstValue();
-        if (checkinComment == null) {
-            assertTrue(null == sVal);
-        } else {
-            assertEquals(checkinComment, sVal);
-        }
-
-    }
-
-    @Override
-    public String getDocument(String id) {
-        String returnedId = null;
-        try {
-            ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
-                    false, null);
-            assertNotNull(res);
-            testReturnedProperties(res.getProperties().getProperties());
-            returnedId = res.getId();
-            assertEquals(id, returnedId);
-        } catch (Exception e) {
-            fail("getObject() failed with exception: " + e);
-        }
-        return returnedId;
-    }
-
-    private static void testReturnedProperties(Map<String, PropertyData<?>> props) {
-        for (PropertyData<?> pd : props.values()) {
-            log.info("return property id: " + pd.getId() + ", value: " + pd.getValues());
-        }
-
-        PropertyData<?> pd = props.get(PropertyIds.NAME);
-        assertNotNull(pd);
-        assertEquals(PROP_NAME, pd.getFirstValue());
-        pd = props.get(PropertyIds.OBJECT_TYPE_ID);
-        assertEquals(VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, pd.getFirstValue());
-        pd = props.get(VersionTestTypeSystemCreator.PROPERTY_ID);
-        assertEquals(PROP_VALUE, pd.getFirstValue());
-    }
-
-    private String createDocument(String name, String folderId, VersioningState versioningState) {
-
-        String id = null;
-        Map<String, String> properties = new HashMap<String, String>();
-        properties.put(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE);
-        id = fCreator.createDocument(name, VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, folderId,
-                versioningState, properties);
-
-        return id;
-    }
-
-    private String createVersionSeriesWithThreeVersions() {
-        String verIdV1 = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
-        getDocument(verIdV1);
-
-        ObjectData version = fObjSvc.getObject(fRepositoryId, verIdV1, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-        String verSeriesId = getVersionSeriesId(verIdV1, version.getProperties().getProperties());
-
-        // create second version with different content
-        Holder<String> idHolder = new Holder<String>(verIdV1);
-        Holder<Boolean> contentCopied = new Holder<Boolean>(false);
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-
-        ContentStream content2 = createContent('a');
-        Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID,
-                "PropertyFromVersion2");
-        idHolder = new Holder<String>(verIdV1);
-        // Test check-in and pass content and properties
-        String checkinComment = "Checkin from Unit Test-2.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, content2, checkinComment, null, null, null, null);
-        String verIdV2 = idHolder.getValue();
-
-        // create third version with different content
-        contentCopied = new Holder<Boolean>(false);
-        fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
-        ContentStream content3 = super.createContent('a');
-        newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, "PropertyFromVersion3");
-        // Test check-in and pass content and properties
-        checkinComment = "Checkin from Unit Test-3.";
-        fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, content3, checkinComment, null, null, null, null);
-        /* String verIdV3 = */idHolder.getValue();
-
-        // Try to update version2 which should fail (on a versioned document
-        // only a document that
-        // is checked out can be modified.
-        try {
-            fCreator.updateProperty(verIdV2, VersionTestTypeSystemCreator.PROPERTY_ID, "ChangeWithoutCheckout");
-            fail("updateProperty for an older version should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-        // try to set content on an older version
-        ContentStream content4 = super.createContent('x');
-        idHolder = new Holder<String>(verIdV2);
-        try {
-            fObjSvc.setContentStream(fRepositoryId, idHolder, true, null, content4, null);
-            fail("setContentStream for an older version should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisUpdateConflictException);
-        }
-
-        return verSeriesId;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java
deleted file mode 100644
index 634e31d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer;
-import org.apache.chemistry.opencmis.server.support.query.PredicateWalkerBase;
-import org.apache.chemistry.opencmis.server.support.query.StringUtil;
-import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractQueryConditionProcessor implements PredicateWalkerBase {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ProcessQueryTest.class);
-
-    protected abstract void onStartProcessing(Tree whereNode);
-
-    protected abstract void onStopProcessing();
-
-    // Compare operators
-    protected void onPreEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onEquals(Tree eqNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {
-    }
-
-    // Boolean operators
-    protected abstract void onNot(Tree opNode, Tree leftNode);
-
-    protected void onPostNot(Tree opNode, Tree leftNode) {
-    }
-
-    protected void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onAnd(Tree opNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected void onPreOr(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-
-    protected abstract void onOr(Tree opNode, Tree leftNode, Tree rightNode);
-
-    protected void onPostOr(Tree opNode, Tree leftNode, Tree rightNode) {
-    }
-
-    // Multi-value:
-    protected void onPreIn(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected abstract void onIn(Tree node, Tree colNode, Tree listNode);
-
-    protected void onPostIn(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected void onPreNotIn(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected abstract void onNotIn(Tree node, Tree colNode, Tree listNode);
-
-    protected void onPostNotIn(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected void onPreInAny(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected abstract void onInAny(Tree node, Tree colNode, Tree listNode);
-
-    protected void onPostInAny(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected void onPreNotInAny(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected abstract void onNotInAny(Tree node, Tree literalNode, Tree colNode);
-
-    protected void onPostNotInAny(Tree node, Tree colNode, Tree listNode) {
-    }
-
-    protected void onPreEqAny(Tree node, Tree literalNode, Tree colNode) {
-    }
-
-    protected abstract void onEqAny(Tree node, Tree literalNode, Tree colNode);
-
-    protected void onPostEqAny(Tree node, Tree literalNode, Tree colNode) {
-    }
-
-    // Null comparisons:
-    protected abstract void onIsNull(Tree nullNode, Tree colNode);
-
-    protected void onPostIsNull(Tree nullNode, Tree colNode) {
-    }
-
-    protected abstract void onIsNotNull(Tree notNullNode, Tree colNode);
-
-    protected void onPostIsNotNull(Tree notNullNode, Tree colNode) {
-    }
-
-    // String matching:
-    protected void onPreIsLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected abstract void onIsLike(Tree node, Tree colNode, Tree stringNode);
-
-    protected void onPostIsLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected void onPreIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected abstract void onIsNotLike(Tree node, Tree colNode, Tree stringNode);
-
-    protected void onPostIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-    }
-
-    protected abstract void onInFolder(Tree node, Tree colNode, Tree paramNode);
-
-    protected void onBetweenInFolder(Tree node, Tree colNode, Tree paramNode) {
-    }
-
-    protected void onPostInFolder(Tree node, Tree colNode, Tree paramNode) {
-    }
-
-    protected abstract void onInTree(Tree node, Tree colNode, Tree paramNode);
-
-    protected void onBetweenInTree(Tree node, Tree colNode, Tree paramNode) {
-    }
-
-    protected void onPostInTree(Tree node, Tree colNode, Tree paramNode) {
-    }
-
-    protected abstract void onScore(Tree node);
-
-    protected abstract void onColNode(Tree node);
-
-    protected void onPreTextAnd(Tree node, List<Tree> conjunctionNodes) {
-    }
-
-    protected abstract void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index);
-
-    protected void onPostTextAnd(Tree node, List<Tree> conjunctionNodes) {
-    }
-
-    protected void onPreTextOr(Tree node, List<Tree> termNodes) {
-    }
-
-    protected abstract void onTextOr(Tree node, List<Tree> termNodes, int index);
-
-    protected void onPostTextOr(Tree node, List<Tree> termNodes) {
-    }
-
-    protected abstract void onTextMinus(Tree node, Tree notNode);
-
-    protected void onPostTextMinus(Tree node, Tree notNode) {
-    }
-
-    protected abstract void onTextWord(String word);
-
-    protected abstract void onTextPhrase(String phrase);
-
-    // Base interface called from query parser
-    @Override
-    public Boolean walkPredicate(Tree whereNode) {
-        if (null != whereNode) {
-            onStartProcessing(whereNode);
-            evalWhereNode(whereNode);
-            onStopProcessing();
-        }
-        return null; // unused
-    }
-
-    // ///////////////////////////////////////////////////////
-    // Processing the WHERE clause
-
-    protected void evalWhereNode(Tree node) {
-        // Ensure that we receive only valid tokens and nodes in the where
-        // clause:
-        LOG.debug("evaluating node: " + node.toString());
-        switch (node.getType()) {
-        case CmisQlStrictLexer.WHERE:
-            break; // ignore
-        case CmisQlStrictLexer.EQ:
-            onPreEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostEquals(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.NEQ:
-            onPreNotEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onNotEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostNotEquals(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.GT:
-            onPreGreaterThan(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onGreaterThan(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostGreaterThan(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.GTEQ:
-            onPreGreaterOrEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onGreaterOrEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostGreaterOrEquals(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.LT:
-            onPreLessThan(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onLessThan(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostLessThan(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.LTEQ:
-            onPreLessOrEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onLessOrEquals(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostLessOrEquals(node, node.getChild(0), node.getChild(1));
-            break;
-
-        case CmisQlStrictLexer.NOT:
-            onNot(node, node.getChild(0));
-            evalWhereNode(node.getChild(0));
-            onPostNot(node, node.getChild(0));
-            break;
-        case CmisQlStrictLexer.AND:
-            onPreAnd(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onAnd(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostAnd(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.OR:
-            onPreOr(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onOr(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostOr(node, node.getChild(0), node.getChild(1));
-            break;
-
-        // Multi-value:
-        case CmisQlStrictLexer.IN:
-            onPreIn(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onIn(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostIn(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.NOT_IN:
-            onPreNotIn(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onNotIn(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostNotIn(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.IN_ANY:
-            onPreInAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onInAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostInAny(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.NOT_IN_ANY:
-            onPreNotInAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onNotInAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostNotInAny(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.EQ_ANY:
-            onPreEqAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onEqAny(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostEqAny(node, node.getChild(0), node.getChild(1));
-            break;
-
-        // Null comparisons:
-        case CmisQlStrictLexer.IS_NULL:
-            onIsNull(node, node.getChild(0));
-            evalWhereNode(node.getChild(0));
-            onPostIsNull(node, node.getChild(0));
-            break;
-        case CmisQlStrictLexer.IS_NOT_NULL:
-            onIsNotNull(node, node.getChild(0));
-            evalWhereNode(node.getChild(0));
-            onPostIsNotNull(node, node.getChild(0));
-            break;
-
-        // String matching
-        case CmisQlStrictLexer.LIKE:
-            onPreIsLike(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onIsLike(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostIsLike(node, node.getChild(0), node.getChild(1));
-            break;
-        case CmisQlStrictLexer.NOT_LIKE:
-            onPreIsNotLike(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(0));
-            onIsNotLike(node, node.getChild(0), node.getChild(1));
-            evalWhereNode(node.getChild(1));
-            onPostIsNotLike(node, node.getChild(0), node.getChild(1));
-            break;
-
-        // Functions
-        case CmisQlStrictLexer.CONTAINS:
-            Tree typeNode = node.getChildCount() == 1 ? null : node.getChild(0);
-            Tree textSearchNode = node.getChildCount() == 1 ? node.getChild(0) : node.getChild(1);
-
-            onPreContains(node, typeNode, textSearchNode);
-            if (node.getChildCount() > 1) {
-                evalWhereNode(typeNode);
-                onBetweenContains(node, typeNode, textSearchNode);
-            }
-            onContains(node, typeNode, textSearchNode);
-            break;
-        case CmisQlStrictLexer.IN_FOLDER:
-            if (node.getChildCount() == 1) {
-                onInFolder(node, null, node.getChild(0));
-                evalWhereNode(node.getChild(0));
-                onPostInFolder(node, null, node.getChild(0));
-            } else {
-                onInFolder(node, node.getChild(0), node.getChild(1));
-                evalWhereNode(node.getChild(0));
-                onBetweenInFolder(node, node.getChild(0), node.getChild(1));
-                evalWhereNode(node.getChild(1));
-                onPostInFolder(node, node.getChild(0), node.getChild(1));
-            }
-            break;
-        case CmisQlStrictLexer.IN_TREE:
-            if (node.getChildCount() == 1) {
-                onInTree(node, null, node.getChild(0));
-                evalWhereNode(node.getChild(0));
-                onPostInTree(node, null, node.getChild(0));
-            } else {
-                onInTree(node, node.getChild(0), node.getChild(1));
-                evalWhereNode(node.getChild(0));
-                onBetweenInTree(node, node.getChild(0), node.getChild(1));
-                evalWhereNode(node.getChild(1));
-                onPostInTree(node, node.getChild(0), node.getChild(1));
-            }
-            break;
-        case CmisQlStrictLexer.SCORE:
-            onScore(node);
-            break;
-        case CmisQlStrictLexer.COL:
-            onColNode(node);
-            break;
-        case CmisQlStrictLexer.BOOL_LIT:
-        case CmisQlStrictLexer.NUM_LIT:
-        case CmisQlStrictLexer.STRING_LIT:
-        case CmisQlStrictLexer.TIME_LIT:
-            onLiteral(node);
-            break;
-        case CmisQlStrictLexer.IN_LIST:
-            onLiteralList(node);
-            break;
-        case CmisQlStrictLexer.ID:
-            onId(node);
-            break;
-        default:
-            // do nothing;
-        }
-    }
-
-    protected void onPreContains(Tree node, Tree typeNode, Tree searchExprNode) {
-    }
-
-    protected void onContains(Tree node, Tree typeNode, Tree searchExprNode) {
-        evalTextSearchNode(typeNode, searchExprNode);
-    }
-
-    protected void onBetweenContains(Tree node, Tree typeNode, Tree searchExprNode) {
-    }
-
-    protected void evalTextSearchNode(Tree typeNode, Tree node) {
-        // Ensure that we receive only valid tokens and nodes in the where
-        // clause:
-        LOG.debug("evaluating node: " + node.toString());
-        switch (node.getType()) {
-        case TextSearchLexer.TEXT_AND:
-            List<Tree> children = getChildrenAsList(node);
-            onPreTextAnd(node, children);
-            int i = 0;
-            for (Tree child : children) {
-                evalTextSearchNode(typeNode, child);
-                onTextAnd(node, children, i++);
-            }
-            onPostTextAnd(node, children);
-            break;
-        case TextSearchLexer.TEXT_OR:
-            children = getChildrenAsList(node);
-            onPreTextOr(node, children);
-            int j = 0;
-            for (Tree child : children) {
-                evalTextSearchNode(typeNode, child);
-                onTextOr(node, children, j++);
-            }
-            onPostTextOr(node, children);
-            break;
-        case TextSearchLexer.TEXT_MINUS:
-            onTextMinus(node, node.getChild(0));
-            evalTextSearchNode(typeNode, node.getChild(0));
-            onPostTextMinus(node, node.getChild(0));
-            break;
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-            onTextPhrase(onTextLiteral(node));
-            break;
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            onTextWord(onTextLiteral(node));
-            break;
-        }
-    }
-
-    // helper functions that are needed by most query tree walkers
-
-    protected Object getLiteral(Tree node) {
-        int type = node.getType();
-        String text = node.getText();
-        switch (type) {
-        case CmisQlStrictLexer.BOOL_LIT:
-            return Boolean.parseBoolean(node.getText());
-        case CmisQlStrictLexer.NUM_LIT:
-            if (text.contains(".") || text.contains("e") || text.contains("E")) {
-                return Double.parseDouble(text);
-            } else {
-                return Long.parseLong(text);
-            }
-        case CmisQlStrictLexer.STRING_LIT:
-            return text.substring(1, text.length() - 1);
-        case CmisQlStrictLexer.TIME_LIT:
-            GregorianCalendar gc = CalendarHelper.fromString(text.substring(text.indexOf('\'') + 1,
-                    text.lastIndexOf('\'')));
-            return gc;
-        default:
-            throw new RuntimeException("Unknown literal. " + node);
-        }
-    }
-
-    protected Object onLiteral(Tree node) {
-        return getLiteral(node);
-    }
-
-    protected String onId(Tree node) {
-        return node.getText();
-    }
-
-    protected String onTextLiteral(Tree node) {
-        int type = node.getType();
-        String text = node.getText();
-        switch (type) {
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-            return StringUtil.unescape(text.substring(1, text.length() - 1), null);
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            return StringUtil.unescape(text, null);
-        default:
-            throw new RuntimeException("Unknown text literal. " + node);
-        }
-    }
-
-    protected List<Object> onLiteralList(Tree node) {
-        List<Object> res = new ArrayList<Object>(node.getChildCount());
-        for (int i = 0; i < node.getChildCount(); i++) {
-            Tree literal = node.getChild(i);
-            res.add(getLiteral(literal));
-        }
-        return res;
-    }
-
-    protected List<Tree> getChildrenAsList(Tree node) {
-        List<Tree> res = new ArrayList<Tree>(node.getChildCount());
-        for (int i = 0; i < node.getChildCount(); i++) {
-            Tree childNnode = node.getChild(i);
-            res.add(childNnode);
-        }
-        return res;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryTest.java
deleted file mode 100644
index a8a5206..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.runtime.RecognitionException;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
-import org.apache.chemistry.opencmis.server.support.query.PredicateWalkerBase;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-
-public abstract class AbstractQueryTest {
-
-    protected PredicateWalkerBase predicateWalker;
-    protected TypeManager typeManager;
-    protected QueryObject queryObj;
-    protected TypeDefinition myType, myTypeCopy, bookType;
-
-    protected static final String MY_DOC_TYPE = "MyDocType";
-    protected static final String MY_DOC_TYPE_COPY = "MyDocTypeCopy";
-    protected static final String BOOL_PROP = "MyBooleanProp";
-    protected static final String STRING_PROP = "MyStringProp";
-    protected static final String INT_PROP = "MyIntegerProp";
-
-    protected static final String BOOK_TYPE = "BookType";
-    protected static final String TITLE_PROP = "Title";
-    protected static final String AUTHOR_PROP = "Author";
-    protected static final String ISBN_PROP = "ISBN";
-    protected static final String PUB_DATE_PROP = "PublishingDate";
-
-    protected void setUp(TypeManager tm, PredicateWalkerBase pw) {
-        typeManager = tm;
-        predicateWalker = pw;
-    }
-
-    protected QueryUtilStrict traverseStatement(String statement) throws UnsupportedEncodingException, IOException,
-            RecognitionException {
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, predicateWalker);
-        queryUtil.processStatement();
-        return queryUtil;
-    }
-
-    protected QueryUtilStrict traverseStatementAndCatchExc(String statement) {
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, predicateWalker);
-        queryUtil.processStatementUsingCmisExceptions();
-        return queryUtil;
-    }
-
-    protected CmisQueryWalker getWalker(String statement) throws RecognitionException {
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, predicateWalker);
-        queryUtil.processStatementUsingCmisExceptions();
-        queryObj = queryUtil.getQueryObject();
-        return queryUtil.getWalker();
-    }
-
-    // Helper to create some types for testing
-
-    protected List<TypeDefinition> createTypes() {
-        TypeDefinitionFactory typeFactory = DocumentTypeCreationHelper.getTypeDefinitionFactory();
-        List<TypeDefinition> typeDefs = new ArrayList<TypeDefinition>();
-
-        try {
-            // First test type
-            MutableTypeDefinition cmisType;
-            cmisType = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    MY_DOC_TYPE);
-            cmisType.setId(MY_DOC_TYPE);
-            cmisType.setDisplayName("Document Type for Validation");
-
-            PropertyBooleanDefinition prop1 = PropertyCreationHelper.createBooleanDefinition(BOOL_PROP,
-                    "Sample Boolean Property", Updatability.READWRITE);
-            ((PropertyBooleanDefinitionImpl) prop1).setIsRequired(true);
-
-            PropertyStringDefinition prop2 = PropertyCreationHelper.createStringDefinition(STRING_PROP,
-                    "Sample String Property", Updatability.READWRITE);
-
-            PropertyIntegerDefinitionImpl prop3 = PropertyCreationHelper.createIntegerDefinition(INT_PROP,
-                    "Sample Integer Property", Updatability.READWRITE);
-
-            cmisType.addPropertyDefinition(prop1);
-            cmisType.addPropertyDefinition(prop2);
-            cmisType.addPropertyDefinition(prop3);
-
-            typeDefs.add(cmisType);
-            myType = cmisType;
-
-            // add another type definition with exactly the same properties
-            cmisType = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    MY_DOC_TYPE_COPY);
-            cmisType.setDisplayName("Document Type for Duplicated");
-
-            // add same properties
-            cmisType.addPropertyDefinition(prop1);
-            cmisType.addPropertyDefinition(prop2);
-            cmisType.addPropertyDefinition(prop3);
-            typeDefs.add(cmisType);
-            myTypeCopy = cmisType;
-
-            // Second test type
-
-            cmisType = typeFactory.createChildTypeDefinition(DocumentTypeCreationHelper.getCmisDocumentType(),
-                    BOOK_TYPE);
-            cmisType.setDisplayName("Book Document Type");
-
-            prop2 = PropertyCreationHelper.createStringDefinition(TITLE_PROP, "Title of Book", Updatability.READWRITE);
-            cmisType.addPropertyDefinition(prop2);
-
-            prop2 = PropertyCreationHelper
-                    .createStringDefinition(AUTHOR_PROP, "Author of Book", Updatability.READWRITE);
-            cmisType.addPropertyDefinition(prop2);
-
-            prop3 = PropertyCreationHelper.createIntegerDefinition(ISBN_PROP, "ISBN of Book", Updatability.READWRITE);
-            cmisType.addPropertyDefinition(prop3);
-
-            PropertyDateTimeDefinitionImpl prop4 = PropertyCreationHelper.createDateTimeDefinition(PUB_DATE_PROP,
-                    "Publishing Date of Book", Updatability.READWRITE);
-            cmisType.addPropertyDefinition(prop4);
-
-            typeDefs.add(cmisType);
-            bookType = cmisType;
-
-            return typeDefs;
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
deleted file mode 100644
index e7899d9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
+++ /dev/null
@@ -1,1190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.COMPLEX_TYPE;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_BOOLEAN;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DATETIME;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DECIMAL;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_ID;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_INT;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.SECONDARY_TYPE;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.inmemory.AbstractServiceTest;
-import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EvalQueryTest extends AbstractServiceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(EvalQueryTest.class);
-    private QueryTestDataCreator dataCreator;
-    static int COUNT = 0;
-
-    @Override
-    @Before
-    public void setUp() {
-        // initialize query object with type manager
-        super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
-        super.setUp();
-        // create test data
-        dataCreator = new QueryTestDataCreator(fRepositoryId, fRootFolderId, fObjSvc, fVerSvc);
-        dataCreator.createBasicTestData();
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        log.debug("tearDown started.");
-        super.tearDown();
-        log.debug("tearDown done.");
-    }
-
-    @Test
-    public void testAll() {
-        log.debug("Start testAll...");
-        String statement = "SELECT * FROM cmis:document";
-        ObjectList res = doQuery(statement);
-        assertEquals(6, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertFalse(resultContains("jens", res));
-        log.debug("...Stop testAll.");
-    }
-
-    // ////////////////////////////////////////////////////////////////////
-    // Boolean tests
-
-    @Test
-    public void testBooleanEquals() {
-        log.debug("Start testBooleanEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_BOOLEAN + "= true";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testBooleanEquals.");
-    }
-
-    @Test
-    public void testBooleanNotEquals() {
-        log.debug("Start testBooleanNotEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_BOOLEAN + "= false";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testBooleanNotEquals.");
-    }
-
-    // ////////////////////////////////////////////////////////////////////
-    // Integer tests
-
-    @Test
-    public void testIntegerEquals() {
-        log.debug("Start testIntegerEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 100";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testIntegerEquals.");
-    }
-
-    @Test
-    public void testIntegerNotEquals() {
-        log.debug("Start testIntegerNotEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "<> 100";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testIntegerNotEquals.");
-    }
-
-    @Test
-    public void testIntegerLess() {
-        log.debug("Start testIntegerLess...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "< 0";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        log.debug("...Stop testIntegerLess.");
-    }
-
-    @Test
-    public void testIntegerLessOrEqual() {
-        log.debug("Start testIntegerLessOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "<= 0";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        log.debug("...Stop testIntegerLessOrEqual.");
-    }
-
-    @Test
-    public void testIntegerGreater() {
-        log.debug("Start testIntegerGreater...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "> 0";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testIntegerGreater.");
-    }
-
-    @Test
-    public void testIntegerGreaterOrEqual() {
-        log.debug("Start testIntegerGreaterOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + ">= 0";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testIntegerGreaterOrEqual.");
-    }
-
-    // ////////////////////////////////////////////////////////////////////
-    // Decimal tests
-
-    @Test
-    public void testDecimalEquals() {
-        log.debug("Start testDecimalEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "= 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testDecimalEquals.");
-    }
-
-    @Test
-    public void testDecimalNotEquals() {
-        log.debug("Start testDecimalNotEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "<> 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDecimalNotEquals.");
-    }
-
-    @Test
-    public void testDecimalLess() {
-        log.debug("Start testDecimalLess...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "< 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        log.debug("...Stop testDecimalLess.");
-    }
-
-    @Test
-    public void testDecimalLessOrEqual() {
-        log.debug("Start testDecimalLessOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "<= 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testDecimalLessOrEqual.");
-    }
-
-    @Test
-    public void testDecimalGreater() {
-        log.debug("Start testDecimalGreater...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "> 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDecimalGreater.");
-    }
-
-    @Test
-    public void testDecimalGreaterOrEqual() {
-        log.debug("Start testDecimalGreaterOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + ">= 1.23456E-6";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDecimalGreaterOrEqual.");
-    }
-
-    // ////////////////////////////////////////////////////////////////////
-    // DateTime tests
-
-    @Test
-    public void testDateEquals() {
-        log.debug("Start testDateEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + "= TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testDateEquals.");
-    }
-
-    @Test
-    public void testDateNotEquals() {
-        log.debug("Start testDateNotEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + "<> TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDateNotEquals.");
-    }
-
-    @Test
-    public void testDateLess() {
-        log.debug("Start testDateLess...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + "< TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        log.debug("...Stop testDateLess.");
-    }
-
-    @Test
-    public void testDateLessOrEquals() {
-        log.debug("Start testDateLessOrEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + "<= TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testDateLessOrEquals.");
-    }
-
-    @Test
-    public void testDategreater() {
-        log.debug("Start testDateGreaterOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + "> TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDateGreaterOrEqual.");
-    }
-
-    // @Test
-    public void testDateGreaterOrEqual() {
-        log.debug("Start testDateGreaterOrEqual...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
-                + ">= TIMESTAMP '2038-01-20T00:00:00.000Z'";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testDateGreaterOrEqual.");
-    }
-
-    // //////////////////////////////////////////////////////////////////
-    // String tests
-
-    @Test
-    public void testStringEquals() {
-        log.debug("Start testStringEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "= 'Alpha'";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        log.debug("...Stop testStringEquals.");
-    }
-
-    @Test
-    public void testStringNotEquals() {
-        log.debug("Start testStringNotEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "<> 'Gamma'";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testStringNotEquals.");
-    }
-
-    @Test
-    public void testStringLess() {
-        log.debug("Start testStringLess...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "< 'Delta'";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        log.debug("...Stop testStringLess.");
-    }
-
-    @Test
-    public void testStringLessOrEquals() {
-        log.debug("Start testStringLessOrEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "<= 'Delta'";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testStringLessOrEquals.");
-    }
-
-    @Test
-    public void testStringGreater() {
-        log.debug("Start testStringGreater...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "> 'Delta'";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testStringGreater.");
-    }
-
-    @Test
-    public void testStringGreaterOrEquals() {
-        log.debug("Start testStringGreaterOrEquals...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + ">= 'Delta'";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testStringGreaterOrEquals.");
-    }
-
-    @Test
-    public void testStringEscape() {
-        log.debug("Start testStringEscape...");
-        String statement = "SELECT * FROM " + BaseTypeId.CMIS_DOCUMENT.value() + " WHERE " + PropertyIds.NAME
-                + "='John\\'s Document'";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains( "John's Document", res));
-        log.debug("...Stop testStringEscape.");
-    }
-    // //////////////////////////////////////////////////////////////////
-    // Boolean condition tests
-
-    @Test
-    public void testAnd() {
-        log.debug("Start testAnd...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 50 AND " + PROP_ID_BOOLEAN
-                + "= true";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 50 AND " + PROP_ID_BOOLEAN
-                + "= false";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-        log.debug("...Stop testAnd.");
-    }
-
-    @Test
-    public void testOr() {
-        log.debug("Start testOr...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= -50 OR " + PROP_ID_BOOLEAN
-                + "= false";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testOr.");
-    }
-
-    @Test
-    public void testNot() {
-        log.debug("Start testNot...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE NOT " + PROP_ID_INT + "= 50";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testNot.");
-    }
-
-    @Test
-    public void testOrderByString() {
-        log.debug("Start testOrderByString...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + UnitTestTypeSystemCreator.PROP_ID_STRING;
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 0, res));
-        assertTrue(resultContainsAtPos("beta", 1, res));
-        assertTrue(resultContainsAtPos("delta", 2, res));
-        assertTrue(resultContainsAtPos("epsilon", 3, res));
-        assertTrue(resultContainsAtPos("gamma", 4, res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + UnitTestTypeSystemCreator.PROP_ID_STRING + " DESC";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 4, res));
-        assertTrue(resultContainsAtPos("beta", 3, res));
-        assertTrue(resultContainsAtPos("delta", 2, res));
-        assertTrue(resultContainsAtPos("epsilon", 1, res));
-        assertTrue(resultContainsAtPos("gamma", 0, res));
-        log.debug("...Stop testOrderByString.");
-    }
-
-    @Test
-    public void testOrderByInteger() {
-        log.debug("Start testOrderByInteger...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_INT;
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 0, res));
-        assertTrue(resultContainsAtPos("beta", 1, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res));
-        assertTrue(resultContainsAtPos("delta", 3, res));
-        assertTrue(resultContainsAtPos("epsilon", 4, res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_INT + " DESC";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 4, res));
-        assertTrue(resultContainsAtPos("beta", 3, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res));
-        assertTrue(resultContainsAtPos("delta", 1, res));
-        assertTrue(resultContainsAtPos("epsilon", 0, res));
-        log.debug("...Stop testOrderByInteger.");
-    }
-
-    @Test
-    public void testOrderByDecimal() {
-        log.debug("Start testOrderByDecimal...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DECIMAL;
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 0, res));
-        assertTrue(resultContainsAtPos("beta", 1, res));
-        assertTrue(resultContainsAtPos("delta", 2, res));
-        assertTrue(resultContainsAtPos("gamma", 3, res));
-        assertTrue(resultContainsAtPos("epsilon", 4, res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DECIMAL + " DESC";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("alpha", 4, res));
-        assertTrue(resultContainsAtPos("beta", 3, res));
-        assertTrue(resultContainsAtPos("delta", 2, res));
-        assertTrue(resultContainsAtPos("gamma", 1, res));
-        assertTrue(resultContainsAtPos("epsilon", 0, res));
-        log.debug("...Stop testOrderByDecimal.");
-    }
-
-    @Test
-    public void testOrderByDate() {
-        log.debug("Start testOrderByDate...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DATETIME;
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("beta", 0, res));
-        assertTrue(resultContainsAtPos("alpha", 1, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res));
-        assertTrue(resultContainsAtPos("delta", 3, res));
-        assertTrue(resultContainsAtPos("epsilon", 4, res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DATETIME + " DESC";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("beta", 4, res));
-        assertTrue(resultContainsAtPos("alpha", 3, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res));
-        assertTrue(resultContainsAtPos("delta", 1, res));
-        assertTrue(resultContainsAtPos("epsilon", 0, res));
-        log.debug("...Stop testOrderByDate.");
-    }
-
-    @Test
-    public void testOrderByBool() {
-        log.debug("Start testOrderByBool...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_BOOLEAN;
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("beta", 0, res) || resultContainsAtPos("beta", 1, res));
-        assertTrue(resultContainsAtPos("epsilon", 0, res) || resultContainsAtPos("epsilon", 1, res));
-        assertTrue(resultContainsAtPos("alpha", 2, res) || resultContainsAtPos("alpha", 3, res)
-                || resultContainsAtPos("alpha", 4, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res) || resultContainsAtPos("gamma", 3, res)
-                || resultContainsAtPos("gamma", 4, res));
-        assertTrue(resultContainsAtPos("delta", 2, res) || resultContainsAtPos("delta", 3, res)
-                || resultContainsAtPos("delta", 4, res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_BOOLEAN + " DESC";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContainsAtPos("beta", 3, res) || resultContainsAtPos("beta", 4, res));
-        assertTrue(resultContainsAtPos("epsilon", 3, res) || resultContainsAtPos("epsilon", 4, res));
-        assertTrue(resultContainsAtPos("alpha", 2, res) || resultContainsAtPos("alpha", 1, res)
-                || resultContainsAtPos("alpha", 0, res));
-        assertTrue(resultContainsAtPos("gamma", 2, res) || resultContainsAtPos("gamma", 1, res)
-                || resultContainsAtPos("gamma", 0, res));
-        assertTrue(resultContainsAtPos("delta", 2, res) || resultContainsAtPos("delta", 1, res)
-                || resultContainsAtPos("delta", 0, res));
-        log.debug("...Stop testOrderByBool.");
-    }
-
-    // reported JIRA issue CMIS-510
-    @Test
-    public void testOrderBySystemProperties() {
-        log.debug("Start testOrderBySystemProperties...");
-        String statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.NAME;
-        ObjectList res = doQuery(statement);
-        assertEquals(6, res.getObjects().size());
-        statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.CREATION_DATE + " ASC";
-        assertEquals(6, res.getObjects().size());
-        statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.LAST_MODIFICATION_DATE + " DESC";
-        assertEquals(6, res.getObjects().size());
-        log.debug("...Stop testOrderBySystemProperties.");
-    }
-
-    @Test
-    public void testIsNull() {
-        log.debug("Start testIsNull...");
-
-        dataCreator.createNullTestDocument();
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + " IS NULL";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("nulldoc", res));
-        log.debug("...Stop testIsNull.");
-    }
-
-    @Test
-    public void testIsNotNull() {
-        log.debug("Start testIsNotNull...");
-        dataCreator.createNullTestDocument();
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + " IS NOT NULL";
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testIsNotNull.");
-    }
-
-    @Test
-    public void patternTest() {
-        log.debug("Start patternTest...");
-        String res = InMemoryQueryProcessor.translatePattern("ABC%def");
-        assertEquals("ABC.*def", res);
-        res = InMemoryQueryProcessor.translatePattern("%abc");
-        assertEquals(".*abc", res);
-        res = InMemoryQueryProcessor.translatePattern("abc%");
-        assertEquals("abc.*", res);
-        res = InMemoryQueryProcessor.translatePattern("ABC\\%def");
-        assertEquals("ABC\\%def", res);
-        res = InMemoryQueryProcessor.translatePattern("\\%abc");
-        assertEquals("\\%abc", res);
-        res = InMemoryQueryProcessor.translatePattern("abc%def%ghi");
-        assertEquals("abc.*def.*ghi", res);
-        res = InMemoryQueryProcessor.translatePattern("abc%def\\%ghi%jkl");
-        assertEquals("abc.*def\\%ghi.*jkl", res);
-
-        res = InMemoryQueryProcessor.translatePattern("ABC_def");
-        assertEquals("ABC.def", res);
-        res = InMemoryQueryProcessor.translatePattern("_abc");
-        assertEquals(".abc", res);
-        res = InMemoryQueryProcessor.translatePattern("abc_");
-        assertEquals("abc.", res);
-        res = InMemoryQueryProcessor.translatePattern("ABC\\_def");
-        assertEquals("ABC\\_def", res);
-        res = InMemoryQueryProcessor.translatePattern("\\_abc");
-        assertEquals("\\_abc", res);
-        res = InMemoryQueryProcessor.translatePattern("abc_def_ghi");
-        assertEquals("abc.def.ghi", res);
-        res = InMemoryQueryProcessor.translatePattern("abc_def\\_ghi_jkl");
-        assertEquals("abc.def\\_ghi.jkl", res);
-        log.debug("...Stop patternTest.");
-    }
-
-    @Test
-    public void testLike() {
-        log.debug("Start testLike...");
-        dataCreator.createLikeTestDocuments(fRootFolderId);
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " LIKE 'ABC%'";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("likedoc1", res));
-        assertTrue(resultContains("likedoc2", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " LIKE '%ABC'";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("likedoc3", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " LIKE '%ABC%'";
-        res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("likedoc1", res));
-        assertTrue(resultContains("likedoc2", res));
-        assertTrue(resultContains("likedoc3", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " LIKE 'AB_DEF'";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("likedoc1", res));
-        log.debug("...Stop testLike.");
-    }
-
-    @Test
-    public void testNotLike() {
-        log.debug("Start testNotLike...");
-        dataCreator.createLikeTestDocuments(fRootFolderId);
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " NOT LIKE 'ABC%'";
-        ObjectList res = doQuery(statement);
-        assertEquals(6, res.getObjects().size());
-        assertTrue(resultContains("likedoc3", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " NOT LIKE '%a'";
-        res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("likedoc1", res));
-        assertTrue(resultContains("likedoc1", res));
-        assertTrue(resultContains("likedoc3", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testNotLike.");
-    }
-
-    @Test
-    public void testInFolder() {
-        log.debug("Start testInFolder...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + fRootFolderId + "')";
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + dataCreator.getFolder1() + "')";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER(" + COMPLEX_TYPE + ", '" + fRootFolderId + "')";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER(UnknownType, '" + dataCreator.getFolder2()
-                + "')";
-        try {
-            res = doQuery(statement);
-            fail("Unknown type in folder should throw exception");
-        } catch (Exception e) {
-            assertTrue(e.toString().contains("is neither a type query name nor an alias"));
-            log.debug("expected Exception: " + e);
-        }
-        log.debug("...Stop testInFolder.");
-    }
-
-    @Test
-    public void testInTree() {
-        log.debug("Start testInTree...");
-        dataCreator.createLikeTestDocuments(dataCreator.getFolder11());
-
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE(" + COMPLEX_TYPE + ", '"
-                + dataCreator.getFolder1() + "')";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("likedoc1", res));
-        assertTrue(resultContains("likedoc2", res));
-        assertTrue(resultContains("likedoc3", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + dataCreator.getFolder1() + "')";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE('" + dataCreator.getFolder2() + "')";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE(UnknownType, '" + dataCreator.getFolder2() + "')";
-        try {
-            res = doQuery(statement);
-            fail("Unknown type in folder should throw exception");
-        } catch (Exception e) {
-            assertTrue(e.toString().contains("is neither a type query name nor an alias"));
-            log.debug("expected Exception: " + e);
-        }
-        log.debug("...Stop testInTree.");
-    }
-
-    @Test
-    public void testIn() {
-        log.debug("Start testNotIn...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " IN ('Alpha', 'Beta', 'Gamma')";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " IN ('Theta', 'Pi', 'Rho')";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-        log.debug("...Stop testNotIn.");
-    }
-
-    @Test
-    public void testNotIn() {
-        log.debug("Start testNotIn...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " NOT IN ('Alpha', 'Beta', 'Gamma')";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + " NOT IN ('Theta', 'Pi', 'Rho')";
-        res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testNotIn.");
-    }
-
-    @Test
-    public void testMultiValueInAny() {
-        log.debug("Start testMultiValueNotInAny...");
-        dataCreator.createMultiValueDocuments();
-
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('red', 'black', 'grey')";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("mv-alpha", res));
-        assertTrue(resultContains("mv-beta", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('green', 'black', 'grey')";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("mv-alpha", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('white', 'black', 'grey')";
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-        log.debug("...Stop testMultiValueNotInAny.");
-    }
-
-    @Test
-    public void testMultiValueNotInAny() {
-        log.debug("Start testMultiValueNotInAny...");
-        dataCreator.createMultiValueDocuments();
-
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('red', 'black', 'grey')";
-        ObjectList res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('green', 'black', 'grey')";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("mv-beta", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('white', 'black', 'grey')";
-        res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("mv-alpha", res));
-        assertTrue(resultContains("mv-beta", res));
-        log.debug("...Stop testMultiValueNotInAny.");
-    }
-
-    @Test
-    public void testMultiValueEqAny() {
-        log.debug("Start testMultiValueEqAny...");
-        dataCreator.createMultiValueDocuments();
-
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'red' = ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE;
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("mv-alpha", res));
-        assertTrue(resultContains("mv-beta", res));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'black' = ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE;
-        res = doQuery(statement);
-        assertEquals(0, res.getObjects().size());
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'black' = ANY "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING;
-        try {
-            doQuery(statement);
-            fail("Unknown = ANY with single value prop should throw exception");
-        } catch (Exception e) {
-            assertTrue(e.toString().contains("only is allowed on multi-value properties"));
-            log.debug("expected Exception: " + e);
-        }
-        log.debug("...Stop testMultiValueEqAny.");
-    }
-
-    @Test
-    public void testVersionsWithQuery() {
-        log.debug("Start testLastestVersionsWithQuery...");
-        String id = dataCreator.createVersionedDocument();
-        assertNotNull(id);
-        String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSIONED_TYPE;
-        ObjectList res = doQueryAllVersions(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("ver123", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
-        assertTrue(resultContains("ver456", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
-        assertTrue(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
-        assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
-
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertFalse(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
-        assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
-        log.debug("...Stop testLastestVersionsWithQuery.");
-    }
-
-    @Test
-    public void testLastestVersionsWithQuery() {
-        log.debug("Start testLastestVersionsWithQuery...");
-        String id = dataCreator.createVersionedDocument();
-        assertNotNull(id);
-        String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSIONED_TYPE;
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("ver456", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
-        assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
-
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertFalse(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
-        assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
-        log.debug("...Stop testLastestVersionsWithQuery.");
-    }
-
-    @Test
-    public void testContainsWord() {
-        log.debug("Start testContainsWord...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat')";
-        ObjectList res = doQuery(statement);
-        assertEquals(3, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testContainsWord.");
-    }
-
-    @Test
-    public void testContainsPhrase() {
-        log.debug("Start testContainsPhrase...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('\"Kitty Katty\"')";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("beta", res));
-        log.debug("...Stop testContainsPhrase.");
-    }
-
-    @Test
-    public void testContainsNot() {
-        log.debug("Start testContainsNot...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('-cat')";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("epsilon", res));
-        log.debug("...Stop testContainsNot.");
-    }
-
-    @Test
-    public void testContainsOr() {
-        log.debug("Start testContainsOr...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat OR dog')";
-        ObjectList res = doQuery(statement);
-        assertEquals(4, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertTrue(resultContains("beta", res));
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testContainsOr.");
-    }
-
-    @Test
-    public void testContainsAnd() {
-        log.debug("Start testContainsAnd...");
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat dog')";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("delta", res));
-        log.debug("...Stop testContainsAnd.");
-    }
-
-    @Test
-    public void testContainsAndScore() {
-        log.debug("Start testContainsAndScore...");
-        String statement = "SELECT cmis:objectId,cmis:name,SCORE() FROM " + COMPLEX_TYPE + " WHERE CONTAINS('dog')";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContains("gamma", res));
-        assertTrue(resultContains("delta", res));
-        assertTrue(resultContains(1.0, "SEARCH_SCORE", res));
-        log.debug("...Stop testContainsAndScore.");
-    }
-
-    @Test
-    public void testNotSetProperties() {
-        log.debug("Start testNotSetProperties...");
-        // PROP_ID_ID is not set property
-        String statement = "SELECT cmis:name, " + PROP_ID_ID + " FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT
-                + "= 100";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("epsilon", res));
-        assertTrue(resultContainsNotSetPropertyValue(PROP_ID_ID, res.getObjects().get(0)));
-
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 100";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("epsilon", res));
-        assertTrue(resultContainsNotSetPropertyValue(PROP_ID_ID, res.getObjects().get(0)));
-        log.debug("...Stop testNotSetProperties.");
-    }
-
-    @Test
-    public void testSecondaryTypes() {
-        log.debug("Start testSecondaryTypes...");
-        // create documents with secondary types in addition
-        dataCreator.createSecondaryTestDocuments();
-
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
-                + "= 'Secondary'";
-        ObjectList res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContains("docwithsecondary", res));
-        assertFalse(resultContains(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
-
-        statement = "SELECT * FROM " + SECONDARY_TYPE + " WHERE " + UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP
-                + "= 100";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertFalse(resultContains("docwithsecondary", res));
-        assertTrue(resultContains("Secondary Property Value", UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
-        assertTrue(resultContains(BigInteger.valueOf(100), UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
-        assertFalse(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
-        log.debug("...Stop testSecondaryTypes.");
-    }
-
-    @Test
-    public void testSecondaryJoin() {
-        log.debug("Start testSecondaryJoin...");
-        // create documents with secondary types in addition
-        dataCreator.createSecondaryTestDocuments();
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " LEFT JOIN " + SECONDARY_TYPE + " ON " + COMPLEX_TYPE
-                + ".cmis:objectId = " + SECONDARY_TYPE + ".cmis:objectId WHERE cmis:name LIKE 'docwithsecondary%'";
-        ObjectList res = doQuery(statement);
-        assertEquals(2, res.getObjects().size());
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
-        assertTrue(resultContainsProperty(PropertyIds.NAME, res));
-        assertTrue(resultContainsProperty(PropertyIds.OBJECT_ID, res));
-        assertTrue(resultContainsProperty(PropertyIds.OBJECT_TYPE_ID, res));
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
-
-        // Test a query with secondary types matching only one document not
-        // having this secondary type
-        statement = "SELECT * FROM " + COMPLEX_TYPE + " LEFT JOIN " + SECONDARY_TYPE + " ON " + COMPLEX_TYPE
-                + ".cmis:objectId = " + SECONDARY_TYPE + ".cmis:objectId WHERE cmis:name = 'alpha'";
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
-        assertTrue(resultContainsProperty(PropertyIds.NAME, res));
-        assertTrue(resultContainsProperty(PropertyIds.OBJECT_ID, res));
-        assertTrue(resultContainsProperty(PropertyIds.OBJECT_TYPE_ID, res));
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
-        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
-
-        log.debug("...Stop testSecondaryJoin.");
-    }
-
-    @Test
-    public void testMultipleContains() {
-        log.debug("Start testMultipleContains...");
-        dataCreator.createSecondaryTestDocuments();
-        String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('abc') AND CONTAINS('123')";
-        try {
-            doQuery(statement);
-            fail("Multiple CONTAINS clauses should throw CmisInvalidArgumentException");
-        } catch (CmisInvalidArgumentException e) {
-            assertTrue(e.getMessage().contains("More than one CONTAINS"));
-        }
-        log.debug("...Stop testMultipleContains.");
-    }
-
-    @Test
-    public void testPredfinedQueryName() {
-        log.debug("Start testPredfinedQueryName...");
-        String statement = "SELECT cmis:name as abc, SCORE() FROM " + COMPLEX_TYPE + " ORDER BY SEARCH_SCORE";
-        try {
-            doQuery(statement);
-        } catch (Exception e) {
-            fail("SEARCH_SCORE in ORDER_BY must be supported.");
-        }
-        log.debug("...Stop testPredfinedQueryName.");
-    }
-
-    private ObjectList doQuery(String queryString) {
-        log.debug("\nExecuting query: " + queryString);
-        ObjectList res = fDiscSvc.query(fRepositoryId, queryString, false, false, IncludeRelationships.NONE, null,
-                null, null, null);
-        log.debug("Query result, number of matching objects: " + res.getNumItems());
-        for (ObjectData od : res.getObjects()) {
-            PropertyData<?> propData = od.getProperties().getProperties().get(PropertyIds.NAME);
-            if (null != propData) {
-                log.debug("Found matching object: " + propData.getFirstValue());
-            } else {
-                log.debug("Found matching object: (unknown, no name)");
-            }
-        }
-        return res;
-    }
-
-    private ObjectList doQueryAllVersions(String queryString) {
-        log.debug("\nExecuting query: " + queryString);
-        ObjectList res = fDiscSvc.query(fRepositoryId, queryString, true, false, IncludeRelationships.NONE, null, null,
-                null, null);
-        log.debug("Query result, number of matching objects: " + res.getNumItems());
-        for (ObjectData od : res.getObjects()) {
-            log.debug("Found matching object: "
-                    + od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
-        }
-        return res;
-    }
-
-    private static boolean resultContains(Object value, String propId, ObjectList results) {
-        for (ObjectData od : results.getObjects()) {
-            PropertyData<?> propData = od.getProperties().getProperties().get(propId);
-            if (null != propData) {
-                Object propVal = propData.getFirstValue();
-                if (value.equals(propVal)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    private static boolean resultContains(Double val, String propId, ObjectList results) {
-        for (ObjectData od : results.getObjects()) {
-            BigDecimal bd = (BigDecimal) od.getProperties().getProperties().get(propId).getFirstValue();
-            if (val.equals(bd.doubleValue())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static boolean resultContains(String name, ObjectList results) {
-        return resultContains(name, PropertyIds.NAME, results);
-    }
-
-    private static boolean resultContainsAtPos(String name, int index, ObjectList results) {
-        String nameProp = (String) results.getObjects().get(index).getProperties().getProperties()
-                .get(PropertyIds.NAME).getFirstValue();
-        return name.equals(nameProp);
-    }
-
-    private boolean resultContainsNotSetPropertyValue(String propId, ObjectData od) {
-        PropertyData<?> propData = od.getProperties().getProperties().get(propId);
-        return propData != null && propId.equals(propData.getId()) && propData.getValues().isEmpty();
-    }
-
-    private static boolean resultContainsProperty(String propId, ObjectList results) {
-        for (ObjectData od : results.getObjects()) {
-            PropertyData<?> propData = od.getProperties().getProperties().get(propId);
-            if (null == propData) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java
deleted file mode 100644
index dc738d7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.inmemory.TypeManagerImpl;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer;
-import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ProcessQueryTest extends AbstractQueryTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ProcessQueryTest.class);
-
-    private static class TestQueryProcessor extends AbstractQueryConditionProcessor {
-
-        private static final String ON_START = "onStartWasCalled";
-        private static final String ON_STOP = "onStopWasCalled";
-        private static final String ON_EQUALS = "onEqualsWasCalled";
-        private static final String ON_NOT_EQUALS = "onNotEqualsWasCalled";
-        private static final String ON_GREATER_THAN = "onGreaterThanWasCalled";
-        private static final String ON_GREATER_OR_EQUALS = "onGreaterOrEqualsWasCalled";
-        private static final String ON_LESS_THAN = "onLessThanWasCalled";
-        private static final String ON_LESS_OR_EQUALS = "onLessOrEqualsWasCalled";
-        private static final String ON_NOT = "onNotWasCalled";
-        private static final String ON_AND = "onAndWasCalled";
-        private static final String ON_OR = "onOrWasCalled";
-        private static final String ON_IN = "onInWasCalled";
-        private static final String ON_NOT_IN = "onNotInWasCalled";
-        private static final String ON_IN_ANY = "onInAnyWasCalled";
-        private static final String ON_NOT_IN_ANY = "onNotInAnyWasCalled";
-        private static final String ON_EQ_ANY = "onEqAnyWasCalled";
-        private static final String ON_IS_NULL = "onIsNullWasCalled";
-        private static final String ON_IS_NOT_NULL = "onIsNotNullWasCalled";
-        private static final String ON_IS_LIKE = "onIsLikeWasCalled";
-        private static final String ON_IS_NOT_LIKE = "onIsNotLikeWasCalled";
-        private static final String ON_CONTAINS = "onContainsWasCalled";
-        private static final String ON_IN_FOLDER = "onInFolderWasCalled";
-        private static final String ON_IN_TREE = "onInTreeWasCalled";
-        private static final String ON_SCORE = "onScoreWasCalled";
-        private static final String ON_TEXT_AND = "onTextAndWasCalled";
-        private static final String ON_TEXT_OR = "onTextOrWasCalled";
-        private static final String ON_TEXT_MINUS = "onTextMinusWasCalled";
-        private static final String ON_TEXT_PHRASE = "onTextPhraseWasCalled";
-        private static final String ON_TEXT_WORD = "onTextWordWasCalled";
-
-        final Map<String, Integer> rulesTrackerMap = new HashMap<String, Integer>() {
-            private static final long serialVersionUID = 1L;
-            {
-                put(ON_START, 0);
-                put(ON_STOP, 0);
-                put(ON_EQUALS, 0);
-                put(ON_NOT_EQUALS, 0);
-                put(ON_GREATER_THAN, 0);
-                put(ON_GREATER_OR_EQUALS, 0);
-                put(ON_LESS_THAN, 0);
-                put(ON_LESS_OR_EQUALS, 0);
-                put(ON_NOT, 0);
-                put(ON_AND, 0);
-                put(ON_OR, 0);
-                put(ON_IN, 0);
-                put(ON_NOT_IN, 0);
-                put(ON_IN_ANY, 0);
-                put(ON_NOT_IN_ANY, 0);
-                put(ON_EQ_ANY, 0);
-                put(ON_IS_NULL, 0);
-                put(ON_IS_NOT_NULL, 0);
-                put(ON_IS_LIKE, 0);
-                put(ON_IS_NOT_LIKE, 0);
-                put(ON_CONTAINS, 0);
-                put(ON_IN_FOLDER, 0);
-                put(ON_IN_TREE, 0);
-                put(ON_SCORE, 0);
-                put(ON_TEXT_AND, 0);
-                put(ON_TEXT_OR, 0);
-                put(ON_TEXT_MINUS, 0);
-                put(ON_TEXT_PHRASE, 0);
-                put(ON_TEXT_WORD, 0);
-            }
-        };
-
-        private int counter;
-
-        public TestQueryProcessor() {
-            counter = 1;
-        }
-
-        @Override
-        public void onStartProcessing(Tree node) {
-            LOG.debug("TestQueryProcessor:onStartProcessing()");
-            rulesTrackerMap.put(ON_START, counter++);
-            assertEquals(CmisQlStrictLexer.WHERE, node.getParent().getType());
-        }
-
-        @Override
-        public void onStopProcessing() {
-            LOG.debug("TestQueryProcessor:onStopProcessing()");
-            rulesTrackerMap.put(ON_STOP, counter++);
-        }
-
-        @Override
-        public void onEquals(Tree eqNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_EQUALS, counter++);
-            assertEquals(CmisQlStrictLexer.EQ, eqNode.getType());
-            assertTrue(CmisQlStrictLexer.COL == leftNode.getType() || CmisQlStrictLexer.SCORE == leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-        }
-
-        @Override
-        public void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_NOT_EQUALS, counter++);
-            assertEquals(CmisQlStrictLexer.NEQ, neNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-            Object value = onLiteral(rightNode, Integer.class);
-            assertEquals(100, value);
-        }
-
-        @Override
-        public void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_LESS_OR_EQUALS, counter++);
-            assertEquals(CmisQlStrictLexer.LTEQ, leqNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-            Object value = onLiteral(rightNode, Integer.class);
-            assertEquals(100, value);
-        }
-
-        @Override
-        public void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_LESS_THAN, counter++);
-            assertEquals(CmisQlStrictLexer.LT, ltNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-            Object value = onLiteral(rightNode, Integer.class);
-            assertEquals(100, value);
-        }
-
-        @Override
-        public void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_GREATER_OR_EQUALS, counter++);
-            assertEquals(CmisQlStrictLexer.GTEQ, geNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-            Object value = onLiteral(rightNode, Integer.class);
-            assertEquals(100, value);
-        }
-
-        @Override
-        public void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {
-            rulesTrackerMap.put(ON_GREATER_THAN, counter++);
-            assertEquals(CmisQlStrictLexer.GT, gtNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, leftNode.getType());
-            assertTrue(isLiteral(rightNode));
-            Object value = onLiteral(rightNode, Integer.class);
-            assertEquals(100, value);
-        }
-
-        @Override
-        public void onNot(Tree opNode, Tree leftNode) {
-            rulesTrackerMap.put(ON_NOT, counter++);
-            assertEquals(CmisQlStrictLexer.NOT, opNode.getType());
-        }
-
-        @Override
-        public void onAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-            assertEquals(CmisQlStrictLexer.AND, opNode.getType());
-            rulesTrackerMap.put(ON_AND, counter++);
-        }
-
-        @Override
-        public void onOr(Tree opNode, Tree leftNode, Tree rightNode) {
-            assertEquals(CmisQlStrictLexer.OR, opNode.getType());
-            rulesTrackerMap.put(ON_OR, counter++);
-        }
-
-        @Override
-        public void onIn(Tree opNode, Tree colNode, Tree listNode) {
-            assertEquals(CmisQlStrictLexer.IN, opNode.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IN_LIST, listNode.getType());
-            Object value = onLiteral(listNode.getChild(0), String.class);
-            assertEquals("'Joe'", value);
-            value = onLiteral(listNode.getChild(1), String.class);
-            assertEquals("'Jim'", value);
-            rulesTrackerMap.put(ON_IN, counter++);
-        }
-
-        @Override
-        public void onNotIn(Tree node, Tree colNode, Tree listNode) {
-            assertEquals(CmisQlStrictLexer.NOT_IN, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IN_LIST, listNode.getType());
-            Object value = onLiteral(listNode.getChild(0), String.class);
-            assertEquals("'Joe'", value);
-            value = onLiteral(listNode.getChild(1), String.class);
-            assertEquals("'Jim'", value);
-            rulesTrackerMap.put(ON_NOT_IN, counter++);
-        }
-
-        @Override
-        public void onEqAny(Tree node, Tree literalNode, Tree colNode) {
-            assertEquals(CmisQlStrictLexer.EQ_ANY, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertTrue(isLiteral(literalNode));
-            Object value = onLiteral(literalNode, String.class);
-            assertEquals("'Joe'", value);
-            rulesTrackerMap.put(ON_EQ_ANY, counter++);
-        }
-
-        @Override
-        public void onInAny(Tree node, Tree colNode, Tree listNode) {
-            assertEquals(CmisQlStrictLexer.IN_ANY, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IN_LIST, listNode.getType());
-            Object value = onLiteral(listNode.getChild(0), String.class);
-            assertEquals("'Joe'", value);
-            value = onLiteral(listNode.getChild(1), String.class);
-            assertEquals("'Jim'", value);
-            rulesTrackerMap.put(ON_IN_ANY, counter++);
-        }
-
-        @Override
-        public void onNotInAny(Tree node, Tree colNode, Tree listNode) {
-            assertEquals(CmisQlStrictLexer.NOT_IN_ANY, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IN_LIST, listNode.getType());
-            Object value = onLiteral(listNode.getChild(0), String.class);
-            assertEquals("'Joe'", value);
-            value = onLiteral(listNode.getChild(1), String.class);
-            assertEquals("'Jim'", value);
-            rulesTrackerMap.put(ON_NOT_IN_ANY, counter++);
-        }
-
-        @Override
-        public void onIsNull(Tree nullNode, Tree colNode) {
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IS_NULL, nullNode.getType());
-            rulesTrackerMap.put(ON_IS_NULL, counter++);
-        }
-
-        @Override
-        public void onIsNotNull(Tree notNullNode, Tree colNode) {
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.IS_NOT_NULL, notNullNode.getType());
-            rulesTrackerMap.put(ON_IS_NOT_NULL, counter++);
-        }
-
-        @Override
-        public void onIsLike(Tree node, Tree colNode, Tree stringNode) {
-            assertEquals(CmisQlStrictLexer.LIKE, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.STRING_LIT, stringNode.getType());
-            Object value = onLiteral(stringNode, String.class);
-            assertEquals("'Harry%'", value);
-            rulesTrackerMap.put(ON_IS_LIKE, counter++);
-        }
-
-        @Override
-        public void onIsNotLike(Tree node, Tree colNode, Tree stringNode) {
-            assertEquals(CmisQlStrictLexer.NOT_LIKE, node.getType());
-            assertEquals(CmisQlStrictLexer.COL, colNode.getType());
-            assertEquals(CmisQlStrictLexer.STRING_LIT, stringNode.getType());
-            Object value = onLiteral(stringNode, String.class);
-            assertEquals("'Harry%'", value);
-            rulesTrackerMap.put(ON_IS_NOT_LIKE, counter++);
-        }
-
-        @Override
-        public void onContains(Tree node, Tree typeNode, Tree searchExprNode) {
-            assertEquals(CmisQlStrictLexer.CONTAINS, node.getType());
-            assertTrue(null != searchExprNode);
-            rulesTrackerMap.put(ON_CONTAINS, counter++);
-            super.onContains(node, typeNode, searchExprNode);
-        }
-
-        @Override
-        public void onInFolder(Tree node, Tree colNode, Tree paramNode) {
-            assertEquals(CmisQlStrictLexer.IN_FOLDER, node.getType());
-            assertTrue(colNode == null || CmisQlStrictLexer.STRING_LIT == paramNode.getType());
-            assertEquals(CmisQlStrictLexer.STRING_LIT, paramNode.getType());
-            rulesTrackerMap.put(ON_IN_FOLDER, counter++);
-        }
-
-        @Override
-        public void onInTree(Tree node, Tree colNode, Tree paramNode) {
-            assertEquals(CmisQlStrictLexer.IN_TREE, node.getType());
-            assertTrue(colNode == null || CmisQlStrictLexer.STRING_LIT == paramNode.getType());
-            assertEquals(CmisQlStrictLexer.STRING_LIT, paramNode.getType());
-            rulesTrackerMap.put(ON_IN_TREE, counter++);
-        }
-
-        @Override
-        public void onScore(Tree node) {
-            assertEquals(CmisQlStrictLexer.SCORE, node.getType());
-            rulesTrackerMap.put(ON_SCORE, counter++);
-        }
-
-        @Override
-        public void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index) {
-            assertEquals(TextSearchLexer.TEXT_AND, node.getType());
-            assertTrue(conjunctionNodes.size() >= 2);
-            rulesTrackerMap.put(ON_TEXT_AND, counter++);
-        }
-
-        @Override
-        public void onTextOr(Tree node, List<Tree> termNodes, int index) {
-            assertEquals(TextSearchLexer.TEXT_OR, node.getType());
-            assertTrue(termNodes.size() >= 2);
-            rulesTrackerMap.put(ON_TEXT_OR, counter++);
-        }
-
-        @Override
-        public void onTextMinus(Tree node, Tree notNode) {
-            assertEquals(TextSearchLexer.TEXT_MINUS, node.getType());
-            assertTrue(notNode.getType() == TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT
-                    || notNode.getType() == TextSearchLexer.TEXT_SEARCH_WORD_LIT);
-            rulesTrackerMap.put(ON_TEXT_MINUS, counter++);
-        }
-
-        @Override
-        public void onTextWord(String word) {
-            assertTrue(word != null && word.length() > 0);
-            rulesTrackerMap.put(ON_TEXT_WORD, counter++);
-        }
-
-        @Override
-        public void onTextPhrase(String phrase) {
-            assertTrue(phrase != null && phrase.length() > 0);
-            rulesTrackerMap.put(ON_TEXT_PHRASE, counter++);
-        }
-
-        // private helper functions:
-
-        private static boolean isLiteral(Tree node) {
-            int type = node.getType();
-            return type == CmisQlStrictLexer.BOOL_LIT || type == CmisQlStrictLexer.NUM_LIT
-                    || type == CmisQlStrictLexer.STRING_LIT || type == CmisQlStrictLexer.TIME_LIT;
-        }
-
-        private static Object onLiteral(Tree node, Class<?> clazz) {
-            int type = node.getType();
-            switch (type) {
-            case CmisQlStrictLexer.BOOL_LIT:
-                return clazz == Boolean.class ? Boolean.parseBoolean(node.getText()) : null;
-            case CmisQlStrictLexer.NUM_LIT:
-                if (clazz == Integer.class) {
-                    return Integer.parseInt(node.getText());
-                } else if (clazz == Long.class) {
-                    return Long.parseLong(node.getText());
-                } else if (clazz == Short.class) {
-                    return Short.parseShort(node.getText());
-                } else if (clazz == Double.class) {
-                    return Double.parseDouble(node.getText());
-                } else if (clazz == Float.class) {
-                    return Float.parseFloat(node.getText());
-                } else {
-                    return null;
-                }
-            case CmisQlStrictLexer.STRING_LIT:
-                return clazz == String.class ? node.getText() : null;
-            case CmisQlStrictLexer.TIME_LIT:
-                return clazz == GregorianCalendar.class ? CalendarHelper.fromString(node.getText()) : null;
-            default:
-                LOG.error("Unknown literal. " + node);
-                return null;
-            }
-        }
-
-        @Override
-        public void onColNode(Tree node) {
-        }
-
-    }
-
-    private TypeManagerImpl tm;
-    private TestQueryProcessor queryProcessor;
-
-    @Before
-    public void setUp() {
-        tm = new TypeManagerImpl();
-        tm.initTypeSystem(null, true); // create CMIS default types
-
-        // create some types for testing
-        List<TypeDefinition> typeDefs = super.createTypes();
-        for (TypeDefinition typeDef : typeDefs) {
-            tm.addTypeDefinition(typeDef, true);
-        }
-
-        // initialize query object with type manager
-        queryProcessor = new TestQueryProcessor();
-        super.setUp(tm, queryProcessor);
-    }
-
-    @Test
-    public void testStartStopProcessing() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = 100";
-        traverseStatementAndCatchExc(statement); // calls query processor
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_START) > 0);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_STOP) > 0);
-    }
-
-    @Test
-    public void testEq() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = 100";
-        testStatement(statement, TestQueryProcessor.ON_EQUALS);
-    }
-
-    @Test
-    public void testNeq() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN <> 100";
-        testStatement(statement, TestQueryProcessor.ON_NOT_EQUALS);
-    }
-
-    @Test
-    public void testLt() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN < 100";
-        testStatement(statement, TestQueryProcessor.ON_LESS_THAN);
-    }
-
-    @Test
-    public void testLteq() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN <= 100";
-        testStatement(statement, TestQueryProcessor.ON_LESS_OR_EQUALS);
-    }
-
-    @Test
-    public void testGt() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN > 100";
-        testStatement(statement, TestQueryProcessor.ON_GREATER_THAN);
-    }
-
-    @Test
-    public void testGteq() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN >= 100";
-        testStatement(statement, TestQueryProcessor.ON_GREATER_OR_EQUALS);
-    }
-
-    @Test
-    public void testNot() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE NOT ISBN = 100";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_NOT);
-    }
-
-    @Test
-    public void testAnd() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = 100 AND Title LIKE 'Harry%'";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_AND);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_START) == 1);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_EQUALS) == 2);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_AND) == 3);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_IS_LIKE) == 4);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_STOP) == 5);
-    }
-
-    @Test
-    public void testOr() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = 100 OR Title LIKE 'Harry%'";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_OR);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_START) == 1);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_EQUALS) == 2);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_OR) == 3);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_IS_LIKE) == 4);
-        assertTrue(queryProcessor.rulesTrackerMap.get(TestQueryProcessor.ON_STOP) == 5);
-    }
-
-    @Test
-    public void testIn() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author IN ('Joe', 'Jim')";
-        testStatement(statement, TestQueryProcessor.ON_IN);
-    }
-
-    @Test
-    public void testNotIn() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author NOT IN ('Joe', 'Jim')";
-        testStatement(statement, TestQueryProcessor.ON_NOT_IN);
-    }
-
-    @Test
-    public void testEqAny() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE 'Joe' = ANY Author";
-        testStatement(statement, TestQueryProcessor.ON_EQ_ANY);
-    }
-
-    @Test
-    public void testInAny() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ANY Author IN ('Joe', 'Jim')";
-        testStatement(statement, TestQueryProcessor.ON_IN_ANY);
-    }
-
-    @Test
-    public void testNotInAny() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ANY Author NOT IN ('Joe', 'Jim')";
-        testStatement(statement, TestQueryProcessor.ON_NOT_IN_ANY);
-    }
-
-    @Test
-    public void testOnIsNullWasCalled() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author IS NULL";
-        testStatement(statement, TestQueryProcessor.ON_IS_NULL);
-    }
-
-    @Test
-    public void testOnIsNotNullWasCalled() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author IS NOT NULL";
-        testStatement(statement, TestQueryProcessor.ON_IS_NOT_NULL);
-    }
-
-    @Test
-    public void testOnLikeWasCalled() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author LIKE 'Harry%'";
-        testStatement(statement, TestQueryProcessor.ON_IS_LIKE);
-    }
-
-    @Test
-    public void testOnNotLikeWasCalled() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE Author NOT LIKE 'Harry%'";
-        testStatement(statement, TestQueryProcessor.ON_IS_NOT_LIKE);
-    }
-
-    @Test
-    public void testOnContainsWasCalled1() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE CONTAINS('Hello')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_CONTAINS);
-    }
-
-    @Test
-    public void testOnContainsWasCalled2() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE CONTAINS(BookType, 'Harry')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_CONTAINS);
-    }
-
-    @Test
-    public void testOnInFolderWasCalled1() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE IN_FOLDER('ID1234')";
-        testStatement(statement, TestQueryProcessor.ON_IN_FOLDER);
-    }
-
-    @Test
-    public void testOnInFolderWasCalled2() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE IN_FOLDER(BookType, 'ID1234')";
-        testStatement(statement, TestQueryProcessor.ON_IN_FOLDER);
-    }
-
-    @Test
-    public void testOnInTreeWasCalled1() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE IN_Tree('ID1234')";
-        testStatement(statement, TestQueryProcessor.ON_IN_TREE);
-    }
-
-    @Test
-    public void testOnInTreeWasCalled2() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE IN_Tree(BookType, 'ID1234')";
-        testStatement(statement, TestQueryProcessor.ON_IN_TREE);
-    }
-
-    @Test
-    public void testOnScoreCalled() {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE SCORE()=100";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_SCORE);
-    }
-
-    @Test
-    public void testOnTextWordLiteral() {
-        String statement = "SELECT * FROM BookType WHERE CONTAINS('abc')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_TEXT_WORD);
-    }
-
-    @Test
-    public void testOnTextPhraseLiteral() {
-        String statement = "SELECT * FROM BookType WHERE CONTAINS('\"abc\"')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_TEXT_PHRASE);
-    }
-
-    @Test
-    public void testOnTextAnd() {
-        String statement = "SELECT * FROM BookType WHERE CONTAINS('abc def')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_TEXT_AND);
-    }
-
-    @Test
-    public void testOnTextOr() {
-        String statement = "SELECT * FROM BookType WHERE CONTAINS('abc OR def')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_TEXT_OR);
-    }
-
-    @Test
-    public void testOnTextMinus() {
-        String statement = "SELECT * FROM BookType WHERE CONTAINS('abc -def')";
-        testStatementMultiRule(statement, TestQueryProcessor.ON_TEXT_MINUS);
-    }
-
-    // private helper functions
-
-    private void testStatementMultiRule(String statement, String ruleAssertion) {
-        traverseStatementAndCatchExc(statement); // calls query processor
-        assertTrue(queryProcessor.rulesTrackerMap.get(ruleAssertion) > 0);
-    }
-
-    private void testStatement(String statement, String ruleAssertion) {
-        testStatementMultiRule(statement, ruleAssertion);
-        checkOtherRulesNotCalled(ruleAssertion);
-    }
-
-    private void checkOtherRulesNotCalled(String ruleAssertion) {
-        for (Entry<String, Integer> e : queryProcessor.rulesTrackerMap.entrySet()) {
-            if (!e.getKey().equals(ruleAssertion) && !e.getKey().equals("onPropertyValueWasCalled")
-                    && !e.getKey().equals(TestQueryProcessor.ON_START)
-                    && !e.getKey().equals(TestQueryProcessor.ON_STOP) && !e.getKey().contains("Literal")) {
-                assertFalse("Rule " + e.getKey() + " was expected not to be executed, but was executed.",
-                        queryProcessor.rulesTrackerMap.get(e.getKey()) > 0);
-            }
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryConditionProcessor.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryConditionProcessor.java
deleted file mode 100644
index c6d50c1..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryConditionProcessor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.inmemory.query;

-

-import java.util.List;

-

-import org.antlr.runtime.tree.Tree;

-import org.apache.chemistry.opencmis.server.support.query.PredicateWalkerBase;

-

-/**

- * An interface used by the walker when traversing the AST from the grammar. The

- * interface consists of callback methods that are called when a rule is

- * processed (as part of the WHERE statement)

- */

-public interface QueryConditionProcessor extends PredicateWalkerBase {

-

-    void onStartProcessing(Tree whereNode);

-

-    void onStopProcessing();

-

-    // Compare operators

-    void onEquals(Tree eqNode, Tree leftNode, Tree rightNode);

-

-    void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode);

-

-    void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);

-

-    void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);

-

-    void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode);

-

-    void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);

-

-    // Boolean operators

-    void onPreNot(Tree opNode, Tree leftNode);

-

-    void onNot(Tree opNode, Tree leftNode);

-

-    void onPostNot(Tree opNode, Tree leftNode);

-

-    void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode);

-

-    void onAnd(Tree opNode, Tree leftNode, Tree rightNode);

-

-    void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode);

-

-    void onPreOr(Tree opNode, Tree leftNode, Tree rightNode);

-

-    void onOr(Tree opNode, Tree leftNode, Tree rightNode);

-

-    void onPostOr(Tree opNode, Tree leftNode, Tree rightNode);

-

-    // Multi-value:

-    void onIn(Tree node, Tree colNode, Tree listNode);

-

-    void onNotIn(Tree node, Tree colNode, Tree listNode);

-

-    void onInAny(Tree node, Tree colNode, Tree listNode);

-

-    void onNotInAny(Tree node, Tree colNode, Tree listNode);

-

-    void onEqAny(Tree node, Tree literalNode, Tree colNode);

-

-    // Null comparisons:

-    void onIsNull(Tree nullNode, Tree colNode);

-

-    void onIsNotNull(Tree notNullNode, Tree colNode);

-

-    // String matching:

-    void onIsLike(Tree node, Tree colNode, Tree stringNode);

-

-    void onIsNotLike(Tree node, Tree colNode, Tree stringNode);

-

-    // Functions:

-    void onContains(Tree node, Tree typeNode, Tree searchExprNode);

-

-    void onInFolder(Tree node, Tree colNode, Tree paramNode);

-

-    void onInTree(Tree node, Tree colNode, Tree paramNode);

-

-    void onScore(Tree node);

-

-    // full text search

-    void onTextAnd(Tree node, List<Tree> conjunctionNodes);

-

-    void onTextOr(Tree node, List<Tree> termNodes);

-

-    void onTextMinus(Tree node, Tree notNode);

-

-    void onTextWord(String word);

-

-    void onTextPhrase(String phrase);

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java
deleted file mode 100644
index 696680b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java
+++ /dev/null
@@ -1,1062 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.List;
-import java.util.Map;
-
-import org.antlr.runtime.FailedPredicateException;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer;
-import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
-import org.apache.chemistry.opencmis.server.support.query.CmisSelector;
-import org.apache.chemistry.opencmis.server.support.query.ColumnReference;
-import org.apache.chemistry.opencmis.server.support.query.FunctionReference;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class QueryParseTest extends AbstractQueryTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(QueryParseTest.class);
-
-    @Before
-    public void setUp() {
-        // initialize query object, we do not need a type manager for just
-        // testing parsing
-        super.setUp(null, null);
-    }
-
-    @Test
-    public void simpleFailTest() {
-        String statement = "SELECT * TO MyType ORDER BY abc.def ASC";
-        try {
-            traverseStatement(statement);
-            fail("Errornous statement should throw exception.");
-        } catch (Exception e) {
-            LOG.debug("Exception in simpleFailTest: " + e);
-        }
-    }
-
-    public void simpleSelectTest1() {
-        String statement = "SELECT SCORE() FROM cmis:document";
-
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        assertTrue(selects.get(0) instanceof FunctionReference);
-
-        FunctionReference funcRef = ((FunctionReference) selects.get(0));
-        assertTrue(FunctionReference.CmisQlFunction.SCORE == funcRef.getFunction());
-    }
-
-    @Test
-    public void simpleSelectTest2() {
-        String statement = "SELECT abc FROM cmis:document";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        // nothing should be in where references
-        assertTrue(0 == queryObj.getWhereReferences().size());
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertTrue(selects.get(0) instanceof ColumnReference);
-        assertEquals("abc", colRef.getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSelectTest3() {
-        String statement = "SELECT t1.abc FROM cmis:document";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        // nothing should be in where references
-        assertTrue(0 == queryObj.getWhereReferences().size());
-        assertTrue(selects.get(0) instanceof ColumnReference);
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals("t1", colRef.getQualifier());
-        assertEquals("abc", colRef.getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSelectTest4() {
-        String statement = "SELECT * FROM cmis:document";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        // nothing should be in where references
-        assertTrue(0 == queryObj.getWhereReferences().size());
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertTrue(selects.get(0) instanceof ColumnReference);
-        assertEquals(null, colRef.getQualifier());
-        assertEquals("*", colRef.getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSelectTest5() {
-        String statement = "SELECT t1.* FROM cmis:document";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        // nothing should be in where references
-        assertTrue(0 == queryObj.getWhereReferences().size());
-        assertTrue(selects.get(0) instanceof ColumnReference);
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals("t1", colRef.getQualifier());
-        assertEquals("*", colRef.getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSelectTest6() {
-        String statement = "SELECT t2.aaa myalias FROM cmis:document";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        // nothing should be in where references
-        assertTrue(0 == queryObj.getWhereReferences().size());
-        assertTrue(selects.get(0) instanceof ColumnReference);
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals("t2", colRef.getQualifier());
-        assertEquals("aaa", colRef.getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSelectTest7() {
-        // error processing
-        String statement = "SELECTXXX t2.aaa myalias FROM cmis:document WHERE a < t1";
-        try {
-            traverseStatement(statement);
-            fail("Walking of statement should with RecognitionException but succeeded");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-        }
-    }
-
-    @Test
-    public void simpleFromTest1() {
-        String statement = "SELECT * FROM MyType MyAlias";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-
-        String key = types.keySet().iterator().next();
-        assertEquals("MyAlias", key);
-        assertEquals("MyType", types.get(key));
-    }
-
-    @Test
-    public void simpleFromTest2() {
-        String statement = "SELECT * FROM MyType";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-
-        String key = types.keySet().iterator().next();
-        assertEquals("MyType", key);
-        assertEquals("MyType", types.get(key));
-    }
-
-    @Test
-    public void simpleFromTest3() {
-        String statement = "SELECT t2.aaa FROM MyType abc123";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-
-        String key = types.keySet().iterator().next();
-        assertEquals("abc123", key);
-        assertEquals("MyType", types.get(key));
-    }
-
-    @Test
-    public void simpleFromTest4() {
-        String statement = "SELECT X.aaa FROM MyType AS X WHERE 10 = ANY X.aaa ";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-
-        String key = types.keySet().iterator().next();
-        assertEquals("X", key);
-        assertEquals("MyType", types.get(key));
-    }
-
-    @Test
-    public void simpleWhereTest() {
-        String statement = "SELECT * FROM MyType WHERE MyProp1=123";
-
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-        CmisQueryWalker walker = queryUtil.getWalker();
-
-        List<CmisSelector> whereRefs = queryObj.getWhereReferences();
-        Map<Integer, CmisSelector> colRefs = queryObj.getColumnReferences();
-        assertTrue(1 == whereRefs.size());
-
-        CmisSelector value = whereRefs.iterator().next();
-        assertTrue(value instanceof ColumnReference);
-        assertEquals("MyProp1", ((ColumnReference) value).getPropertyQueryName());
-        // only "*" should be in select references
-        assertTrue(1 == queryObj.getSelectReferences().size());
-
-        CommonTree tree = (CommonTree) walker.getTreeNodeStream().getTreeSource();
-
-        // assertTrue(traverseTreeAndFindNodeInColumnMap(tree, colRefs));
-        traverseTreeAndFindNodeInColumnMap2(tree, colRefs);
-    }
-
-    // check if the map containing all column references in the where clause has
-    // an existing node as key
-    private boolean traverseTreeAndFindNodeInColumnMap(Tree node, Map<Object, CmisSelector> colRefs) {
-        boolean found = false;
-
-        if (null != colRefs.get(node)) {
-            return true;
-        }
-
-        int count = node.getChildCount();
-        for (int i = 0; i < count && !found; i++) {
-            Tree child = node.getChild(i);
-            found = traverseTreeAndFindNodeInColumnMap(child, colRefs);
-        }
-        return found;
-    }
-
-    private boolean traverseTreeAndFindNodeInColumnMap2(Tree node, Object colRef) {
-        int count = node.getChildCount();
-        LOG.debug("  checking with: " + node + " identity hash code: " + System.identityHashCode(node));
-        if (node == colRef) {
-            return true;
-        }
-        boolean found = false;
-        for (int i = 0; i < count && !found; i++) {
-            Tree child = node.getChild(i);
-            found = traverseTreeAndFindNodeInColumnMap2(child, colRef);
-        }
-        return found;
-    }
-
-    @Test
-    public void simpleSortTest1() {
-        String statement = "SELECT * FROM MyType ORDER BY abc.def ASC";
-
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<SortSpec> orderBys = queryObj.getOrderBys();
-        assertTrue(1 == orderBys.size());
-
-        SortSpec sp = orderBys.get(0);
-        assertTrue(sp.isAscending());
-
-        CmisSelector sortSpec = sp.getSelector();
-        assert (sortSpec instanceof ColumnReference);
-        assertEquals("abc", ((ColumnReference) sortSpec).getQualifier());
-        assertEquals("def", ((ColumnReference) sortSpec).getPropertyQueryName());
-    }
-
-    @Test
-    public void simpleSortTest2() {
-        String statement = "SELECT * FROM MyType ORDER BY def DESC";
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        QueryObject queryObj = queryUtil.getQueryObject();
-
-        List<SortSpec> orderBys = queryObj.getOrderBys();
-        assertTrue(1 == orderBys.size());
-
-        SortSpec sp = orderBys.get(0);
-        assertFalse(sp.isAscending());
-
-        CmisSelector sortSpec = sp.getSelector();
-        assert (sortSpec instanceof ColumnReference);
-        assertNull(((ColumnReference) sortSpec).getQualifier());
-        assertEquals("def", ((ColumnReference) sortSpec).getPropertyQueryName());
-    }
-
-    @Test
-    public void printTreeTest() {
-        // System.out.println("printTreeTest():");
-        String statement = "SELECT p1, p2, p3.t3 mycol FROM MyType AS MyAlias WHERE p1='abc' and p2=123 ORDER BY abc.def ASC";
-        try {
-
-            CmisQueryWalker walker = getWalker(statement);
-            Tree parserTree = (Tree) walker.getTreeNodeStream().getTreeSource();
-            printTree(parserTree, statement);
-
-        } catch (Exception e) {
-            fail("Cannot parse query: " + statement + " (" + e + ")");
-        }
-    }
-
-    @Test
-    public void extractWhereTreeTest() {
-        // System.out.println("extractWhereTreeTest():");
-        String statement = "SELECT p1, p2, p3.t3 mycol FROM MyType AS MyAlias WHERE p1='abc' and p2=123 ORDER BY abc.def ASC";
-
-        try {
-            QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-            CmisQueryWalker walker = queryUtil.getWalker();
-            Tree whereTree = walker.getWherePredicateTree(); // getWhereTree(parserTree);
-            printTree(whereTree);
-            LOG.info("Evaluate WHERE subtree: ...");
-            evalWhereTree(whereTree);
-        } catch (Exception e) {
-            fail("Cannot parse query: " + statement + " (" + e + ")");
-        }
-    }
-
-    @Test
-    public void whereTestIn() {
-        // System.out.println("extractWhereTestIN():");
-        String statement = "SELECT p1 FROM MyType WHERE p1 IN ('Red', 'Green', 'Blue', 'Black')";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestEq() {
-        String statement = "SELECT p1 FROM MyType WHERE p1='abc'";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestNotEq() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 <> 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestLT() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 < 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestGT() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 > 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestLTEQ() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 <= 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestGTEQ() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 >= 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestAnd() {
-        String statement = "SELECT p1 FROM MyType WHERE p1=1 AND p2=2";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestOr() {
-        String statement = "SELECT p1 FROM MyType WHERE p1='abc' OR p2=123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestNot() {
-        String statement = "SELECT p1 FROM MyType WHERE NOT p1 = 123";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestInFolder() {
-        String statement = "SELECT p1 FROM MyType WHERE IN_FOLDER('myfolder')";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestInTree() {
-        String statement = "SELECT p1 FROM MyType WHERE IN_TREE('myfolder')";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestAny() {
-        String statement = "SELECT p1 FROM MyType WHERE 'Smith' = ANY Authors ";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestAnyIn() {
-        String statement = "SELECT p1 FROM MyType WHERE ANY Colors IN ('Red', 'Green', 'Blue')";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestLike() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 LIKE 'abc*' ";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestTokensAfterStatement() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 LIKE 'abc*' IN_FOLDER('def')";
-        try {
-            checkTreeWhere(statement);
-            fail("Parsing query with tokens after end of statement should fail.");
-        } catch (Exception e) {
-            LOG.debug("Exception is: ", e);
-            assertTrue(e instanceof CmisInvalidArgumentException);
-            assertTrue(e.getMessage().contains("missing EOF at "));
-        }
-    }
-
-    @Test
-    public void whereTestNotLike() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 NOT LIKE 'abc*'";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestNull() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 IS NULL";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestNotNull() {
-        String statement = "SELECT p1 FROM MyType WHERE p1 IS NOT NULL";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestContains() {
-        String statement = "SELECT p1 FROM MyType WHERE CONTAINS('Beethoven')";
-        checkTreeWhere(statement);
-        Tree tree = findSearchExpression(statement);
-        printSearchTree(tree, statement);
-        assertEquals("Beethoven", tree.getChild(0).getText());
-    }
-
-    @Test
-    public void whereTestContainsNoFulltextParse() throws Exception {
-        String statement = "SELECT p1 FROM MyType WHERE CONTAINS('Beethoven')";
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, predicateWalker, false);
-        queryUtil.parseStatement();
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getQueryObject());
-        queryUtil.walkStatement();
-        CmisQueryWalker walker = queryUtil.getWalker();
-        assertNotNull(queryUtil.getWalker());
-        Tree whereTree = walker.getWherePredicateTree();
-        Tree tree = findTextSearchNode(whereTree);
-        printSearchTree(tree, statement);
-        // unparsed, still with quotes
-        assertEquals("'Beethoven'", tree.getChild(0).getText());
-    }
-
-    @Test
-    public void whereTestScore() {
-        String statement = "SELECT p1 FROM MyType WHERE SCORE() = 100";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void whereTestParentheses() {
-        String statement = "SELECT p1 FROM MyType WHERE (p1 IS NULL OR SCORE()=100) AND (p2=123 OR p3=456)";
-        checkTreeWhere(statement);
-    }
-
-    @Test
-    public void doubleFromTest() {
-        String statement = "SELECT * FROM MyType JOIN YourType WHERE a='1'";
-
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        assertNotNull(queryUtil);
-        assertNotNull(queryUtil.getWalker());
-        assertNotNull(queryUtil.getQueryObject());
-        CmisQueryWalker walker = queryUtil.getWalker();
-        assertNotNull(walker);
-
-        Map<String, String> types = queryUtil.getQueryObject().getTypes();
-        assertTrue(2 == types.size());
-    }
-
-    @Test
-    public void duplicatedAliasTestSelect() {
-        String statement = "SELECT p1.T1 MyAlias, p2.T1 AS MyAlias FROM T1";
-        try {
-            traverseStatement(statement);
-        } catch (Exception e) {
-            assertTrue(e.getMessage().contains("more than once as alias in a select"));
-        }
-    }
-
-    @Test
-    public void duplicatedAliasTestFrom() {
-        String statement = "SELECT * FROM T1 MyAlias JOIN T2 AS MyAlias";
-        QueryUtilStrict queryUtil = null;
-        try {
-            queryUtil = new QueryUtilStrict(statement, typeManager, predicateWalker);
-            queryUtil.processStatement();
-            fail("Parsing statement " + statement + " should fail.");
-        } catch (RecognitionException e) {
-            assertTrue(e instanceof FailedPredicateException);
-            LOG.debug("duplicatedAliasTestFrom(), exception: " + e);
-            // walker.reportError(e);
-            String errorMessage = queryUtil.getErrorMessage(e);
-            LOG.debug("");
-            LOG.debug("duplicatedAliasTestFrom(), error message: " + errorMessage);
-            assertTrue(e.toString().contains("more than once as alias in a from"));
-            assertTrue(errorMessage.contains("more than once as alias in a from"));
-        } catch (Exception e) {
-            fail("Parsing statement " + statement + " should fail with RecognitionException, but was: " + e.getClass());
-        }
-    }
-
-    @Test
-    public void whereTestContains2() {
-        String statement = "SELECT p1 FROM MyType WHERE CONTAINS('Beethoven OR \"Johann Sebastian\" Mozart -Cage AND Orff')";
-        checkTreeWhere(statement);
-        Tree tree = findSearchExpression(statement);
-        printSearchTree(tree, statement);
-    }
-
-    @Test
-    public void whereTestMultipleContains2() {
-        String statement = "SELECT p1 FROM MyType WHERE CONTAINS('Beethoven') AND CONTAINS('Bach')";
-        checkTreeWhere(statement);
-        int noContains = getNumberOfSearchExpression(statement);
-        assertTrue(2 == noContains);
-    }
-
-    private void checkTreeWhere(String statement) {
-        LOG.info("\ncheckTreeWhere: " + statement);
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        Tree whereTree = queryUtil.getWalker().getWherePredicateTree();
-        evalWhereTree(whereTree);
-    }
-
-    private Tree findSearchExpression(String statement) {
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        Tree whereTree = queryUtil.getWalker().getWherePredicateTree();
-        return findTextSearchNode(whereTree);
-    }
-
-    private int getNumberOfSearchExpression(String statement) {
-        QueryUtilStrict queryUtil = traverseStatementAndCatchExc(statement);
-        return queryUtil.getWalker().getNumberOfContainsClauses();
-    }
-
-    private Tree findTextSearchNode(Tree node) {
-        int count = node.getChildCount();
-        if (node.getType() == CmisQlStrictLexer.CONTAINS) {
-            return node;
-        } else {
-            for (int i = 0; i < count; i++) {
-                Tree child = node.getChild(i);
-                node = findTextSearchNode(child); // recursive descent
-                if (null != node) {
-                    return node;
-                }
-            }
-            return null;
-        }
-    }
-
-    private void evalWhereTree(Tree root) {
-        int count = root.getChildCount();
-        if (root.getType() == CmisQlStrictLexer.CONTAINS) {
-            evalSearchExprTree(root);
-        } else {
-            for (int i = 0; i < count; i++) {
-                Tree child = root.getChild(i);
-                evaluateWhereNode(child);
-                evalWhereTree(child); // recursive descent
-            }
-        }
-    }
-
-    private void evalSearchExprTree(Tree root) {
-        int count = root.getChildCount();
-        for (int i = 0; i < count; i++) {
-            Tree child = root.getChild(i);
-            evaluateSearchExprNode(child);
-            evalSearchExprTree(child); // recursive descent
-        }
-    }
-
-    private void printTree(Tree tree, String statement) {
-        LOG.info("Printing the abstract syntax tree for statement:");
-        LOG.info("  " + statement);
-        printTree(tree);
-    }
-
-    private int indent = 1;
-
-    private String indentString() {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < indent; ++i) {
-            sb.append("  ");
-        }
-        return sb.toString();
-    }
-
-    private void printTree(Tree node) {
-        LOG.info(indentString() + printNode(node));
-        ++indent;
-        int count = node.getChildCount();
-        for (int i = 0; i < count; i++) {
-            Tree child = node.getChild(i);
-            printTree(child);
-        }
-        --indent;
-    }
-
-    private static String printNode(Tree node) {
-        switch (node.getType()) {
-        case CmisQlStrictLexer.TABLE:
-            return "#TABLE";
-        case CmisQlStrictLexer.COL:
-            return "#COL";
-        case CmisQlStrictLexer.IN_LIST:
-            return "#IN_LIST";
-        case CmisQlStrictLexer.SEL_LIST:
-            return "#SEL_LIST";
-        case CmisQlStrictLexer.EQ_ANY:
-            return "#EQ_ANY";
-        case CmisQlStrictLexer.NOT_LIKE:
-            return "#NOT_LIKE";
-        case CmisQlStrictLexer.NOT_IN:
-            return "#NOT_IN";
-        case CmisQlStrictLexer.IN_ANY:
-            return "#IN_ANY";
-        case CmisQlStrictLexer.NOT_IN_ANY:
-            return "#NOT_IN_ANY";
-        case CmisQlStrictLexer.IS_NULL:
-            return "#IS_NULL";
-        case CmisQlStrictLexer.IS_NOT_NULL:
-            return "#IS_NOT_NULL";
-        case CmisQlStrictLexer.ORDER_BY:
-            return "#ORDER_BY";
-
-        case CmisQlStrictLexer.WHERE:
-        case CmisQlStrictLexer.LT:
-        case CmisQlStrictLexer.STAR:
-        case CmisQlStrictLexer.BOOL_LIT:
-        case CmisQlStrictLexer.INNER:
-        case CmisQlStrictLexer.TIME_LIT:
-        case CmisQlStrictLexer.ORDER:
-        case CmisQlStrictLexer.STRING_LIT:
-        case CmisQlStrictLexer.CONTAINS:
-        case CmisQlStrictLexer.ExactNumLit:
-        case CmisQlStrictLexer.LTEQ:
-        case CmisQlStrictLexer.NOT:
-        case CmisQlStrictLexer.ID:
-        case CmisQlStrictLexer.AND:
-        case CmisQlStrictLexer.EOF:
-        case CmisQlStrictLexer.AS:
-        case CmisQlStrictLexer.IN:
-        case CmisQlStrictLexer.LPAR:
-        case CmisQlStrictLexer.Digits:
-        case CmisQlStrictLexer.COMMA:
-        case CmisQlStrictLexer.IS:
-        case CmisQlStrictLexer.LEFT:
-        case CmisQlStrictLexer.Sign:
-        case CmisQlStrictLexer.EQ:
-        case CmisQlStrictLexer.DOT:
-        case CmisQlStrictLexer.NUM_LIT:
-        case CmisQlStrictLexer.SELECT:
-        case CmisQlStrictLexer.LIKE:
-        case CmisQlStrictLexer.OUTER:
-        case CmisQlStrictLexer.BY:
-        case CmisQlStrictLexer.ASC:
-        case CmisQlStrictLexer.NULL:
-        case CmisQlStrictLexer.ON:
-        case CmisQlStrictLexer.RIGHT:
-        case CmisQlStrictLexer.GTEQ:
-        case CmisQlStrictLexer.ApproxNumLit:
-        case CmisQlStrictLexer.JOIN:
-        case CmisQlStrictLexer.IN_FOLDER:
-        case CmisQlStrictLexer.WS:
-        case CmisQlStrictLexer.NEQ:
-        case CmisQlStrictLexer.ANY:
-        case CmisQlStrictLexer.SCORE:
-        case CmisQlStrictLexer.IN_TREE:
-        case CmisQlStrictLexer.OR:
-        case CmisQlStrictLexer.GT:
-        case CmisQlStrictLexer.RPAR:
-        case CmisQlStrictLexer.DESC:
-        case CmisQlStrictLexer.FROM:
-        case CmisQlStrictLexer.TIMESTAMP:
-            return node.toString();
-        default:
-            return "[Unknown token: " + node.toString() + "]";
-        }
-    }
-
-    private void printSearchTree(Tree tree, String searchExpr) {
-        LOG.info("Printhing the abstract syntax tree for the search expression in CONTAINS :");
-        LOG.info(searchExpr);
-        printSearchTree(tree);
-    }
-
-    private void printSearchTree(Tree node) {
-        LOG.info(indentString() + printSearchNode(node));
-        ++indent;
-        int count = node.getChildCount();
-        for (int i = 0; i < count; i++) {
-            Tree child = node.getChild(i);
-            printSearchTree(child);
-        }
-        --indent;
-    }
-
-    private static String printSearchNode(Tree node) {
-        switch (node.getType()) {
-        case TextSearchLexer.TEXT_AND:
-        case TextSearchLexer.TEXT_OR:
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            return node.toString();
-        case TextSearchLexer.TEXT_MINUS:
-            return "MINUS";
-        default:
-            return "Unknown token: " + node.toString();
-        }
-    }
-
-    // Ensure that we receive only valid tokens and nodes in the where clause:
-    private void evaluateWhereNode(Tree node) {
-        LOG.info("evaluating node: " + node.toString());
-        switch (node.getType()) {
-        case CmisQlStrictLexer.WHERE:
-            break; // ignore
-        case CmisQlStrictLexer.COL:
-            evalColumn(node);
-            break;
-        case CmisQlStrictLexer.IN_LIST:
-            evalInList(node);
-            break;
-        case CmisQlStrictLexer.IN_ANY:
-            evalInAny(node);
-            break;
-        case CmisQlStrictLexer.EQ_ANY:
-            evalEqAny(node);
-            break;
-        case CmisQlStrictLexer.NOT_LIKE:
-            evalNotLike(node);
-            break;
-        case CmisQlStrictLexer.NOT_IN:
-            evalNotIn(node);
-            break;
-        case CmisQlStrictLexer.IS_NULL:
-            evalIsNull(node);
-            break;
-        case CmisQlStrictLexer.IS_NOT_NULL:
-            evalIsNotNull(node);
-            break;
-        case CmisQlStrictLexer.LT:
-            evalLessThan(node);
-            break;
-        case CmisQlStrictLexer.BOOL_LIT:
-            evalBooleanLiteral(node);
-            break;
-        case CmisQlStrictLexer.TIME_LIT:
-            evalTimeLiteral(node);
-            break;
-        case CmisQlStrictLexer.STRING_LIT:
-            evalStringLiteral(node);
-            break;
-        case CmisQlStrictLexer.CONTAINS:
-            evalContains(node);
-            break;
-        case CmisQlStrictLexer.ExactNumLit:
-            evalExactNumLiteral(node);
-            break;
-        case CmisQlStrictLexer.LTEQ:
-            evalLessOrEqual(node);
-            break;
-        case CmisQlStrictLexer.NOT:
-            evalNot(node);
-            break;
-        case CmisQlStrictLexer.ID:
-            evalId(node);
-            break;
-        case CmisQlStrictLexer.AND:
-            evalAnd(node);
-            break;
-        case CmisQlStrictLexer.IN:
-            evalIn(node);
-            break;
-        case CmisQlStrictLexer.EQ:
-            evalEquals(node);
-            break;
-        case CmisQlStrictLexer.NUM_LIT:
-            evalNumLiteral(node);
-            break;
-        case CmisQlStrictLexer.LIKE:
-            evalLike(node);
-            break;
-        case CmisQlStrictLexer.NULL:
-            evalNull(node);
-            break;
-        case CmisQlStrictLexer.GTEQ:
-            evalGreaterThan(node);
-            break;
-        case CmisQlStrictLexer.ApproxNumLit:
-            evalApproxNumLiteral(node);
-            break;
-        case CmisQlStrictLexer.IN_FOLDER:
-            evalInFolder(node);
-            break;
-        case CmisQlStrictLexer.NEQ:
-            evalNotEquals(node);
-            break;
-        case CmisQlStrictLexer.SCORE:
-            evalScore(node);
-            break;
-        case CmisQlStrictLexer.IN_TREE:
-            evalInTree(node);
-            break;
-        case CmisQlStrictLexer.OR:
-            evalOr(node);
-            break;
-        case CmisQlStrictLexer.GT:
-            evalGreaterThan(node);
-            break;
-        case CmisQlStrictLexer.TIMESTAMP:
-            evalTimeLiteral(node);
-            break;
-        default:
-            fail("[Unexpected node in WHERE clause: " + node.toString() + "]");
-        }
-    }
-
-    // Ensure that we receive only valid tokens and nodes in the where clause:
-    private void evaluateSearchExprNode(Tree node) {
-        LOG.info("evaluating text search expression node: " + node.toString());
-        switch (node.getType()) {
-        case TextSearchLexer.TEXT_AND:
-        case TextSearchLexer.TEXT_OR:
-            assertTrue(node.getChildCount() >= 2);
-            break;
-        case TextSearchLexer.TEXT_MINUS:
-            assertEquals(1, node.getChildCount());
-            break;
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            evalStringLiteral(node);
-            break;
-        default:
-            fail("[Unexpected node in text search expression: " + node.toString() + "]");
-        }
-    }
-
-    private void evalInAny(Tree node) {
-    }
-
-    private static void evalColumn(Tree node) {
-        assertEquals(1, node.getChildCount());
-        assertEquals(CmisQlStrictLexer.ID, node.getChild(0).getType());
-    }
-
-    private static void evalEquals(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalInFolder(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalApproxNumLiteral(Tree node) {
-    }
-
-    private static void evalNull(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalLike(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalNumLiteral(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalInList(Tree node) {
-    }
-
-    private static void evalEqAny(Tree node) {
-    }
-
-    private static void evalNotLike(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalNotIn(Tree node) {
-    }
-
-    private static void evalIsNull(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalIsNotNull(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalLessThan(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalBooleanLiteral(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalStringLiteral(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalContains(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalExactNumLiteral(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalLessOrEqual(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalNot(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalId(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalAnd(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private void evalIn(Tree node) {
-    }
-
-    private static void evalNotEquals(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalScore(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-    private static void evalInTree(Tree node) {
-        assertEquals(1, node.getChildCount());
-    }
-
-    private static void evalOr(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalGreaterThan(Tree node) {
-        assertEquals(2, node.getChildCount());
-    }
-
-    private static void evalTimeLiteral(Tree node) {
-        assertEquals(0, node.getChildCount());
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
deleted file mode 100644
index 9fec88a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.COMPLEX_TYPE;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.FOLDER_TYPE;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_BOOLEAN;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DATETIME;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DECIMAL;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_INT;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_STRING;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.SECONDARY_STRING_PROP;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.SECONDARY_TYPE;
-import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.VERSION_PROPERTY_ID;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
-
-/**
- * Utility class that fills the in-memory repository with some test objects that
- * can be used for query
- * 
- *         This class uses the following data for query testing. We have one
- *         document type "ComplexType" and one folder type "FolderType" The
- *         document type has one property of each of the types boolean, integer,
- *         decimal, string and datetime. id, uri and html are treated like a
- *         string and do not make a difference.
- * 
- *         String Int Double DateTime Boolean
- *         ------------------------------------------------ Alpha -100 -1.6E-5
- *         23.05.1618 true Beta -50 -4.0E24 08.05.1945 false Gamma 0 3.141592
- *         (now) true Delta 50 1.23456E-6 20.01.2038 true Epsilon 100 1.2345E12
- *         14.07.2345 false
- * 
- *         For folder and tree tests this series is put in each of the three
- *         test folders
- */
-public class QueryTestDataCreator {
-
-    private final BindingsObjectFactory fFactory = new BindingsObjectFactoryImpl();
-    private final String rootFolderId;
-    private final String repositoryId;
-    private final ObjectService fObjSvc;
-    private final VersioningService fVerSvc;
-    private String doc1, doc2, doc3, doc4, doc5;
-    private String folder1;
-    private String folder2;
-    private String folder11;
-    private static final TimeZone TZ = TimeZone.getTimeZone("Zulu");
-
-    public QueryTestDataCreator(String repositoryId, String rootFolderId, ObjectService objSvc, VersioningService verSvc) {
-        this.rootFolderId = rootFolderId;
-        this.repositoryId = repositoryId;
-        fObjSvc = objSvc;
-        fVerSvc = verSvc;
-    }
-
-    public String getFolder1() {
-        return folder1;
-    }
-
-    public String getFolder2() {
-        return folder2;
-    }
-
-    public String getFolder11() {
-        return folder11;
-    }
-
-    public void createBasicTestData() {
-        createTestFolders();
-        createBasicTestDocuments();
-    }
-
-    @SuppressWarnings("serial")
-    public void createBasicTestDocuments() {
-
-        final GregorianCalendar gc1 = new GregorianCalendar(TZ);
-        gc1.clear();
-        gc1.set(1945, 4, 8);
-
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Alpha");
-                put(PROP_ID_INT, Integer.valueOf(-100));
-                put(PROP_ID_DECIMAL, Double.valueOf(-4.0E24d));
-                put(PROP_ID_DATETIME, gc1);
-                put(PROP_ID_BOOLEAN, true);
-            }
-        };
-        ContentStream content1 = createContent("I have a cat.");
-        doc1 = createDocument("alpha", rootFolderId, COMPLEX_TYPE, propertyMap1, content1);
-        assertNotNull(doc1);
-
-        final GregorianCalendar gc2 = new GregorianCalendar(TZ);
-        gc2.clear();
-        gc2.set(1618, 4, 23);
-
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Beta");
-                put(PROP_ID_INT, Integer.valueOf(-50));
-                put(PROP_ID_DECIMAL, Double.valueOf(-1.6E-5d));
-                put(PROP_ID_DATETIME, gc2);
-                put(PROP_ID_BOOLEAN, false);
-            }
-        };
-        ContentStream content2 = createContent("I have a cat named Kitty Katty.");
-        doc2 = createDocument("beta", rootFolderId, COMPLEX_TYPE, propertyMap2, content2);
-        assertNotNull(doc2);
-
-        final Map<String, Object> propertyMap3 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Gamma");
-                put(PROP_ID_INT, Integer.valueOf(0));
-                put(PROP_ID_DECIMAL, Double.valueOf(Math.PI));
-                put(PROP_ID_DATETIME, new GregorianCalendar(TZ));
-                put(PROP_ID_BOOLEAN, true);
-            }
-        };
-
-        ContentStream content3 = createContent("I have a dog.");
-        doc3 = createDocument("gamma", rootFolderId, COMPLEX_TYPE, propertyMap3, content3);
-        assertNotNull(doc3);
-
-        final GregorianCalendar gc4 = new GregorianCalendar(TZ);
-        gc4.clear();
-        gc4.set(2038, 0, 20);
-
-        final Map<String, Object> propertyMap4 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Delta");
-                put(PROP_ID_INT, Integer.valueOf(50));
-                put(PROP_ID_DECIMAL, Double.valueOf(1.23456E-6));
-                put(PROP_ID_DATETIME, gc4);
-                put(PROP_ID_BOOLEAN, true);
-            }
-        };
-        ContentStream content4 = createContent("I have a cat and a dog.");
-        doc4 = createDocument("delta", rootFolderId, COMPLEX_TYPE, propertyMap4, content4);
-        assertNotNull(doc4);
-
-        final GregorianCalendar gc5 = new GregorianCalendar(TZ);
-        gc5.clear();
-        gc5.set(2345, 6, 14);
-
-        final Map<String, Object> propertyMap5 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Epsilon");
-                put(PROP_ID_INT, Integer.valueOf(100));
-                put(PROP_ID_DECIMAL, Double.valueOf(1.2345E12));
-                put(PROP_ID_DATETIME, gc5);
-                put(PROP_ID_BOOLEAN, false);
-            }
-        };
-        ContentStream content5 = createContent("I hate having pets.");
-        doc5 = createDocument("epsilon", rootFolderId, COMPLEX_TYPE, propertyMap5, content5);
-        assertNotNull(doc5);
-        
-        final Map<String, Object> propertyMap6 = new HashMap<String, Object>();
-        doc4 = createDocument("John's Document", rootFolderId, BaseTypeId.CMIS_DOCUMENT.value(), propertyMap6, null);
-        assertNotNull(doc4);
-
-    }
-
-    @SuppressWarnings("serial")
-    public void createMultiValueDocuments() {
-        final List<String> mvProps1 = new ArrayList<String>() {
-            {
-                add("red");
-                add("green");
-                add("blue");
-            }
-        };
-
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING_MULTI_VALUE, mvProps1);
-                put(PROP_ID_INT, Integer.valueOf(100));
-            }
-        };
-        createDocument("mv-alpha", rootFolderId, COMPLEX_TYPE, propertyMap1);
-
-        final List<String> mvProps2 = new ArrayList<String>() {
-            {
-                add("red");
-                add("pink");
-                add("violet");
-            }
-        };
-
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING_MULTI_VALUE, mvProps2);
-                put(PROP_ID_INT, Integer.valueOf(200));
-            }
-        };
-        createDocument("mv-beta", rootFolderId, COMPLEX_TYPE, propertyMap2);
-    }
-
-    @SuppressWarnings("serial")
-    public void createTestFolders() {
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_INT, Integer.valueOf(1234));
-                put(PROP_ID_STRING, "ABCD");
-            }
-        };
-        folder1 = createFolder("Folder 1", rootFolderId, FOLDER_TYPE, propertyMap1);
-
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_INT, Integer.valueOf(-2345));
-                put(PROP_ID_STRING, "defg");
-            }
-        };
-        folder2 = createFolder("Folder 2", rootFolderId, FOLDER_TYPE, propertyMap2);
-
-        final Map<String, Object> propertyMap3 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_INT, Integer.valueOf(123));
-                put(PROP_ID_STRING, "ZZZZ");
-            }
-        };
-        folder11 = createFolder("Folder 11", folder1, FOLDER_TYPE, propertyMap3);
-    }
-
-    @SuppressWarnings("serial")
-    public void createNullTestDocument() {
-
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "DocumentWithNulls");
-            }
-        };
-        createDocument("nulldoc", rootFolderId, COMPLEX_TYPE, propertyMap1);
-    }
-
-    @SuppressWarnings("serial")
-    public void createLikeTestDocuments(String folderId) {
-
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "ABCDEF");
-            }
-        };
-        createDocument("likedoc1", folderId, COMPLEX_TYPE, propertyMap1);
-
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "ABC123");
-            }
-        };
-        createDocument("likedoc2", folderId, COMPLEX_TYPE, propertyMap2);
-
-        final Map<String, Object> propertyMap3 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "123ABC");
-            }
-        };
-        createDocument("likedoc3", folderId, COMPLEX_TYPE, propertyMap3);
-    }
-
-    @SuppressWarnings("serial")
-    public String createVersionedDocument() {
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(VERSION_PROPERTY_ID, "ver123");
-            }
-        };
-
-        String verIdV1 = createDocument("verdoc1", rootFolderId, UnitTestTypeSystemCreator.VERSIONED_TYPE,
-                propertyMap1, VersioningState.MAJOR, null);
-        ObjectData version = fObjSvc.getObject(repositoryId, verIdV1, "*", false, IncludeRelationships.NONE, null,
-                false, false, null);
-
-        // get version series id
-        String verIdSer = (String) version.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID)
-                .getFirstValue();
-
-        // create second version
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(VERSION_PROPERTY_ID, "ver456");
-            }
-        };
-        Properties propsV2 = createDocumentProperties(null, null, propertyMap2);
-
-        Holder<String> idHolder = new Holder<String>(verIdV1);
-        Holder<Boolean> contentCopied = new Holder<Boolean>(false);
-        fVerSvc.checkOut(repositoryId, idHolder, null, contentCopied);
-
-        idHolder = new Holder<String>(verIdV1);
-        // Test check-in and pass content and properties
-        String checkinComment = "Here comes next version.";
-        fVerSvc.checkIn(repositoryId, idHolder, true, propsV2, null, checkinComment, null, null, null, null);
-        // String verIdV2 = idHolder.getValue();
-        return verIdSer;
-    }
-
-    @SuppressWarnings("serial")
-    public void createSecondaryTestDocuments() {
-
-        final int intPropVal1 = 100;
-        final String stringPropVal1 = "Secondary Property Value";
-        final int intPropVal2 = 200;
-        final String stringPropVal2 = "Secondary String";
-
-        final GregorianCalendar gc1 = new GregorianCalendar(TZ);
-        gc1.clear();
-        gc1.set(1945, 4, 8);
-
-        final Map<String, Object> propertyMap1 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Secondary");
-                put(PROP_ID_INT, Integer.valueOf(-100));
-                put(PROP_ID_DECIMAL, Double.valueOf(-4.0E24d));
-                put(PROP_ID_DATETIME, gc1);
-                put(PROP_ID_BOOLEAN, true);
-                put(SECONDARY_STRING_PROP, stringPropVal1);
-                put(SECONDARY_INTEGER_PROP, intPropVal1);
-                put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, SECONDARY_TYPE);
-            }
-        };
-        ContentStream content1 = createContent("Some more content.");
-        doc1 = createDocument("docwithsecondary", rootFolderId, COMPLEX_TYPE, propertyMap1, content1);
-        assertNotNull(doc1);
-
-        final Map<String, Object> propertyMap2 = new HashMap<String, Object>() {
-            {
-                put(PROP_ID_STRING, "Secondary 2");
-                put(PROP_ID_INT, Integer.valueOf(123));
-                put(PROP_ID_DECIMAL, Double.valueOf(1.23E24d));
-                put(PROP_ID_BOOLEAN, false);
-                put(SECONDARY_STRING_PROP, stringPropVal2);
-                put(SECONDARY_INTEGER_PROP, intPropVal2);
-                put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, SECONDARY_TYPE);
-            }
-        };
-        ContentStream content2 = createContent("Even still some more content.");
-        doc1 = createDocument("docwithsecondary2", rootFolderId, COMPLEX_TYPE, propertyMap2, content2);
-        assertNotNull(doc1);
-    }
-
-    private String createFolder(String folderName, String parentFolderId, String typeId, Map<String, Object> properties) {
-        Properties props = createFolderProperties(folderName, typeId, properties);
-        String id = null;
-        try {
-            id = fObjSvc.createFolder(repositoryId, props, parentFolderId, null, null, null, null);
-            if (null == id) {
-                fail("createFolder failed.");
-            }
-        } catch (Exception e) {
-            fail("createFolder() failed with exception: " + e);
-        }
-        return id;
-    }
-
-    private String createDocument(String name, String folderId, String typeId, Map<String, Object> properties) {
-        return createDocument(name, folderId, typeId, properties, VersioningState.NONE, null);
-    }
-
-    private String createDocument(String name, String folderId, String typeId, Map<String, Object> properties,
-            ContentStream contentStream) {
-        return createDocument(name, folderId, typeId, properties, VersioningState.NONE, contentStream);
-    }
-
-    private String createDocument(String name, String folderId, String typeId, Map<String, Object> properties,
-            VersioningState verState, ContentStream contentStream) {
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        Properties props = createDocumentProperties(name, typeId, properties);
-
-        String id = null;
-        try {
-            id = fObjSvc.createDocument(repositoryId, props, folderId, contentStream, verState, policies, addACEs,
-                    removeACEs, extension);
-            if (null == id) {
-                fail("createDocument failed.");
-            }
-        } catch (Exception e) {
-            fail("createDocument() failed with exception: " + e);
-        }
-        return id;
-
-    }
-
-    private Properties createDocumentProperties(String name, String typeId, Map<String, Object> propertyMap) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        if (name != null) {
-            properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, name));
-        }
-        if (typeId != null) {
-            properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        }
-        for (Map.Entry<String, Object> propEntry : propertyMap.entrySet()) {
-            PropertyData<?> pd = createPropertyData(propEntry.getKey(), propEntry.getValue());
-            properties.add(pd);
-        }
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private Properties createFolderProperties(String folderName, String typeId, Map<String, Object> propertyMap) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, folderName));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        for (Map.Entry<String, Object> propEntry : propertyMap.entrySet()) {
-            PropertyData<?> pd = createPropertyData(propEntry.getKey(), propEntry.getValue());
-            properties.add(pd);
-        }
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    /**
-     * Simplified property creation method, create Property of Boolean, String,
-     * Integer, Decimal, or DataTime depending on class of value (Boolean,
-     * String, Integer, Double, or GregorianCalendar. Id, Html and URI are not
-     * supported
-     * 
-     * @param propId
-     * @param value
-     * @return
-     */
-    @SuppressWarnings("unchecked")
-    private PropertyData<?> createPropertyData(String propId, Object value) {
-        Class<?> clazz = value.getClass();
-        if (clazz.equals(Boolean.class)) {
-            return fFactory.createPropertyBooleanData(propId, (Boolean) value);
-        } else if (clazz.equals(Double.class)) {
-            return fFactory.createPropertyDecimalData(propId, BigDecimal.valueOf((Double) value));
-        } else if (clazz.equals(Integer.class)) {
-            return fFactory.createPropertyIntegerData(propId, BigInteger.valueOf((Integer) value));
-        } else if (clazz.equals(String.class)) {
-            return fFactory.createPropertyStringData(propId, (String) value);
-        } else if (clazz.equals(GregorianCalendar.class)) {
-            return fFactory.createPropertyDateTimeData(propId, (GregorianCalendar) value);
-        } else if (value instanceof List) {
-            clazz = ((List<?>) value).get(0).getClass();
-            if (clazz.equals(Boolean.class)) {
-                return fFactory.createPropertyBooleanData(propId, (List<Boolean>) value);
-            } else if (clazz.equals(Double.class)) {
-                return fFactory.createPropertyDecimalData(propId, (List<BigDecimal>) value);
-            } else if (clazz.equals(Integer.class)) {
-                return fFactory.createPropertyIntegerData(propId, (List<BigInteger>) value);
-            } else if (clazz.equals(String.class)) {
-                return fFactory.createPropertyStringData(propId, (List<String>) value);
-            } else if (clazz.equals(GregorianCalendar.class)) {
-                return fFactory.createPropertyDateTimeData(propId, (List<GregorianCalendar>) value);
-            } else {
-                fail("unsupported type in propery value: " + clazz);
-            }
-        } else {
-            fail("unsupported type in propery value: " + clazz);
-        }
-        return null;
-    }
-
-    private ContentStream createContent(String text) {
-        ContentStreamDataImpl content = new ContentStreamDataImpl(-1);
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-
-        try {
-            content.setContent(new ByteArrayInputStream(text.getBytes()));
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        return content;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
deleted file mode 100644
index f2deb16..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
+++ /dev/null
@@ -1,665 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory.query;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.inmemory.TypeManagerImpl;
-import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
-import org.apache.chemistry.opencmis.server.support.query.AbstractPredicateWalker;
-import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
-import org.apache.chemistry.opencmis.server.support.query.CmisSelector;
-import org.apache.chemistry.opencmis.server.support.query.ColumnReference;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class QueryTypesTest extends AbstractQueryTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(QueryTypesTest.class);
-    private TypeManagerImpl tm;
-    private TestPredicateWalker pw;
-
-    public static class TestPredicateWalker extends AbstractPredicateWalker {
-        List<Integer> ids = new LinkedList<Integer>();
-
-        @Override
-        public Object walkId(Tree node) {
-            ids.add(node.getTokenStartIndex());
-            return null;
-        }
-    }
-
-    @Before
-    public void setUp() {
-        tm = new TypeManagerImpl();
-        tm.initTypeSystem(null, true); // create CMIS default types
-
-        // create some types for testing
-        List<TypeDefinition> typeDefs = super.createTypes();
-        for (TypeDefinition typeDef : typeDefs) {
-            tm.addTypeDefinition(typeDef, true);
-        }
-
-        // initialize query object with type manager
-        // and test the abstract predicate walker
-        pw = new TestPredicateWalker();
-        super.setUp(tm, pw);
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    @Test
-    public void resolveTypesTest1() throws Exception {
-        String statement = "SELECT " + TITLE_PROP + ", " + AUTHOR_PROP + " FROM " + BOOK_TYPE + " AS BooksAlias WHERE "
-                + ISBN_PROP + " = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest2() throws Exception {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest3() throws Exception {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType AS BooksAlias WHERE ISBN = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest4() throws Exception {
-        String statement = "SELECT BooksAlias.Title, BooksAlias.Author FROM BookType AS BooksAlias WHERE ISBN = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest5() throws Exception {
-        String statement = "SELECT BooksAlias.Title AS abc, BooksAlias.Author def FROM BookType AS BooksAlias WHERE ISBN = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest6() {
-        String statement = "SELECT BookType.UnknownProperty FROM BookType WHERE ISBN = '100'";
-        try {
-            verifyResolveSelect(statement);
-            fail("Select of unknown property in type should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-            LOG.debug("resolveTypesTest6(), e: " + e.getMessage());
-            assertTrue(e.toString().contains("is not a valid property query name in"));
-        }
-    }
-
-    @Test
-    public void resolveTypesTest7() {
-        String statement = "SELECT UnknownProperty FROM BookType WHERE ISBN = '100'";
-        try {
-            verifyResolveSelect(statement);
-            fail("Select of unknown property in type should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-            assertTrue(e.toString().contains("is not a property query name in any"));
-        }
-    }
-
-    @Test
-    public void resolveTypesTest8() throws Exception {
-        String statement = "SELECT BookType.Title, BookType.Author FROM BookType WHERE ISBN = '100'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest9() throws Exception {
-        String statement = "SELECT BookType.Author, Title TitleAlias FROM BookType WHERE TitleAlias <> 'Harry Potter'";
-        verifyResolveSelect(statement);
-    }
-
-    @Test
-    public void resolveTypesTest10() throws Exception {
-        String statement = "SELECT BookType.Author, BookType.Title TitleAlias FROM BookType WHERE TitleAlias <> 'Harry Potter'";
-        verifyResolveSelect(statement);
-    }
-
-    private void verifyResolveSelect(String statement) throws Exception {
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(2 == selects.size());
-        for (CmisSelector select : selects) {
-            assertTrue(select instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) select);
-            assertEquals(bookType, colRef.getTypeDefinition());
-            assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP)
-                    || colRef.getPropertyQueryName().equals(AUTHOR_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsQualified() throws Exception {
-        String statement = "SELECT BookType.Title, MyDocType.MyStringProp FROM BookType JOIN MyDocType WHERE BookType.ISBN = '100'";
-
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(2 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(2 == selects.size());
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals(colRef.getTypeDefinition(), bookType);
-        assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP));
-
-        colRef = ((ColumnReference) selects.get(1));
-        assertEquals(colRef.getTypeDefinition(), myType);
-        assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsSameTypeCorrectlyQualified() throws Exception {
-        String statement = "SELECT A.Title FROM BookType A JOIN BookType B";
-
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertEquals(2, types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertEquals(1, selects.size());
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals(bookType, colRef.getTypeDefinition());
-        assertEquals(TITLE_PROP, colRef.getPropertyQueryName());
-        assertEquals("A", colRef.getQualifier());
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsSameTypeAmbiguouslyQualified() throws Exception {
-        String statement = "SELECT BookType.Title FROM BookType A JOIN BookType B";
-        try {
-            traverseStatement(statement);
-            fail("Select with an ambiguously qualified property should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof RecognitionException);
-            assertTrue(e.toString().contains("BookType is an ambiguous type query name"));
-        }
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsUnqualified() throws Exception {
-        String statement = "SELECT Title, MyStringProp FROM BookType JOIN MyDocType AS MyDocAlias WHERE BookType.ISBN = '100'";
-
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(2 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(2 == selects.size());
-
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals(colRef.getTypeDefinition(), bookType);
-        assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP));
-
-        colRef = ((ColumnReference) selects.get(1));
-        assertEquals(colRef.getTypeDefinition(), myType);
-        assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsNotUnique() {
-        String statement = "SELECT MyStringProp FROM MyDocTypeCopy JOIN MyDocType";
-
-        try {
-            traverseStatement(statement);
-            fail("Select with an unqualified property that is not unique should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof RecognitionException);
-            assertTrue(e.toString().contains("is not a unique property query name within the types in from"));
-        }
-    }
-
-    @Test
-    public void resolveTypesWithTwoFromsUniqueByQualifying() throws Exception {
-        String statement = "SELECT MyDocType.MyStringProp FROM MyDocTypeCopy JOIN MyDocType";
-
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(2 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertEquals(myType, colRef.getTypeDefinition());
-        assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-    }
-
-    @Test
-    public void resolveTypesTest11() throws Exception {
-        String statement = "SELECT BookType.* FROM BookType WHERE ISBN = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertTrue(colRef.getPropertyQueryName().equals("*"));
-        assertEquals(bookType, colRef.getTypeDefinition());
-    }
-
-    @Test
-    public void resolveTypesTest12() throws Exception {
-        String statement = "SELECT * FROM MyDocTypeCopy JOIN MyDocType";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(2 == types.size());
-        List<CmisSelector> selects = queryObj.getSelectReferences();
-        assertTrue(1 == selects.size());
-        ColumnReference colRef = ((ColumnReference) selects.get(0));
-        assertTrue(colRef.getPropertyQueryName().equals("*"));
-        assertEquals(null, colRef.getTypeDefinition());
-    }
-
-    @Test
-    public void resolveTypesWhere1() throws Exception {
-        String statement = "SELECT * FROM BookType WHERE ISBN = '100'";
-        verifyResolveWhere(statement);
-    }
-
-    @Test
-    public void resolveTypesWhere2() throws Exception {
-        String statement = "SELECT * FROM BookType WHERE BookType.ISBN = '100'";
-        verifyResolveWhere(statement);
-    }
-
-    @Test
-    public void resolveTypesWhere3() throws Exception {
-        String statement = "SELECT * FROM BookType As BookAlias WHERE BookAlias.ISBN = '100'";
-        verifyResolveWhere(statement);
-    }
-
-    @Test
-    public void resolveTypesWhere4() throws Exception {
-        String statement = "SELECT BookType.ISBN IsbnAlias FROM BookType WHERE IsbnAlias < '100'";
-        verifyResolveWhere(statement);
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsUnqualified() throws Exception {
-        String statement = "SELECT * FROM BookType JOIN MyDocType WHERE ISBN = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(ISBN_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsQualified() throws Exception {
-        String statement = "SELECT * FROM BookType JOIN MyDocType AS MyDocAlias WHERE BookType.ISBN = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(ISBN_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsQualifiedWithAlias() throws Exception {
-        String statement = "SELECT * FROM BookType AS MyBookAlias JOIN MyDocType  WHERE MyBookAlias.ISBN = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(ISBN_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsQualifiedWithAlias2() throws Exception {
-        String statement = "SELECT MyBookAlias.Title FROM BookType AS MyBookAlias WHERE MyBookAlias.ISBN = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(colRef.getTypeDefinition(), bookType);
-        }
-    }
-
-    private void verifyResolveWhere(String statement) throws Exception {
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        Map<String, String> types = queryObj.getTypes();
-        assertTrue(1 == types.size());
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(bookType, colRef.getTypeDefinition());
-            assertTrue(colRef.getPropertyQueryName().equals(ISBN_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsNotUnique() {
-        String statement = "SELECT * FROM MyDocTypeCopy JOIN MyDocType WHERE MyStringProp = '100'";
-
-        try {
-            traverseStatement(statement);
-            fail("Select with an unqualified property that is not unique should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof RecognitionException);
-            assertTrue(e.toString().contains("is not a unique property query name within the types in from"));
-        }
-    }
-
-    @Test
-    public void resolveTypesWhereWithTwoFromsUniqueByQualifying() throws Exception {
-        String statement = "SELECT * FROM MyDocTypeCopy JOIN MyDocType WHERE MyDocType.MyStringProp = '100'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> wheres = queryObj.getWhereReferences();
-        assertTrue(1 == wheres.size());
-        for (CmisSelector where : wheres) {
-            assertTrue(where instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) where);
-            assertEquals(colRef.getTypeDefinition(), myType);
-            assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesOrderBy() throws Exception {
-        String statement = "SELECT Title AS TitleAlias FROM BookType WHERE Author = 'Jim' ORDER BY TitleAlias";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<SortSpec> sorts = queryObj.getOrderBys();
-        assertTrue(1 == sorts.size());
-        for (SortSpec sort : sorts) {
-            assertTrue(sort.getSelector() instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) sort.getSelector());
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesOrderBy2() throws Exception {
-        String statement = "SELECT Title AS TitleAlias FROM BookType WHERE Author = 'Jim' ORDER BY BookType.Author";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<SortSpec> sorts = queryObj.getOrderBys();
-        assertTrue(1 == sorts.size());
-        for (SortSpec sort : sorts) {
-            assertTrue(sort.getSelector() instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) sort.getSelector());
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(AUTHOR_PROP));
-        }
-    }
-
-    @Test
-    public void resolveTypesOrderBy3() throws Exception {
-        String statement = "SELECT Title FROM BookType WHERE ISBN < '100' ORDER BY Author";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<SortSpec> sorts = queryObj.getOrderBys();
-        assertTrue(1 == sorts.size());
-        for (SortSpec sort : sorts) {
-            assertTrue(sort.getSelector() instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) sort.getSelector());
-            assertEquals(colRef.getTypeDefinition(), bookType);
-            assertTrue(colRef.getPropertyQueryName().equals(AUTHOR_PROP));
-        }
-    }
-
-    @Test
-    public void resolveJoinTypesSimple() throws Exception {
-        String statement = "SELECT * FROM MyDocType JOIN BookType ON MyDocType.MyStringProp = BookType.Title";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> joins = queryObj.getJoinReferences();
-        assertTrue(2 == joins.size());
-        for (CmisSelector join : joins) {
-            assertTrue(join instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) join);
-            if (myType.equals(colRef.getTypeDefinition())) {
-                assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-            } else if (bookType.equals(colRef.getTypeDefinition())) {
-                assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP));
-            } else {
-                fail("Unexpected type in JOIN reference");
-            }
-        }
-    }
-
-    @Test
-    public void resolveJoinTypesWithAlias() throws Exception {
-        String statement = "SELECT Y.ISBN, X.MyBooleanProp, Y.Author FROM (MyDocType AS X JOIN BookType AS Y ON X.MyStringProp = Y.Title) "
-                + "WHERE ('Joe' = ANY Y.Author)";
-        // "SELECT    Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES " +
-        // "FROM   ( POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM ) "
-        // +
-        // "WHERE ( 100000 = ANY Y.DAMAGE_ESTIMATES )";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<CmisSelector> joins = queryObj.getJoinReferences();
-        assertTrue(2 == joins.size());
-        for (CmisSelector join : joins) {
-            assertTrue(join instanceof ColumnReference);
-            ColumnReference colRef = ((ColumnReference) join);
-            if (myType.equals(colRef.getTypeDefinition())) {
-                assertTrue(colRef.getPropertyQueryName().equals(STRING_PROP));
-            } else if (bookType.equals(colRef.getTypeDefinition())) {
-                assertTrue(colRef.getPropertyQueryName().equals(TITLE_PROP));
-            } else {
-                fail("Unexpected type in JOIN reference");
-            }
-        }
-    }
-
-    @Test
-    public void testSecondaryJoin() throws RecognitionException {
-        // needs some special types:
-        tm = new TypeManagerImpl();
-        tm.initTypeSystem(null, true); // create CMIS default types
-
-        // create some types for testing
-        List<TypeDefinition> typeDefs = UnitTestTypeSystemCreator.getTypesList();
-        for (TypeDefinition typeDef : typeDefs) {
-            tm.addTypeDefinition(typeDef, true);
-        }
-        super.setUp(tm, pw);
-
-        String statement = "SELECT * FROM cmis:document JOIN " + UnitTestTypeSystemCreator.SECONDARY_TYPE
-                + " WHERE SecondaryStringProp='groovy'";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        List<TypeDefinition> secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertNull(secondaryJoinedTypes);
-
-        statement = "SELECT * FROM cmis:document WHERE cmis:name='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertNull(secondaryJoinedTypes);
-
-        statement = "SELECT * FROM cmis:document JOIN " + UnitTestTypeSystemCreator.COMPLEX_TYPE + " WHERE "
-                + UnitTestTypeSystemCreator.PROP_ID_STRING + "='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertNull(secondaryJoinedTypes);
-
-        statement = "SELECT * FROM cmis:document JOIN " + UnitTestTypeSystemCreator.SECONDARY_TYPE
-                + " ON cmis:document.cmis:objectId = " + UnitTestTypeSystemCreator.SECONDARY_TYPE
-                + ".cmis:objectId WHERE SecondaryStringProp='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertEquals(1, secondaryJoinedTypes.size());
-        assertEquals(UnitTestTypeSystemCreator.SECONDARY_TYPE, secondaryJoinedTypes.get(0).getId());
-
-        statement = "SELECT * FROM cmis:document JOIN " + UnitTestTypeSystemCreator.SECONDARY_TYPE + " ON "
-                + UnitTestTypeSystemCreator.SECONDARY_TYPE
-                + ".cmis:objectId = cmis:document.cmis:objectId WHERE SecondaryStringProp='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertEquals(1, secondaryJoinedTypes.size());
-        assertEquals(UnitTestTypeSystemCreator.SECONDARY_TYPE, secondaryJoinedTypes.get(0).getId());
-
-        statement = "SELECT * FROM cmis:document JOIN MySecondaryType ON cmis:document.cmis:objectId = MySecondaryType.cmis:objectId JOIN MySecondaryType2 ON cmis:document.cmis:objectId = MySecondaryType2.cmis:objectId WHERE SecondaryStringProp='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertEquals(2, secondaryJoinedTypes.size());
-        assertEquals(UnitTestTypeSystemCreator.SECONDARY_TYPE, secondaryJoinedTypes.get(0).getId());
-        assertEquals(UnitTestTypeSystemCreator.SECONDARY_TYPE_2, secondaryJoinedTypes.get(1).getId());
-
-        statement = "SELECT a.cmis:objectId, a.cmis:name, b.SecondaryStringProp FROM cmis:document AS a JOIN MySecondaryType AS b ON a.cmis:objectId = b.cmis:objectId WHERE b.SecondaryStringProp='groovy'";
-        walker = getWalker(statement);
-        secondaryJoinedTypes = queryObj.getJoinedSecondaryTypes();
-        assertEquals(1, secondaryJoinedTypes.size());
-        assertEquals(UnitTestTypeSystemCreator.SECONDARY_TYPE, secondaryJoinedTypes.get(0).getId());
-    }
-
-    @Test
-    public void resolveTypeQualifiers1() throws Exception {
-        String statement = "SELECT Title FROM BookType WHERE IN_TREE(BookType, 'foo')";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        assertEquals("BookType", queryObj.getTypeReference(pw.ids.get(0)));
-    }
-
-    @Test
-    public void resolveTypeQualifiers2() throws Exception {
-        String statement = "SELECT Title FROM BookType B WHERE IN_TREE(B, 'foo')";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        assertEquals("B", queryObj.getTypeReference(pw.ids.get(0)));
-    }
-
-    @Test
-    public void resolveTypeQualifiers3() throws Exception {
-        String statement = "SELECT Title FROM BookType B WHERE IN_TREE(BookType, 'foo')";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        assertEquals("B", queryObj.getTypeReference(pw.ids.get(0)));
-    }
-
-    @Test
-    public void resolveTypeQualifiers4() throws Exception {
-        String statement = "SELECT Title FROM BookType B WHERE IN_TREE(dummy, 'foo')";
-        try {
-            traverseStatement(statement);
-            fail("invalid correlation name should fail");
-        } catch (Exception e) {
-            assertTrue(e instanceof RecognitionException);
-            assertTrue(e.toString().contains("dummy is neither a type query name nor an alias"));
-        }
-    }
-
-    @Test
-    public void resolveTypeQualifiers5() throws Exception {
-        String statement = "SELECT B1.Title FROM BookType B1 JOIN BookType B2"
-                + " WHERE IN_TREE(B1, 'foo') OR IN_TREE(B2, 'bar')";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        assertEquals("B1", queryObj.getTypeReference(pw.ids.get(0)));
-        assertEquals("B2", queryObj.getTypeReference(pw.ids.get(1)));
-    }
-
-    @Test
-    public void resolveTypeQualifiers6() throws Exception {
-        String statement = "SELECT B.Title FROM BookType B JOIN MyDocType D" + " WHERE IN_TREE(MyDocType, 'foo')";
-        CmisQueryWalker walker = getWalker(statement);
-        assertNotNull(queryObj);
-        assertNotNull(walker);
-        assertEquals("D", queryObj.getTypeReference(pw.ids.get(0)));
-    }
-
-    @Test
-    public void resolveTypeQualifiers7() throws Exception {
-        String statement = "SELECT B1.Title FROM BookType B1 JOIN BookType B2" + " WHERE IN_TREE(BookType, 'foo')";
-        try {
-            traverseStatement(statement);
-            fail("ambiguous correlation name should fail");
-        } catch (Exception e) {
-            assertTrue(e instanceof RecognitionException);
-            assertTrue(e.toString().contains("BookType is an ambiguous type query name"));
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/image.jpg b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/image.jpg
deleted file mode 100644
index 2092886..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/image.jpg
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/log4j.properties
deleted file mode 100644
index d3a9b98..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=target/logs/log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.chemistry.opencmis.client.provider.spi=O
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/README.txt b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/README.txt
deleted file mode 100644
index 83a52d4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/README.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-CMIS server implementation on top of JCR
-========================================
-
-Getting started
----------------
-To get a running instance on top of a transient JCR repository 
-(Apache Jackrabbit) use the develop profile:
-
-  mvn -o -Dlog4j.configuration=file:./log4j.config -Pdevelop jetty:run
-  
-This builds the web application with Apache Jackrabbit included and deploys it into
-Jetty. The JCR repository is now available via CMIS at
-
-  http://localhost:8080/chemistry-opencmis-server-jcr/atom
-  
-Use admin/admin to log in. 
-
-
-Features and limitations
-------------------------
-General:
-- Mapping is implemented as follows: JCR node type nt:file with JCR mixin mix:simpleVersionable 
-  is mapped to CMIS object type cmis:document. JCR node type nt:file without JCR mixin 
-  mix:simpleVersionable is mapped to CMIS object type cmis:unversioned-document. All other JCR
-  node types are mapped to CMIS object type cmis:folder.
-  
-Versioning: 
-- Each version of a CMIS document corresponds to a version in JCR
-
-- A private working copy in CMIS corresponds to the actual node in JCR
-
-- CMIS checkout/in are mapped to JCR checkout/in respectively
-
-- CMIS cancelCheckout is mapped to a restore operation of the base version in JCR. 
-  This has the side effect of creating a new version when canceling a checkout. 
-
-- checkin comment is not supported
-
-- All versions are major
-
-- The JCR version name is mapped to the CMIS version label as follows: 
-  if the JCR version name matches (\d+)(\.(\d+))?.* the value of the third group 
-  is appended with ".0" and then used for the CMIS version label. Otherwise the JCR
-  version name is used for the CMIS version label.
-
-- Deleting of single versions is not supported
-
-Query:
-- CMIS IN_TREE and CMIS IN_FOLDER predicates must not occur more than once in the 
-  WHERE clause. 
-  
-- CMIS IN_TREE and CMIS IN_FOLDER predicates may only occur in affirmative position 
-  in the WHERE clause. A literal 'p' in a boolean expression 'X'is affirmative if 
-  there exists a boolean expression 'Y' such that 'p' AND Y = X'. 
-  
-- <>, <, > comparison operators are not allowed on cmis:name
-
-- CRX's Lucene index has some latency until it is up to date. This can cause queries
-  to miss documents right after creating them.
-  
-- CMIS IN and CMIS ANY operators are not supported. 
-
-- The following columns are not supported in queries: cmis:baseTypeId, 
-  cmis:changeToken
-  
-- The following columns are not supported in queries for cmis:document and 
-  cmis:unversioned-document: cmis:isImmutable, cmis:isLatestVersion, cmis:isMajorVersion,
-  cmis:isLatestMajorVersion, cmis:versionLabel, cmis:versionSeriesId, 
-  cmis:isVersionSeriesCheckedOut, cmis:versionSeriesCheckedOutId, 
-  cmis:versionSeriesCheckedOutBy, cmis:checkinComment, cmis:contentStreamLength,
-  cmis:contentStreamId
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/log4j.config b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/log4j.config
deleted file mode 100644
index f49aff5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/log4j.config
+++ /dev/null
@@ -1,18 +0,0 @@
-# 
-#  Start chemistry-opencmis-server-jcr on a Apache Jackrabbit JCR
-#  repository with Jetty and logging configured in this file:
-#
-#    mvn -Dlog4j.configuration=file:./log4j.config -Pdevelop jetty:run
-#
-
-log4j.rootLogger=WARN, Console, File
-log4j.logger.org.apache.chemistry=DEBUG
-
-log4j.appender.Console=org.apache.log4j.ConsoleAppender
-log4j.appender.Console.layout=org.apache.log4j.EnhancedPatternLayout
-log4j.appender.Console.layout.ConversionPattern=%d %-5p %c - %m%n %throwable{0}
-
-log4j.appender.File=org.apache.log4j.FileAppender
-log4j.appender.File.File=debug.log
-log4j.appender.File.layout=org.apache.log4j.EnhancedPatternLayout
-log4j.appender.File.layout.ConversionPattern=%d %-5p %c - %m%n
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/pom.xml
deleted file mode 100644
index 625f30a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/pom.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-server-jcr</artifactId>
-    <name>OpenCMIS JCR Server Implementation</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.3</version>
-                <configuration>
-                    <archive>
-                        <!--
-                            OSGi Bundle Support
-                        -->
-                        <manifestEntries>
-                            <Bundle-Name>org.apache.chemistry.opencmis.server.jcr</Bundle-Name>
-                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.server.jcr</Bundle-SymbolicName>
-                            <Bundle-Version>${project.version}</Bundle-Version>
-                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
-                            <Bundle-Classpath>.</Bundle-Classpath>
-                            <Web-ContextPath>cmis-jcr</Web-ContextPath>
-                        </manifestEntries>
-                    </archive>
-                    <overlays>
-                        <overlay>
-                        </overlay>
-                        <overlay>
-                            <groupId>${project.groupId}</groupId>
-                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-                            <includes>
-                                <include>**</include>
-                                <include>META-INF/THIRD-PARTY-LICENSES</include>
-                            </includes>
-                        </overlay>
-                    </overlays>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty-plugin</artifactId>
-                <version>6.1.23</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.maven.surefire</groupId>
-                        <artifactId>surefire-junit4</artifactId>
-                        <version>2.14.1</version>
-                    </dependency>
-                </dependencies>
-                <configuration>
-                    <includes>
-                        <include>**/*Test.class</include>
-                    </includes>
-                  <systemProperties>
-                      <org.apache.jackrabbit.repository.conf>${basedir}/src/test/resources/repository.xml</org.apache.jackrabbit.repository.conf>
-                      <org.apache.jackrabbit.repository.home>${basedir}/target/jackrabbit-repo</org.apache.jackrabbit.repository.home>
-                    </systemProperties> 
-                </configuration>
-            </plugin>            
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
-            <version>${project.version}</version>
-            <type>war</type>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-server-support</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.2.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr-runtime</artifactId>            
-            <version>3.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.jcr</groupId>
-            <artifactId>jcr</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-        <groupId>org.apache.jackrabbit</groupId>
-        <artifactId>jackrabbit-core</artifactId>
-        <version>2.5.1</version>
-        <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <profiles>
-        <profile>
-            <id>develop</id>
-            <!-- This profile includes an collocated Apache Jackrabbit JCR repository into
-                 the web applications making it self contained. -->
-            <dependencies>
-                <dependency>
-                    <groupId>javax.jcr</groupId>
-                    <artifactId>jcr</artifactId>
-                    <version>2.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>jackrabbit-core</artifactId>
-                    <version>2.2.1</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                    <version>${slf4j.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                    <version>${log4j.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.chemistry.opencmis</groupId>
-                    <artifactId>chemistry-opencmis-server-bindings</artifactId>
-                    <version>${project.version}</version>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrBinary.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrBinary.java
deleted file mode 100644
index a2d61d9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrBinary.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.RandomAccessFile;
-
-import javax.jcr.Binary;
-import javax.jcr.RepositoryException;
-
-/**
- * <code>JcrBinary</code> implements the JCR <code>Binary</code> interface. This
- * is mostly a copy from org.apache.jackrabbit.value.BinaryImpl in Apache
- * Jackrabbit's jcr-commons module.
- */
-public class JcrBinary implements Binary {
-
-    /**
-     * empty array
-     */
-    private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
-
-    /**
-     * max size for keeping tmp data in memory
-     */
-    private static final int MAX_BUFFER_SIZE = 0x10000;
-
-    /**
-     * underlying tmp file
-     */
-    private final File tmpFile;
-
-    /**
-     * buffer for small-sized data
-     */
-    private byte[] buffer = EMPTY_BYTE_ARRAY;
-
-    public static final Binary EMPTY = new JcrBinary(EMPTY_BYTE_ARRAY);
-
-    /**
-     * Creates a new <code>JcrBinary</code> instance from an
-     * <code>InputStream</code>. The contents of the stream is spooled to a
-     * temporary file or to a byte buffer if its size is smaller than
-     * {@link #MAX_BUFFER_SIZE}. The input stream is closed by this
-     * implementation.
-     * 
-     * @param in
-     *            stream to be represented as a <code>JcrBinary</code> instance
-     * @throws IOException
-     *             if an error occurs while reading from the stream or writing
-     *             to the temporary file
-     */
-    public JcrBinary(InputStream in) throws IOException {
-        byte[] spoolBuffer = new byte[0x2000];
-        int read;
-        int len = 0;
-        OutputStream out = null;
-        File spoolFile = null;
-        try {
-            while ((read = in.read(spoolBuffer)) > 0) {
-                if (out != null) {
-                    // spool to temp file
-                    out.write(spoolBuffer, 0, read);
-                    len += read;
-                } else if (len + read > MAX_BUFFER_SIZE) {
-                    // threshold for keeping data in memory exceeded;
-                    // create temp file and spool buffer contents
-
-                    spoolFile = File.createTempFile("bin", null, null);
-                    out = new FileOutputStream(spoolFile);
-                    out.write(buffer, 0, len);
-                    out.write(spoolBuffer, 0, read);
-                    buffer = null;
-                    len += read;
-                } else {
-                    // reallocate new buffer and spool old buffer contents
-                    byte[] newBuffer = new byte[len + read];
-                    System.arraycopy(buffer, 0, newBuffer, 0, len);
-                    System.arraycopy(spoolBuffer, 0, newBuffer, len, read);
-                    buffer = newBuffer;
-                    len += read;
-                }
-            }
-        } finally {
-            in.close();
-            if (out != null) {
-                out.close();
-            }
-        }
-
-        // init fields
-        tmpFile = spoolFile;
-    }
-
-    /**
-     * Creates a new <code>JcrBinary</code> instance from a <code>byte[]</code>
-     * array.
-     * 
-     * @param buffer
-     *            byte array to be represented as a <code>JcrBinary</code>
-     *            instance
-     */
-    public JcrBinary(byte[] buffer) {
-        if (buffer == null) {
-            throw new IllegalArgumentException("buffer must be non-null");
-        }
-        this.buffer = buffer;
-        tmpFile = null;
-    }
-
-    public InputStream getStream() throws RepositoryException {
-        if (tmpFile != null) {
-            try {
-                // this instance is backed by a temp file
-                return new FileInputStream(tmpFile);
-            } catch (FileNotFoundException e) {
-                throw new RepositoryException("already disposed");
-            }
-        } else {
-            // this instance is backed by an in-memory buffer
-            return new ByteArrayInputStream(buffer);
-        }
-    }
-
-    public int read(byte[] b, long position) throws IOException, RepositoryException {
-        if (tmpFile != null) {
-            // this instance is backed by a temp file
-            RandomAccessFile raf = new RandomAccessFile(tmpFile, "r");
-            try {
-                raf.seek(position);
-                return raf.read(b);
-            } finally {
-                raf.close();
-            }
-        } else {
-            // this instance is backed by an in-memory buffer
-            int length = Math.min(b.length, buffer.length - (int) position);
-            if (length > 0) {
-                System.arraycopy(buffer, (int) position, b, 0, length);
-                return length;
-            } else {
-                return -1;
-            }
-        }
-    }
-
-    public long getSize() throws RepositoryException {
-        if (tmpFile != null) {
-            // this instance is backed by a temp file
-            return tmpFile.exists() ? tmpFile.length() : -1;
-        } else {
-            // this instance is backed by an in-memory buffer
-            return buffer.length;
-        }
-    }
-
-    public void dispose() {
-        if (tmpFile != null) {
-            // this instance is backed by a temp file
-            tmpFile.delete();
-        } else {
-            // this instance is backed by an in-memory buffer
-            buffer = EMPTY_BYTE_ARRAY;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrConverter.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrConverter.java
deleted file mode 100644
index f520548..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrConverter.java
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyDateTime;
-import org.apache.chemistry.opencmis.commons.data.PropertyDecimal;
-import org.apache.chemistry.opencmis.commons.data.PropertyHtml;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyInteger;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.data.PropertyUri;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-import org.apache.chemistry.opencmis.jcr.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Utility class providing methods for converting various entities from/to their
- * respective representation in JCR/CMIS.
- */
-public final class JcrConverter {
-
-    private static final Logger log = LoggerFactory.getLogger(JcrConverter.class);
-    private static final Pattern QUALIFIED_NAME = Pattern.compile("\\{([^}]*)\\}(.*)");
-    private static final Pattern PREFIXED_NAME = Pattern.compile("(([^:/]+):)?([^:]*)");
-
-    private JcrConverter() {
-    }
-
-    /**
-     * Escapes all illegal for JCR local name characters of a string. The
-     * encoding is loosely modeled after URI encoding, but only encodes the
-     * characters it absolutely needs to in order to make the resulting string a
-     * valid JCR name.
-     * <p/>
-     * QName EBNF:<br>
-     * 
-     * <pre>
-     * simplename ::= onecharsimplename | twocharsimplename | threeormorecharname
-     * onecharsimplename ::= (* Any Unicode character except: '.', '/', ':', '[', ']', '*', '|' or any whitespace character *)
-     * twocharsimplename ::= '.' onecharsimplename | onecharsimplename '.' | onecharsimplename onecharsimplename
-     * threeormorecharname ::= nonspace string nonspace
-     * string ::= char | string char
-     * char ::= nonspace | ' '
-     * nonspace ::= (* Any Unicode character except: '/', ':', '[', ']', '*', '|' or any whitespace character *)
-     * </pre>
-     * 
-     * @param cmisName
-     *            the name to escape
-     * @return the escaped name
-     */
-    private static String escapeForJcr(String cmisName) {
-        StringBuilder buffer = new StringBuilder(cmisName.length() * 16 + 32);
-        for (int i = 0; i < cmisName.length(); i++) {
-            char ch = cmisName.charAt(i);
-            if (ch == '%' || ch == '/' || ch == ':' || ch == '[' || ch == ']' || ch == '*' || ch == '|' || ch == '\t'
-                    || ch == '\r' || ch == '\n' || ch == '.' && cmisName.length() < 3 || ch == ' '
-                    && (i == 0 || i == cmisName.length() - 1)) {
-                buffer.append('%');
-                buffer.append(Character.toUpperCase(Character.forDigit(ch / 16, 16)));
-                buffer.append(Character.toUpperCase(Character.forDigit(ch % 16, 16)));
-            } else {
-                buffer.append(ch);
-            }
-        }
-        return buffer.toString();
-    }
-
-    /**
-     * See JSR-283, 3.2 Names A JCR name is an ordered pair of strings: (N, L)
-     * where N is a JCR namespace and L is a JCR local name.
-     * 
-     * @param cmisName
-     *            the name to escape
-     * @return the escaped name
-     */
-    public static String toJcrName(String cmisName) {
-        if (cmisName == null || cmisName.length() == 0) {
-            return null;
-        }
-        if (cmisName.charAt(0) == '{') {
-            Matcher matcher = QUALIFIED_NAME.matcher(cmisName);
-            if (matcher.matches()) {
-                String namespaceUri = matcher.group(1);
-                String localName = matcher.group(2);
-                StringBuilder builder = new StringBuilder(cmisName.length() * 16 + 32);
-                if (namespaceUri != null && namespaceUri.length() > 0) {
-                    // This must be valid URI
-                    try {
-                        namespaceUri = new URI(namespaceUri).toString();
-                        builder.append('{');
-                        builder.append(namespaceUri);
-                        builder.append('}');
-                    } catch (URISyntaxException e1) {
-                        // Skip URI
-                        log.debug(e1.getMessage(), e1);
-                    }
-                }
-                builder.append(escapeForJcr(localName));
-                return builder.toString();
-            }
-        } else {
-            Matcher matcher = PREFIXED_NAME.matcher(cmisName);
-            if (matcher.matches()) {
-                String prefix = matcher.group(2);
-                String localName = matcher.group(3);
-                StringBuilder builder = new StringBuilder(cmisName.length() * 16 + 32);
-                if (prefix != null && prefix.length() > 0) {
-                    builder.append(escapeForJcr(prefix));
-                    builder.append(':');
-                }
-                builder.append(escapeForJcr(localName));
-                return builder.toString();
-            }
-        }
-        return escapeForJcr(cmisName);
-    }
-
-    /**
-     * Convert a JCR <code>Property</code> to a CMIS <code>PropertyData</code>.
-     * 
-     * @param jcrProperty
-     * @return
-     * @throws RepositoryException
-     */
-    public static PropertyData<?> convert(Property jcrProperty) throws RepositoryException {
-        AbstractPropertyData<?> propertyData;
-
-        switch (jcrProperty.getType()) {
-        case PropertyType.BINARY:
-        case PropertyType.NAME:
-        case PropertyType.PATH:
-        case PropertyType.REFERENCE:
-        case PropertyType.WEAKREFERENCE:
-        case PropertyType.STRING:
-            propertyData = jcrProperty.isMultiple() ? new PropertyStringImpl(jcrProperty.getName(),
-                    toStrings(jcrProperty.getValues())) : new PropertyStringImpl(jcrProperty.getName(),
-                    jcrProperty.getString());
-            break;
-
-        case PropertyType.LONG:
-            propertyData = jcrProperty.isMultiple() ? new PropertyIntegerImpl(jcrProperty.getName(),
-                    toInts(jcrProperty.getValues())) : new PropertyIntegerImpl(jcrProperty.getName(),
-                    BigInteger.valueOf(jcrProperty.getLong()));
-            break;
-
-        case PropertyType.DECIMAL:
-            propertyData = jcrProperty.isMultiple() ? new PropertyDecimalImpl(jcrProperty.getName(),
-                    toDecs(jcrProperty.getValues())) : new PropertyDecimalImpl(jcrProperty.getName(),
-                    jcrProperty.getDecimal());
-            break;
-
-        case PropertyType.DOUBLE:
-            propertyData = jcrProperty.isMultiple() ? new PropertyDecimalImpl(jcrProperty.getName(),
-                    doublesToDecs(jcrProperty.getValues())) : new PropertyDecimalImpl(jcrProperty.getName(),
-                    BigDecimal.valueOf(jcrProperty.getDouble()));
-            break;
-
-        case PropertyType.DATE:
-            propertyData = jcrProperty.isMultiple() ? new PropertyDateTimeImpl(jcrProperty.getName(),
-                    toDates(jcrProperty.getValues())) : new PropertyDateTimeImpl(jcrProperty.getName(),
-                    Util.toCalendar(jcrProperty.getDate()));
-            break;
-
-        case PropertyType.BOOLEAN:
-            propertyData = jcrProperty.isMultiple() ? new PropertyBooleanImpl(jcrProperty.getName(),
-                    toBools(jcrProperty.getValues())) : new PropertyBooleanImpl(jcrProperty.getName(),
-                    jcrProperty.getBoolean());
-            break;
-
-        case PropertyType.URI:
-            propertyData = jcrProperty.isMultiple() ? new PropertyUriImpl(jcrProperty.getName(),
-                    toStrings(jcrProperty.getValues())) : new PropertyUriImpl(jcrProperty.getName(),
-                    jcrProperty.getString());
-            break;
-
-        default:
-            throw new CmisInvalidArgumentException("Invalid property type: " + jcrProperty.getType());
-        }
-
-        propertyData.setDisplayName(jcrProperty.getName());
-        propertyData.setLocalName(jcrProperty.getName());
-        propertyData.setQueryName(jcrProperty.getName());
-
-        return propertyData;
-    }
-
-    /**
-     * Set a property on a JCR node.
-     * 
-     * @param node
-     *            the node to set the property
-     * @param propertyData
-     *            the property to set
-     * @throws RepositoryException
-     */
-    public static void setProperty(Node node, PropertyData<?> propertyData) throws RepositoryException {
-        Value[] values;
-        int propertyType;
-
-        if (propertyData instanceof PropertyBoolean) {
-            values = toValue((PropertyBoolean) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.BOOLEAN;
-        } else if (propertyData instanceof PropertyDateTime) {
-            values = toValue((PropertyDateTime) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.DATE;
-        } else if (propertyData instanceof PropertyDecimal) {
-            values = toValue((PropertyDecimal) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.DECIMAL;
-        } else if (propertyData instanceof PropertyHtml) {
-            values = toValue((PropertyHtml) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.STRING;
-        } else if (propertyData instanceof PropertyId) {
-            values = toValue((PropertyId) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.STRING;
-        } else if (propertyData instanceof PropertyInteger) {
-            values = toValue((PropertyInteger) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.DECIMAL;
-        } else if (propertyData instanceof PropertyString) {
-            values = toValue((PropertyString) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.STRING;
-        } else if (propertyData instanceof PropertyUri) {
-            values = toValue((PropertyUri) propertyData, node.getSession().getValueFactory());
-            propertyType = PropertyType.URI;
-        } else {
-            throw new CmisInvalidArgumentException("Invalid property type: " + propertyData);
-        }
-
-        String id = propertyData.getId();
-        String name;
-        if (PropertyIds.NAME.equals(id)) {
-            node.addMixin(NodeType.MIX_TITLE);
-            name = Property.JCR_TITLE;
-        } else if (PropertyIds.CONTENT_STREAM_MIME_TYPE.equals(id)) {
-            name = Property.JCR_MIMETYPE;
-        } else {
-            name = toJcrName(propertyData.getId());
-        }
-
-        if (values.length == 1) {
-            node.setProperty(name, values[0]);
-        } else {
-            node.setProperty(name, values, propertyType);
-        }
-    }
-
-    /**
-     * Remove a property from a JCR node
-     * 
-     * @param node
-     *            the node from which to remove the property
-     * @param propertyData
-     *            the property to remove
-     * @throws RepositoryException
-     */
-    public static void removeProperty(Node node, PropertyData<?> propertyData) throws RepositoryException {
-        String id = propertyData.getId();
-        String name = PropertyIds.NAME.equals(id) ? Property.JCR_TITLE : toJcrName(propertyData.getId());
-
-        if (node.hasProperty(name)) {
-            node.getProperty(name).remove();
-        }
-    }
-
-    // ------------------------------------------< private >---
-
-    /**
-     * Convert an array of <code>Value</code>s to a list of <code>String</code>
-     * s.
-     */
-    private static List<String> toStrings(Value[] values) throws RepositoryException {
-        ArrayList<String> strings = new ArrayList<String>(values.length);
-
-        for (Value v : values) {
-            strings.add(v.getString());
-        }
-
-        return strings;
-    }
-
-    /**
-     * Convert an array of <code>Value</code>s to a list of
-     * <code>BigInteger</code>s.
-     */
-    private static List<BigInteger> toInts(Value[] values) throws RepositoryException {
-        ArrayList<BigInteger> ints = new ArrayList<BigInteger>(values.length);
-
-        for (Value v : values) {
-            ints.add(BigInteger.valueOf(v.getLong()));
-        }
-
-        return ints;
-    }
-
-    /**
-     * Convert an array of <code>Value</code>s to a list of
-     * <code>BigDecimal</code>s.
-     */
-    private static List<BigDecimal> toDecs(Value[] values) throws RepositoryException {
-        ArrayList<BigDecimal> decs = new ArrayList<BigDecimal>(values.length);
-
-        for (Value v : values) {
-            decs.add(v.getDecimal());
-        }
-
-        return decs;
-    }
-
-    /**
-     * Convert an array of double <code>Value</code>s to a list of
-     * <code>BigInteger</code>s.
-     */
-    private static List<BigDecimal> doublesToDecs(Value[] values) throws RepositoryException {
-        ArrayList<BigDecimal> decs = new ArrayList<BigDecimal>(values.length);
-
-        for (Value v : values) {
-            decs.add(BigDecimal.valueOf(v.getDouble()));
-        }
-
-        return decs;
-    }
-
-    /**
-     * Convert an array of <code>Value</code>s to a list of
-     * <code>Booleans</code>s.
-     */
-    private static List<Boolean> toBools(Value[] values) throws RepositoryException {
-        ArrayList<Boolean> bools = new ArrayList<Boolean>(values.length);
-
-        for (Value v : values) {
-            bools.add(v.getBoolean());
-        }
-
-        return bools;
-    }
-
-    /**
-     * Convert an array of <code>Value</code>s to a list of
-     * <code>GregorianCalendar</code>s.
-     */
-    private static List<GregorianCalendar> toDates(Value[] values) throws RepositoryException {
-        ArrayList<GregorianCalendar> dates = new ArrayList<GregorianCalendar>(values.length);
-
-        for (Value v : values) {
-            dates.add(Util.toCalendar(v.getDate()));
-        }
-
-        return dates;
-    }
-
-    /**
-     * Convert a <code>PropertyBoolean</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyBoolean propertyData, ValueFactory valueFactory) {
-        List<Boolean> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (Boolean v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyDateTime</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyDateTime propertyData, ValueFactory valueFactory) {
-        List<GregorianCalendar> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (GregorianCalendar v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyDecimal</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyDecimal propertyData, ValueFactory valueFactory) {
-        List<BigDecimal> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (BigDecimal v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyHtml</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyHtml propertyData, ValueFactory valueFactory) {
-        List<String> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (String v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyId</code> to an array of JCR <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyId propertyData, ValueFactory valueFactory) {
-        List<String> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (String v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyInteger</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyInteger propertyData, ValueFactory valueFactory) {
-        List<BigInteger> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (BigInteger v : values) {
-            result[k++] = valueFactory.createValue(new BigDecimal(v));
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyString</code> to an array of JCR
-     * <code>Values</code>.
-     */
-    private static Value[] toValue(PropertyString propertyData, ValueFactory valueFactory) {
-        List<String> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (String v : values) {
-            result[k++] = valueFactory.createValue(v);
-        }
-
-        return result;
-    }
-
-    /**
-     * Convert a <code>PropertyUri</code> to an array of JCR <code>Values</code>
-     * .
-     */
-    private static Value[] toValue(PropertyUri propertyData, ValueFactory valueFactory) throws ValueFormatException {
-        List<String> values = propertyData.getValues();
-        if (values == null) {
-            return new Value[0];
-        }
-
-        Value[] result = new Value[values.size()];
-        int k = 0;
-        for (String v : values) {
-            result[k++] = valueFactory.createValue(v, PropertyType.URI);
-        }
-
-        return result;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrDocument.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrDocument.java
deleted file mode 100644
index ceb7546..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrDocument.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.Set;
-
-import javax.jcr.Binary;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Instances of this class represent a cmis:document backed by an underlying JCR
- * <code>Node</code>.
- */
-public abstract class JcrDocument extends JcrNode {
-    private static final Logger LOG = LoggerFactory.getLogger(JcrDocument.class);
-
-    public static final String MIME_UNKNOWN = "application/octet-stream";
-
-    protected JcrDocument(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        super(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    /**
-     * @return <code>true</code> iff the document is checked out
-     */
-    public boolean isDocumentCheckedOut() {
-        try {
-            return getNode().isCheckedOut();
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.10 getContentStream
-     * 
-     * @throws CmisObjectNotFoundException
-     * @throws CmisRuntimeException
-     */
-    public ContentStream getContentStream() {
-        try {
-            Node contentNode = getContextNode();
-            Property data = contentNode.getProperty(Property.JCR_DATA);
-
-            // compile data
-            ContentStreamImpl result = new ContentStreamImpl();
-            result.setFileName(getNodeName());
-            result.setLength(BigInteger.valueOf(data.getLength()));
-            result.setMimeType(getPropertyOrElse(contentNode, Property.JCR_MIMETYPE, MIME_UNKNOWN));
-            result.setStream(new BufferedInputStream(data.getBinary().getStream())); // stream
-                                                                                     // closed
-                                                                                     // by
-                                                                                     // consumer
-
-            return result;
-        } catch (PathNotFoundException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.16 setContentStream
-     * 
-     * @throws CmisStorageException
-     */
-    public JcrNode setContentStream(ContentStream contentStream, boolean overwriteFlag) {
-        try {
-            // get content node. For version series this is *not* the same as
-            // the
-            // context node. See CMIS-438.
-            Node contentNode = getNode().getNode(Node.JCR_CONTENT);
-            Property data = contentNode.getProperty(Property.JCR_DATA);
-
-            // check overwrite
-            if (!overwriteFlag && data.getLength() != 0) {
-                throw new CmisContentAlreadyExistsException("Content already exists!");
-            }
-
-            JcrVersionBase jcrVersion = isVersionable() ? asVersion() : null;
-
-            boolean autoCheckout = jcrVersion != null && !jcrVersion.isCheckedOut();
-            if (autoCheckout) {
-                jcrVersion.checkout();
-            }
-
-            // write content, if available
-            Binary binary = contentStream == null || contentStream.getStream() == null ? JcrBinary.EMPTY
-                    : new JcrBinary(new BufferedInputStream(contentStream.getStream()));
-            try {
-                contentNode.setProperty(Property.JCR_DATA, binary);
-                if (contentStream != null && contentStream.getMimeType() != null) {
-                    contentNode.setProperty(Property.JCR_MIMETYPE, contentStream.getMimeType());
-                }
-            } finally {
-                binary.dispose();
-            }
-
-            contentNode.getSession().save();
-
-            if (autoCheckout) {
-                // auto versioning -> return new version created by checkin
-                return jcrVersion.checkin(null, null, "auto checkout");
-            } else if (jcrVersion != null) {
-                // the node is checked out -> return pwc.
-                return jcrVersion.getPwc();
-            } else {
-                // non versionable -> return this
-                return this;
-            }
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        } catch (IOException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-
-    }
-
-    // ------------------------------------------< protected >---
-
-    /**
-     * @return the value of the <code>cmis:isLatestVersion</code> property
-     * @throws RepositoryException
-     */
-    protected abstract boolean isLatestVersion() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:isMajorVersion</code> property
-     * @throws RepositoryException
-     */
-    protected abstract boolean isMajorVersion() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:isLatestMajorVersion</code> property
-     * @throws RepositoryException
-     */
-    protected abstract boolean isLatestMajorVersion() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:versionLabel</code> property
-     * @throws RepositoryException
-     */
-    protected abstract String getVersionLabel() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:isVersionSeriesCheckedOut</code>
-     *         property
-     * @throws RepositoryException
-     */
-    protected abstract boolean isCheckedOut() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:versionSeriesCheckedOutId</code>
-     *         property
-     * @throws RepositoryException
-     */
-    protected abstract String getCheckedOutId() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:versionSeriesCheckedOutBy</code>
-     *         property
-     * @throws RepositoryException
-     */
-    protected abstract String getCheckedOutBy() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:checkinComment</code> property
-     * @throws RepositoryException
-     */
-    protected abstract String getCheckInComment() throws RepositoryException;
-
-    protected boolean getIsImmutable() {
-        return false;
-    }
-
-    @Override
-    protected void compileProperties(PropertiesImpl properties, Set<String> filter, ObjectInfoImpl objectInfo)
-            throws RepositoryException {
-
-        super.compileProperties(properties, filter, objectInfo);
-
-        objectInfo.setHasContent(true);
-        objectInfo.setHasParent(true);
-        objectInfo.setSupportsDescendants(false);
-        objectInfo.setSupportsFolderTree(false);
-
-        String typeId = getTypeIdInternal();
-        Node contextNode = getContextNode();
-
-        // mutability
-        addPropertyBoolean(properties, typeId, filter, PropertyIds.IS_IMMUTABLE, getIsImmutable());
-
-        // content stream
-        long length = getPropertyLength(contextNode, Property.JCR_DATA);
-        addPropertyInteger(properties, typeId, filter, PropertyIds.CONTENT_STREAM_LENGTH, length);
-
-        // mime type
-        String mimeType = getPropertyOrElse(contextNode, Property.JCR_MIMETYPE, MIME_UNKNOWN);
-        addPropertyString(properties, typeId, filter, PropertyIds.CONTENT_STREAM_MIME_TYPE, mimeType);
-        objectInfo.setContentType(mimeType);
-
-        // file name
-        String fileName = getNodeName();
-        addPropertyString(properties, typeId, filter, PropertyIds.CONTENT_STREAM_FILE_NAME, fileName);
-        objectInfo.setFileName(fileName);
-
-        addPropertyId(properties, typeId, filter, PropertyIds.CONTENT_STREAM_ID, getObjectId() + "/stream");
-
-        // versioning
-        addPropertyBoolean(properties, typeId, filter, PropertyIds.IS_LATEST_VERSION, isLatestVersion());
-        addPropertyBoolean(properties, typeId, filter, PropertyIds.IS_MAJOR_VERSION, isMajorVersion());
-        addPropertyBoolean(properties, typeId, filter, PropertyIds.IS_LATEST_MAJOR_VERSION, isLatestMajorVersion());
-        addPropertyString(properties, typeId, filter, PropertyIds.VERSION_LABEL, getVersionLabel());
-        addPropertyId(properties, typeId, filter, PropertyIds.VERSION_SERIES_ID, getVersionSeriesId());
-        addPropertyString(properties, typeId, filter, PropertyIds.CHECKIN_COMMENT, getCheckInComment());
-
-        boolean isCheckedOut = isCheckedOut();
-        addPropertyBoolean(properties, typeId, filter, PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, isCheckedOut);
-
-        if (isCheckedOut) {
-            addPropertyId(properties, typeId, filter, PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, getCheckedOutId());
-            addPropertyString(properties, typeId, filter, PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, getCheckedOutBy());
-        }
-    }
-
-    @Override
-    protected Set<Action> compileAllowableActions(Set<Action> aas) {
-        Set<Action> result = super.compileAllowableActions(aas);
-        setAction(result, Action.CAN_GET_CONTENT_STREAM, true);
-        setAction(result, Action.CAN_SET_CONTENT_STREAM, true);
-        setAction(result, Action.CAN_DELETE_CONTENT_STREAM, true);
-        setAction(result, Action.CAN_GET_RENDITIONS, false);
-        return result;
-    }
-
-    @Override
-    protected BaseTypeId getBaseTypeId() {
-        return BaseTypeId.CMIS_DOCUMENT;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrFolder.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrFolder.java
deleted file mode 100644
index 9618765..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrFolder.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.QueryResult;
-import javax.jcr.version.Version;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FailedToDeleteDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.jcr.util.FilterIterator;
-import org.apache.chemistry.opencmis.jcr.util.Predicate;
-import org.apache.chemistry.opencmis.jcr.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Instances of this class represent a cmis:folder backed by an underlying JCR
- * <code>Node</code>.
- */
-public class JcrFolder extends JcrNode {
-    private static final Logger log = LoggerFactory.getLogger(JcrFolder.class);
-
-    public JcrFolder(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        super(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.1 getChildren
-     * 
-     * @return Iterator of <code>JcrNode</code>. Children which are created in
-     *         the checked out state are left out from the iterator.
-     * @throws CmisRuntimeException
-     */
-    public Iterator<JcrNode> getNodes() {
-        try {
-            final FilterIterator<Node> nodes = new FilterIterator<Node>(getNode().getNodes(),
-                    typeHandlerManager.getNodePredicate());
-
-            Iterator<JcrNode> jcrNodes = new Iterator<JcrNode>() {
-                public boolean hasNext() {
-                    return nodes.hasNext();
-                }
-
-                public JcrNode next() {
-                    return create(nodes.next());
-                }
-
-                public void remove() {
-                    throw new UnsupportedOperationException();
-                }
-            };
-
-            // Filter out nodes which are checked out and do not have a version
-            // history (i.e. only a root version)
-            // These are created with VersioningState checkedout and not yet
-            // checked in.
-            return new FilterIterator<JcrNode>(jcrNodes, new Predicate<JcrNode>() {
-                public boolean evaluate(JcrNode node) {
-                    try {
-                        if (node.isVersionable()) {
-                            Version baseVersion = getBaseVersion(node.getNode());
-                            return baseVersion.getPredecessors().length > 0;
-                        } else {
-                            return true;
-                        }
-                    } catch (RepositoryException e) {
-                        log.debug(e.getMessage(), e);
-                        throw new CmisRuntimeException(e.getMessage(), e);
-                    }
-                }
-            });
-
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.2 createDocumentFromSource
-     * 
-     * @throws CmisStorageException
-     */
-    public JcrNode addNodeFromSource(JcrDocument source, Properties properties) {
-        try {
-            String destPath = PathManager.createCmisPath(getNode().getPath(), source.getName());
-            Session session = getNode().getSession();
-
-            session.getWorkspace().copy(source.getNode().getPath(), destPath);
-            JcrNode jcrNode = create(session.getNode(destPath));
-
-            // overlay new properties
-            if (properties != null && properties.getProperties() != null) {
-                updateProperties(jcrNode.getNode(), jcrNode.getTypeId(), properties);
-            }
-
-            session.save();
-            return jcrNode;
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.14 deleteObject
-     * 
-     * @throws CmisRuntimeException
-     */
-    @Override
-    public void delete(boolean allVersions, boolean isPwc) {
-        try {
-            if (getNode().hasNodes()) {
-                throw new CmisConstraintException("Folder is not empty!");
-            } else {
-                super.delete(allVersions, isPwc);
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.15 deleteTree
-     */
-    public FailedToDeleteDataImpl deleteTree() {
-        FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-
-        String id = getId();
-        try {
-            Node node = getNode();
-            if (hasCheckOuts(node)) {
-                result.setIds(Collections.<String> singletonList(id));
-            } else {
-                Session session = node.getSession();
-                node.remove();
-                session.save();
-                result.setIds(Collections.<String> emptyList());
-            }
-        } catch (RepositoryException e) {
-            result.setIds(Collections.singletonList(id));
-        }
-
-        return result;
-    }
-
-    // ------------------------------------------< protected >---
-
-    @Override
-    protected void compileProperties(PropertiesImpl properties, Set<String> filter, ObjectInfoImpl objectInfo)
-            throws RepositoryException {
-
-        super.compileProperties(properties, filter, objectInfo);
-
-        objectInfo.setHasContent(false);
-        objectInfo.setSupportsDescendants(true);
-        objectInfo.setSupportsFolderTree(true);
-
-        String typeId = getTypeIdInternal();
-
-        addPropertyString(properties, typeId, filter, PropertyIds.PATH, pathManager.getPath(getNode()));
-
-        // folder properties
-        if (pathManager.isRoot(getNode())) {
-            objectInfo.setHasParent(false);
-            addPropertyList(properties, typeId, filter, PropertyIds.PARENT_ID, Collections.<String> emptyList());
-        } else {
-            objectInfo.setHasParent(true);
-            addPropertyId(properties, typeId, filter, PropertyIds.PARENT_ID, getParent().getObjectId());
-        }
-
-        addPropertyAllowedChildObjectTypeIds(properties, filter, typeId);
-    }
-
-    @Override
-    protected Set<Action> compileAllowableActions(Set<Action> aas) {
-        Set<Action> result = super.compileAllowableActions(aas);
-        setAction(result, Action.CAN_GET_DESCENDANTS, true);
-        setAction(result, Action.CAN_GET_CHILDREN, true);
-        setAction(result, Action.CAN_GET_FOLDER_PARENT, !pathManager.isRoot(getNode()));
-        setAction(result, Action.CAN_GET_OBJECT_PARENTS, !pathManager.isRoot(getNode()));
-        setAction(result, Action.CAN_GET_FOLDER_TREE, true);
-        setAction(result, Action.CAN_CREATE_DOCUMENT, true);
-        setAction(result, Action.CAN_CREATE_FOLDER, true);
-        setAction(result, Action.CAN_DELETE_TREE, true);
-        return result;
-    }
-
-    @Override
-    protected Node getContextNode() {
-        return getNode();
-    }
-
-    @Override
-    protected String getObjectId() throws RepositoryException {
-        return isRoot() ? PathManager.CMIS_ROOT_ID : super.getObjectId();
-    }
-
-    @Override
-    protected BaseTypeId getBaseTypeId() {
-        return BaseTypeId.CMIS_FOLDER;
-    }
-
-    @Override
-    protected String getTypeIdInternal() {
-        return JcrTypeManager.FOLDER_TYPE_ID;
-    }
-
-    public static void setProperties(Node node, TypeDefinition type, Properties properties) {
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisConstraintException("No properties!");
-        }
-
-        Set<String> addedProps = new HashSet<String>();
-
-        try {
-            // check if all required properties are there
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(prop.getId());
-
-                // do we know that property?
-                if (propDef == null) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' is unknown!");
-                }
-
-                // skip type id
-                if (propDef.getId().equals(PropertyIds.OBJECT_TYPE_ID)) {
-                    log.warn("Cannot set " + PropertyIds.OBJECT_TYPE_ID + ". Ignoring");
-                    addedProps.add(prop.getId());
-                    continue;
-                }
-
-                // skip content stream file name
-                if (propDef.getId().equals(PropertyIds.CONTENT_STREAM_FILE_NAME)) {
-                    log.warn("Cannot set " + PropertyIds.CONTENT_STREAM_FILE_NAME + ". Ignoring");
-                    addedProps.add(prop.getId());
-                    continue;
-                }
-
-                // can it be set?
-                if (propDef.getUpdatability() == Updatability.READONLY) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' is readonly!");
-                }
-
-                // empty properties are invalid
-                if (PropertyHelper.isPropertyEmpty(prop)) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' must not be empty!");
-                }
-
-                // add it
-                JcrConverter.setProperty(node, prop);
-                addedProps.add(prop.getId());
-            }
-
-            // check if required properties are missing and try to add default
-            // values if defined
-            for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-                if (!addedProps.contains(propDef.getId()) && propDef.getUpdatability() != Updatability.READONLY) {
-                    PropertyData<?> prop = PropertyHelper.getDefaultValue(propDef);
-                    if (prop == null && propDef.isRequired()) {
-                        throw new CmisConstraintException("Property '" + propDef.getId() + "' is required!");
-                    } else if (prop != null) {
-                        JcrConverter.setProperty(node, prop);
-                    }
-                }
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-    }
-
-    // ------------------------------------------< private >---
-
-    private static boolean hasCheckOuts(Node node) throws RepositoryException {
-        // Build xpath query of the form
-        // '//path/to/node//*[jcr:isCheckedOut='true']'
-        String xPath = "/*[jcr:isCheckedOut='true']";
-        String path = node.getPath();
-        if ("/".equals(path)) {
-            path = "";
-        }
-        xPath = '/' + Util.escape(path) + xPath;
-
-        // Execute query
-        QueryManager queryManager = node.getSession().getWorkspace().getQueryManager();
-        Query query = queryManager.createQuery(xPath, Query.XPATH);
-        QueryResult queryResult = query.execute();
-        return queryResult.getNodes().hasNext();
-    }
-
-    /**
-     * Add property "cmis:allowedChildObjectTypeIds" to the CMIS object. See
-     * CMIS specification v.1.0, 2.1.5.4.2 Property Definitions.
-     * 
-     * @param properties
-     *            - the properties of the CMIS object represented by this
-     *            instance.
-     * @param filter
-     * @param typeId
-     *            - type ID of the instance.
-     */
-    private void addPropertyAllowedChildObjectTypeIds(PropertiesImpl properties, Set<String> filter, String typeId) {
-        Iterator<TypeDefinitionContainer> typeDefIterator = super.typeManager.getTypeDefinitionList().iterator();
-        List<String> typeIds = new ArrayList<String>(super.typeManager.getTypeDefinitionList().size());
-        while (typeDefIterator.hasNext()) {
-            TypeDefinitionContainer definition = typeDefIterator.next();
-            typeIds.add(definition.getTypeDefinition().getId());
-        }
-        addPropertyList(properties, typeId, filter, PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, typeIds);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrNode.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrNode.java
deleted file mode 100644
index 3a27261..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrNode.java
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.version.VersionManager;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AllowableActionsImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.jcr.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Common base class for all JCR <code>Node</code>s to be represented as CMIS
- * objects. Instances of this class are responsible for mapping from CMIS to JCR
- * and vice versa.
- */
-public abstract class JcrNode {
-
-    private static final Logger log = LoggerFactory.getLogger(JcrNode.class);
-
-    /**
-     * Default value for last cmis:createdBy and cmis:modifiedBy
-     */
-    public static final String USER_UNKNOWN = "unknown";
-
-    /**
-     * Default value for cmis:createdBy and cmis:lastModifiedDate (Thu Jan 01
-     * 01:00:00 CET 1970)
-     */
-    public static final GregorianCalendar DATE_UNKNOWN;
-
-    static {
-        DATE_UNKNOWN = new GregorianCalendar();
-        DATE_UNKNOWN.setTimeInMillis(0);
-    }
-
-    private final Node node;
-    protected final JcrTypeManager typeManager;
-    protected final PathManager pathManager;
-    protected final JcrTypeHandlerManager typeHandlerManager;
-
-    /**
-     * Create a new instance wrapping a JCR <code>node</code>.
-     * 
-     * @param node
-     *            the JCR <code>node</code> to represent
-     * @param typeManager
-     * @param pathManager
-     * @param typeHandlerManager
-     */
-    protected JcrNode(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        this.node = node;
-        this.typeManager = typeManager;
-        this.pathManager = pathManager;
-        this.typeHandlerManager = typeHandlerManager;
-    }
-
-    /**
-     * @return the JCR <code>node</code> represented by this instance
-     */
-    public Node getNode() {
-        return node;
-    }
-
-    /**
-     * @return the name of the CMIS object represented by this instance
-     * @throws CmisRuntimeException
-     */
-    public String getName() {
-        try {
-            return getNodeName();
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * @return the id of the CMIS object represented by this instance
-     * @throws CmisRuntimeException
-     */
-    public String getId() {
-        try {
-            return getObjectId();
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * @return the typeId of the CMIS object represented by this instance
-     */
-    public String getTypeId() {
-        return getTypeIdInternal();
-    }
-
-    /**
-     * @return <code>true</code> iff this instance represent the root of the
-     *         CMIS folder hierarchy.
-     */
-    public boolean isRoot() {
-        return pathManager.isRoot(node);
-    }
-
-    /**
-     * @return <code>true</code> iff this instance represents a cmis:document
-     *         type
-     */
-    public boolean isDocument() {
-        return BaseTypeId.CMIS_DOCUMENT == getBaseTypeId();
-    }
-
-    /**
-     * @return <code>true</code> iff this instance represents a cmis:folder type
-     */
-    public boolean isFolder() {
-        return BaseTypeId.CMIS_FOLDER == getBaseTypeId();
-    }
-
-    /**
-     * @return <code>true</code> iff this instance represents a versionable CMIS
-     *         object
-     */
-    public boolean isVersionable() {
-        TypeDefinition typeDef = typeManager.getType(getTypeIdInternal());
-        return typeDef instanceof DocumentTypeDefinition ? ((DocumentTypeDefinition) typeDef).isVersionable() : false;
-    }
-
-    /**
-     * @return this instance as a <code>JcrDocument</code>
-     * @throws CmisConstraintException
-     *             if <code>this.isDocument() == false</code>
-     */
-    public JcrDocument asDocument() {
-        if (isDocument()) {
-            return (JcrDocument) this;
-        } else {
-            throw new CmisConstraintException("Not a document: " + this);
-        }
-    }
-
-    /**
-     * @return this instance as a <code>JcrFolder</code>
-     * @throws CmisConstraintException
-     *             if <code>this.isFolder() == false</code>
-     */
-    public JcrFolder asFolder() {
-        if (isFolder()) {
-            return (JcrFolder) this;
-        } else {
-            throw new CmisObjectNotFoundException("Not a folder: " + this);
-        }
-    }
-
-    /**
-     * @return this instance as a <code>JcrVersionBase</code>
-     * @throws CmisConstraintException
-     *             if <code>this.isVersionable() == false</code>
-     */
-    public JcrVersionBase asVersion() {
-        if (isVersionable()) {
-            return (JcrVersionBase) this;
-        } else {
-            throw new CmisObjectNotFoundException("Not a version: " + this);
-        }
-    }
-
-    /**
-     * Factory method creating a new <code>JcrNode</code> from a node at a given
-     * JCR path.
-     * 
-     * @param path
-     *            JCR path of the node
-     * @return A new instance representing the JCR node at <code>path</code>
-     * @throws CmisObjectNotFoundException
-     *             if <code>path</code> does not identify a JCR node
-     * @throws CmisRuntimeException
-     */
-    public JcrNode getNode(String path) {
-        try {
-            return create(node.getNode(path));
-        } catch (PathNotFoundException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Compile the <code>ObjectData</code> for this node
-     */
-    public ObjectData compileObjectType(Set<String> filter, Boolean includeAllowableActions,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        try {
-            ObjectDataImpl result = new ObjectDataImpl();
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-
-            PropertiesImpl properties = new PropertiesImpl();
-            filter = filter == null ? null : new HashSet<String>(filter);
-            compileProperties(properties, filter, objectInfo);
-            result.setProperties(properties);
-            if (filter != null && !filter.isEmpty()) {
-                log.debug("Unknown filter properties: " + filter.toString());
-            }
-
-            if (Boolean.TRUE.equals(includeAllowableActions)) {
-                result.setAllowableActions(getAllowableActions());
-            }
-
-            if (requiresObjectInfo) {
-                objectInfo.setObject(result);
-                objectInfos.addObjectInfo(objectInfo);
-            }
-
-            return result;
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.6 getAllowableActions
-     */
-    public AllowableActions getAllowableActions() {
-        AllowableActionsImpl aas = new AllowableActionsImpl();
-        aas.setAllowableActions(compileAllowableActions(new HashSet<Action>()));
-        return aas;
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.5 getObjectParents
-     * 
-     * @return parent of this object
-     * @throws CmisObjectNotFoundException
-     *             if this is the root folder
-     * @throws CmisRuntimeException
-     */
-    public JcrFolder getParent() {
-        try {
-            return create(node.getParent()).asFolder();
-        } catch (ItemNotFoundException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.12 updateProperties
-     * 
-     * @throws CmisStorageException
-     */
-    public JcrNode updateProperties(Properties properties) {
-        // get and check the new name
-        String newName = JcrConverter.toJcrName(PropertyHelper.getStringProperty(properties, PropertyIds.NAME));
-        boolean rename = newName != null && !getName().equals(newName);
-        if (rename && isRoot()) {
-            throw new CmisUpdateConflictException("Cannot rename root node");
-        }
-        try {
-            // rename file or folder if necessary
-            Session session = getNode().getSession();
-            Node newNode;
-            if (rename) {
-                String destPath = PathManager.createCmisPath(node.getParent().getPath(), newName);
-                session.move(node.getPath(), destPath);
-                newNode = session.getNode(destPath);
-            } else {
-                newNode = node;
-            }
-
-            // Are there properties to update?
-            PropertyUpdater propertyUpdater = PropertyUpdater.create(typeManager, getTypeId(), properties);
-
-            JcrVersionBase jcrVersion = isVersionable() ? asVersion() : null;
-
-            // Update properties. Checkout if required
-            boolean autoCheckout = false;
-            if (!propertyUpdater.isEmpty()) {
-                autoCheckout = jcrVersion != null && !jcrVersion.isCheckedOut();
-                if (autoCheckout) {
-                    jcrVersion.checkout();
-                }
-
-                // update the properties
-                propertyUpdater.apply(node);
-            }
-
-            session.save();
-
-            if (autoCheckout) {
-                // auto versioning -> return new version created by checkin
-                return jcrVersion.checkin(null, null, "auto checkout");
-            } else if (jcrVersion != null && jcrVersion.isCheckedOut()) {
-                // the node is checked out -> return pwc.
-                JcrVersionBase jcrNewVersion = create(newNode).asVersion();
-                return jcrNewVersion.getPwc();
-            } else {
-                // non versionable or not a new node -> return this
-                return create(newNode);
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.14 deleteObject
-     * 
-     * @throws CmisRuntimeException
-     */
-    public void delete(boolean allVersions, boolean isPwc) {
-        try {
-            Session session = getNode().getSession();
-            getNode().remove();
-            session.save();
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.13 moveObject
-     * 
-     * @throws CmisStorageException
-     */
-    public JcrNode move(JcrFolder parent) {
-        try {
-            // move it if target location is not same as source location
-            String destPath = PathManager.createCmisPath(parent.getNode().getPath(), node.getName());
-            String srcPath = node.getPath();
-            Node newNode;
-            if (srcPath.equals(destPath)) {
-                newNode = node;
-            } else {
-                Session session = getNode().getSession();
-                session.move(srcPath, destPath);
-                newNode = session.getNode(destPath);
-                session.save();
-            }
-
-            return create(newNode);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public String toString() {
-        try {
-            return node.getPath();
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            return e.getMessage();
-        }
-    }
-
-    // ------------------------------------------< protected >---
-
-    /**
-     * Retrieve the context node of the CMIS object represented by this
-     * instance. The context node is the node which is used to derive the common
-     * properties from (creation date, modification date, ...)
-     * 
-     * @return the context node
-     * @throws RepositoryException
-     */
-    protected abstract Node getContextNode() throws RepositoryException;
-
-    /**
-     * @return the value of the <code>cmis:baseTypeId</code> property
-     */
-    protected abstract BaseTypeId getBaseTypeId();
-
-    /**
-     * @return the value of the <code>cmis:objectTypeId</code> property
-     */
-    protected abstract String getTypeIdInternal();
-
-    /**
-     * Compile the properties of the CMIS object represented by this instance.
-     * See CMIS 1.0 section 2.2.4.7 getObject
-     * 
-     * @param properties
-     *            compilation of properties
-     * @param filter
-     * @param objectInfo
-     * @throws RepositoryException
-     */
-    protected void compileProperties(PropertiesImpl properties, Set<String> filter, ObjectInfoImpl objectInfo)
-            throws RepositoryException {
-
-        String typeId = getTypeIdInternal();
-        BaseTypeId baseTypeId = getBaseTypeId();
-
-        objectInfo.setBaseType(baseTypeId);
-        objectInfo.setTypeId(typeId);
-        objectInfo.setHasAcl(false);
-        objectInfo.setVersionSeriesId(getVersionSeriesId());
-        objectInfo.setRelationshipSourceIds(null);
-        objectInfo.setRelationshipTargetIds(null);
-        objectInfo.setRenditionInfos(null);
-        objectInfo.setSupportsPolicies(false);
-        objectInfo.setSupportsRelationships(false);
-
-        // id
-        String objectId = getObjectId();
-        addPropertyId(properties, typeId, filter, PropertyIds.OBJECT_ID, objectId);
-        objectInfo.setId(objectId);
-
-        // name
-        String name = getNodeName();
-        if (PathManager.CMIS_ROOT_ID.equals(objectId) && "".equals(name)) {
-            // set default name for the root node
-            name = PathManager.CMIS_ROOT_ID;
-        }
-        addPropertyString(properties, typeId, filter, PropertyIds.NAME, name);
-        objectInfo.setName(name);
-
-        // base type and type name
-        addPropertyId(properties, typeId, filter, PropertyIds.BASE_TYPE_ID, baseTypeId.value());
-        addPropertyId(properties, typeId, filter, PropertyIds.OBJECT_TYPE_ID, typeId);
-
-        // created and modified by
-        String createdBy = getCreatedBy();
-        addPropertyString(properties, typeId, filter, PropertyIds.CREATED_BY, createdBy);
-        objectInfo.setCreatedBy(createdBy);
-
-        addPropertyString(properties, typeId, filter, PropertyIds.LAST_MODIFIED_BY, getLastModifiedBy());
-
-        // creation and modification date
-        GregorianCalendar created = getCreated();
-        addPropertyDateTime(properties, typeId, filter, PropertyIds.CREATION_DATE, created);
-        objectInfo.setCreationDate(created);
-
-        GregorianCalendar lastModified = getLastModified();
-        addPropertyDateTime(properties, typeId, filter, PropertyIds.LAST_MODIFICATION_DATE, lastModified);
-        objectInfo.setLastModificationDate(lastModified);
-
-        addPropertyString(properties, typeId, filter, PropertyIds.CHANGE_TOKEN, getChangeToken());
-    }
-
-    /**
-     * Compile the allowed actions on the CMIS object represented by this
-     * instance See CMIS 1.0 section 2.2.4.6 getAllowableActions
-     * 
-     * @param aas
-     *            compilation of allowed actions
-     * @return
-     */
-    protected Set<Action> compileAllowableActions(Set<Action> aas) {
-        setAction(aas, Action.CAN_GET_OBJECT_PARENTS, true);
-        setAction(aas, Action.CAN_GET_PROPERTIES, true);
-        setAction(aas, Action.CAN_UPDATE_PROPERTIES, true);
-        setAction(aas, Action.CAN_MOVE_OBJECT, true);
-        setAction(aas, Action.CAN_DELETE_OBJECT, true);
-        setAction(aas, Action.CAN_GET_ACL, false);
-        setAction(aas, Action.CAN_APPLY_ACL, false);
-        setAction(aas, Action.CAN_GET_OBJECT_RELATIONSHIPS, false);
-        setAction(aas, Action.CAN_ADD_OBJECT_TO_FOLDER, false);
-        setAction(aas, Action.CAN_REMOVE_OBJECT_FROM_FOLDER, false);
-        setAction(aas, Action.CAN_APPLY_POLICY, false);
-        setAction(aas, Action.CAN_GET_APPLIED_POLICIES, false);
-        setAction(aas, Action.CAN_REMOVE_POLICY, false);
-        setAction(aas, Action.CAN_CREATE_RELATIONSHIP, false);
-        return aas;
-    }
-
-    /**
-     * @return the change token of the CMIS object represented by this instance
-     * @throws RepositoryException
-     */
-    protected String getChangeToken() throws RepositoryException {
-        return null;
-    }
-
-    /**
-     * @return the last modifier of the CMIS object represented by this instance
-     * @throws RepositoryException
-     */
-    protected String getLastModifiedBy() throws RepositoryException {
-        return getPropertyOrElse(getContextNode(), Property.JCR_LAST_MODIFIED_BY, USER_UNKNOWN);
-    }
-
-    /**
-     * @return the last modification date of the CMIS object represented by this
-     *         instance
-     * @throws RepositoryException
-     */
-    protected GregorianCalendar getLastModified() throws RepositoryException {
-        return getPropertyOrElse(getContextNode(), Property.JCR_LAST_MODIFIED, DATE_UNKNOWN);
-    }
-
-    /**
-     * @return the creation date of the CMIS object represented by this instance
-     * @throws RepositoryException
-     */
-    protected GregorianCalendar getCreated() throws RepositoryException {
-        return getPropertyOrElse(getContextNode(), Property.JCR_CREATED, DATE_UNKNOWN);
-    }
-
-    /**
-     * @return the creator of the CMIS object represented by this instance
-     * @throws RepositoryException
-     */
-    protected String getCreatedBy() throws RepositoryException {
-        return getPropertyOrElse(getContextNode(), Property.JCR_CREATED_BY, USER_UNKNOWN);
-    }
-
-    /**
-     * @return the name of the underlying JCR <code>node</code>.
-     * @throws RepositoryException
-     */
-    protected String getNodeName() throws RepositoryException {
-        return node.getName();
-    }
-
-    /**
-     * @return the object id of the CMIS object represented by this instance
-     * @throws RepositoryException
-     */
-    protected String getObjectId() throws RepositoryException {
-        return getVersionSeriesId();
-    }
-
-    /**
-     * @return the versions series id of the CMIS object represented by this
-     *         instance
-     * @throws RepositoryException
-     */
-    protected String getVersionSeriesId() throws RepositoryException {
-        return node.getIdentifier();
-    }
-
-    /**
-     * Factory method for creating a new <code>JcrNode</code> instance from a
-     * JCR <code>Node</code>
-     * 
-     * @param node
-     *            the JCR <code>Node</code>
-     * @return a new <code>JcrNode</code>
-     */
-    protected final JcrNode create(Node node) {
-        return typeHandlerManager.create(node);
-    }
-
-    /**
-     * Add Id property to the CMIS object represented by this instance
-     */
-    protected final void addPropertyId(PropertiesImpl props, String typeId, Set<String> filter, String id, String value) {
-        if (value == null) {
-            throw new IllegalArgumentException("Value must not be null!");
-        }
-
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyIdImpl prop = new PropertyIdImpl(id, value);
-        prop.setQueryName(id);
-        props.addProperty(prop);
-    }
-
-    /**
-     * Add string property to the CMIS object represented by this instance
-     */
-    protected final void addPropertyString(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            String value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyStringImpl prop = new PropertyStringImpl(id, value);
-        prop.setQueryName(id);
-        props.addProperty(prop);
-    }
-
-    /**
-     * Add integer property to the CMIS object represented by this instance
-     */
-    protected final void addPropertyInteger(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            long value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyIntegerImpl prop = new PropertyIntegerImpl(id, BigInteger.valueOf(value));
-        prop.setQueryName(id);
-        props.addProperty(prop);
-    }
-
-    /**
-     * Add boolean property to the CMIS object represented by this instance
-     */
-    protected final void addPropertyBoolean(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            boolean value) {
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyBooleanImpl prop = new PropertyBooleanImpl(id, value);
-        prop.setQueryName(id);
-        props.addProperty(prop);
-    }
-
-    /**
-     * Add date-time property to the CMIS object represented by this instance
-     */
-    protected final void addPropertyDateTime(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            GregorianCalendar value) {
-
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyDateTimeImpl prop = new PropertyDateTimeImpl(id, value);
-        prop.setQueryName(id);
-        props.addProperty(prop);
-    }
-
-    protected final void addPropertyList(PropertiesImpl props, String typeId, Set<String> filter, String id,
-            List<String> values) {
-
-        if (!checkAddProperty(props, typeId, filter, id)) {
-            return;
-        }
-
-        PropertyStringImpl prop = new PropertyStringImpl(id, values);
-        prop.setQueryName(id);
-        props.addProperty(prop);
-
-    }
-
-    /**
-     * Validate a set of properties against a filter and its definitions
-     */
-    protected final boolean checkAddProperty(Properties properties, String typeId, Set<String> filter, String id) {
-        if (properties == null || properties.getProperties() == null) {
-            throw new IllegalArgumentException("Properties must not be null!");
-        }
-
-        if (id == null) {
-            throw new IllegalArgumentException("Id must not be null!");
-        }
-
-        TypeDefinition type = typeManager.getType(typeId);
-        if (type == null) {
-            throw new IllegalArgumentException("Unknown type: " + typeId);
-        }
-        if (!type.getPropertyDefinitions().containsKey(id)) {
-            throw new IllegalArgumentException("Unknown property: " + id);
-        }
-
-        String queryName = type.getPropertyDefinitions().get(id).getQueryName();
-
-        if (queryName != null && filter != null) {
-            if (filter.contains(queryName)) {
-                filter.remove(queryName);
-            } else {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Thunk for {@link JcrNode#updateProperties(Node, String, Properties)}
-     */
-    protected static final class PropertyUpdater {
-        private final List<PropertyData<?>> removeProperties = new ArrayList<PropertyData<?>>();
-        private final List<PropertyData<?>> updateProperties = new ArrayList<PropertyData<?>>();
-
-        private PropertyUpdater() {
-        }
-
-        public static PropertyUpdater create(JcrTypeManager typeManager, String typeId, Properties properties) {
-            if (properties == null) {
-                throw new CmisConstraintException("No properties!");
-            }
-
-            // get the property definitions
-            TypeDefinition type = typeManager.getType(typeId);
-            if (type == null) {
-                throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-            }
-
-            PropertyUpdater propertyUpdater = new PropertyUpdater();
-            // update properties
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(prop.getId());
-
-                // do we know that property?
-                if (propDef == null) {
-                    throw new CmisInvalidArgumentException("Property '" + prop.getId() + "' is unknown!");
-                }
-
-                // skip content stream file name
-                if (propDef.getId().equals(PropertyIds.CONTENT_STREAM_FILE_NAME)) {
-                    log.warn("Cannot set " + PropertyIds.CONTENT_STREAM_FILE_NAME + ". Ignoring");
-                    continue;
-                }
-
-                // silently skip name
-                if (propDef.getId().equals(PropertyIds.NAME)) {
-                    continue;
-                }
-
-                // can it be set?
-                if (propDef.getUpdatability() == Updatability.READONLY) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' is readonly!");
-                }
-
-                if (propDef.getUpdatability() == Updatability.ONCREATE) {
-                    throw new CmisConstraintException("Property '" + prop.getId() + "' can only be set on create!");
-                }
-
-                // default or value
-                PropertyData<?> newProp;
-                newProp = PropertyHelper.isPropertyEmpty(prop) ? PropertyHelper.getDefaultValue(propDef) : prop;
-
-                // Schedule for remove or update
-                if (newProp == null) {
-                    propertyUpdater.removeProperties.add(prop);
-                } else {
-                    propertyUpdater.updateProperties.add(newProp);
-                }
-            }
-
-            return propertyUpdater;
-        }
-
-        public boolean isEmpty() {
-            return removeProperties.isEmpty() && updateProperties.isEmpty();
-        }
-
-        public void apply(Node node) {
-            try {
-                for (PropertyData<?> prop : removeProperties) {
-                    JcrConverter.removeProperty(node, prop);
-                }
-                for (PropertyData<?> prop : updateProperties) {
-                    JcrConverter.setProperty(node, prop);
-                }
-            } catch (RepositoryException e) {
-                log.debug(e.getMessage(), e);
-                throw new CmisStorageException(e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Update the properties of the CMIS object represented by this instance
-     */
-    protected final void updateProperties(Node node, String typeId, Properties properties) {
-        PropertyUpdater.create(typeManager, typeId, properties).apply(node);
-    }
-
-    /**
-     * Utility function for retrieving the version history of a JCR
-     * <code>Node</code>.
-     * 
-     * @param node
-     *            the node for which to retrieve the version history
-     * @return version history of <code>node</code>
-     * @throws RepositoryException
-     *             if <code>node</code> is not versionable
-     */
-    protected static VersionHistory getVersionHistory(Node node) throws RepositoryException {
-        return getVersionManager(node).getVersionHistory(node.getPath());
-    }
-
-    /**
-     * Utility function for retrieving the version manager from a JCR
-     * <code>Node</code>.
-     * 
-     * @param node
-     * @return
-     * @throws RepositoryException
-     */
-    protected static VersionManager getVersionManager(Node node) throws RepositoryException {
-        return node.getSession().getWorkspace().getVersionManager();
-    }
-
-    /**
-     * Utility function for retrieving the base version of a JCR
-     * <code>Node</code>.
-     * 
-     * @param node
-     *            the node for which to retrieve the base version
-     * @return version base version of <code>node</code>
-     * @throws RepositoryException
-     *             if <code>node</code> is not versionable
-     */
-    protected static Version getBaseVersion(Node node) throws RepositoryException {
-        return getVersionManager(node).getBaseVersion(node.getPath());
-    }
-
-    /**
-     * Utility function to retrieve the length of a property of a JCR
-     * <code>Node</code>.
-     * 
-     * @param node
-     * @param propertyName
-     * @return
-     * @throws RepositoryException
-     */
-    protected static long getPropertyLength(Node node, String propertyName) throws RepositoryException {
-        return node.hasProperty(propertyName) ? node.getProperty(propertyName).getLength() : -1;
-    }
-
-    /**
-     * Utility function for retrieving a string property from a JCR
-     * <code>Node</code> or a default value in case of an error.
-     * 
-     * @param node
-     * @param propertyName
-     * @param defaultValue
-     * @return
-     * @throws RepositoryException
-     */
-    protected static String getPropertyOrElse(Node node, String propertyName, String defaultValue)
-            throws RepositoryException {
-
-        return node.hasProperty(propertyName) ? node.getProperty(propertyName).getString() : defaultValue;
-    }
-
-    /**
-     * Utility function for retrieving a date property from a JCR
-     * <code>Node</code> or a default value in case of an error.
-     * 
-     * @param node
-     * @param propertyName
-     * @param defaultValue
-     * @return
-     * @throws RepositoryException
-     */
-    protected static GregorianCalendar getPropertyOrElse(Node node, String propertyName, GregorianCalendar defaultValue)
-            throws RepositoryException {
-
-        if (node.hasProperty(propertyName)) {
-            Calendar date = node.getProperty(propertyName).getDate();
-            return Util.toCalendar(date);
-        } else {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * Add <code>action</code> to <code>actions</code> iff
-     * <code>condition</code> is true.
-     * 
-     * @param actions
-     * @param action
-     * @param condition
-     */
-    protected static void setAction(Set<Action> actions, Action action, boolean condition) {
-        if (condition) {
-            actions.add(action);
-        } else {
-            actions.remove(action);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrPrivateWorkingCopy.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrPrivateWorkingCopy.java
deleted file mode 100644
index cb92bd3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrPrivateWorkingCopy.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Instances of this class represent a private working copy of a cmis:document
- * backed by an underlying JCR <code>Node</code>.
- */
-public class JcrPrivateWorkingCopy extends JcrVersionBase {
-    private static final Logger LOG = LoggerFactory.getLogger(JcrPrivateWorkingCopy.class);
-
-    /**
-     * Name of a private working copy
-     */
-    public static final String PWC_NAME = "pwc";
-
-    public JcrPrivateWorkingCopy(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-
-        super(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    /**
-     * @return <code>true</code> iff <code>versionName</code> is the name of
-     *         private working copy.
-     * @see JcrPrivateWorkingCopy#PWC_NAME
-     */
-    public static boolean denotesPwc(String versionName) {
-        return PWC_NAME.equals(versionName);
-    }
-
-    /**
-     * @param objectId
-     * @return <code>true</code> iff <code>objectId</code> is the id of a
-     *         private working copy.
-     * @see JcrPrivateWorkingCopy#PWC_NAME
-     */
-    public static boolean isPwc(String objectId) {
-        return objectId.equals(PWC_NAME);
-    }
-
-    // ------------------------------------------< protected >---
-
-    @Override
-    protected Node getContextNode() {
-        try {
-            return getNode().getNode(Node.JCR_CONTENT);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    protected String getPwcId() throws RepositoryException {
-        return getObjectId();
-    }
-
-    @Override
-    protected String getObjectId() throws RepositoryException {
-        return getVersionSeriesId();
-    }
-
-    @Override
-    protected String getVersionLabel() throws RepositoryException {
-        return PWC_NAME;
-    }
-
-    @Override
-    protected boolean isLatestVersion() throws RepositoryException {
-        return false;
-    }
-
-    @Override
-    protected boolean isMajorVersion() throws RepositoryException {
-        return false;
-    }
-
-    @Override
-    protected boolean isLatestMajorVersion() throws RepositoryException {
-        return false;
-    }
-
-    @Override
-    protected String getCheckInComment() {
-        return "";
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java
deleted file mode 100644
index 11e682b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java
+++ /dev/null
@@ -1,1125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.Credentials;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.NoSuchWorkspaceException;
-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.query.Query;
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.QueryResult;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectInFolderListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectParentDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.jcr.query.QueryTranslator;
-import org.apache.chemistry.opencmis.jcr.type.JcrDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrFolderTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.jcr.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * JCR back-end for CMIS server.
- */
-public class JcrRepository {
-    private static final Logger LOG = LoggerFactory.getLogger(JcrRepository.class);
-
-    protected final Repository repository;
-    protected final JcrTypeManager typeManager;
-    protected final PathManager pathManager;
-    protected final JcrTypeHandlerManager typeHandlerManager;
-
-    /**
-     * Create a new <code>JcrRepository</code> instance backed by a JCR
-     * repository.
-     * 
-     * @param repository
-     *            the JCR repository
-     * @param pathManager
-     * @param typeManager
-     * @param typeHandlerManager
-     */
-    public JcrRepository(Repository repository, PathManager pathManager, JcrTypeManager typeManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        this.repository = repository;
-        this.typeManager = typeManager;
-        this.typeHandlerManager = typeHandlerManager;
-        this.pathManager = pathManager;
-    }
-
-    /**
-     * Logger into the underlying JCR repository.
-     * 
-     * @param credentials
-     * @param workspaceName
-     * @return
-     * @throws LoginException
-     * @throws NoSuchWorkspaceException
-     * @throws RepositoryException
-     */
-    public Session login(Credentials credentials, String workspaceName) {
-        try {
-            return repository.login(credentials, workspaceName);
-        } catch (LoginException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisPermissionDeniedException(e.getMessage(), e);
-        } catch (NoSuchWorkspaceException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.2 getRepositoryInfo
-     */
-    public RepositoryInfo getRepositoryInfo(Session session) {
-        LOG.debug("getRepositoryInfo");
-
-        return compileRepositoryInfo(session.getWorkspace().getName());
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.2 getRepositoryInfo
-     */
-    public List<RepositoryInfo> getRepositoryInfos(Session session) {
-        try {
-            ArrayList<RepositoryInfo> infos = new ArrayList<RepositoryInfo>();
-            for (String wspName : session.getWorkspace().getAccessibleWorkspaceNames()) {
-                infos.add(compileRepositoryInfo(wspName));
-            }
-
-            return infos;
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.3 getTypeChildren
-     */
-    public TypeDefinitionList getTypeChildren(Session session, String typeId, boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount) {
-
-        LOG.debug("getTypesChildren");
-        return typeManager.getTypeChildren(typeId, includePropertyDefinitions, maxItems, skipCount);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.5 getTypeDefinition
-     */
-    public TypeDefinition getTypeDefinition(Session session, String typeId) {
-        LOG.debug("getTypeDefinition");
-
-        TypeDefinition type = typeManager.getType(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        return JcrTypeManager.copyTypeDefinition(type);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.4 getTypeDescendants
-     */
-    public List<TypeDefinitionContainer> getTypesDescendants(Session session, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions) {
-
-        LOG.debug("getTypesDescendants");
-        return typeManager.getTypesDescendants(typeId, depth, includePropertyDefinitions);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.1 createDocument
-     */
-    public String createDocument(Session session, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState) {
-
-        LOG.debug("createDocument");
-
-        // check properties
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        // check type
-        String typeId = PropertyHelper.getTypeId(properties);
-        TypeDefinition type = typeManager.getType(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        boolean isVersionable = JcrTypeManager.isVersionable(type);
-        if (!isVersionable && versioningState != VersioningState.NONE) {
-            throw new CmisConstraintException("Versioning not supported for " + typeId);
-        }
-
-        if (isVersionable && versioningState == VersioningState.NONE) {
-            throw new CmisConstraintException("Versioning required for " + typeId);
-        }
-
-        // get the name
-        String name = PropertyHelper.getStringProperty(properties, PropertyIds.NAME);
-        // get parent Node and create child
-        JcrFolder parent = getJcrNode(session, folderId).asFolder();
-        JcrDocumentTypeHandler typeHandler = typeHandlerManager.getDocumentTypeHandler(typeId);
-        JcrNode jcrNode = typeHandler.createDocument(parent, JcrConverter.toJcrName(name), properties, contentStream,
-                versioningState);
-        return jcrNode.getId();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.2 createDocumentFromSource
-     */
-    public String createDocumentFromSource(Session session, String sourceId, Properties properties, String folderId,
-            VersioningState versioningState) {
-
-        LOG.debug("createDocumentFromSource");
-
-        // get parent folder Node
-        JcrFolder parent = getJcrNode(session, folderId).asFolder();
-
-        // get source document Node
-        JcrDocument source = getJcrNode(session, sourceId).asDocument();
-
-        boolean isVersionable = source.isVersionable();
-        if (!isVersionable && versioningState != VersioningState.NONE) {
-            throw new CmisConstraintException("Versioning not supported for " + sourceId);
-        }
-
-        if (isVersionable && versioningState == VersioningState.NONE) {
-            throw new CmisConstraintException("Versioning required for " + sourceId);
-        }
-
-        // create child from source
-        JcrNode jcrNode = parent.addNodeFromSource(source, properties);
-        return jcrNode.getId();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.3 createFolder
-     */
-    public String createFolder(Session session, Properties properties, String folderId) {
-        LOG.debug("createFolder");
-
-        // check properties
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-
-        // check type
-        String typeId = PropertyHelper.getTypeId(properties);
-        TypeDefinition type = typeManager.getType(typeId);
-        if (type == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-
-        // get the name
-        String name = PropertyHelper.getStringProperty(properties, PropertyIds.NAME);
-        // get parent Node
-        JcrFolder parent = getJcrNode(session, folderId).asFolder();
-        JcrFolderTypeHandler typeHandler = typeHandlerManager.getFolderTypeHandler(typeId);
-        JcrNode jcrNode = typeHandler.createFolder(parent, JcrConverter.toJcrName(name), properties);
-        return jcrNode.getId();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.13 moveObject
-     */
-    public ObjectData moveObject(Session session, Holder<String> objectId, String targetFolderId,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        LOG.debug("moveObject");
-
-        if (objectId == null || objectId.getValue() == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        // get the node and parent
-        JcrNode jcrNode = getJcrNode(session, objectId.getValue());
-        JcrFolder parent = getJcrNode(session, targetFolderId).asFolder();
-        jcrNode = jcrNode.move(parent);
-        objectId.setValue(jcrNode.getId());
-        return jcrNode.compileObjectType(null, false, objectInfos, requiresObjectInfo);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.16 setContentStream
-     */
-    public void setContentStream(Session session, Holder<String> objectId, Boolean overwriteFlag,
-            ContentStream contentStream) {
-
-        LOG.debug("setContentStream or deleteContentStream");
-
-        if (objectId == null || objectId.getValue() == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        JcrDocument jcrDocument = getJcrNode(session, objectId.getValue()).asDocument();
-        String id = jcrDocument.setContentStream(contentStream, Boolean.TRUE.equals(overwriteFlag)).getId();
-        objectId.setValue(id);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.14 deleteObject
-     */
-    public void deleteObject(Session session, String objectId, Boolean allVersions) {
-        LOG.debug("deleteObject");
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId);
-        try {
-            // check on private copy
-            boolean isPwc = jcrNode.isVersionable()
-                    && JcrPrivateWorkingCopy.isPwc(jcrNode.asVersion().getVersionLabel());
-            jcrNode.delete(Boolean.TRUE.equals(allVersions), isPwc);
-        } catch (RepositoryException rex) {
-            LOG.debug(rex.getMessage(), rex);
-            throw new CmisRuntimeException(rex.getMessage(), rex);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.15 deleteTree
-     */
-    public FailedToDeleteData deleteTree(Session session, String folderId) {
-        LOG.debug("deleteTree");
-
-        // get the folder
-        JcrFolder jcrFolder = getJcrNode(session, folderId).asFolder();
-        return jcrFolder.deleteTree();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.12 updateProperties
-     */
-    public ObjectData updateProperties(Session session, Holder<String> objectId, Properties properties,
-            ObjectInfoHandler objectInfos, boolean objectInfoRequired) {
-
-        LOG.debug("updateProperties");
-
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Id is not valid!");
-        }
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId.getValue());
-        String id = jcrNode.updateProperties(properties).getId();
-        objectId.setValue(id);
-        return jcrNode.compileObjectType(null, false, objectInfos, objectInfoRequired);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.7 getObject
-     */
-    public ObjectData getObject(Session session, String objectId, String filter, Boolean includeAllowableActions,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        LOG.debug("getObject");
-
-        // check id
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId);
-
-        // gather properties
-        return jcrNode.compileObjectType(splitFilter(filter), includeAllowableActions, objectInfos, requiresObjectInfo);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.8 getProperties
-     */
-    public Properties getProperties(Session session, String objectId, String filter, Boolean includeAllowableActions,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        ObjectData object = getObject(session, objectId, filter, includeAllowableActions, objectInfos,
-                requiresObjectInfo);
-        return object.getProperties();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.6 getAllowableActions
-     */
-    public AllowableActions getAllowableActions(Session session, String objectId) {
-        LOG.debug("getAllowableActions");
-
-        JcrNode jcrNode = getJcrNode(session, objectId);
-        return jcrNode.getAllowableActions();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.10 getContentStream
-     */
-    public ContentStream getContentStream(Session session, String objectId, BigInteger offset, BigInteger length) {
-        LOG.debug("getContentStream");
-
-        if (offset != null || length != null) {
-            throw new CmisInvalidArgumentException("Offset and Length are not supported!");
-        }
-
-        // get the node
-        JcrDocument jcrDocument = getJcrNode(session, objectId).asDocument();
-        return jcrDocument.getContentStream();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.1 getChildren
-     */
-    public ObjectInFolderList getChildren(Session session, String folderId, String filter,
-            Boolean includeAllowableActions, Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        LOG.debug("getChildren");
-
-        // skip and max
-        int skip = skipCount == null ? 0 : skipCount.intValue();
-        if (skip < 0) {
-            skip = 0;
-        }
-
-        int max = maxItems == null ? Integer.MAX_VALUE : maxItems.intValue();
-        if (max < 0) {
-            max = Integer.MAX_VALUE;
-        }
-
-        // get the folder
-        JcrFolder jcrFolder = getJcrNode(session, folderId).asFolder();
-
-        // set object info of the the folder
-        if (requiresObjectInfo) {
-            jcrFolder.compileObjectType(null, false, objectInfos, requiresObjectInfo);
-        }
-
-        // prepare result
-        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-        result.setObjects(new ArrayList<ObjectInFolderData>());
-        result.setHasMoreItems(false);
-        int count = 0;
-
-        // iterate through children
-        Set<String> splitFilter = splitFilter(filter);
-        Iterator<JcrNode> childNodes = jcrFolder.getNodes();
-        while (childNodes.hasNext()) {
-            JcrNode child = childNodes.next();
-            count++;
-
-            if (skip > 0) {
-                skip--;
-                continue;
-            }
-
-            if (result.getObjects().size() >= max) {
-                result.setHasMoreItems(true);
-                continue;
-            }
-
-            // build and add child object
-            ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(child.compileObjectType(splitFilter, includeAllowableActions, objectInfos,
-                    requiresObjectInfo));
-
-            if (Boolean.TRUE.equals(includePathSegment)) {
-                objectInFolder.setPathSegment(child.getName());
-            }
-
-            result.getObjects().add(objectInFolder);
-        }
-
-        result.setNumItems(BigInteger.valueOf(count));
-        return result;
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.2 getDescendants
-     */
-    public List<ObjectInFolderContainer> getDescendants(Session session, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, Boolean includePathSegment, ObjectInfoHandler objectInfos,
-            boolean requiresObjectInfo, boolean foldersOnly) {
-
-        LOG.debug("getDescendants or getFolderTree");
-
-        // check depth
-        int d = depth == null ? 2 : depth.intValue();
-        if (d == 0) {
-            throw new CmisInvalidArgumentException("Depth must not be 0!");
-        }
-        if (d < -1) {
-            d = -1;
-        }
-
-        // get the folder
-        JcrFolder jcrFolder = getJcrNode(session, folderId).asFolder();
-
-        // set object info of the the folder
-        if (requiresObjectInfo) {
-            jcrFolder.compileObjectType(null, false, objectInfos, requiresObjectInfo);
-        }
-
-        // get the tree
-        List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-        gatherDescendants(jcrFolder, result, foldersOnly, d, splitFilter(filter), includeAllowableActions,
-                includePathSegment, objectInfos, requiresObjectInfo);
-
-        return result;
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.4 getFolderParent
-     */
-    public ObjectData getFolderParent(Session session, String folderId, String filter, ObjectInfoHandler objectInfos,
-            boolean requiresObjectInfo) {
-
-        List<ObjectParentData> parents = getObjectParents(session, folderId, filter, false, false, objectInfos,
-                requiresObjectInfo);
-
-        if (parents.isEmpty()) {
-            throw new CmisInvalidArgumentException("The root folder has no parent!");
-        }
-
-        return parents.get(0).getObject();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.5 getObjectParents
-     */
-    public List<ObjectParentData> getObjectParents(Session session, String objectId, String filter,
-            Boolean includeAllowableActions, Boolean includeRelativePathSegment, ObjectInfoHandler objectInfos,
-            boolean requiresObjectInfo) {
-
-        LOG.debug("getObjectParents");
-
-        // get the file or folder
-        JcrNode jcrNode = getJcrNode(session, objectId);
-
-        // don't climb above the root folder
-        if (jcrNode.isRoot()) {
-            return Collections.emptyList();
-        }
-
-        // set object info of the the object
-        if (requiresObjectInfo) {
-            jcrNode.compileObjectType(null, false, objectInfos, requiresObjectInfo);
-        }
-
-        // get parent
-        JcrNode parent = jcrNode.getParent();
-        ObjectData object = parent.compileObjectType(splitFilter(filter), includeAllowableActions, objectInfos,
-                requiresObjectInfo);
-
-        ObjectParentDataImpl result = new ObjectParentDataImpl();
-        result.setObject(object);
-        if (Boolean.TRUE.equals(includeRelativePathSegment)) {
-            result.setRelativePathSegment(parent.getName());
-        }
-
-        return Collections.singletonList((ObjectParentData) result);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.4.9 getObjectByPath
-     */
-    public ObjectData getObjectByPath(Session session, String folderPath, String filter,
-            boolean includeAllowableActions, boolean includeACL, ObjectInfoHandler objectInfos,
-            boolean requiresObjectInfo) {
-
-        LOG.debug("getObjectByPath");
-
-        // check path
-        if (folderPath == null || !PathManager.isAbsolute(folderPath)) {
-            throw new CmisInvalidArgumentException("Invalid folder path!");
-        }
-
-        JcrNode root = getJcrNode(session, PathManager.CMIS_ROOT_ID);
-        JcrNode jcrNode;
-        if (PathManager.isRoot(folderPath)) {
-            jcrNode = root;
-        } else {
-            String path = PathManager.relativize(PathManager.CMIS_ROOT_PATH, folderPath);
-            jcrNode = root.getNode(path);
-        }
-
-        return jcrNode.compileObjectType(splitFilter(filter), includeAllowableActions, objectInfos, requiresObjectInfo);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.3.6 getCheckedOutDocs
-     */
-    public ObjectList getCheckedOutDocs(Session session, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, BigInteger maxItems, BigInteger skipCount) {
-
-        LOG.debug("getCheckedOutDocs");
-
-        // skip and max
-        int skip = skipCount == null ? 0 : skipCount.intValue();
-        if (skip < 0) {
-            skip = 0;
-        }
-
-        int max = maxItems == null ? Integer.MAX_VALUE : maxItems.intValue();
-        if (max < 0) {
-            max = Integer.MAX_VALUE;
-        }
-
-        try {
-            // Build xpath query of the form
-            // '//path/to/folderId//*[jcr:isCheckedOut='true' and
-            // (not(@jcr:createdBy) or @jcr:createdBy='admin')]'
-            String xPath = "/*[jcr:isCheckedOut='true' " + "and (not(@jcr:createdBy) or @jcr:createdBy='"
-                    + session.getUserID() + "')]";
-
-            if (folderId != null) {
-                JcrFolder jcrFolder = getJcrNode(session, folderId).asFolder();
-                String path = jcrFolder.getNode().getPath();
-                if ("/".equals(path)) {
-                    path = "";
-                }
-                xPath = '/' + Util.escape(path) + xPath;
-            } else {
-                xPath = '/' + xPath;
-            }
-
-            // Execute query
-            QueryManager queryManager = session.getWorkspace().getQueryManager();
-            Query query = queryManager.createQuery(xPath, Query.XPATH);
-            QueryResult queryResult = query.execute();
-
-            // prepare results
-            ObjectListImpl result = new ObjectListImpl();
-            result.setObjects(new ArrayList<ObjectData>());
-            result.setHasMoreItems(false);
-
-            // iterate through children
-            Set<String> splitFilter = splitFilter(filter);
-            int count = 0;
-            NodeIterator nodes = queryResult.getNodes();
-            while (nodes.hasNext()) {
-                Node node = nodes.nextNode();
-                JcrNode jcrNode = typeHandlerManager.create(node);
-                if (!jcrNode.isVersionable()) {
-                    continue;
-                }
-
-                count++;
-
-                if (skip > 0) {
-                    skip--;
-                    continue;
-                }
-
-                if (result.getObjects().size() >= max) {
-                    result.setHasMoreItems(true);
-                    continue;
-                }
-
-                // build and add child object
-                JcrPrivateWorkingCopy jcrVersion = jcrNode.asVersion().getPwc();
-                ObjectData objectData = jcrVersion.compileObjectType(splitFilter, includeAllowableActions, null, false);
-                result.getObjects().add(objectData);
-            }
-
-            result.setNumItems(BigInteger.valueOf(count));
-            return result;
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.1 checkOut
-     */
-    public void checkOut(Session session, Holder<String> objectId, Holder<Boolean> contentCopied) {
-        LOG.debug("checkout");
-
-        // check id
-        if (objectId == null || objectId.getValue() == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId.getValue());
-        if (!jcrNode.isVersionable()) {
-            throw new CmisUpdateConflictException("Not a version: " + jcrNode);
-        }
-
-        // checkout
-        JcrPrivateWorkingCopy pwc = jcrNode.asVersion().checkout();
-        objectId.setValue(pwc.getId());
-        if (contentCopied != null) {
-            contentCopied.setValue(true);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.2 cancelCheckout
-     */
-    public void cancelCheckout(Session session, String objectId) {
-        LOG.debug("cancelCheckout");
-
-        // check id
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId);
-        if (!jcrNode.isVersionable()) {
-            throw new CmisUpdateConflictException("Not a version: " + jcrNode);
-        }
-
-        // cancelCheckout
-        jcrNode.asVersion().cancelCheckout();
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.3 checkedIn
-     */
-    public void checkIn(Session session, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment) {
-
-        LOG.debug("checkin");
-
-        // check id
-        if (objectId == null || objectId.getValue() == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        // get the node
-        JcrNode jcrNode;
-        try {
-            jcrNode = getJcrNode(session, objectId.getValue());
-        } catch (CmisObjectNotFoundException e) {
-            throw new CmisUpdateConflictException(e.getCause().getMessage(), e.getCause());
-        }
-
-        if (!jcrNode.isVersionable()) {
-            throw new CmisUpdateConflictException("Not a version: " + jcrNode);
-        }
-
-        // checkin
-        JcrVersion checkedIn = jcrNode.asVersion().checkin(properties, contentStream, checkinComment);
-        objectId.setValue(checkedIn.getId());
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.6 getAllVersions
-     */
-    public List<ObjectData> getAllVersions(Session session, String objectId, String filter,
-            Boolean includeAllowableActions, ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        LOG.debug("getAllVersions");
-
-        // check id
-        if (objectId == null) {
-            throw new CmisInvalidArgumentException("Object Id must be set.");
-        }
-
-        Set<String> splitFilter = splitFilter(filter);
-
-        // get the node
-        JcrNode jcrNode = getJcrNode(session, objectId);
-
-        // Collect versions
-        if (jcrNode.isVersionable()) {
-            JcrVersionBase jcrVersion = jcrNode.asVersion();
-
-            Iterator<JcrVersion> versions = jcrVersion.getVersions();
-            if (versions.hasNext()) {
-                versions.next(); // skip root version
-            }
-
-            List<ObjectData> allVersions = new ArrayList<ObjectData>();
-            while (versions.hasNext()) {
-                JcrVersion version = versions.next();
-                ObjectData objectData = version.compileObjectType(splitFilter, includeAllowableActions, objectInfos,
-                        requiresObjectInfo);
-                allVersions.add(objectData);
-            }
-
-            // Add pwc if checked out
-            if (jcrVersion.isDocumentCheckedOut()) {
-                JcrPrivateWorkingCopy pwc = jcrVersion.getPwc();
-                ObjectData objectData = pwc.compileObjectType(splitFilter, includeAllowableActions, objectInfos,
-                        requiresObjectInfo);
-
-                allVersions.add(objectData);
-            }
-
-            // CMIS mandates descending order
-            Collections.reverse(allVersions);
-            return allVersions;
-        } else {
-            // Single version
-            ObjectData objectData = jcrNode.compileObjectType(splitFilter, includeAllowableActions, objectInfos,
-                    requiresObjectInfo);
-
-            return Collections.singletonList(objectData);
-        }
-
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.6.1 query
-     */
-    public ObjectList query(final Session session, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, BigInteger maxItems, BigInteger skipCount) {
-
-        LOG.debug("query");
-
-        if (searchAllVersions) {
-            throw new CmisNotSupportedException("Not supported: query for all versions");
-        }
-
-        // skip and max
-        int skip = skipCount == null ? 0 : skipCount.intValue();
-        if (skip < 0) {
-            skip = 0;
-        }
-
-        int max = maxItems == null ? Integer.MAX_VALUE : maxItems.intValue();
-        if (max < 0) {
-            max = Integer.MAX_VALUE;
-        }
-
-        QueryTranslator queryTranslator = new QueryTranslator(typeManager) {
-            @Override
-            protected String jcrPathFromId(String id) {
-                try {
-                    JcrFolder folder = getJcrNode(session, id).asFolder();
-                    String path = folder.getNode().getPath();
-                    return Util.escape(path);
-                } catch (RepositoryException e) {
-                    LOG.debug(e.getMessage(), e);
-                    throw new CmisRuntimeException(e.getMessage(), e);
-                }
-            }
-
-            @Override
-            protected String jcrPathFromCol(TypeDefinition fromType, String name) {
-                return typeHandlerManager.getIdentifierMap(fromType.getId()).jcrPathFromCol(name);
-            }
-
-            @Override
-            protected String jcrTypeName(TypeDefinition fromType) {
-                return typeHandlerManager.getIdentifierMap(fromType.getId()).jcrTypeName();
-            }
-
-            @Override
-            protected String jcrTypeCondition(TypeDefinition fromType) {
-                return typeHandlerManager.getIdentifierMap(fromType.getId()).jcrTypeCondition();
-            }
-        };
-
-        String xPath = queryTranslator.translateToXPath(statement);
-        try {
-            // Execute query
-            QueryManager queryManager = session.getWorkspace().getQueryManager();
-            Query query = queryManager.createQuery(xPath, Query.XPATH);
-
-            if (skip > 0) {
-                query.setOffset(skip);
-            }
-            if (max < Integer.MAX_VALUE) {
-                query.setLimit(max + 1); // One more in order to detect whether
-                                         // there are more items
-            }
-
-            QueryResult queryResult = query.execute();
-
-            // prepare results
-            ObjectListImpl result = new ObjectListImpl();
-            result.setObjects(new ArrayList<ObjectData>());
-            result.setHasMoreItems(false);
-
-            // iterate through children
-            int count = 0;
-            NodeIterator nodes = queryResult.getNodes();
-            while (nodes.hasNext() && result.getObjects().size() < max) {
-                Node node = nodes.nextNode();
-                JcrNode jcrNode = typeHandlerManager.create(node);
-                count++;
-
-                // Get pwc if this node is versionable and checked out
-                if (jcrNode.isVersionable() && jcrNode.asVersion().isCheckedOut()) {
-                    jcrNode = jcrNode.asVersion().getPwc();
-                }
-
-                // build and add child object
-                ObjectData objectData = jcrNode.compileObjectType(null, includeAllowableActions, null, false);
-                result.getObjects().add(objectData);
-            }
-
-            result.setHasMoreItems(nodes.hasNext());
-            result.setNumItems(BigInteger.valueOf(count));
-            return result;
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    // ------------------------------------------< protected >---
-
-    protected RepositoryInfo compileRepositoryInfo(String repositoryId) {
-        RepositoryInfoImpl fRepositoryInfo = new RepositoryInfoImpl();
-
-        fRepositoryInfo.setId(repositoryId);
-        fRepositoryInfo.setName(getRepositoryName());
-        fRepositoryInfo.setDescription(getRepositoryDescription());
-
-        fRepositoryInfo.setCmisVersionSupported("1.0");
-
-        fRepositoryInfo.setProductName("OpenCMIS JCR");
-        fRepositoryInfo.setProductVersion("0.3");
-        fRepositoryInfo.setVendorName("OpenCMIS");
-
-        fRepositoryInfo.setRootFolder(PathManager.CMIS_ROOT_ID);
-        fRepositoryInfo.setThinClientUri("");
-
-        RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl();
-        capabilities.setCapabilityAcl(CapabilityAcl.NONE);
-        capabilities.setAllVersionsSearchable(false);
-        capabilities.setCapabilityJoin(CapabilityJoin.NONE);
-        capabilities.setSupportsMultifiling(false);
-        capabilities.setSupportsUnfiling(false);
-        capabilities.setSupportsVersionSpecificFiling(false);
-        capabilities.setIsPwcSearchable(false);
-        capabilities.setIsPwcUpdatable(true);
-        capabilities.setCapabilityQuery(CapabilityQuery.BOTHCOMBINED);
-        capabilities.setCapabilityChanges(CapabilityChanges.OBJECTIDSONLY);
-        capabilities.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
-        capabilities.setSupportsGetDescendants(true);
-        capabilities.setSupportsGetFolderTree(true);
-        capabilities.setCapabilityRendition(CapabilityRenditions.NONE);
-        fRepositoryInfo.setCapabilities(capabilities);
-
-        return fRepositoryInfo;
-    }
-
-    protected String getRepositoryName() {
-        return repository.getDescriptor(Repository.REP_NAME_DESC);
-    }
-
-    protected String getRepositoryDescription() {
-        StringBuilder description = new StringBuilder();
-
-        for (String key : repository.getDescriptorKeys()) {
-            description.append(key).append('=').append(repository.getDescriptor(key)).append('\n');
-        }
-
-        return description.toString();
-    }
-
-    protected JcrNode getJcrNode(Session session, String id) {
-        try {
-            if (id == null || id.length() == 0) {
-                throw new CmisInvalidArgumentException("Null or empty id");
-            }
-
-            if (id.equals(PathManager.CMIS_ROOT_ID)) {
-                return typeHandlerManager.create(getRootNode(session));
-            }
-
-            Node node = session.getNodeByIdentifier(id);
-            JcrNode jcrNode = typeHandlerManager.create(node);
-
-            // if node isn't under versioning, then return retrieved object
-            if (!jcrNode.isVersionable()) {
-                return jcrNode;
-            }
-
-            JcrVersionBase versionNode = jcrNode.asVersion();
-            if (JcrPrivateWorkingCopy.denotesPwc(versionNode.getVersionLabel())) {
-                return versionNode.getPwc();
-            } else {
-                JcrVersion version = versionNode.getVersion(((JcrVersion) versionNode).getVersionName());
-                return version;
-            }
-
-        } catch (ItemNotFoundException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    protected Node getRootNode(Session session) {
-        try {
-            return session.getNode(pathManager.getJcrRootPath());
-        } catch (PathNotFoundException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (ItemNotFoundException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    // ------------------------------------------< private >---
-
-    /**
-     * Transitively gather the children of a node down to a specific depth
-     */
-    private static void gatherDescendants(JcrFolder jcrFolder, List<ObjectInFolderContainer> list, boolean foldersOnly,
-            int depth, Set<String> filter, Boolean includeAllowableActions, Boolean includePathSegments,
-            ObjectInfoHandler objectInfos, boolean requiresObjectInfo) {
-
-        // iterate through children
-        Iterator<JcrNode> childNodes = jcrFolder.getNodes();
-        while (childNodes.hasNext()) {
-            JcrNode child = childNodes.next();
-
-            // folders only?
-            if (foldersOnly && !child.isFolder()) {
-                continue;
-            }
-
-            // add to list
-            ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(child.compileObjectType(filter, includeAllowableActions, objectInfos,
-                    requiresObjectInfo));
-
-            if (Boolean.TRUE.equals(includePathSegments)) {
-                objectInFolder.setPathSegment(child.getName());
-            }
-
-            ObjectInFolderContainerImpl container = new ObjectInFolderContainerImpl();
-            container.setObject(objectInFolder);
-
-            list.add(container);
-
-            // move to next level
-            if (depth != 1 && child.isFolder()) {
-                container.setChildren(new ArrayList<ObjectInFolderContainer>());
-                gatherDescendants(child.asFolder(), container.getChildren(), foldersOnly, depth - 1, filter,
-                        includeAllowableActions, includePathSegments, objectInfos, requiresObjectInfo);
-            }
-        }
-    }
-
-    /**
-     * Splits a filter statement into a collection of properties.
-     */
-    private static Set<String> splitFilter(String filter) {
-        if (filter == null) {
-            return null;
-        }
-
-        if (filter.trim().length() == 0) {
-            return null;
-        }
-
-        Set<String> result = new HashSet<String>();
-        for (String s : filter.split(",")) {
-            s = s.trim();
-            if (s.equals("*")) {
-                return null;
-            } else if (s.length() > 0) {
-                result.add(s);
-            }
-        }
-
-        // set a few base properties
-        // query name == id (for base type properties)
-        result.add(PropertyIds.OBJECT_ID);
-        result.add(PropertyIds.OBJECT_TYPE_ID);
-        result.add(PropertyIds.BASE_TYPE_ID);
-
-        return result;
-    }
-
-    public Repository getRepository() {
-        return repository;
-    }
-
-    public JcrTypeManager getTypeManager() {
-        return typeManager;
-    }
-
-    public PathManager getPathManager() {
-        return pathManager;
-    }
-
-    public JcrTypeHandlerManager getTypeHandlerManager() {
-        return typeHandlerManager;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrService.java
deleted file mode 100644
index 9d2b17a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrService.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.jcr.Credentials;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * JCR service implementation.
- */
-public class JcrService extends AbstractCmisService {
-    private final JcrRepository jcrRepository;
-    private final Map<String, Session> sessions = new HashMap<String, Session>();
-
-    private CallContext context;
-
-    public JcrService(JcrRepository jcrRepository) {
-        this.jcrRepository = jcrRepository;
-    }
-
-    @Override
-    public void close() {
-        for (Session session : sessions.values()) {
-            session.logout();
-        }
-
-        super.close();
-    }
-
-    public void setCallContext(CallContext context) {
-        this.context = context;
-    }
-
-    public CallContext getCallContext() {
-        return context;
-    }
-
-    // ------------------------------------------< repository service >---
-
-    @Override
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        return jcrRepository.getRepositoryInfo(login(repositoryId));
-    }
-
-    @Override
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return jcrRepository.getRepositoryInfos(login(null));
-    }
-
-    @Override
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        return jcrRepository.getTypeChildren(login(repositoryId), typeId, includePropertyDefinitions, maxItems,
-                skipCount);
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return jcrRepository.getTypeDefinition(login(repositoryId), typeId);
-    }
-
-    @Override
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-
-        return jcrRepository.getTypesDescendants(login(repositoryId), typeId, depth, includePropertyDefinitions);
-    }
-
-    // ------------------------------------------< navigation service >---
-
-    @Override
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        return jcrRepository.getChildren(login(repositoryId), folderId, filter, includeAllowableActions,
-                includePathSegment, maxItems, skipCount, this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-
-        return jcrRepository.getDescendants(login(repositoryId), folderId, depth, filter, includeAllowableActions,
-                includePathSegment, this, context.isObjectInfoRequired(), false);
-    }
-
-    @Override
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        return jcrRepository.getFolderParent(login(repositoryId), folderId, filter, this,
-                context.isObjectInfoRequired());
-    }
-
-    @Override
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-
-        return jcrRepository.getDescendants(login(repositoryId), folderId, depth, filter, includeAllowableActions,
-                includePathSegment, this, context.isObjectInfoRequired(), true);
-    }
-
-    @Override
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-
-        return jcrRepository.getObjectParents(login(repositoryId), objectId, filter, includeAllowableActions,
-                includeRelativePathSegment, this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        return jcrRepository.getCheckedOutDocs(login(repositoryId), folderId, filter, orderBy, includeAllowableActions,
-                maxItems, skipCount);
-    }
-
-    // ------------------------------------------< object service >---
-
-    @Override
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-
-        return jcrRepository.createDocument(login(repositoryId), properties, folderId, contentStream, versioningState);
-    }
-
-    @Override
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-
-        return jcrRepository.createDocumentFromSource(login(repositoryId), sourceId, properties, folderId,
-                versioningState);
-    }
-
-    @Override
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-
-        jcrRepository.setContentStream(login(repositoryId), objectId, overwriteFlag, contentStream);
-    }
-
-    @Override
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-
-        jcrRepository.setContentStream(login(repositoryId), objectId, true, null);
-    }
-
-    @Override
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-
-        return jcrRepository.createFolder(login(repositoryId), properties, folderId);
-    }
-
-    @Override
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-
-        jcrRepository.deleteObject(login(repositoryId), objectId, allVersions);
-    }
-
-    @Override
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-
-        return jcrRepository.deleteTree(login(repositoryId), folderId);
-    }
-
-    @Override
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return jcrRepository.getAllowableActions(login(repositoryId), objectId);
-    }
-
-    @Override
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-
-        return jcrRepository.getContentStream(login(repositoryId), objectId, offset, length);
-    }
-
-    @Override
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-
-        return jcrRepository.getObject(login(repositoryId), objectId, filter, includeAllowableActions, this,
-                context.isObjectInfoRequired());
-    }
-
-    @Override
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-
-        return jcrRepository.getObjectByPath(login(repositoryId), path, filter, includeAllowableActions, includeAcl,
-                this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        return jcrRepository.getProperties(login(repositoryId), objectId, filter, false, this,
-                context.isObjectInfoRequired());
-    }
-
-    @Override
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-
-        jcrRepository.moveObject(login(repositoryId), objectId, targetFolderId, this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-
-        jcrRepository.updateProperties(login(repositoryId), objectId, properties, this, context.isObjectInfoRequired());
-    }
-
-    // ------------------------------------------< versioning service >---
-
-    @Override
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-
-        jcrRepository.checkOut(login(repositoryId), objectId, contentCopied);
-    }
-
-    @Override
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        jcrRepository.cancelCheckout(login(repositoryId), objectId);
-    }
-
-    @Override
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-
-        jcrRepository.checkIn(login(repositoryId), objectId, major, properties, contentStream, checkinComment);
-    }
-
-    @Override
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-
-        return jcrRepository.getAllVersions(login(repositoryId), versionSeriesId == null ? objectId : versionSeriesId,
-                filter, includeAllowableActions, this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-
-        return jcrRepository.getObject(login(repositoryId), versionSeriesId == null ? objectId : versionSeriesId,
-                filter, includeAllowableActions, this, context.isObjectInfoRequired());
-    }
-
-    @Override
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-
-        ObjectData object = getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, false,
-                null, null, false, false, extension);
-
-        return object.getProperties();
-    }
-
-    // --- discovery service ---
-
-    @Override
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-
-        return jcrRepository.query(login(repositoryId), statement, searchAllVersions, includeAllowableActions,
-                maxItems, skipCount);
-    }
-
-    // ------------------------------------------< protected >---
-
-    protected Session login(String workspaceName) {
-        if (context == null) {
-            throw new CmisRuntimeException("No user context!");
-        }
-
-        Session session = sessions.get(workspaceName);
-        if (session == null) {
-            String userName = context.getUsername();
-            String password = context.getPassword();
-            Credentials credentials = userName == null ? null : new SimpleCredentials(userName,
-                    password == null ? "".toCharArray() : password.toCharArray());
-
-            session = jcrRepository.login(credentials, workspaceName);
-            sessions.put(workspaceName, session);
-        }
-        return session;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java
deleted file mode 100644
index 7ed7e77..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.imageio.spi.ServiceRegistry;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.RepositoryFactory;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultFolderTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultUnversionedDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.server.support.wrapper.ConformanceCmisServiceWrapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A {@link CmisServiceFactory} implementation which returns {@link JcrService}
- * instances.
- */
-public class JcrServiceFactory extends AbstractServiceFactory {
-    private static final Logger log = LoggerFactory.getLogger(JcrServiceFactory.class);
-
-    public static final String MOUNT_PATH_CONFIG = "mount-path";
-    public static final String PREFIX_JCR_CONFIG = "jcr.";
-
-    public static final BigInteger DEFAULT_MAX_ITEMS_TYPES = BigInteger.valueOf(50);
-    public static final BigInteger DEFAULT_DEPTH_TYPES = BigInteger.valueOf(-1);
-    public static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(200);
-    public static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(10);
-
-    protected JcrTypeManager typeManager;
-    protected Map<String, String> jcrConfig;
-    protected String mountPath;
-    protected JcrRepository jcrRepository;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        typeManager = createTypeManager();
-        readConfiguration(parameters);
-        PathManager pathManger = new PathManager(mountPath);
-        JcrTypeHandlerManager typeHandlerManager = createTypeHandlerManager(pathManger, typeManager);
-        jcrRepository = new JcrRepository(acquireJcrRepository(jcrConfig), pathManger, typeManager, typeHandlerManager);
-    }
-
-    @Override
-    public void destroy() {
-        jcrRepository = null;
-        typeManager = null;
-    }
-
-    @Override
-    public CmisService getService(CallContext context) {
-        JcrService service = createJcrService(jcrRepository, context);
-        service.setCallContext(context);
-        
-        ConformanceCmisServiceWrapper serviceWrapper = new ConformanceCmisServiceWrapper(service, 
-                DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES, DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
-
-        return serviceWrapper;
-    }
-
-    // ------------------------------------------< factories >---
-
-    /**
-     * Acquire the JCR repository given a configuration. This implementation
-     * used {@link javax.imageio.spi.ServiceRegistry#lookupProviders(Class)} for
-     * locating <code>RepositoryFactory</code> instances. The first instance
-     * which can handle the <code>jcrConfig</code> parameters is used to acquire
-     * the repository.
-     * 
-     * @param jcrConfig
-     *            configuration determining the JCR repository to be returned
-     * @return
-     * @throws RepositoryException
-     */
-    protected Repository acquireJcrRepository(Map<String, String> jcrConfig) {
-        try {
-            Iterator<RepositoryFactory> factories = ServiceRegistry.lookupProviders(RepositoryFactory.class);
-            while (factories.hasNext()) {
-                RepositoryFactory factory = factories.next();
-                log.debug("Trying to acquire JCR repository from factory " + factory);
-                Repository repository = factory.getRepository(jcrConfig);
-                if (repository != null) {
-                    log.debug("Successfully acquired JCR repository from factory " + factory);
-                    return repository;
-                } else {
-                    log.debug("Could not acquire JCR repository from factory " + factory);
-                }
-            }
-            throw new CmisConnectionException("No JCR repository factory for configured parameters");
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisConnectionException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Create a <code>JcrService</code> from a <code>JcrRepository</code>
-     * JcrRepository> and <code>CallContext</code>.
-     * 
-     * @param jcrRepository
-     * @param context
-     * @return
-     */
-    protected JcrService createJcrService(JcrRepository jcrRepository, CallContext context) {
-        return new JcrService(jcrRepository);
-    }
-
-    protected JcrTypeManager createTypeManager() {
-        return new JcrTypeManager();
-    }
-
-    protected JcrTypeHandlerManager createTypeHandlerManager(PathManager pathManager, JcrTypeManager typeManager) {
-        JcrTypeHandlerManager typeHandlerManager = new JcrTypeHandlerManager(pathManager, typeManager);
-        typeHandlerManager.addHandler(new DefaultFolderTypeHandler());
-        typeHandlerManager.addHandler(new DefaultDocumentTypeHandler());
-        typeHandlerManager.addHandler(new DefaultUnversionedDocumentTypeHandler());
-        return typeHandlerManager;
-    }
-
-    // ------------------------------------------< private >---
-
-    private void readConfiguration(Map<String, String> parameters) {
-        Map<String, String> map = new HashMap<String, String>();
-        List<String> keys = new ArrayList<String>(parameters.keySet());
-        Collections.sort(keys);
-
-        for (String key : keys) {
-            if (key.startsWith(PREFIX_JCR_CONFIG)) {
-                String jcrKey = key.substring(PREFIX_JCR_CONFIG.length());
-                String jcrValue = replaceSystemProperties(parameters.get(key));
-                map.put(jcrKey, jcrValue);
-            }
-
-            else if (MOUNT_PATH_CONFIG.equals(key)) {
-                mountPath = parameters.get(key);
-                log.debug("Configuration: " + MOUNT_PATH_CONFIG + '=' + mountPath);
-            }
-
-            else {
-                log.warn("Configuration: unrecognized key: " + key);
-            }
-        }
-
-        jcrConfig = Collections.unmodifiableMap(map);
-        log.debug("Configuration: jcr=" + jcrConfig);
-    }
-
-    private static String replaceSystemProperties(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        StringBuilder result = new StringBuilder();
-        StringBuilder property = null;
-        boolean inProperty = false;
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-
-            if (inProperty) {
-                if (c == '}') {
-                    String value = System.getProperty(property.toString());
-                    if (value != null) {
-                        result.append(value);
-                    }
-                    inProperty = false;
-                } else {
-                    property.append(c);
-                }
-            } else {
-                if (c == '{') {
-                    property = new StringBuilder();
-                    inProperty = true;
-                } else {
-                    result.append(c);
-                }
-            }
-        }
-
-        return result.toString();
-    }
-
-    public JcrTypeManager getTypeManager() {
-        return typeManager;
-    }
-
-    public JcrRepository getJcrRepository() {
-        return jcrRepository;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrTypeManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrTypeManager.java
deleted file mode 100644
index 270dcfc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrTypeManager.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.impl.WSConverter;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Type Manager.
- */
-public class JcrTypeManager implements TypeManager {
-    private static final Logger LOG = LoggerFactory.getLogger(JcrTypeManager.class);
-
-    public static final String DOCUMENT_TYPE_ID = "cmis:document";
-    public static final String FOLDER_TYPE_ID = "cmis:folder";
-    public static final String RELATIONSHIP_TYPE_ID = "cmis:relationship";
-    public static final String POLICY_TYPE_ID = "cmis:policy";
-    public static final String NAMESPACE = "http://opencmis.org/jcr";
-
-    private final Map<String, TypeDefinitionContainerImpl> fTypes;
-
-    public JcrTypeManager() {
-        fTypes = new HashMap<String, TypeDefinitionContainerImpl>();
-    }
-
-    /**
-     * Adds a type to collection with inheriting base type properties.
-     * 
-     * @param type
-     *            type to add
-     * @return <code>true</code> iff the type was successfully added
-     */
-    public boolean addType(TypeDefinition type) {
-        if (type == null) {
-            return false;
-        }
-
-        if (fTypes.containsKey(type.getId())) {
-            // can't overwrite a type
-            return false;
-        }
-
-        AbstractTypeDefinition newType = (AbstractTypeDefinition) copyTypeDefinition(type);
-
-        if (!newType.getBaseTypeId().value().equals(newType.getId())) {
-
-            // find base type
-            TypeDefinition baseType;
-            if (newType.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) {
-                baseType = copyTypeDefinition(fTypes.get(DOCUMENT_TYPE_ID).getTypeDefinition());
-            } else if (newType.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
-                baseType = copyTypeDefinition(fTypes.get(FOLDER_TYPE_ID).getTypeDefinition());
-            } else if (newType.getBaseTypeId() == BaseTypeId.CMIS_RELATIONSHIP) {
-                baseType = copyTypeDefinition(fTypes.get(RELATIONSHIP_TYPE_ID).getTypeDefinition());
-            } else if (newType.getBaseTypeId() == BaseTypeId.CMIS_POLICY) {
-                baseType = copyTypeDefinition(fTypes.get(POLICY_TYPE_ID).getTypeDefinition());
-            } else {
-                return false;
-            }
-
-            // copy property definition
-            for (PropertyDefinition<?> propDef : baseType.getPropertyDefinitions().values()) {
-                ((AbstractPropertyDefinition<?>) propDef).setIsInherited(true);
-                newType.addPropertyDefinition(propDef);
-            }
-
-        }
-
-        // add it
-        addTypeInternal(newType);
-
-        LOG.info("Added type '" + newType.getId() + "'.");
-
-        return true;
-    }
-
-    public TypeDefinition getType(String typeId) {
-        TypeDefinitionContainer tc = fTypes.get(typeId);
-        return tc == null ? null : tc.getTypeDefinition();
-    }
-
-    public static boolean isVersionable(TypeDefinition typeDef) {
-        return typeDef instanceof DocumentTypeDefinition ? ((DocumentTypeDefinition) typeDef).isVersionable() : false;
-    }
-
-    public static TypeDefinition copyTypeDefinition(TypeDefinition type) {
-        return WSConverter.convert(WSConverter.convert(type));
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.3 getTypeChildren
-     */
-    public TypeDefinitionList getTypeChildren(String typeId, boolean includePropertyDefinitions, BigInteger maxItems,
-            BigInteger skipCount) {
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl(new ArrayList<TypeDefinition>());
-
-        int skip = skipCount == null ? 0 : skipCount.intValue();
-        if (skip < 0) {
-            skip = 0;
-        }
-
-        int max = maxItems == null ? Integer.MAX_VALUE : maxItems.intValue();
-        if (max < 1) {
-            return result;
-        }
-
-        if (typeId == null) {
-            if (skip < 1) {
-                result.getList().add(copyTypeDefinition(fTypes.get(FOLDER_TYPE_ID).getTypeDefinition()));
-                max--;
-            }
-            if (skip < 2 && max > 0) {
-                result.getList().add(copyTypeDefinition(fTypes.get(DOCUMENT_TYPE_ID).getTypeDefinition()));
-            }
-
-            result.setHasMoreItems(result.getList().size() + skip < 2);
-            result.setNumItems(BigInteger.valueOf(2));
-        } else {
-            TypeDefinitionContainer tc = fTypes.get(typeId);
-            if (tc == null || tc.getChildren() == null) {
-                return result;
-            }
-
-            for (TypeDefinitionContainer child : tc.getChildren()) {
-                if (skip > 0) {
-                    skip--;
-                    continue;
-                }
-
-                result.getList().add(copyTypeDefinition(child.getTypeDefinition()));
-
-                max--;
-                if (max == 0) {
-                    break;
-                }
-            }
-
-            result.setHasMoreItems(result.getList().size() + skip < tc.getChildren().size());
-            result.setNumItems(BigInteger.valueOf(tc.getChildren().size()));
-        }
-
-        if (!includePropertyDefinitions) {
-            for (TypeDefinition type : result.getList()) {
-                type.getPropertyDefinitions().clear();
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.2.4 getTypeDescendants
-     */
-    public List<TypeDefinitionContainer> getTypesDescendants(String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions) {
-
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-
-        // check depth
-        int d = depth == null ? -1 : depth.intValue();
-        if (d == 0) {
-            throw new CmisInvalidArgumentException("Depth must not be 0!");
-        }
-
-        // set property definition flag to default value if not set
-        boolean ipd = Boolean.TRUE.equals(includePropertyDefinitions);
-
-        if (typeId == null) {
-            result.add(getTypesDescendants(d, fTypes.get(FOLDER_TYPE_ID), ipd));
-            result.add(getTypesDescendants(d, fTypes.get(DOCUMENT_TYPE_ID), ipd));
-        } else {
-            TypeDefinitionContainer tc = fTypes.get(typeId);
-            if (tc != null) {
-                result.add(getTypesDescendants(d, tc, ipd));
-            }
-        }
-
-        return result;
-    }
-
-    // ------------------------------------------< JcrTypeManager >---
-
-    public TypeDefinitionContainer getTypeById(String typeId) {
-        return fTypes.get(typeId);
-    }
-
-    public TypeDefinition getTypeByQueryName(String typeQueryName) {
-        for (TypeDefinitionContainerImpl type : fTypes.values()) {
-            TypeDefinition typeDef = type.getTypeDefinition();
-            if (typeDef.getQueryName().equals(typeQueryName)) {
-                return typeDef;
-            }
-        }
-
-        return null;
-    }
-
-    public Collection<TypeDefinitionContainer> getTypeDefinitionList() {
-        Collection<TypeDefinitionContainer> types = new ArrayList<TypeDefinitionContainer>(fTypes.size());
-        types.addAll(fTypes.values());
-        return types;
-    }
-
-    public List<TypeDefinitionContainer> getRootTypes() {
-        List<TypeDefinitionContainer> types = new ArrayList<TypeDefinitionContainer>(2);
-        types.add(fTypes.get(FOLDER_TYPE_ID));
-        types.add(fTypes.get(DOCUMENT_TYPE_ID));
-        return types;
-    }
-
-    public String getPropertyIdForQueryName(TypeDefinition typeDefinition, String propQueryName) {
-        for (PropertyDefinition<?> pd : typeDefinition.getPropertyDefinitions().values()) {
-            if (pd.getQueryName().equals(propQueryName)) {
-                return pd.getId();
-            }
-        }
-
-        return null;
-    }
-
-    public static void addBasePropertyDefinitions(AbstractTypeDefinition type) {
-        type.addPropertyDefinition(createPropDef(PropertyIds.BASE_TYPE_ID, "Base Type Id", "Base Type Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.OBJECT_ID, "Object Id", "Object Id", PropertyType.ID,
-                Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.OBJECT_TYPE_ID, "Type Id", "Type Id", PropertyType.ID,
-                Cardinality.SINGLE, Updatability.ONCREATE, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.NAME, "Name", "Name", PropertyType.STRING,
-                Cardinality.SINGLE, Updatability.READWRITE, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CREATED_BY, "Created By", "Created By",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CREATION_DATE, "Creation Date", "Creation Date",
-                PropertyType.DATETIME, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.LAST_MODIFIED_BY, "Last Modified By", "Last Modified By",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.LAST_MODIFICATION_DATE, "Last Modification Date",
-                "Last Modification Date", PropertyType.DATETIME, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CHANGE_TOKEN, "Change Token", "Change Token",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
-    }
-
-    public static void addFolderPropertyDefinitions(FolderTypeDefinitionImpl type) {
-        type.addPropertyDefinition(createPropDef(PropertyIds.PARENT_ID, "Parent Id", "Parent Id", PropertyType.ID,
-                Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS,
-                "Allowed Child Object Type Ids", "Allowed Child Object Type Ids", PropertyType.ID, Cardinality.MULTI,
-                Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.PATH, "Path", "Path", PropertyType.STRING,
-                Cardinality.SINGLE, Updatability.READONLY, false, false));
-    }
-
-    public static void addDocumentPropertyDefinitions(DocumentTypeDefinitionImpl type) {
-        type.addPropertyDefinition(createPropDef(PropertyIds.IS_IMMUTABLE, "Is Immutable", "Is Immutable",
-                PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.IS_LATEST_VERSION, "Is Latest Version",
-                "Is Latest Version", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.IS_MAJOR_VERSION, "Is Major Version", "Is Major Version",
-                PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.IS_LATEST_MAJOR_VERSION, "Is Latest Major Version",
-                "Is Latest Major Version", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false,
-                false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.VERSION_LABEL, "Version Label", "Version Label",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.VERSION_SERIES_ID, "Version Series Id",
-                "Version Series Id", PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                "Is Version Series Checked Out", "Is Version Series Checked Out", PropertyType.BOOLEAN,
-                Cardinality.SINGLE, Updatability.READONLY, false, true));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                "Version Series Checked Out Id", "Version Series Checked Out Id", PropertyType.ID, Cardinality.SINGLE,
-                Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                "Version Series Checked Out By", "Version Series Checked Out By", PropertyType.ID, Cardinality.SINGLE,
-                Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CHECKIN_COMMENT, "Checkin Comment", "Checkin Comment",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CONTENT_STREAM_LENGTH, "Content Stream Length",
-                "Content Stream Length", PropertyType.INTEGER, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CONTENT_STREAM_MIME_TYPE, "MIME Type", "MIME Type",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CONTENT_STREAM_FILE_NAME, "Filename", "Filename",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
-
-        type.addPropertyDefinition(createPropDef(PropertyIds.CONTENT_STREAM_ID, "Content Stream Id",
-                "Content Stream Id", PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, false));
-    }
-
-    /**
-     * Creates a property definition object.
-     */
-    public static PropertyDefinition<?> createPropDef(String id, String displayName, String description,
-            PropertyType datatype, Cardinality cardinality, Updatability updateability, boolean inherited,
-            boolean required) {
-
-        AbstractPropertyDefinition<?> result;
-
-        switch (datatype) {
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            break;
-        case STRING:
-            result = new PropertyStringDefinitionImpl();
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            break;
-        default:
-            throw new RuntimeException("Unknown datatype! Spec change?");
-        }
-
-        result.setId(id);
-        result.setLocalName(id);
-        result.setDisplayName(displayName);
-        result.setDescription(description);
-        result.setPropertyType(datatype);
-        result.setCardinality(cardinality);
-        result.setUpdatability(updateability);
-        result.setIsInherited(inherited);
-        result.setIsRequired(required);
-        result.setIsQueryable(false);
-        result.setQueryName(id);
-
-        return result;
-    }
-
-    // ------------------------------------------< private >---
-
-    /**
-     * Adds a type to collection.
-     */
-    private void addTypeInternal(AbstractTypeDefinition type) {
-        if (type == null) {
-            return;
-        }
-
-        TypeDefinitionContainerImpl tc = new TypeDefinitionContainerImpl();
-        tc.setTypeDefinition(type);
-
-        // add to parent
-        if (type.getParentTypeId() != null) {
-            TypeDefinitionContainerImpl tdc = fTypes.get(type.getParentTypeId());
-            if (tdc != null) {
-                if (tdc.getChildren() == null) {
-                    tdc.setChildren(new ArrayList<TypeDefinitionContainer>());
-                }
-                tdc.getChildren().add(tc);
-            }
-        }
-
-        fTypes.put(type.getId(), tc);
-    }
-
-    /**
-     * Gathers the type descendants tree.
-     */
-    private static TypeDefinitionContainer getTypesDescendants(int depth, TypeDefinitionContainer tc,
-            boolean includePropertyDefinitions) {
-
-        TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
-
-        TypeDefinition type = copyTypeDefinition(tc.getTypeDefinition());
-        if (!includePropertyDefinitions) {
-            type.getPropertyDefinitions().clear();
-        }
-
-        result.setTypeDefinition(type);
-
-        if (depth != 0) {
-            if (tc.getChildren() != null) {
-                result.setChildren(new ArrayList<TypeDefinitionContainer>());
-                for (TypeDefinitionContainer tdc : tc.getChildren()) {
-                    result.getChildren().add(
-                            getTypesDescendants(depth < 0 ? -1 : depth - 1, tdc, includePropertyDefinitions));
-                }
-            }
-        }
-
-        return result;
-    }
-
-    public void addTypeDefinition(TypeDefinition typeDefinition, boolean addInheritedProperties) {
-        throw new CmisNotSupportedException("Method not implemented.");
-    }
-
-    public void updateTypeDefinition(TypeDefinition typeDefinition) {
-        throw new CmisNotSupportedException("Method not implemented.");
-    }
-
-    public void deleteTypeDefinition(String typeId) {
-        throw new CmisNotSupportedException("Method not implemented.");
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrUnversionedDocument.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrUnversionedDocument.java
deleted file mode 100644
index dcbb5b6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrUnversionedDocument.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.util.Set;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultUnversionedDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-
-/**
- * Instances of this class represent a non versionable cmis:document backed by
- * an underlying JCR <code>Node</code>.
- */
-public class JcrUnversionedDocument extends JcrDocument {
-
-    public JcrUnversionedDocument(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        super(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    // ------------------------------------------< protected >---
-
-    @Override
-    protected Node getContextNode() throws RepositoryException {
-        return getNode().getNode(Node.JCR_CONTENT);
-    }
-
-    @Override
-    protected Set<Action> compileAllowableActions(Set<Action> aas) {
-        Set<Action> result = super.compileAllowableActions(aas);
-        setAction(result, Action.CAN_GET_ALL_VERSIONS, false);
-        setAction(result, Action.CAN_CHECK_OUT, false);
-        setAction(result, Action.CAN_CANCEL_CHECK_OUT, false);
-        setAction(result, Action.CAN_CHECK_IN, false);
-        return result;
-    }
-
-    @Override
-    protected String getTypeIdInternal() {
-        return DefaultUnversionedDocumentTypeHandler.DOCUMENT_UNVERSIONED_TYPE_ID;
-    }
-
-    @Override
-    protected boolean isLatestVersion() {
-        return true;
-    }
-
-    @Override
-    protected boolean isMajorVersion() {
-        return true;
-    }
-
-    @Override
-    protected boolean isLatestMajorVersion() {
-        return true;
-    }
-
-    @Override
-    protected String getVersionLabel() {
-        return "0.0";
-    }
-
-    @Override
-    protected boolean isCheckedOut() {
-        return false;
-    }
-
-    @Override
-    protected String getCheckedOutId() {
-        return null;
-    }
-
-    @Override
-    protected String getCheckedOutBy() throws RepositoryException {
-        return null;
-    }
-
-    @Override
-    protected String getCheckInComment() {
-        return "";
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersion.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersion.java
deleted file mode 100644
index abb49c5..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersion.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.version.Version;
-
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-
-/**
- * Instances of this class represent a specific version of a cmis:document
- * backed by an underlying JCR <code>Node</code>.
- */
-public class JcrVersion extends JcrVersionBase {
-    private static final Pattern VERSION_LABEL_PATTERN = Pattern.compile("(\\d+)(\\.(\\d+))?.*");
-    private static final int GROUP_MAJOR = 1;
-    private static final int GROUP_MINOR = 3;
-
-    private final Version version;
-
-    public JcrVersion(Node node, Version version, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-
-        super(node, typeManager, pathManager, typeHandlerManager);
-        this.version = version;
-    }
-
-    // ------------------------------------------< protected >---
-
-    @Override
-    protected Node getContextNode() throws RepositoryException {
-        Node frozen = version.getFrozenNode();
-        if (frozen.hasNode(Node.JCR_CONTENT)) {
-            return frozen.getNode(Node.JCR_CONTENT);
-        } else {
-            return getNode().getNode(Node.JCR_CONTENT); // root version
-        }
-    }
-
-    @Override
-    protected String getObjectId() throws RepositoryException {
-        return getVersionSeriesId();
-    }
-
-    @Override
-    protected boolean isLatestVersion() throws RepositoryException {
-        Version baseVersion = getBaseVersion(getNode());
-        return baseVersion.isSame(version);
-    }
-
-    @Override
-    protected boolean isMajorVersion() {
-        return true;
-    }
-
-    @Override
-    protected boolean isLatestMajorVersion() throws RepositoryException {
-        return isLatestVersion();
-    }
-
-    @Override
-    protected String getVersionLabel() throws RepositoryException {
-        String name = version.getName();
-        String major = parseVersion(name, GROUP_MINOR);
-
-        return major == null ? name : (Integer.parseInt(major) + 1) + ".0";
-    }
-
-    @Override
-    protected String getCheckInComment() throws RepositoryException {
-        // todo set checkinComment
-        return "";
-    }
-
-    // ------------------------------------------< private >---
-
-    private static String parseVersion(String name, int group) {
-        Matcher matcher = VERSION_LABEL_PATTERN.matcher(name);
-        return matcher.matches() ? matcher.group(group) : null;
-    }
-
-    /**
-     * Retrieve version name.
-     * 
-     * @return version name
-     * @throws RepositoryException
-     */
-    public String getVersionName() throws RepositoryException {
-        return version.getName();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersionBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersionBase.java
deleted file mode 100644
index fb20298..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrVersionBase.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.version.VersionIterator;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Instances of this class represent a versionable cmis:document and its
- * versions backed by an underlying JCR <code>Node</code>.
- */
-public abstract class JcrVersionBase extends JcrDocument {
-    private static final Logger log = LoggerFactory.getLogger(JcrVersionBase.class);
-
-    protected JcrVersionBase(Node node, JcrTypeManager typeManager, PathManager pathManager,
-            JcrTypeHandlerManager typeHandlerManager) {
-        super(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.6 getAllVersions
-     */
-    public Iterator<JcrVersion> getVersions() {
-        try {
-            VersionHistory versionHistory = getVersionHistory(getNode());
-            final VersionIterator versions = versionHistory.getAllLinearVersions();
-
-            return new Iterator<JcrVersion>() {
-                public boolean hasNext() {
-                    return versions.hasNext();
-                }
-
-                public JcrVersion next() {
-                    return new JcrVersion(getNode(), versions.nextVersion(), typeManager, pathManager,
-                            typeHandlerManager);
-                }
-
-                public void remove() {
-                    throw new UnsupportedOperationException();
-                }
-            };
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public void delete(boolean allVersions, boolean isPwc) {
-        Node node = getNode();
-        try {
-            if (node.isCheckedOut()) {
-                if (isPwc) {
-                    cancelCheckout(node);
-                } else {
-                    throw new CmisStorageException("Cannot delete checked out document: " + getId());
-                }
-            } else if (allVersions) {
-                checkout(node);
-                node.remove();
-                node.getSession().save();
-            } else {
-                throw new CmisRuntimeException("Cannot delete a single version");
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.1 checkOut
-     * 
-     * @throws CmisRuntimeException
-     */
-    public JcrPrivateWorkingCopy checkout() {
-        Node node = getNode();
-        try {
-            if (node.isCheckedOut()) {
-                throw new CmisConstraintException("Document is already checked out " + getId());
-            }
-
-            checkout(node);
-            return getPwc();
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.3 checkedIn
-     * 
-     * @throws CmisRuntimeException
-     */
-    public JcrVersion checkin(Properties properties, ContentStream contentStream, String checkinComment) {
-        Node node = getNode();
-
-        try {
-            if (!node.isCheckedOut()) {
-                throw new CmisStorageException("Not checked out: " + getId());
-            }
-
-            if (properties != null && !properties.getPropertyList().isEmpty()) {
-                updateProperties(properties);
-            }
-
-            if (contentStream != null) {
-                setContentStream(contentStream, true);
-            }
-
-            // todo handle checkinComment
-            checkin(node);
-            return (JcrVersion) create(node);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * See CMIS 1.0 section 2.2.7.2 cancelCheckout
-     * 
-     * @throws CmisRuntimeException
-     */
-    public void cancelCheckout() {
-        Node node = getNode();
-        try {
-            cancelCheckout(node);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Get the private working copy of the versions series or throw an exception
-     * if not checked out.
-     * 
-     * @return a {@link JcrPrivateWorkingCopy} instance
-     * @throws CmisObjectNotFoundException
-     *             if not checked out
-     * @throws CmisRuntimeException
-     */
-    public JcrPrivateWorkingCopy getPwc() {
-        try {
-            Node node = getNode();
-            if (node.isCheckedOut()) {
-                return new JcrPrivateWorkingCopy(getNode(), typeManager, pathManager, typeHandlerManager);
-            } else {
-                throw new CmisObjectNotFoundException("Not checked out document has no private working copy");
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Get a specific version by name
-     * 
-     * @param name
-     *            name of the version to get
-     * @return a {@link JcrVersion} instance for <code>name</code>
-     * @throws CmisObjectNotFoundException
-     *             if a version <code>name</code> does not exist
-     * @throws CmisRuntimeException
-     */
-    public JcrVersion getVersion(String name) {
-        try {
-            Node node = getNode();
-            VersionHistory versionHistory = getVersionHistory(node);
-            Version version = versionHistory.getVersion(name);
-            return new JcrVersion(node, version, typeManager, pathManager, typeHandlerManager);
-        } catch (UnsupportedRepositoryOperationException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (VersionException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    // ------------------------------------------< protected >---
-
-    /**
-     * @return Id of the version representing the base of this versions series
-     * @throws RepositoryException
-     */
-    protected String getBaseNodeId() throws RepositoryException {
-        Version baseVersion = getBaseVersion(getNode());
-        JcrNode baseNode = new JcrVersion(getNode(), baseVersion, typeManager, pathManager, typeHandlerManager);
-        return baseNode.getId();
-    }
-
-    /**
-     * @return Id of the private working copy of this version series
-     * @throws RepositoryException
-     */
-    protected String getPwcId() throws RepositoryException {
-        return null;
-    }
-
-    @Override
-    protected void compileProperties(PropertiesImpl properties, Set<String> filter, ObjectInfoImpl objectInfo)
-            throws RepositoryException {
-
-        super.compileProperties(properties, filter, objectInfo);
-
-        objectInfo.setWorkingCopyOriginalId(getBaseNodeId());
-        objectInfo.setWorkingCopyId(getPwcId());
-    }
-
-    @Override
-    protected Set<Action> compileAllowableActions(Set<Action> aas) {
-        Set<Action> result = super.compileAllowableActions(aas);
-        setAction(result, Action.CAN_GET_ALL_VERSIONS, true);
-        setAction(result, Action.CAN_CHECK_OUT, true);
-        setAction(result, Action.CAN_CANCEL_CHECK_OUT, true);
-        setAction(result, Action.CAN_CHECK_IN, true);
-        return result;
-    }
-
-    @Override
-    protected String getTypeIdInternal() {
-        return JcrTypeManager.DOCUMENT_TYPE_ID;
-    }
-
-    @Override
-    protected boolean isCheckedOut() throws RepositoryException {
-        return getNode().isCheckedOut();
-    }
-
-    @Override
-    protected String getCheckedOutId() throws RepositoryException {
-        return isCheckedOut() ? getVersionSeriesId() + "/pwc" : null;
-    }
-
-    @Override
-    protected String getCheckedOutBy() throws RepositoryException {
-        return isCheckedOut() ? getNode().getSession().getUserID() : null;
-    }
-
-    // ------------------------------------------< private >---
-
-    private static void checkout(Node node) throws RepositoryException {
-        getVersionManager(node).checkout(node.getPath());
-    }
-
-    private static void checkin(Node node) throws RepositoryException {
-        getVersionManager(node).checkin(node.getPath());
-    }
-
-    private static void cancelCheckout(Node node) throws RepositoryException {
-        Version base = getBaseVersion(node);
-        getVersionManager(node).restore(base, true);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PathManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PathManager.java
deleted file mode 100644
index 4de6801..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PathManager.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Utility class for mapping JCR paths to CMIS paths
- */
-public class PathManager {
-    private static final Logger LOG = LoggerFactory.getLogger(PathManager.class);
-
-    /**
-     * Identifier of the root folder
-     */
-    public static final String CMIS_ROOT_ID = "[root]";
-
-    /**
-     * Root path
-     */
-    public static final String CMIS_ROOT_PATH = "/";
-
-    private final String jcrRootPath;
-
-    /**
-     * Create a new <code>PathManager</code> instance for the given JCR root
-     * path.
-     * 
-     * @param jcrRootPath
-     */
-    public PathManager(String jcrRootPath) {
-        this.jcrRootPath = normalize(jcrRootPath);
-    }
-
-    /**
-     * @return the JCR root path
-     */
-    public String getJcrRootPath() {
-        return jcrRootPath;
-    }
-
-    /**
-     * Determines whether a JCR <code>Node</code> is the root node wrt. to this
-     * <code>PathManager</code> instance. That is, whether the path of the node
-     * is equal to this instance's JCR root path.
-     * 
-     * @param node
-     * @return <code>true</code> iff <code>node</code> is the root node wrt. to
-     *         this <code>PathManager</code> instance.
-     */
-    public boolean isRoot(Node node) {
-        try {
-            return node.getPath().equals(jcrRootPath);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Determine the CMIS path given a JCR <code>Node</code>.
-     * 
-     * @param node
-     * @return
-     * @throws IllegalArgumentException
-     *             when <code>node</code> is not part of the hierarchy
-     */
-    public String getPath(Node node) {
-        try {
-            if (jcrRootPath.length() > node.getPath().length()) {
-                throw new IllegalArgumentException("Node is not part of the hierarchy: " + node.getPath());
-            }
-
-            String path = node.getPath().substring(jcrRootPath.length());
-            return path.startsWith("/") ? path : '/' + path;
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * @param cmisPath
-     * @return <code>true</code> iff <code>cmisPath</code> equals
-     *         {@link PathManager#CMIS_ROOT_PATH}
-     */
-    public static boolean isRoot(String cmisPath) {
-        return CMIS_ROOT_PATH.equals(cmisPath);
-    }
-
-    /**
-     * @param cmisPath
-     * @return <code>true</code> iff <code>cmisPath</code>
-     */
-    public static boolean isAbsolute(String cmisPath) {
-        return cmisPath.startsWith(CMIS_ROOT_PATH);
-    }
-
-    /**
-     * Create a CMIS path from a parent path and a child element
-     * 
-     * @param cmisPath
-     *            parent path
-     * @param child
-     *            child element
-     * @return
-     */
-    public static String createCmisPath(String cmisPath, String child) {
-        return cmisPath.length() > 0 && cmisPath.charAt(cmisPath.length() - 1) == '/' ? cmisPath + child : cmisPath
-                + '/' + child;
-    }
-
-    /**
-     * Relativize an CMIS path wrt. to a prefix.
-     * 
-     * @param prefix
-     * @param cmisPath
-     * @return a string <code>r</code> such that <code>prefix</code> +
-     *         <code>r</code> = <code>cmisPath</code>
-     * @throws IllegalArgumentException
-     *             if <code>prefix</code> is not a prefix of
-     *             <code>cmisPath</code>
-     */
-    public static String relativize(String prefix, String cmisPath) {
-        if (cmisPath.startsWith(prefix)) {
-            return cmisPath.substring(prefix.length());
-        } else {
-            throw new IllegalArgumentException(prefix + " is not a prefix of " + cmisPath);
-        }
-    }
-
-    // ------------------------------------------< private >---
-
-    private static String normalize(String path) {
-        if (path == null || path.length() == 0) {
-            return "/";
-        }
-
-        if (!path.startsWith("/")) {
-            throw new CmisInvalidArgumentException("Root path must be absolute. Got: " + path);
-        }
-
-        while (path.length() > 1 && path.endsWith("/")) {
-            path = path.substring(0, path.length() - 1);
-        }
-        return path;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PropertyHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PropertyHelper.java
deleted file mode 100644
index 80adbb1..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/PropertyHelper.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.PropertyId;
-import org.apache.chemistry.opencmis.commons.data.PropertyString;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriImpl;
-
-/**
- * Helper class with utility functions for handling {@link Properties}.
- */
-public final class PropertyHelper {
-    private PropertyHelper() {
-    }
-
-    /**
-     * Retrieve a string value.
-     * 
-     * @param properties
-     * @param name
-     *            the name of the value to retrieve
-     * @return the first value of the given <code>name</code> or
-     *         <code>null</code> if either these are no string properties or no
-     *         property of <code>name</code> exists.
-     */
-    public static String getStringProperty(Properties properties, String name) {
-        PropertyData<?> property = properties.getProperties().get(name);
-        if (!(property instanceof PropertyString)) {
-            return null;
-        }
-
-        return ((PropertyString) property).getFirstValue();
-    }
-
-    /**
-     * Gets the type id from a set of properties.
-     */
-    public static String getTypeId(Properties properties) {
-        PropertyData<?> typeProperty = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-        if (!(typeProperty instanceof PropertyId)) {
-            throw new CmisInvalidArgumentException("Type id must be set!");
-        }
-
-        String typeId = ((PropertyId) typeProperty).getFirstValue();
-        if (typeId == null) {
-            throw new CmisInvalidArgumentException("Type id must be set!");
-        }
-
-        return typeId;
-    }
-
-    /**
-     * @param prop
-     * @return <code>true</code> iff <code>prop</code> denotes an empty property
-     *         data value
-     */
-    public static boolean isPropertyEmpty(PropertyData<?> prop) {
-        return prop == null || prop.getValues() == null || prop.getValues().isEmpty();
-    }
-
-    /**
-     * Determine the default property data value for a given property
-     * definition.
-     * 
-     * @param propDef
-     * @return
-     * @throws CmisRuntimeException
-     *             if <code>propDef</code> is invalid or unknown.
-     */
-    @SuppressWarnings("unchecked")
-    public static PropertyData<?> getDefaultValue(PropertyDefinition<?> propDef) {
-        if (propDef == null) {
-            return null;
-        }
-
-        List<?> defaultValue = propDef.getDefaultValue();
-        if (defaultValue != null && !defaultValue.isEmpty()) {
-            switch (propDef.getPropertyType()) {
-            case BOOLEAN:
-                return new PropertyBooleanImpl(propDef.getId(), (List<Boolean>) defaultValue);
-            case DATETIME:
-                return new PropertyDateTimeImpl(propDef.getId(), (List<GregorianCalendar>) defaultValue);
-            case DECIMAL:
-                return new PropertyDecimalImpl(propDef.getId(), (List<BigDecimal>) defaultValue);
-            case HTML:
-                return new PropertyHtmlImpl(propDef.getId(), (List<String>) defaultValue);
-            case ID:
-                return new PropertyIdImpl(propDef.getId(), (List<String>) defaultValue);
-            case INTEGER:
-                return new PropertyIntegerImpl(propDef.getId(), (List<BigInteger>) defaultValue);
-            case STRING:
-                return new PropertyStringImpl(propDef.getId(), (List<String>) defaultValue);
-            case URI:
-                return new PropertyUriImpl(propDef.getId(), (List<String>) defaultValue);
-            default:
-                throw new CmisRuntimeException("Unknown datatype: " + propDef.getPropertyType());
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/AbstractJcrTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/AbstractJcrTypeHandler.java
deleted file mode 100644
index 564da0e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/AbstractJcrTypeHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.PathManager;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-
-/**
- * This abstract class takes care of collecting references set when the handler
- * is added to {@link JcrTypeHandlerManager}.
- */
-public abstract class AbstractJcrTypeHandler implements JcrTypeHandler {
-
-    protected JcrTypeManager typeManager;
-    protected PathManager pathManager;
-    protected JcrTypeHandlerManager typeHandlerManager;
-
-    public void initialize(PathManager pathManager, JcrTypeManager typeManager, JcrTypeHandlerManager typeHandlerManager) {
-        this.typeManager = typeManager;
-        this.pathManager = pathManager;
-        this.typeHandlerManager = typeHandlerManager;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentIdentifierMap.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentIdentifierMap.java
deleted file mode 100644
index faee42c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentIdentifierMap.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-
-/**
- * Provides mappings to standard jcr properties for documents.
- */
-public class DefaultDocumentIdentifierMap extends DefaultIdentifierMapBase {
-
-    private final boolean isVersionable;
-
-    public DefaultDocumentIdentifierMap(boolean isVersionable) {
-        super("nt:file");
-        this.isVersionable = isVersionable;
-        cmis2Jcr.put(PropertyIds.CREATED_BY, "jcr:content/@jcr:createdBy");
-        cmis2Jcr.put(PropertyIds.CREATION_DATE, "jcr:content/@jcr:created");
-        cmis2Jcr.put(PropertyIds.LAST_MODIFIED_BY, "jcr:content/@jcr:lastModifiedBy");
-        cmis2Jcr.put(PropertyIds.LAST_MODIFICATION_DATE, "jcr:content/@jcr:lastModified");
-        cmis2Jcr.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "jcr:content/@jcr:mimeType");
-        cmis2Jcr.put(PropertyIds.CONTENT_STREAM_FILE_NAME, "fn:name()");
-        // xxx not supported: IS_IMMUTABLE, IS_LATEST_VERSION, IS_MAJOR_VERSION, IS_LATEST_MAJOR_VERSION,
-        // VERSION_LABEL, VERSION_SERIES_ID, IS_VERSION_SERIES_CHECKED_OUT, VERSION_SERIES_CHECKED_OUT_ID
-        // VERSION_SERIES_CHECKED_OUT_BY, CHECKIN_COMMENT, CONTENT_STREAM_ID, CONTENT_STREAM_LENGTH
-    }
-
-    @Override
-    public String jcrTypeCondition() {
-        return (isVersionable ? "" : "not") + "(@jcr:mixinTypes = 'mix:simpleVersionable')";
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java
deleted file mode 100644
index d8d7f51..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-
-import javax.jcr.Binary;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionManager;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.jcr.JcrBinary;
-import org.apache.chemistry.opencmis.jcr.JcrDocument;
-import org.apache.chemistry.opencmis.jcr.JcrFolder;
-import org.apache.chemistry.opencmis.jcr.JcrNode;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.JcrVersion;
-import org.apache.chemistry.opencmis.jcr.JcrVersionBase;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
-import org.apache.chemistry.opencmis.jcr.type.JcrDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Type handler that provides cmis:document.
- */
-public class DefaultDocumentTypeHandler extends AbstractJcrTypeHandler implements JcrDocumentTypeHandler {
-
-    private static final Logger LOG = LoggerFactory.getLogger(JcrFolder.class);
-
-    public String getTypeId() {
-        return BaseTypeId.CMIS_DOCUMENT.value();
-    }
-
-    public TypeDefinition getTypeDefinition() {
-        DocumentTypeDefinitionImpl documentType = new DocumentTypeDefinitionImpl();
-        documentType.setBaseTypeId(BaseTypeId.CMIS_DOCUMENT);
-        documentType.setIsControllableAcl(false);
-        documentType.setIsControllablePolicy(false);
-        documentType.setIsCreatable(true);
-        documentType.setDescription("Document");
-        documentType.setDisplayName("Document");
-        documentType.setIsFileable(true);
-        documentType.setIsFulltextIndexed(false);
-        documentType.setIsIncludedInSupertypeQuery(true);
-        documentType.setLocalName("Document");
-        documentType.setLocalNamespace(JcrTypeManager.NAMESPACE);
-        documentType.setIsQueryable(true);
-        documentType.setQueryName(JcrTypeManager.DOCUMENT_TYPE_ID);
-        documentType.setId(JcrTypeManager.DOCUMENT_TYPE_ID);
-        documentType.setIsVersionable(true);
-        documentType.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-
-        JcrTypeManager.addBasePropertyDefinitions(documentType);
-        JcrTypeManager.addDocumentPropertyDefinitions(documentType);
-
-        return documentType;
-    }
-
-    public IdentifierMap getIdentifierMap() {
-        return new DefaultDocumentIdentifierMap(true);
-    }
-
-    public JcrDocument getJcrNode(Node node) throws RepositoryException {
-        VersionManager versionManager = node.getSession().getWorkspace().getVersionManager();
-        Version version = versionManager.getBaseVersion(node.getPath());
-        return new JcrVersion(node, version, typeManager, pathManager, typeHandlerManager);
-    }
-
-    public boolean canHandle(Node node) throws RepositoryException {
-        return node.isNodeType(NodeType.NT_FILE) && node.isNodeType(supportedVersioningType(node));
-    }
-
-    protected String supportedVersioningType(Node node) throws RepositoryException {
-        if (Util.supportOption(node, Repository.OPTION_SIMPLE_VERSIONING_SUPPORTED)) {
-            return NodeType.MIX_SIMPLE_VERSIONABLE;
-        }
-
-        if (Util.supportOption(node, Repository.OPTION_VERSIONING_SUPPORTED)) {
-            return NodeType.MIX_VERSIONABLE;
-        }
-
-        throw new RepositoryException("The repository does not support versioning!");
-    }
-
-    public JcrNode createDocument(JcrFolder parentFolder, String name, Properties properties,
-            ContentStream contentStream, VersioningState versioningState) {
-        try {
-            Node fileNode = parentFolder.getNode().addNode(name, NodeType.NT_FILE);
-            addFileNodeMixins(fileNode, versioningState);
-            Node contentNode = fileNode.addNode(Node.JCR_CONTENT, NodeType.NT_RESOURCE);
-            addContentNodeMixins(contentNode);
-            // compile the properties
-            setContentNodeProperties(contentNode, properties);
-            // write content, if available
-            updateContentNode(contentStream, contentNode);
-            // save changes
-            fileNode.getSession().save();
-            return getJcrNode(fileNode, versioningState);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        } catch (IOException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-    }
-
-    protected JcrNode getJcrNode(Node fileNode, VersioningState versioningState) throws RepositoryException {
-        JcrNode jcrFileNode = getJcrNode(fileNode);
-        if (versioningState == VersioningState.NONE) {
-            return jcrFileNode;
-        }
-
-        JcrVersionBase jcrVersion = jcrFileNode.asVersion();
-        if (versioningState == VersioningState.MINOR || versioningState == VersioningState.MAJOR) {
-            return jcrVersion.checkin(null, null, "auto checkin");
-        } else {
-            return jcrVersion.getPwc();
-        }
-    }
-
-    protected void updateContentNode(ContentStream contentStream, Node contentNode) throws IOException,
-            RepositoryException {
-        Binary binary = contentStream == null || contentStream.getStream() == null ? JcrBinary.EMPTY : new JcrBinary(
-                new BufferedInputStream(contentStream.getStream()));
-        try {
-            contentNode.setProperty(Property.JCR_DATA, binary);
-            if (contentStream != null && contentStream.getMimeType() != null) {
-                contentNode.setProperty(Property.JCR_MIMETYPE, contentStream.getMimeType());
-            }
-        } finally {
-            binary.dispose();
-        }
-    }
-
-    protected void setContentNodeProperties(Node contentNode, Properties properties) {
-        JcrFolder.setProperties(contentNode, getTypeDefinition(), properties);
-    }
-
-    protected void addContentNodeMixins(Node contentNode) throws RepositoryException {
-        contentNode.addMixin(NodeType.MIX_CREATED);
-    }
-
-    protected void addFileNodeMixins(Node fileNode, VersioningState versioningState) throws RepositoryException {
-        if (versioningState != VersioningState.NONE) {
-            fileNode.addMixin(supportedVersioningType(fileNode));
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java
deleted file mode 100644
index 531f3da..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.jcr.JcrFolder;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
-import org.apache.chemistry.opencmis.jcr.type.JcrFolderTypeHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Type handler that provides cmis:folder.
- */
-public class DefaultFolderTypeHandler extends AbstractJcrTypeHandler implements JcrFolderTypeHandler {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DefaultFolderTypeHandler.class);
-
-    private static class FolderIdentifierMap extends DefaultIdentifierMapBase {
-
-        public FolderIdentifierMap() {
-            super("nt:folder");
-            // xxx not supported: PARENT_ID, ALLOWED_CHILD_OBJECT_TYPE_IDS, PATH
-        }
-    }
-
-    public String getTypeId() {
-        return BaseTypeId.CMIS_FOLDER.value();
-    }
-
-    public TypeDefinition getTypeDefinition() {
-        FolderTypeDefinitionImpl folderType = new FolderTypeDefinitionImpl();
-        folderType.setBaseTypeId(BaseTypeId.CMIS_FOLDER);
-        folderType.setIsControllableAcl(false);
-        folderType.setIsControllablePolicy(false);
-        folderType.setIsCreatable(true);
-        folderType.setDescription("Folder");
-        folderType.setDisplayName("Folder");
-        folderType.setIsFileable(true);
-        folderType.setIsFulltextIndexed(false);
-        folderType.setIsIncludedInSupertypeQuery(true);
-        folderType.setLocalName("Folder");
-        folderType.setLocalNamespace(JcrTypeManager.NAMESPACE);
-        folderType.setIsQueryable(true);
-        folderType.setQueryName(JcrTypeManager.FOLDER_TYPE_ID);
-        folderType.setId(JcrTypeManager.FOLDER_TYPE_ID);
-
-        JcrTypeManager.addBasePropertyDefinitions(folderType);
-        JcrTypeManager.addFolderPropertyDefinitions(folderType);
-
-        return folderType;
-    }
-
-    public IdentifierMap getIdentifierMap() {
-        return new FolderIdentifierMap();
-    }
-
-    public JcrFolder getJcrNode(Node node) {
-        return new JcrFolder(node, typeManager, pathManager, typeHandlerManager);
-    }
-
-    public boolean canHandle(Node node) throws RepositoryException {
-        return node.isNodeType(NodeType.NT_FOLDER) || node.getDepth() == 0;
-    }
-
-    public JcrFolder createFolder(JcrFolder parentFolder, String name, Properties properties) {
-        try {
-            Node node = parentFolder.getNode().addNode(name, NodeType.NT_FOLDER);
-            addMixins(node);
-            // compile the properties
-            updateProperties(node, properties);
-            // save changes
-            node.getSession().save();
-            return getJcrNode(node);
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisStorageException(e.getMessage(), e);
-        }
-    }
-
-    protected void updateProperties(Node node, Properties properties) {
-        JcrFolder.setProperties(node, getTypeDefinition(), properties);
-    }
-
-    protected void addMixins(Node node) throws RepositoryException {
-        node.addMixin(NodeType.MIX_CREATED);
-        node.addMixin(NodeType.MIX_LAST_MODIFIED);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultIdentifierMapBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultIdentifierMapBase.java
deleted file mode 100644
index 82e3b40..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultIdentifierMapBase.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMapBase;
-
-/**
- * Provides mappings to standard jcr properties.
- */
-public class DefaultIdentifierMapBase extends IdentifierMapBase {
-
-    public DefaultIdentifierMapBase(String jcrTypeName) {
-        super(jcrTypeName);
-        cmis2Jcr.put(PropertyIds.OBJECT_ID, "@jcr:uuid");
-        cmis2Jcr.put(PropertyIds.NAME, "fn:name()");
-        cmis2Jcr.put(PropertyIds.CREATED_BY, "@jcr:createdBy");
-        cmis2Jcr.put(PropertyIds.CREATION_DATE, "@jcr:created");
-        cmis2Jcr.put(PropertyIds.LAST_MODIFIED_BY, "@jcr:lastModifiedBy");
-        cmis2Jcr.put(PropertyIds.LAST_MODIFICATION_DATE, "@jcr:lastModified");
-        // xxx not supported: BASE_TYPE_ID, CHANGE_TOKEN
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultUnversionedDocumentTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultUnversionedDocumentTypeHandler.java
deleted file mode 100644
index 2587648..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultUnversionedDocumentTypeHandler.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.impl;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.jcr.JcrDocument;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.JcrUnversionedDocument;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
-
-/**
- * Type handler that provides cmis:unversioned-document.
- */
-public class DefaultUnversionedDocumentTypeHandler extends DefaultDocumentTypeHandler {
-
-    public static final String DOCUMENT_UNVERSIONED_TYPE_ID = "cmis:unversioned-document";
-
-    @Override
-    public String getTypeId() {
-        return DOCUMENT_UNVERSIONED_TYPE_ID;
-    }
-
-    @Override
-    public TypeDefinition getTypeDefinition() {
-
-        DocumentTypeDefinitionImpl unversionedDocument = new DocumentTypeDefinitionImpl();
-        unversionedDocument.initialize(super.getTypeDefinition());
-
-        unversionedDocument.setDescription("Unversioned document");
-        unversionedDocument.setDisplayName("Unversioned document");
-        unversionedDocument.setLocalName("Unversioned document");
-        unversionedDocument.setIsQueryable(true);
-        unversionedDocument.setQueryName(DOCUMENT_UNVERSIONED_TYPE_ID);
-        unversionedDocument.setId(DOCUMENT_UNVERSIONED_TYPE_ID);
-        unversionedDocument.setParentTypeId(JcrTypeManager.DOCUMENT_TYPE_ID);
-
-        unversionedDocument.setIsVersionable(false);
-        unversionedDocument.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-
-        JcrTypeManager.addBasePropertyDefinitions(unversionedDocument);
-        JcrTypeManager.addDocumentPropertyDefinitions(unversionedDocument);
-
-        return unversionedDocument;
-    }
-
-    @Override
-    public IdentifierMap getIdentifierMap() {
-        return new DefaultDocumentIdentifierMap(false);
-    }
-
-    @Override
-    public boolean canHandle(Node node) throws RepositoryException {
-        return node.isNodeType(NodeType.NT_FILE) && !node.isNodeType(supportedVersioningType(node));
-    }
-
-    @Override
-    public JcrDocument getJcrNode(Node node) {
-        return new JcrUnversionedDocument(node, typeManager, pathManager, typeHandlerManager);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/Evaluator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/Evaluator.java
deleted file mode 100644
index ed19b2e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/Evaluator.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * Evaluator for CMIS query parse trees.
- *
- * @param <T>  The result type of the evaluation of the parse tree.
- * @see ParseTreeWalker
- */
-public interface Evaluator<T> {
-
-    /** Create a new instance of this <code>Evaluator</code>. */
-    Evaluator<T> op();
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NOT} nodes. */
-    T not(T op);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#AND} nodes. */
-    T and(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#OR} nodes. */
-    T or(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#EQ} nodes. */
-    T eq(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NEQ} nodes. */
-    T neq(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#GT} nodes. */
-    T gt(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#GTEQ} nodes. */
-    T gteq(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#LT} nodes. */
-    T lt(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#LTEQ} nodes. */
-    T lteq(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IN} nodes. */
-    T in(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NOT_IN} nodes. */
-    T notIn(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IN_ANY} nodes. */
-    T inAny(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NOT_IN_ANY} nodes. */
-    T notInAny(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#EQ_ANY} nodes. */
-    T eqAny(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IS_NULL} nodes. */
-    T isNull(T op);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IS_NOT_NULL} nodes. */
-    T notIsNull(T op);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#LIKE} nodes. */
-    T like(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NOT_LIKE} nodes. */
-    T notLike(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#CONTAINS} nodes. */
-    T contains(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IN_FOLDER} nodes. */
-    T inFolder(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IN_TREE} nodes. */
-    T inTree(T op1, T op2);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#IN_LIST} nodes. */
-    T list(List<T> ops);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#BOOL_LIT} nodes. */
-    T value(boolean value);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NUM_LIT} nodes. */
-    T value(double value);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#NUM_LIT} nodes. */
-    T value(long value);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#STRING_LIT} nodes. */
-    T value(String value);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#TIME_LIT} nodes. */
-    T value(GregorianCalendar value);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer#COL} nodes. */
-    T col(String name);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.TextSearchLexer#TEXT_AND}. */
-    T textAnd(List<T> ops);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.TextSearchLexer#TEXT_OR}. */
-    T textOr(List<T> ops);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.TextSearchLexer#TEXT_MINUS}. */
-    T textMinus(String text);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.TextSearchLexer#TEXT_SEARCH_WORD_LIT}. */
-    T textWord(String word);
-
-    /** Handle {@link org.apache.chemistry.opencmis.server.support.query.TextSearchLexer#TEXT_SEARCH_PHRASE_STRING_LIT}. */
-    T textPhrase(String phrase);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorBase.java
deleted file mode 100644
index d6a3203..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorBase.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-
-/**
- * This abstract base class implements all methods of the {@link Evaluator} interface
- * by throwing a {@link CmisNotSupportedException}.
- */
-public abstract class EvaluatorBase<T> implements Evaluator<T> {
-    public Evaluator<T> op() {
-        throw new CmisNotSupportedException();
-    }
-
-    public T not(T op) {
-        throw new CmisNotSupportedException("Not supported in query: not");
-    }
-
-    public T and(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: and");
-    }
-
-    public T or(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: or");
-    }
-
-    public T eq(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: =");
-    }
-
-    public T neq(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: !=");
-    }
-
-    public T gt(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: >");
-    }
-
-    public T gteq(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: >=");
-    }
-
-    public T lt(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: <");
-    }
-
-    public T lteq(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: <=");
-    }
-
-    public T in(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: in");
-    }
-
-    public T notIn(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: not in");
-    }
-
-    public T inAny(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: in");
-    }
-
-    public T notInAny(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: not in");
-    }
-
-    public T eqAny(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: = ANY");
-    }
-
-    public T isNull(T op) {
-        throw new CmisNotSupportedException("Not supported in query: is null");
-    }
-
-    public T notIsNull(T op) {
-        throw new CmisNotSupportedException("Not supported in query: is not null");
-    }
-
-    public T like(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: like");
-    }
-
-    public T notLike(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: not like");
-    }
-
-    public T contains(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: contains");
-    }
-
-    public T inFolder(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: in_folder");
-    }
-
-    public T inTree(T op1, T op2) {
-        throw new CmisNotSupportedException("Not supported in query: in_tree");
-    }
-
-    public T list(List<T> ops) {
-        throw new CmisNotSupportedException("Not supported in query: list");
-    }
-
-    public T value(boolean value) {
-        throw new CmisNotSupportedException("Not supported in query: boolean value " + value);
-    }
-
-    public T value(double value) {
-        throw new CmisNotSupportedException("Not supported in query: double value " + value);
-    }
-
-    public T value(long value) {
-        throw new CmisNotSupportedException("Not supported in query: long value " + value);
-    }
-
-    public T value(String value) {
-        throw new CmisNotSupportedException("Not supported in query: string value " + value);
-    }
-
-    public T value(GregorianCalendar value) {
-        throw new CmisNotSupportedException("Not supported in query: date value " + value);
-    }
-
-    public T col(String name) {
-        throw new CmisNotSupportedException("Not supported in query: column name " + name);
-    }
-
-    public T textAnd(List<T> ops) {
-        throw new CmisNotSupportedException("Not supported in query: text and");
-    }
-
-    public T textOr(List<T> ops) {
-        throw new CmisNotSupportedException("Not supported in query: text or");
-    }
-
-    public T textMinus(String text) {
-        throw new CmisNotSupportedException("Not supported in query: text minus");
-    }
-
-    public T textWord(String word) {
-        throw new CmisNotSupportedException("Not supported in query: text word");
-    }
-
-    public T textPhrase(String phrase) {
-        throw new CmisNotSupportedException("Not supported in query: text phrase");
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorXPath.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorXPath.java
deleted file mode 100644
index 9720a33..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/EvaluatorXPath.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.jcr.util.ISO8601;
-import org.apache.chemistry.opencmis.jcr.util.Iterables;
-
-/**
- * This implementation of {@link Evaluator} results in an instance of a
- * {@link XPathBuilder} which can be used to validated the where clause of the
- * original CMIS query and translate it to a corresponding (i.e. semantically
- * equal) XPath condition.
- */
-public class EvaluatorXPath extends EvaluatorBase<XPathBuilder> {
-
-    @Override
-    public Evaluator<XPathBuilder> op() {
-        // New instance delegates these methods to this instance in order
-        // to account for the case where these methods are overridden.
-        return new EvaluatorXPath() {
-            @Override
-            protected String jcrPathFromId(String id) {
-                return EvaluatorXPath.this.jcrPathFromId(id);
-            }
-
-            @Override
-            protected String jcrPathFromCol(String name) {
-                return EvaluatorXPath.this.jcrPathFromCol(name);
-            }
-        };
-    }
-
-    @Override
-    public XPathBuilder not(final XPathBuilder op) {
-        return new XPathBuilder() {
-            public String xPath() {
-                if (eval(true) != null) {
-                    return eval(true) ? "true()" : "false()";
-                } else {
-                    return "not(" + op.xPath() + ")";
-                }
-            }
-
-            public Boolean eval(Boolean folderPredicateValuation) {
-                return not(op.eval(folderPredicateValuation));
-            }
-
-            public Iterable<XPathBuilder> folderPredicates() {
-                return op.folderPredicates();
-            }
-        };
-    }
-
-    @Override
-    public XPathBuilder and(final XPathBuilder op1, final XPathBuilder op2) {
-        return new XPathBuilder() {
-            public String xPath() {
-                if (eval(true) != null) {
-                    return eval(true) ? "true()" : "false()";
-                } else if (op1.eval(true) != null) { // if not null, op1 must be
-                                                     // true -> shortcut
-                                                     // evaluation to op2
-                    return op2.xPath();
-                } else if (op2.eval(true) != null) { // if not null, op2 must be
-                                                     // true -> shortcut
-                                                     // evaluation to op1
-                    return op1.xPath();
-                } else {
-                    return op1.xPath() + " and " + op2.xPath();
-                }
-            }
-
-            public Boolean eval(Boolean folderPredicateValuation) {
-                return and(op1.eval(folderPredicateValuation), op2.eval(folderPredicateValuation));
-            }
-
-            public Iterable<XPathBuilder> folderPredicates() {
-                return Iterables.concat(op1.folderPredicates(), op2.folderPredicates());
-            }
-        };
-    }
-
-    @Override
-    public XPathBuilder or(final XPathBuilder op1, final XPathBuilder op2) {
-        return new XPathBuilder() {
-            public String xPath() {
-                if (eval(true) != null) {
-                    return eval(true) ? "true()" : "false()";
-                } else if (op1.eval(true) != null) { // if not null, op1 must be
-                                                     // false -> shortcut
-                                                     // evaluation to op2
-                    return op2.xPath();
-                } else if (op2.eval(true) != null) { // if not null, op2 must be
-                                                     // false -> shortcut
-                                                     // evaluation to op2
-                    return op1.xPath();
-                } else {
-                    return "(" + op1.xPath() + " or " + op2.xPath() + ")";
-                }
-            }
-
-            public Boolean eval(Boolean folderPredicateValuation) {
-                return or(op1.eval(folderPredicateValuation), op2.eval(folderPredicateValuation));
-            }
-
-            public Iterable<XPathBuilder> folderPredicates() {
-                return Iterables.concat(op1.folderPredicates(), op2.folderPredicates());
-            }
-        };
-    }
-
-    @Override
-    public XPathBuilder eq(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " = ", op2);
-    }
-
-    @Override
-    public XPathBuilder neq(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " != ", op2);
-    }
-
-    @Override
-    public XPathBuilder gt(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " > ", op2);
-    }
-
-    @Override
-    public XPathBuilder gteq(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " >= ", op2);
-    }
-
-    @Override
-    public XPathBuilder lt(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " < ", op2);
-    }
-
-    @Override
-    public XPathBuilder lteq(XPathBuilder op1, XPathBuilder op2) {
-        return new RelOpBuilder(op1, " <= ", op2);
-    }
-
-    @Override
-    public XPathBuilder in(XPathBuilder op1, XPathBuilder op2) {
-        return super.in(op1, op2); // todo implement in
-    }
-
-    @Override
-    public XPathBuilder notIn(XPathBuilder op1, XPathBuilder op2) {
-        return super.notIn(op1, op2); // todo implement notIn
-    }
-
-    @Override
-    public XPathBuilder inAny(XPathBuilder op1, XPathBuilder op2) {
-        return super.inAny(op1, op2); // todo implement inAny
-    }
-
-    @Override
-    public XPathBuilder notInAny(XPathBuilder op1, XPathBuilder op2) {
-        return super.notInAny(op1, op2); // todo implement notInAny
-    }
-
-    @Override
-    public XPathBuilder eqAny(XPathBuilder op1, XPathBuilder op2) {
-        return super.eqAny(op1, op2); // todo implement eqAny
-    }
-
-    @Override
-    public XPathBuilder isNull(XPathBuilder op) {
-        return new FunctionBuilder(op);
-    }
-
-    @Override
-    public XPathBuilder notIsNull(XPathBuilder op) {
-        return new FunctionBuilder("not", op);
-    }
-
-    @Override
-    public XPathBuilder like(XPathBuilder op1, XPathBuilder op2) {
-        return new FunctionBuilder("jcr:like", op1, op2);
-    }
-
-    @Override
-    public XPathBuilder notLike(XPathBuilder op1, XPathBuilder op2) {
-        return new FunctionBuilder("jcr:like", op1, op2) {
-            @Override
-            public String xPath() {
-                return "not(" + super.xPath() + ")";
-            }
-        };
-    }
-
-    @Override
-    public XPathBuilder contains(XPathBuilder op1, XPathBuilder op2) {
-        return new ContainsBuilder(op2);
-    }
-
-    @Override
-    public XPathBuilder inFolder(XPathBuilder op1, XPathBuilder op2) {
-        return new FolderPredicateBuilder(op2.xPath(), false);
-    }
-
-    @Override
-    public XPathBuilder inTree(XPathBuilder op1, XPathBuilder op2) {
-        return new FolderPredicateBuilder(op2.xPath(), true);
-    }
-
-    @Override
-    public XPathBuilder list(List<XPathBuilder> ops) {
-        return super.list(ops); // todo implement list
-    }
-
-    @Override
-    public XPathBuilder value(boolean value) {
-        return new LiteralBuilder(value);
-    }
-
-    @Override
-    public XPathBuilder value(double value) {
-        return new LiteralBuilder(value);
-    }
-
-    @Override
-    public XPathBuilder value(long value) {
-        return new LiteralBuilder(value);
-    }
-
-    @Override
-    public XPathBuilder value(String value) {
-        return new LiteralBuilder(value);
-    }
-
-    @Override
-    public XPathBuilder value(GregorianCalendar value) {
-        return new LiteralBuilder(value);
-    }
-
-    @Override
-    public XPathBuilder col(String name) {
-        return new ColRefBuilder(name);
-    }
-
-    @Override
-    public XPathBuilder textAnd(List<XPathBuilder> ops) {
-        return new TextOpBuilder(ops, " ");
-    }
-
-    @Override
-    public XPathBuilder textOr(List<XPathBuilder> ops) {
-        return new TextOpBuilder(ops, " OR ");
-    }
-
-    @Override
-    public XPathBuilder textMinus(String text) {
-        return new TextMinusBuilder(text);
-    }
-
-    @Override
-    public XPathBuilder textWord(String word) {
-        return new TextWordBuilder(word);
-    }
-
-    @Override
-    public XPathBuilder textPhrase(String phrase) {
-        return new TextPhraseBuilder(phrase);
-    }
-
-    // ------------------------------------------< protected >---
-
-    /**
-     * Resolve from a CMIS object id to the corresponding absolute JCR path.
-     * This default implementations simply returns <code>id</code>.
-     */
-    protected String jcrPathFromId(String id) {
-        return id;
-    }
-
-    /**
-     * Resolve from a column name in the query to the corresponding relative JCR
-     * path. The path must be relative to the context node. This default
-     * implementations simply returns <code>name</code>.
-     */
-    protected String jcrPathFromCol(String name) {
-        return name;
-    }
-
-    // ------------------------------------------< private >---
-
-    /**
-     * @return <code>null</code> if <code>b</code> is <code>null</code>,
-     *         <code>!b</code> otherwise.
-     */
-    private static Boolean not(Boolean b) {
-        return b == null ? null : !b;
-    }
-
-    /**
-     * @return <ul>
-     *         <li><code>true</code> if either of <code>b1</code> and
-     *         <code>b2</code> is <code>true</code>,</li>
-     *         <li><code>false</code> if both <code>b1</code> and
-     *         <code>b2</code> are <code>false</code>,</li>
-     *         <li><code>null</code> otherwise.</li>
-     *         </ul>
-     */
-    private static Boolean or(Boolean b1, Boolean b2) {
-        return Boolean.TRUE.equals(b1) || Boolean.TRUE.equals(b2) ? Boolean.TRUE : Boolean.FALSE.equals(b1)
-                && Boolean.FALSE.equals(b2) ? Boolean.FALSE : null;
-    }
-
-    /**
-     * @return <ul>
-     *         <li><code>false</code> if either of <code>b1</code> and
-     *         <code>b2</code> is <code>false</code>,</li>
-     *         <li><code>true</code> if both <code>b1</code> and <code>b2</code>
-     *         are <code>true</code>,</li>
-     *         <li><code>null</code> otherwise.</li>
-     *         </ul>
-     */
-    private static Boolean and(Boolean b1, Boolean b2) {
-        return Boolean.FALSE.equals(b1) || Boolean.FALSE.equals(b2) ? Boolean.FALSE : Boolean.TRUE.equals(b1)
-                && Boolean.TRUE.equals(b2) ? Boolean.TRUE : null;
-    }
-
-    private static class RelOpBuilder implements XPathBuilder {
-        private final String relOp;
-        private final XPathBuilder op1;
-        private final XPathBuilder op2;
-
-        public RelOpBuilder(XPathBuilder op1, String relOp, XPathBuilder op2) {
-            this.relOp = relOp;
-            this.op1 = op1;
-            this.op2 = op2;
-        }
-
-        public String xPath() {
-            return op1.xPath() + relOp + op2.xPath();
-        }
-
-        public Boolean eval(Boolean folderPredicateValuation) {
-            return null;
-        }
-
-        public Iterable<XPathBuilder> folderPredicates() {
-            return Iterables.concat(op1.folderPredicates(), op2.folderPredicates());
-        }
-    }
-
-    private class FolderPredicateBuilder implements XPathBuilder {
-        private final String folderId;
-        private final boolean includeDescendants;
-
-        public FolderPredicateBuilder(String folderId, boolean includeDescendants) {
-            this.folderId = stripQuotes(folderId);
-            this.includeDescendants = includeDescendants;
-        }
-
-        public String xPath() {
-            return jcrPathFromId(folderId) + (includeDescendants ? "//" : "/");
-        }
-
-        public Boolean eval(Boolean folderPredicateValuation) {
-            return folderPredicateValuation;
-        }
-
-        public Iterable<XPathBuilder> folderPredicates() {
-            return Iterables.singleton((XPathBuilder) this);
-        }
-
-        private String stripQuotes(String string) {
-            return (string.startsWith("'") || string.startsWith("\"")) && string.length() >= 2 ? string.substring(1,
-                    string.length() - 1) : string;
-        }
-
-    }
-
-    private abstract static class PrimitiveBuilder implements XPathBuilder {
-        public Boolean eval(Boolean folderPredicateValuation) {
-            return null;
-        }
-
-        public Iterable<XPathBuilder> folderPredicates() {
-            return Iterables.empty();
-        }
-    }
-
-    private static class LiteralBuilder extends PrimitiveBuilder {
-        private final String xPath;
-
-        public LiteralBuilder(String value) {
-            xPath = "'" + value + "'";
-        }
-
-        public LiteralBuilder(boolean value) {
-            xPath = Boolean.toString(value);
-        }
-
-        public LiteralBuilder(long value) {
-            xPath = Long.toString(value);
-        }
-
-        public LiteralBuilder(double value) {
-            xPath = Double.toString(value);
-        }
-
-        public LiteralBuilder(GregorianCalendar value) {
-            xPath = "xs:dateTime('" + ISO8601.format(value) + "')";
-        }
-
-        public String xPath() {
-            return xPath;
-        }
-    }
-
-    private class ColRefBuilder extends PrimitiveBuilder {
-        private final String colRef;
-
-        public ColRefBuilder(String colRef) {
-            this.colRef = colRef;
-        }
-
-        public String xPath() {
-            return jcrPathFromCol(colRef);
-        }
-
-    }
-
-    private static class FunctionBuilder extends PrimitiveBuilder {
-        private final String function;
-        private final XPathBuilder op1;
-        private final XPathBuilder op2;
-
-        private FunctionBuilder(String function, XPathBuilder op1, XPathBuilder op2) {
-            this.function = function;
-            this.op1 = op1;
-            this.op2 = op2;
-        }
-
-        public FunctionBuilder(String function, XPathBuilder op1) {
-            this(function, op1, null);
-        }
-
-        public FunctionBuilder(XPathBuilder op1) {
-            this(null, op1, null);
-        }
-
-        public String xPath() {
-            return function == null ? op1.xPath() : function + "(" + op1.xPath()
-                    + (op2 == null ? "" : ", " + op2.xPath()) + ")";
-        }
-    }
-
-    private static class ContainsBuilder extends PrimitiveBuilder {
-        private final XPathBuilder op;
-
-        public ContainsBuilder(XPathBuilder op) {
-            this.op = op;
-        }
-
-        public String xPath() {
-            return "jcr:contains(jcr:content, '" + op.xPath() + "')";
-        }
-    }
-
-    private static class TextOpBuilder extends PrimitiveBuilder {
-        private final List<XPathBuilder> ops;
-        private final String relOp;
-
-        public TextOpBuilder(List<XPathBuilder> ops, String relOp) {
-            this.ops = ops;
-            this.relOp = relOp;
-        }
-
-        public String xPath() {
-            StringBuilder sb = new StringBuilder();
-            String sep = "";
-            for (XPathBuilder op : ops) {
-                sb.append(sep).append(op.xPath());
-                sep = relOp;
-            }
-
-            return sb.toString();
-        }
-    }
-
-    private static class TextMinusBuilder extends PrimitiveBuilder {
-        private final String text;
-
-        public TextMinusBuilder(String text) {
-            this.text = text;
-        }
-
-        public String xPath() {
-            return "-" + escape(text);
-        }
-    }
-
-    private static class TextWordBuilder extends PrimitiveBuilder {
-        private final String word;
-
-        public TextWordBuilder(String word) {
-            this.word = word;
-        }
-
-        public String xPath() {
-            return escape(word);
-        }
-    }
-
-    private static class TextPhraseBuilder extends PrimitiveBuilder {
-        private final String phrase;
-
-        public TextPhraseBuilder(String phrase) {
-            this.phrase = phrase;
-        }
-
-        public String xPath() {
-            return "\"" + escape(phrase.substring(1, phrase.length() - 1)) + "\"";
-        }
-    }
-
-    /**
-     * Within the searchexp literal instances of single quote ('), double quote
-     * (") and hyphen (-) must be escaped with a backslash (\). Backslash itself
-     * must therefore also be escaped, ending up as double backslash (\\).
-     */
-    private static String escape(String s) {
-        if (s == null) {
-            return "";
-        }
-
-        s = s.replaceAll("'", "\\'");
-        s = s.replaceAll("\"", "\\\"");
-        s = s.replaceAll("-", "\\-");
-        s = s.replaceAll("\\\\", "\\\\\\\\");
-        return s;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMap.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMap.java
deleted file mode 100644
index a760c05..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMap.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-/**
- * The methods of this class map CMIS identifiers to JCR identifiers. Each implementation
- * of this interface is bound to a specific CMIS object type. That is, it implements the
- * identifier maps for that object type. 
- */
-public interface IdentifierMap {
-
-    /**
-     * Map a column name in the CMIS query to the corresponding relative JCR path.
-     * The path must be relative to the context node.
-     *
-     * @param name  column name
-     * @return  relative JCR path
-     */
-    String jcrPathFromCol(String name);
-
-    /**
-     * JCR type name corresponding to the CMIS type bound to this instance.
-     * @see #jcrTypeCondition()
-     *
-     * @return  name of the JCR type
-     */
-    String jcrTypeName();
-
-    /**
-     * Create and additional condition in order for the query to only return nodes
-     * of the right type. This condition and-ed to the condition determined by the
-     * CMIS query's where clause.
-     * <p/>
-     * A CMIS query for non versionable documents should for example result in the
-     * following XPath query:
-     * <p/>
-     * <pre>
-     *   element(*, nt:file)[not(@jcr:mixinTypes = 'mix:simpleVersionable')]
-     * </pre>
-     * Here the element test is covered by {@link #jcrTypeName()}
-     * while the predicate is covered by this method.
-     *
-     * @see #jcrTypeName()
-     *
-     * @return  Additional condition or <code>null</code> if none.
-     */
-    String jcrTypeCondition();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMapBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMapBase.java
deleted file mode 100644
index 99ddb1f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/IdentifierMapBase.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-/**
- * This abstract base class provides support for implementing {@link IdentifierMap}.
- */
-public abstract class IdentifierMapBase implements IdentifierMap {
-
-    private final String jcrTypeName;
-    protected final Map<String, String> cmis2Jcr = new HashMap<String, String>();
-
-    protected IdentifierMapBase(String jcrTypeName) {
-        this.jcrTypeName = jcrTypeName;
-    }
-
-    public String jcrPathFromCol(String name) {
-        String jcrPath = cmis2Jcr.get(name);
-        if (jcrPath == null) {
-            throw new CmisRuntimeException("Not supported: query on column " + name);
-        } else {
-            return jcrPath;
-        }
-    }
-
-    public String jcrTypeName() {
-        return jcrTypeName;
-    }
-
-    public String jcrTypeCondition() {
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/ParseTreeWalker.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/ParseTreeWalker.java
deleted file mode 100644
index bdf4a14..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/ParseTreeWalker.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer;
-import org.apache.chemistry.opencmis.server.support.query.PredicateWalkerBase;
-import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
-
-/**
- * This implementation of {@link PredicateWalkerBase} traverses the parse tree
- * of a CMIS query. It uses an {@link Evaluator} to accumulate the result of the
- * traversal. <code>Evaluator</code> has a corresponding method for each
- * {@link Tree#getType() node type} in the parse tree.
- * <code>ParseTreeWalker</code> calls these methods while traversing the parse
- * tree passing an <code>Evaluator</code> for each of the corresponding
- * operation's arguments. </br> The {@link #walkPredicate(Tree)} serves as entry
- * point for traversing a parse tree. After successful traversal, the result is
- * obtained from the {@link #getResult()} method.
- * 
- * @param <T>
- *            type of the result determined by the <code>Evaluator</code> used.
- */
-public class ParseTreeWalker<T> implements PredicateWalkerBase {
-
-    private final Evaluator<T> evaluator;
-    private T result;
-
-    /**
-     * Create a new instance for traversing CMIS query parse trees.
-     * 
-     * @param evaluator
-     *            <code>Evaluator</code> for evaluating the nodes of the parse
-     *            tree
-     */
-    public ParseTreeWalker(Evaluator<T> evaluator) {
-        this.evaluator = evaluator;
-    }
-
-    /**
-     * Retrieve the result of a successful traversal.
-     * 
-     * @return result of traversal or <code>null</code> if either not yet
-     *         traversed, an error occurred on traversal or the query has an
-     *         empty where clause.
-     */
-    public T getResult() {
-        return result;
-    }
-
-    // ------------------------------------------< PredicateWalkerBase >---
-
-    public Boolean walkPredicate(Tree node) {
-        result = null;
-        result = walkPredicate(evaluator, node);
-        return false; // Return value is ignored by caller
-    }
-
-    // ------------------------------------------< protected >---
-
-    /** For extensibility. */
-    protected T walkOtherExpr(Evaluator<?> evaluator, Tree node) {
-        throw new CmisRuntimeException("Unknown node type: " + node.getType() + " (" + node.getText() + ")");
-    }
-
-    /** For extensibility. */
-    protected T walkOtherPredicate(Evaluator<?> evaluator, Tree node) {
-        throw new CmisRuntimeException("Unknown node type: " + node.getType() + " (" + node.getText() + ")");
-    }
-
-    // ------------------------------------------< private >---
-
-    private T walkPredicate(Evaluator<T> evaluator, Tree node) {
-        switch (node.getType()) {
-        case CmisQlStrictLexer.NOT:
-            return evaluator.not(walkPredicate(evaluator.op(), node.getChild(0)));
-        case CmisQlStrictLexer.AND:
-            return evaluator.and(walkPredicate(evaluator.op(), node.getChild(0)),
-                    walkPredicate(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.OR:
-            return evaluator.or(walkPredicate(evaluator.op(), node.getChild(0)),
-                    walkPredicate(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.EQ:
-            return evaluator.eq(walkExpr(evaluator.op(), node.getChild(0)), walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.NEQ:
-            return evaluator
-                    .neq(walkExpr(evaluator.op(), node.getChild(0)), walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.GT:
-            return evaluator.gt(walkExpr(evaluator.op(), node.getChild(0)), walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.GTEQ:
-            return evaluator.gteq(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.LT:
-            return evaluator.lt(walkExpr(evaluator.op(), node.getChild(0)), walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.LTEQ:
-            return evaluator.lteq(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.IN:
-            return evaluator.in(walkExpr(evaluator.op(), node.getChild(0)), walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.NOT_IN:
-            return evaluator.notIn(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.IN_ANY:
-            return evaluator.inAny(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.NOT_IN_ANY:
-            return evaluator.notInAny(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.EQ_ANY:
-            return evaluator.eqAny(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.IS_NULL:
-            return evaluator.isNull(walkExpr(evaluator.op(), node.getChild(0)));
-        case CmisQlStrictLexer.IS_NOT_NULL:
-            return evaluator.notIsNull(walkExpr(evaluator.op(), node.getChild(0)));
-        case CmisQlStrictLexer.LIKE:
-            return evaluator.like(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.NOT_LIKE:
-            return evaluator.notLike(walkExpr(evaluator.op(), node.getChild(0)),
-                    walkExpr(evaluator.op(), node.getChild(1)));
-        case CmisQlStrictLexer.CONTAINS:
-            if (node.getChildCount() == 1) {
-                return evaluator.contains(null, walkExprTextSearch(evaluator.op(), node.getChild(0)));
-            } else {
-                return evaluator.contains(walkExpr(evaluator.op(), node.getChild(0)),
-                        walkExpr(evaluator.op(), node.getChild(1)));
-            }
-        case CmisQlStrictLexer.IN_FOLDER:
-            if (node.getChildCount() == 1) {
-                return evaluator.inFolder(null, walkExpr(evaluator.op(), node.getChild(0)));
-            } else {
-                return evaluator.inFolder(walkExpr(evaluator.op(), node.getChild(0)),
-                        walkExpr(evaluator.op(), node.getChild(1)));
-            }
-        case CmisQlStrictLexer.IN_TREE:
-            if (node.getChildCount() == 1) {
-                return evaluator.inTree(null, walkExpr(evaluator.op(), node.getChild(0)));
-            } else {
-                return evaluator.inTree(walkExpr(evaluator.op(), node.getChild(0)),
-                        walkExpr(evaluator.op(), node.getChild(1)));
-            }
-        default:
-            return walkOtherPredicate(evaluator, node);
-        }
-    }
-
-    private T walkExpr(Evaluator<T> evaluator, Tree node) {
-        switch (node.getType()) {
-        case CmisQlStrictLexer.BOOL_LIT:
-            return walkBoolean(evaluator, node);
-        case CmisQlStrictLexer.NUM_LIT:
-            return walkNumber(evaluator, node);
-        case CmisQlStrictLexer.STRING_LIT:
-            return walkString(evaluator, node);
-        case CmisQlStrictLexer.TIME_LIT:
-            return walkTimestamp(evaluator, node);
-        case CmisQlStrictLexer.IN_LIST:
-            return evaluator.list(walkList(evaluator, node));
-        case CmisQlStrictLexer.COL:
-            return walkCol(evaluator, node);
-        default:
-            return walkOtherExpr(evaluator, node);
-        }
-    }
-
-    private T walkExprTextSearch(Evaluator<T> evaluator, Tree node) {
-        switch (node.getType()) {
-        case TextSearchLexer.TEXT_AND:
-            return walkTextAnd(evaluator, node);
-        case TextSearchLexer.TEXT_OR:
-            return walkTextOr(evaluator, node);
-        case TextSearchLexer.TEXT_MINUS:
-            return walkTextMinus(evaluator, node);
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            return walkTextWord(evaluator, node);
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-            return walkTextPhrase(evaluator, node);
-        default:
-            return walkOtherExpr(evaluator, node);
-        }
-    }
-
-    private List<T> walkList(Evaluator<T> evaluator, Tree node) {
-        int n = node.getChildCount();
-        List<T> result = new ArrayList<T>(n);
-        for (int i = 0; i < n; i++) {
-            result.add(walkExpr(evaluator.op(), node.getChild(i)));
-        }
-        return result;
-    }
-
-    private T walkBoolean(Evaluator<T> evaluator, Tree node) {
-        String s = node.getText();
-
-        if ("true".equalsIgnoreCase(s)) {
-            return evaluator.value(true);
-        } else if ("false".equalsIgnoreCase(s)) {
-            return evaluator.value(false);
-        } else {
-            throw new CmisInvalidArgumentException("Not a boolean: " + s);
-        }
-    }
-
-    private T walkNumber(Evaluator<T> evaluator, Tree node) {
-        String s = node.getText();
-        try {
-            return s.contains(".") || s.contains("e") || s.contains("E") ? evaluator.value(Double.valueOf(s))
-                    : evaluator.value(Long.valueOf(s));
-        } catch (NumberFormatException e) {
-            throw new CmisInvalidArgumentException("Not a number: " + s);
-        }
-    }
-
-    private T walkString(Evaluator<T> evaluator, Tree node) {
-        String s = node.getText();
-        s = s.substring(1, s.length() - 1);
-        return evaluator.value(s.replace("''", "'")); // un-escape quotes
-    }
-
-    private T walkTimestamp(Evaluator<T> evaluator, Tree node) {
-        String s = node.getText();
-        s = s.substring(s.indexOf('\'') + 1, s.length() - 1);
-        try {
-            return evaluator.value(CalendarHelper.fromString(s));
-        } catch (IllegalArgumentException e) {
-            throw new CmisInvalidArgumentException("Not a date time value: " + s);
-        }
-    }
-
-    private T walkCol(Evaluator<T> evaluator, Tree node) {
-        return evaluator.col(node.getChild(0).getText());
-    }
-
-    private T walkTextAnd(Evaluator<T> evaluator, Tree node) {
-        List<T> terms = new ArrayList<T>();
-        for (Tree term : getChildrenAsList(node)) {
-            terms.add(walkExprTextSearch(evaluator, term));
-        }
-
-        return evaluator.textAnd(terms);
-    }
-
-    private T walkTextOr(Evaluator<T> evaluator, Tree node) {
-        List<T> terms = new ArrayList<T>();
-        for (Tree term : getChildrenAsList(node)) {
-            terms.add(walkExprTextSearch(evaluator, term));
-        }
-
-        return evaluator.textOr(terms);
-    }
-
-    private T walkTextMinus(Evaluator<T> evaluator, Tree node) {
-        return evaluator.textMinus(node.getChild(0).getText());
-    }
-
-    private T walkTextWord(Evaluator<T> evaluator, Tree node) {
-        return evaluator.textWord(node.getText());
-    }
-
-    private T walkTextPhrase(Evaluator<T> evaluator, Tree node) {
-        return evaluator.textPhrase(node.getText());
-    }
-
-    private static List<Tree> getChildrenAsList(Tree node) {
-        List<Tree> res = new ArrayList<Tree>(node.getChildCount());
-        for (int i = 0; i < node.getChildCount(); i++) {
-            Tree childNode = node.getChild(i);
-            res.add(childNode);
-        }
-        return res;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslator.java
deleted file mode 100644
index 75eea5f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslator.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-
-/**
- * Abstract base class for translating a CMIS query statement to a JCR XPath
- * query statement. Overriding class need to implement methods for mapping CMIS
- * ids to JCR paths, CMIS property names to JCR property names, CMIS type names
- * to JCR type name and in addition a method for adding further constraints to a
- * query based on a CMIS type.
- */
-public abstract class QueryTranslator {
-    private final JcrTypeManager typeManager;
-    private final EvaluatorXPath evaluator;
-    private QueryObject queryObject;
-
-    /**
-     * Create a new query translator which uses the provided
-     * <code>typeManager</code> to resolve CMIS type names to CMIS types.
-     * 
-     * @param typeManager
-     */
-    protected QueryTranslator(JcrTypeManager typeManager) {
-        this.typeManager = typeManager;
-        evaluator = new EvaluatorXPath() {
-
-            @Override
-            protected String jcrPathFromId(String id) {
-                return QueryTranslator.this.jcrPathFromId(id);
-            }
-
-            @Override
-            protected String jcrPathFromCol(String name) {
-                return QueryTranslator.this.jcrPathFromCol(queryObject.getMainFromName(), name);
-            }
-        };
-    }
-
-    /**
-     * @return the {@link QueryObject} from the last translation performed
-     *         through {@link QueryTranslator#translateToXPath(String)}.
-     */
-    public QueryObject getQueryObject() {
-        return queryObject;
-    }
-
-    /**
-     * Translate a CMIS query statement to a JCR XPath query statement.
-     * 
-     * @param statement
-     * @return
-     */
-    public String translateToXPath(String statement) {
-        ParseTreeWalker<XPathBuilder> parseTreeWalker = new ParseTreeWalker<XPathBuilder>(evaluator);
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, parseTreeWalker, true);
-        queryUtil.processStatementUsingCmisExceptions();
-        XPathBuilder parseResult = parseTreeWalker.getResult();
-        queryObject = queryUtil.getQueryObject();
-        TypeDefinition fromType = getFromName(queryObject);
-
-        String pathExpression = buildPathExpression(fromType, getFolderPredicate(parseResult));
-        String elementTest = buildElementTest(fromType);
-        String predicates = buildPredicates(fromType, getCondition(parseResult));
-        String orderByClause = buildOrderByClause(fromType, queryObject.getOrderBys());
-        return "/jcr:root" + pathExpression + elementTest + predicates + orderByClause;
-    }
-
-    // ------------------------------------------< protected >---
-
-    /**
-     * Map a CMIS objectId to an absolute JCR path. This method is called to
-     * resolve the folder if of folder predicates (i.e. IN_FOLDER, IN_TREE).
-     * 
-     * @param id
-     *            objectId
-     * @return absolute JCR path corresponding to <code>id</code>.
-     */
-    protected abstract String jcrPathFromId(String id);
-
-    /**
-     * Map a column name in the CMIS query to the corresponding relative JCR
-     * path. The path must be relative to the context node.
-     * 
-     * @param fromType
-     *            Type on which the CMIS query is performed
-     * @param name
-     *            column name
-     * @return relative JCR path
-     */
-    protected abstract String jcrPathFromCol(TypeDefinition fromType, String name);
-
-    /**
-     * Map a CMIS type to the corresponding JCR type name.
-     * 
-     * @see #jcrTypeCondition(TypeDefinition)
-     * 
-     * @param fromType
-     *            CMIS type
-     * @return name of the JCR type corresponding to <code>fromType</code>
-     */
-    protected abstract String jcrTypeName(TypeDefinition fromType);
-
-    /**
-     * Create and additional condition in order for the query to only return
-     * nodes of the right type. This condition and-ed to the condition
-     * determined by the CMIS query's where clause.
-     * <p/>
-     * A CMIS query for non versionable documents should for example result in
-     * the following XPath query:
-     * <p/>
-     * 
-     * <pre>
-     *   element(*, nt:file)[not(@jcr:mixinTypes = 'mix:simpleVersionable')]
-     * </pre>
-     * 
-     * Here the element test is covered by {@link #jcrTypeName(TypeDefinition)}
-     * while the predicate is covered by this method.
-     * 
-     * @see #jcrTypeName(TypeDefinition)
-     * 
-     * @param fromType
-     * @return Additional condition or <code>null</code> if none.
-     */
-    protected abstract String jcrTypeCondition(TypeDefinition fromType);
-
-    /**
-     * Build a XPath path expression for the CMIS type queried for and a folder
-     * predicate.
-     * 
-     * @param fromType
-     *            CMIS type queried for
-     * @param folderPredicate
-     *            folder predicate
-     * @return a valid XPath path expression or <code>null</code> if none.
-     */
-    protected String buildPathExpression(TypeDefinition fromType, String folderPredicate) {
-        return folderPredicate == null ? "//" : folderPredicate;
-    }
-
-    /**
-     * Build a XPath element test for the given CMIS type.
-     * 
-     * @param fromType
-     *            CMIS type queried for
-     * @return a valid XPath element test.
-     */
-    protected String buildElementTest(TypeDefinition fromType) {
-        return "element(*," + jcrTypeName(fromType) + ")";
-    }
-
-    /**
-     * Build a XPath predicate for the given CMIS type and an additional
-     * condition. The additional condition should be and-ed to the condition
-     * resulting from evaluating <code>fromType</code>.
-     * 
-     * @param fromType
-     *            CMIS type queried for
-     * @param condition
-     *            additional condition.
-     * @return a valid XPath predicate or <code>null</code> if none.
-     */
-    protected String buildPredicates(TypeDefinition fromType, String condition) {
-        String typeCondition = jcrTypeCondition(fromType);
-
-        if (typeCondition == null) {
-            return condition == null ? "" : "[" + condition + "]";
-        } else if (condition == null) {
-            return "[" + typeCondition + "]";
-        } else {
-            return "[" + typeCondition + " and " + condition + "]";
-        }
-    }
-
-    /**
-     * Build a XPath order by clause for the given CMIS type and a list of
-     * {@link SortSpec}s.
-     * 
-     * @param fromType
-     *            CMIS type queried for
-     * @param orderBys
-     *            <code>SortSpec</code>s
-     * @return a valid XPath order by clause
-     */
-    protected String buildOrderByClause(TypeDefinition fromType, List<SortSpec> orderBys) {
-        StringBuilder orderSpecs = new StringBuilder();
-
-        for (SortSpec orderBy : orderBys) {
-            String selector = jcrPathFromCol(fromType, orderBy.getSelector().getName());
-            boolean ascending = orderBy.isAscending();
-
-            if (orderSpecs.length() > 0) {
-                orderSpecs.append(',');
-            }
-
-            orderSpecs.append(selector).append(' ').append(ascending ? "ascending" : "descending");
-        }
-
-        return orderSpecs.length() > 0 ? "order by " + orderSpecs : "";
-    }
-
-    // ------------------------------------------< private >---
-
-    private static String getFolderPredicate(XPathBuilder parseResult) {
-        if (parseResult == null) {
-            return null;
-        }
-
-        String folderPredicate = null;
-        for (XPathBuilder p : parseResult.folderPredicates()) {
-            if (folderPredicate == null) {
-                folderPredicate = p.xPath();
-            } else {
-                throw new CmisInvalidArgumentException("Query may only contain a single folder predicate");
-            }
-        }
-
-        // See the class comment on XPathBuilder for details on affirmative
-        // literals
-        if (folderPredicate != null && // IF has single folder predicate
-                !Boolean.FALSE.equals(parseResult.eval(false))) { // AND folder
-                                                                  // predicate
-                                                                  // is not
-                                                                  // affirmative
-            throw new CmisInvalidArgumentException("Folder predicate " + folderPredicate + " is not affirmative.");
-        }
-
-        return folderPredicate;
-    }
-
-    private static TypeDefinition getFromName(QueryObject queryObject) {
-        if (queryObject.getTypes().size() != 1) {
-            throw new CmisInvalidArgumentException("From must contain one single reference");
-        }
-        return queryObject.getMainFromName();
-    }
-
-    private static String getCondition(XPathBuilder parseResult) {
-        // No condition if either parseResult is null or when it evaluates to
-        // true under
-        // the valuation which assigns true to the folder predicate.
-        return parseResult == null || Boolean.TRUE.equals(parseResult.eval(true)) ? null : parseResult.xPath();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilder.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilder.java
deleted file mode 100644
index 49549d3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilder.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-/**
- * This result type of {@link EvaluatorXPath} provides means for partially
- * evaluating the underlying query's condition. This allows to determine whether
- * there is a semantically equivalent translation from the CMIS query's where
- * clause to an XPath condition. <br/>
- * Specifically <code>EvaluatorXPath</code> only supports a single folder
- * predicate. That is the original CMIS query must not contain more than one
- * IN_TREE or IN_FOLDER predicate respectively. Furthermore that single folder
- * predicate must be affirmative. A literal <code>p</code> in a boolean
- * expression <code>X</code> is affirmative if there exists a boolean expression
- * <code>Y</code> such that <code>p &and; Y = X</code>. <em>Note</em>: a single
- * folder predicate is affirmative if any only if {@link #eval(Boolean)
- * <code>eval(false)</code>} return <code>false</code>. <br/>
- * Only if both conditions hold will the XPath translation provided the
- * {@link #xPath()} method be valid.
- */
-public interface XPathBuilder {
-
-    /**
-     * Translation of the underlying CMIS query's where clause to a XPath
-     * condition. The string is only valid if there is no more than one folder
-     * predicate and the folder predicate is in affirmative position.
-     */
-    String xPath();
-
-    /**
-     * Evaluate the query condition for a given valuation of the folder
-     * predicate terms.
-     * 
-     * @param folderPredicateValuation
-     *            valuation for the folder predicate terms. Use
-     *            <code>null</code> for none.
-     * @return result of the partial evaluation. <code>null</code> means that
-     *         the value of the query condition is not determined the value
-     *         passed for <code>folderPredicateValuation</code>.
-     */
-    Boolean eval(Boolean folderPredicateValuation);
-
-    /**
-     * The folder predicates contained in this query's condition.
-     */
-    Iterable<XPathBuilder> folderPredicates();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrDocumentTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrDocumentTypeHandler.java
deleted file mode 100644
index 9c2999b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrDocumentTypeHandler.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.type;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.jcr.JcrDocument;
-import org.apache.chemistry.opencmis.jcr.JcrFolder;
-import org.apache.chemistry.opencmis.jcr.JcrNode;
-
-/**
- * Implemented by type handlers that provides a type that is or inherits from
- * cmis:document.
- */
-public interface JcrDocumentTypeHandler extends JcrTypeHandler {
-
-    JcrDocument getJcrNode(Node node) throws RepositoryException;
-
-    /**
-     * See CMIS 1.0 section 2.2.4.1 createDocument
-     * 
-     * @throws org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException
-     * 
-     */
-    JcrNode createDocument(JcrFolder parentFolder, String name, Properties properties, ContentStream contentStream,
-            VersioningState versioningState);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrFolderTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrFolderTypeHandler.java
deleted file mode 100644
index a25bc61..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrFolderTypeHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.type;
-
-import javax.jcr.Node;
-
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.jcr.JcrFolder;
-
-/**
- * Implemented by type handlers that provides a type that is or inherits from
- * cmis:folder.
- */
-public interface JcrFolderTypeHandler extends JcrTypeHandler {
-
-    JcrFolder getJcrNode(Node node);
-
-    /**
-     * See CMIS 1.0 section 2.2.4.3 createFolder
-     * 
-     * @throws org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException
-     * 
-     */
-    JcrFolder createFolder(JcrFolder parentFolder, String name, Properties properties);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandler.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandler.java
deleted file mode 100644
index ec65bf3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.type;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.jcr.JcrNode;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.PathManager;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
-
-/**
- * Provides operations for a specific CMIS object type.
- * 
- * @see JcrTypeHandlerManager
- */
-public interface JcrTypeHandler {
-
-    /**
-     * Called by {@link JcrTypeHandlerManager} when the handler is added.
-     */
-    void initialize(PathManager pathManager, JcrTypeManager typeManager, JcrTypeHandlerManager typeHandlerManager);
-
-    String getTypeId();
-
-    TypeDefinition getTypeDefinition();
-
-    boolean canHandle(Node node) throws RepositoryException;
-
-    JcrNode getJcrNode(Node node) throws RepositoryException;
-
-    /**
-     * Used by QueryTranslator to translate CMIS queries to JCR queries.
-     * 
-     * @see org.apache.chemistry.opencmis.jcr.query.QueryTranslator
-     * @see org.apache.chemistry.opencmis.jcr.JcrRepository#query(javax.jcr.Session,
-     *      java.lang.String, java.lang.Boolean, java.lang.Boolean,
-     *      java.math.BigInteger, java.math.BigInteger)
-     */
-    IdentifierMap getIdentifierMap();
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandlerManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandlerManager.java
deleted file mode 100644
index 72edd5d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/type/JcrTypeHandlerManager.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.type;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.jcr.JcrNode;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.PathManager;
-import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
-import org.apache.chemistry.opencmis.jcr.util.Predicate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Manages a set of registered type handlers.
- */
-public class JcrTypeHandlerManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(JcrTypeHandlerManager.class);
-
-    private final PathManager pathManager;
-    private final JcrTypeManager typeManager;
-    private final Map<String, JcrTypeHandler> typeHandlers = new HashMap<String, JcrTypeHandler>();
-
-    public JcrTypeHandlerManager(PathManager pathManager, JcrTypeManager typeManager) {
-        this.pathManager = pathManager;
-        this.typeManager = typeManager;
-    }
-
-    public void addHandler(JcrTypeHandler typeHandler) {
-        if (typeManager.addType(typeHandler.getTypeDefinition())) {
-            typeHandlers.put(typeHandler.getTypeId(), typeHandler);
-            typeHandler.initialize(pathManager, typeManager, this);
-        }
-    }
-
-    public JcrTypeHandler getTypeHandler(String typeId) {
-        JcrTypeHandler typeHandler = typeHandlers.get(typeId);
-        if (typeHandler == null) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
-        }
-        return typeHandler;
-    }
-
-    public JcrFolderTypeHandler getFolderTypeHandler(String typeId) {
-        JcrTypeHandler typeHandler = getTypeHandler(typeId);
-        if (!(typeHandler instanceof JcrFolderTypeHandler)) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is not a folder!");
-        }
-        return (JcrFolderTypeHandler) typeHandler;
-    }
-
-    public JcrDocumentTypeHandler getDocumentTypeHandler(String typeId) {
-        JcrTypeHandler typeHandler = getTypeHandler(typeId);
-        if (!(typeHandler instanceof JcrDocumentTypeHandler)) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' is not a document!");
-        }
-        return (JcrDocumentTypeHandler) typeHandler;
-    }
-
-    public Predicate<Node> getNodePredicate() {
-        return new Predicate<Node>() {
-            public boolean evaluate(Node node) {
-                try {
-                    for (JcrTypeHandler typeHandler : typeHandlers.values()) {
-                        if (typeHandler.canHandle(node)) {
-                            return true;
-                        }
-                    }
-                    return false;
-                } catch (RepositoryException e) {
-                    LOG.debug(e.getMessage(), e);
-                    throw new CmisRuntimeException(e.getMessage(), e);
-                }
-            }
-        };
-    }
-
-    public IdentifierMap getIdentifierMap(String typeId) {
-        JcrTypeHandler typeHandler = getTypeHandler(typeId);
-        IdentifierMap identifierMap = typeHandler.getIdentifierMap();
-        if (identifierMap == null) {
-            throw new CmisRuntimeException("Not supported: query for type " + typeId);
-        }
-        return identifierMap;
-    }
-
-    public JcrNode create(Node node) {
-        try {
-            for (JcrTypeHandler typeHandler : typeHandlers.values()) {
-                if (typeHandler.canHandle(node)) {
-                    return typeHandler.getJcrNode(node);
-                }
-            }
-            throw new CmisObjectNotFoundException("No object type for object '" + node.getIdentifier() + "'");
-        } catch (RepositoryException e) {
-            LOG.debug(e.getMessage(), e);
-            throw new CmisObjectNotFoundException(e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/FilterIterator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/FilterIterator.java
deleted file mode 100644
index 74be686..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/FilterIterator.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.util;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Iterator filtering out items which do not match a given predicate.
- * 
- * @param <T>
- */
-public class FilterIterator<T> implements Iterator<T> {
-    private final Iterator<T> iterator;
-    private final Predicate<T> predicate;
-
-    private T next;
-
-    /**
-     * Create a new filtered iterator based on the given <code>iterator</code>.
-     * 
-     * @param iterator
-     *            iterator to filter
-     * @param predicate
-     *            only item matching this predicate are included
-     */
-    public FilterIterator(Iterator<T> iterator, Predicate<T> predicate) {
-        this.iterator = iterator;
-        this.predicate = predicate;
-    }
-
-    public boolean hasNext() {
-        while (next == null && iterator.hasNext()) {
-            T e = iterator.next();
-            if (predicate.evaluate(e)) {
-                next = e;
-            }
-        }
-
-        return next != null;
-    }
-
-    public T next() {
-        if (hasNext()) {
-            T e = next;
-            next = null;
-            return e;
-        } else {
-            throw new NoSuchElementException();
-        }
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/ISO8601.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/ISO8601.java
deleted file mode 100644
index f8c872c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/ISO8601.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.chemistry.opencmis.jcr.util;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-/**
- * 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/>
- * The currently supported format is:
- * 
- * <pre>
- *   &plusmn;YYYY-MM-DDThh:mm:ss.SSSTZD
- * </pre>
- * 
- * where:
- * 
- * <pre>
- *   &plusmn;YYYY = four-digit year with optional sign where values <= 0 are
- *           denoting years BCE and values > 0 are denoting years CE,
- *           e.g. -0001 denotes the year 2 BCE, 0000 denotes the year 1 BCE,
- *           0001 denotes the year 1 CE, and so on...
- *   MM    = two-digit month (01=January, etc.)
- *   DD    = two-digit day of month (01 through 31)
- *   hh    = two digits of hour (00 through 23) (am/pm NOT allowed)
- *   mm    = two digits of minute (00 through 59)
- *   ss    = two digits of second (00 through 59)
- *   SSS   = three digits of milliseconds (000 through 999)
- *   TZD   = time zone designator, Z for Zulu (i.e. UTC) or an offset from UTC
- *           in the form of +hh:mm or -hh:mm
- * </pre>
- * <p/>
- * <em>Note:</em> This class is copied from org.apache.jackrabbit.util.ISO8601
- */
-public final class ISO8601 {
-    private ISO8601() {
-    }
-
-    /**
-     * Parses an ISO8601-compliant date/time string.
-     * 
-     * @param text
-     *            the date/time string to be parsed
-     * @return a <code>Calendar</code>, or <code>null</code> if the input could
-     *         not be parsed
-     * @throws IllegalArgumentException
-     *             if a <code>null</code> argument is passed
-     */
-    public static Calendar parse(String text) {
-        if (text == null) {
-            throw new IllegalArgumentException("argument can not be null");
-        }
-
-        // check optional leading sign
-        char sign;
-        int start;
-        if (text.startsWith("-")) {
-            sign = '-';
-            start = 1;
-        } else if (text.startsWith("+")) {
-            sign = '+';
-            start = 1;
-        } else {
-            sign = '+'; // no sign specified, implied '+'
-            start = 0;
-        }
-
-        /**
-         * the expected format of the remainder of the string is:
-         * YYYY-MM-DDThh:mm:ss.SSSTZD
-         * 
-         * note that we cannot use java.text.SimpleDateFormat for parsing
-         * because it can't handle years <= 0 and TZD's
-         */
-
-        int year, month, day, hour, min, sec, ms;
-        String tzID;
-        try {
-            // year (YYYY)
-            year = Integer.parseInt(text.substring(start, start + 4));
-            start += 4;
-            // delimiter '-'
-            if (text.charAt(start) != '-') {
-                return null;
-            }
-            start++;
-            // month (MM)
-            month = Integer.parseInt(text.substring(start, start + 2));
-            start += 2;
-            // delimiter '-'
-            if (text.charAt(start) != '-') {
-                return null;
-            }
-            start++;
-            // day (DD)
-            day = Integer.parseInt(text.substring(start, start + 2));
-            start += 2;
-            // delimiter 'T'
-            if (text.charAt(start) != 'T') {
-                return null;
-            }
-            start++;
-            // hour (hh)
-            hour = Integer.parseInt(text.substring(start, start + 2));
-            start += 2;
-            // delimiter ':'
-            if (text.charAt(start) != ':') {
-                return null;
-            }
-            start++;
-            // minute (mm)
-            min = Integer.parseInt(text.substring(start, start + 2));
-            start += 2;
-            // delimiter ':'
-            if (text.charAt(start) != ':') {
-                return null;
-            }
-            start++;
-            // second (ss)
-            sec = Integer.parseInt(text.substring(start, start + 2));
-            start += 2;
-            // delimiter '.'
-            if (text.charAt(start) != '.') {
-                return null;
-            }
-            start++;
-            // millisecond (SSS)
-            ms = Integer.parseInt(text.substring(start, start + 3));
-            start += 3;
-            // time zone designator (Z or +00:00 or -00:00)
-            if (text.charAt(start) == '+' || text.charAt(start) == '-') {
-                // offset to UTC specified in the format +00:00/-00:00
-                tzID = "GMT" + text.substring(start);
-            } else if (text.substring(start).equals("Z")) {
-                tzID = "GMT";
-            } else {
-                // invalid time zone designator
-                return null;
-            }
-        } catch (IndexOutOfBoundsException e) {
-            return null;
-        } catch (NumberFormatException e) {
-            return null;
-        }
-
-        TimeZone tz = TimeZone.getTimeZone(tzID);
-        // verify id of returned time zone (getTimeZone defaults to "GMT")
-        if (!tz.getID().equals(tzID)) {
-            // invalid time zone
-            return null;
-        }
-
-        // initialize Calendar object
-        Calendar cal = Calendar.getInstance(tz);
-        cal.setLenient(false);
-        // year and era
-        if (sign == '-' || year == 0) {
-            // not CE, need to set era (BCE) and adjust year
-            cal.set(Calendar.YEAR, year + 1);
-            cal.set(Calendar.ERA, GregorianCalendar.BC);
-        } else {
-            cal.set(Calendar.YEAR, year);
-            cal.set(Calendar.ERA, GregorianCalendar.AD);
-        }
-        // month (0-based!)
-        cal.set(Calendar.MONTH, month - 1);
-        // day of month
-        cal.set(Calendar.DAY_OF_MONTH, day);
-        // hour
-        cal.set(Calendar.HOUR_OF_DAY, hour);
-        // minute
-        cal.set(Calendar.MINUTE, min);
-        // second
-        cal.set(Calendar.SECOND, sec);
-        // millisecond
-        cal.set(Calendar.MILLISECOND, ms);
-
-        try {
-            /**
-             * the following call will trigger an IllegalArgumentException if
-             * any of the set values are illegal or out of range
-             */
-            cal.getTime();
-            /**
-             * in addition check the validity of the year
-             */
-            getYear(cal);
-        } catch (IllegalArgumentException e) {
-            return null;
-        }
-
-        return cal;
-    }
-
-    /**
-     * Formats a <code>Calendar</code> value into an ISO8601-compliant date/time
-     * string.
-     * 
-     * @param cal
-     *            the time value to be formatted into a date/time string.
-     * @return the formatted date/time string.
-     * @throws IllegalArgumentException
-     *             if a <code>null</code> argument is passed or the calendar
-     *             cannot be represented as defined by ISO 8601 (i.e. year with
-     *             more than four digits).
-     */
-    public static String format(Calendar cal) throws IllegalArgumentException {
-        if (cal == null) {
-            throw new IllegalArgumentException("argument can not be null");
-        }
-
-        /**
-         * the format of the date/time string is: YYYY-MM-DDThh:mm:ss.SSSTZD
-         * 
-         * note that we cannot use java.text.SimpleDateFormat for formatting
-         * because it can't handle years <= 0 and TZD's
-         */
-        StringBuffer buf = new StringBuffer();
-        // year ([-]YYYY)
-        appendZeroPaddedInt(buf, getYear(cal), 4);
-        buf.append('-');
-        // month (MM)
-        appendZeroPaddedInt(buf, cal.get(Calendar.MONTH) + 1, 2);
-        buf.append('-');
-        // day (DD)
-        appendZeroPaddedInt(buf, cal.get(Calendar.DAY_OF_MONTH), 2);
-        buf.append('T');
-        // hour (hh)
-        appendZeroPaddedInt(buf, cal.get(Calendar.HOUR_OF_DAY), 2);
-        buf.append(':');
-        // minute (mm)
-        appendZeroPaddedInt(buf, cal.get(Calendar.MINUTE), 2);
-        buf.append(':');
-        // second (ss)
-        appendZeroPaddedInt(buf, cal.get(Calendar.SECOND), 2);
-        buf.append('.');
-        // millisecond (SSS)
-        appendZeroPaddedInt(buf, cal.get(Calendar.MILLISECOND), 3);
-        // time zone designator (Z or +00:00 or -00:00)
-        TimeZone tz = cal.getTimeZone();
-        // determine offset of timezone from UTC (incl. daylight saving)
-        int offset = tz.getOffset(cal.getTimeInMillis());
-        if (offset == 0) {
-            buf.append('Z');
-        } else {
-            int hours = Math.abs(offset / (60 * 1000) / 60);
-            int minutes = Math.abs(offset / (60 * 1000) % 60);
-            buf.append(offset < 0 ? '-' : '+');
-            appendZeroPaddedInt(buf, hours, 2);
-            buf.append(':');
-            appendZeroPaddedInt(buf, minutes, 2);
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns the astronomical year of the given calendar.
-     * 
-     * @param cal
-     *            a calendar instance.
-     * @return the astronomical year.
-     * @throws IllegalArgumentException
-     *             if calendar cannot be represented as defined by ISO 8601
-     *             (i.e. year with more than four digits).
-     */
-    public static int getYear(Calendar cal) throws IllegalArgumentException {
-        // determine era and adjust year if necessary
-        int year = cal.get(Calendar.YEAR);
-        if (cal.isSet(Calendar.ERA) && cal.get(Calendar.ERA) == GregorianCalendar.BC) {
-
-            // calculate year using astronomical system:
-            // year n BCE => astronomical year -n + 1
-            year = 0 - year + 1;
-        }
-
-        if (year > 9999 || year < -9999) {
-            throw new IllegalArgumentException("Calendar has more than four "
-                    + "year digits, cannot be formatted as ISO8601: " + year);
-        }
-        return year;
-    }
-
-    /**
-     * Appends a zero-padded number to the given string buffer.
-     * <p/>
-     * This is an internal helper method which doesn't perform any validation on
-     * the given arguments.
-     * 
-     * @param buf
-     *            String buffer to append to
-     * @param n
-     *            number to append
-     * @param precision
-     *            number of digits to append
-     */
-    private static void appendZeroPaddedInt(StringBuffer buf, int n, int precision) {
-        if (n < 0) {
-            buf.append('-');
-            n = -n;
-        }
-
-        for (int exp = precision - 1; exp > 0; exp--) {
-            if (n < Math.pow(10, exp)) {
-                buf.append('0');
-            } else {
-                break;
-            }
-        }
-        buf.append(n);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Iterables.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Iterables.java
deleted file mode 100644
index 61211af..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Iterables.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.util;
-
-import java.util.Iterator;
-
-import org.apache.commons.collections.iterators.EmptyIterator;
-import org.apache.commons.collections.iterators.IteratorChain;
-import org.apache.commons.collections.iterators.SingletonIterator;
-
-public class Iterables {
-    private Iterables() {
-    }
-
-    public static <T> Iterable<T> concat(final Iterable<T> it1, final Iterable<T> it2) {
-        return new Iterable<T>() {
-            @SuppressWarnings("unchecked")
-            public Iterator<T> iterator() {
-                return new IteratorChain(it1.iterator(), it2.iterator());
-            }
-        };
-    }
-
-    public static <T> Iterable<T> singleton(final T element) {
-        return new Iterable<T>() {
-            @SuppressWarnings("unchecked")
-            public Iterator<T> iterator() {
-                return new SingletonIterator(element);
-            }
-        };
-    }
-
-    public static <T> Iterable<T> empty() {
-        return new Iterable<T>() {
-            @SuppressWarnings("unchecked")
-            public Iterator<T> iterator() {
-                return EmptyIterator.INSTANCE;
-            }
-        };
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Predicate.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Predicate.java
deleted file mode 100644
index 043ea36..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Predicate.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.util;
-
-/**
- * Interface for predicates of type <code>T</code>, i.e. functions from
- * <code>T</code> to <code>boolean</code>.
- */
-public interface Predicate<T> {
-
-    /**
-     * Evaluates the predicate for the given object.
-     * 
-     * @param t
-     *            some object
-     * @return predicate result
-     */
-    boolean evaluate(T t);
-
-    /**
-     * Constant predicate that returns <code>true</code> for all objects.
-     */
-    Predicate<?> TRUE = new Predicate<Object>() {
-        public boolean evaluate(Object object) {
-            return true;
-        }
-    };
-
-    /**
-     * Constant predicate that returns <code>false</code> for all objects.
-     */
-    Predicate<?> FALSE = new Predicate<Object>() {
-        public boolean evaluate(Object object) {
-            return false;
-        }
-    };
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Util.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Util.java
deleted file mode 100644
index 0b89add..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/util/Util.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.jcr.util;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-/**
- * Miscellaneous utility functions
- */
-public final class Util {
-    private Util() {
-    }
-
-    /**
-     * Convert from <code>Calendar</code> to a <code>GregorianCalendar</code>.
-     * 
-     * @param date
-     * @return <code>date</code> if it is an instance of
-     *         <code>GregorianCalendar</code>. Otherwise a new
-     *         <code>GregorianCalendar</code> instance for <code>date</code>.
-     */
-    public static GregorianCalendar toCalendar(Calendar date) {
-        if (date instanceof GregorianCalendar) {
-            return (GregorianCalendar) date;
-        } else {
-            GregorianCalendar calendar = new GregorianCalendar();
-            calendar.setTimeZone(date.getTimeZone());
-            calendar.setTimeInMillis(date.getTimeInMillis());
-            return calendar;
-        }
-    }
-
-    /**
-     * Replace every occurrence of <code>target</code> in <code>string</code>
-     * with <code>replacement</code>.
-     * 
-     * @param string
-     *            string to do replacement on
-     * @param target
-     *            string to search for
-     * @param replacement
-     *            string to replace with
-     * @return string with replacing done
-     */
-    public static String replace(String string, String target, String replacement) {
-        if ("".equals(target)) {
-            throw new IllegalArgumentException("target string must not be empty");
-        }
-        if ("".equals(replacement) || target.equals(replacement)) {
-            return string;
-        }
-
-        StringBuilder result = new StringBuilder();
-        int d = target.length();
-        int k = 0;
-        int j;
-        do {
-            j = string.indexOf(target, k);
-            if (j < 0) {
-                result.append(string.substring(k));
-            } else {
-                result.append(string.substring(k, j)).append(replacement);
-            }
-
-            k = j + d;
-        } while (j >= 0);
-
-        return result.toString();
-    }
-
-    /**
-     * Escapes a JCR path such that it can be used in a XPath query
-     * 
-     * @param path
-     * @return escaped path
-     */
-    public static String escape(String path) {
-        return replace(path, " ", "_x0020_"); // fixme do more thorough escaping
-                                              // of path
-    }
-
-    /**
-     * The repository's support option definition.
-     * 
-     * @param node
-     *            JCR node
-     * @param option
-     *            requested repository's option
-     * @return true if repository supports option, otherwise false.
-     * @throws RepositoryException
-     *             thrown when any error with repository was occurred.
-     */
-    public static boolean supportOption(Node node, String option) throws RepositoryException {
-        return Boolean.valueOf(node.getSession().getRepository().getDescriptor(option));
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/LICENSE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/LICENSE
deleted file mode 100644
index 37e3aff..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/LICENSE
+++ /dev/null
@@ -1,206 +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.
-
-=======================================================================
-
-Please see also THRID-PARTY-LICENSES.
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/NOTICE b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/NOTICE
deleted file mode 100644
index f5dc0d4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/META-INF/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS JCR Bridge
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index 0010fed..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class=org.apache.chemistry.opencmis.jcr.JcrServiceFactory
-
-mount-path=/
-
-# Properties prefixed by 'jcr.' are passed to the repository factory verbatim
-# after removing the 'jcr.' prefix.
-jcr.org.apache.jackrabbit.repository.uri=file:///{user.home}/jcr-repository
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/AbstractJcrSessionTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/AbstractJcrSessionTest.java
deleted file mode 100644
index fd6c082..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/AbstractJcrSessionTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultFolderTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultUnversionedDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.jackrabbit.api.JackrabbitSession;
-import org.apache.jackrabbit.core.TransientRepository;
-import org.junit.After;
-import org.junit.Before;
-
-/**
- * Abstract class for the test cases are covering JCR compliance.
- * The Jackrabbit's TransientRepository class uses as content repository.   
- */
-public abstract class AbstractJcrSessionTest {
-    private TransientRepository transientRepository;
-    private JcrRepository jcrRepository;
-    private Session session;
-    private JcrTypeManager typeManager;
-    private static final String MOUNT_PATH = "/";
-
-
-    @Before
-    public void setUp() throws Exception {
-        transientRepository = new TransientRepository();
-        session = transientRepository.login(new SimpleCredentials("adminId", "admin".toCharArray()));
-        typeManager = new JcrTypeManager();
-        PathManager pathManger = new PathManager(MOUNT_PATH);
-        JcrTypeHandlerManager typeHandlerManager = createTypeHandlerManager(pathManger, typeManager);
-        jcrRepository = new JcrRepository(transientRepository, pathManger, typeManager, typeHandlerManager);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        transientRepository.shutdown();
-    }
-
-    private static JcrTypeHandlerManager createTypeHandlerManager(PathManager pathManager, JcrTypeManager typeManager) {
-        JcrTypeHandlerManager typeHandlerManager = new JcrTypeHandlerManager(pathManager, typeManager);
-        typeHandlerManager.addHandler(new DefaultFolderTypeHandler());
-        typeHandlerManager.addHandler(new DefaultDocumentTypeHandler());
-        typeHandlerManager.addHandler(new DefaultUnversionedDocumentTypeHandler());
-        return typeHandlerManager;
-    }
-
-    protected Session getSession() {
-        try {
-            //initialization of the UserManager
-            ((JackrabbitSession) session).getUserManager();
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage());
-        }
-        return session;
-    }
-
-    protected JcrRepository getJcrRepository() {
-        return jcrRepository;
-    }
-
-    protected ObjectData getRootFolder(){
-        return getJcrRepository().getObjectByPath(getSession(),
-                MOUNT_PATH, null, false, false, null, false);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrFolderTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrFolderTest.java
deleted file mode 100644
index b8cd44e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrFolderTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * The test covers org.apache.chemistry.opencmis.jcr.JcrRepository class.
- */
-@Ignore
-public class JcrFolderTest extends AbstractJcrSessionTest {
-
-    /**
-     * Test of the root folder
-     */
-    @Test
-    public void testRootFolder(){
-        ObjectData objData = getRootFolder();
-        Assert.assertNotNull(objData);
-    }
-
-    /**
-     * Test of the <code>PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS</code> of the CMIS object.
-     */
-    @Test
-    public void testJcrTypeProperty(){
-        getRootFolder().getProperties();
-        PropertiesImpl properties = new PropertiesImpl();
-
-        properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"));
-        properties.addProperty(new PropertyStringImpl(PropertyIds.NAME, "TestFolder"));
-        String testFolderId = getJcrRepository().createFolder(getSession(), properties, getRootFolder().getId());
-        ObjectData testFolder = getJcrRepository().getObject(getSession(), testFolderId, null, null, null, false);
-        Assert.assertNotNull(testFolder.getProperties().getProperties()
-                .get(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS).getValues());
-    }
-
-
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrObservationJournalTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrObservationJournalTest.java
deleted file mode 100644
index 6039a22..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/JcrObservationJournalTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.jcr;
-
-import java.math.BigInteger;
-
-import junit.framework.Assert;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-@Ignore
-public class JcrObservationJournalTest extends AbstractJcrSessionTest {
-    private static final BigInteger PAGE_SIZE = new BigInteger("4");
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
-
-        Assert.assertEquals(CapabilityChanges.OBJECTIDSONLY, getJcrRepository()
-                .getRepositoryInfo(getSession()).getCapabilities()
-                .getChangesCapability());
-
-        fillObservationJournal();
-    }
-
-    @Test
-    public void testObservationJournal() throws Exception {
-        // FIXME not such method: JcrRepository.getContentChanges()
-//        ObjectList objList = getJcrRepository().getContentChanges(getSession(),
-//                null, false, null, false, false, PAGE_SIZE, null);
-        ObjectList objList = null;
-
-        //The repository supports journaled observation
-        Assert.assertNotNull(objList);
-
-        //event list isn't empty
-        Assert.assertEquals(true, !objList.getObjects().isEmpty());
-
-        ChangeEventInfo latestChangeEvent = objList.getObjects()
-                .get(objList.getNumItems().intValue() - 1).getChangeEventInfo();
-        long previousChangeLogToken = latestChangeEvent.getChangeTime().getTimeInMillis();
-        // FIXME not such method: JcrRepository.getContentChanges()
-//        objList = getJcrRepository().getContentChanges(getSession(),
-//                String.valueOf(previousChangeLogToken), false, null, false, false, PAGE_SIZE, null);
-
-        latestChangeEvent = objList.getObjects()
-                .get(objList.getNumItems().intValue() - 1).getChangeEventInfo();
-
-        long latestChangeLogToken = latestChangeEvent.getChangeTime().getTimeInMillis();
-
-        //Ensure the latest change log token is the really latest one.
-        Assert.assertEquals(true, latestChangeLogToken > previousChangeLogToken);
-
-        //In journal must remain some events.
-        Assert.assertEquals(Boolean.TRUE, objList.hasMoreItems());
-    }
-
-    private void fillObservationJournal() {
-        PropertiesImpl properties = new PropertiesImpl();
-        properties.addProperty(new PropertyStringImpl(PropertyIds.NAME, "OBSERVATION_TEST_FOLDER"));
-        properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"));
-
-        String testFolderId = getJcrRepository().createFolder(getSession(), properties, getRootFolder().getId());
-        properties = new PropertiesImpl();
-        properties.addProperty(new PropertyStringImpl(PropertyIds.NAME, "NEW_NAME_TEST_FOLDER"));
-        getJcrRepository().getJcrNode(getSession(), testFolderId)
-            .updateProperties(properties);
-        getJcrRepository().deleteObject(getSession(), testFolderId, true);
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslatorTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslatorTest.java
deleted file mode 100644
index 891c028..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/QueryTranslatorTest.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.util.GregorianCalendar;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.PathManager;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultFolderTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultUnversionedDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.jcr.util.ISO8601;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.junit.Before;
-import org.junit.Test;
-
-public class QueryTranslatorTest {
-    private String jcrTypeCondition;
-
-    private QueryTranslator queryTranslator;
-
-    @Before
-    public void setUp() throws Exception {
-        JcrTypeManager typeManager = new JcrTypeManager();
-        PathManager pathManager = new PathManager(PathManager.CMIS_ROOT_PATH);
-        JcrTypeHandlerManager typeHandlerManager = new JcrTypeHandlerManager(pathManager, typeManager);
-        typeHandlerManager.addHandler(new DefaultFolderTypeHandler());
-        typeHandlerManager.addHandler(new DefaultDocumentTypeHandler());
-        typeHandlerManager.addHandler(new DefaultUnversionedDocumentTypeHandler());
-
-        queryTranslator = new QueryTranslator(typeManager) {
-
-            @Override
-            protected String jcrPathFromId(String id) {
-                assertNotNull(id);
-                return "/jcr:" + id;
-            }
-
-            @Override
-            protected String jcrPathFromCol(TypeDefinition fromType, String name) {
-                assertNotNull(fromType);
-                assertNotNull(name);
-                return name.replace("cmis:", "@jcr:");
-            }
-
-            @Override
-            protected String jcrTypeName(TypeDefinition fromType) {
-                assertNotNull(fromType);
-                return fromType.getQueryName().replace("cmis:", "jcr:");
-            }
-
-            @Override
-            protected String jcrTypeCondition(TypeDefinition fromType) {
-                assertNotNull(fromType);
-                return jcrTypeCondition;
-            }
-        };
-    }
-
-    @Test
-    public void testQueryTranslator() {
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)",
-                queryTranslator.translateToXPath("select * from cmis:document"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:isLatestVersion = 'foo']",
-                queryTranslator.translateToXPath("select * from cmis:document where cmis:isLatestVersion='foo'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:like(@jcr:isLatestVersion, 'foo')]",
-                queryTranslator.translateToXPath("select * from cmis:document where cmis:isLatestVersion LIKE 'foo'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[not(jcr:like(@jcr:isLatestVersion, 'foo'))]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:isLatestVersion NOT LIKE 'foo'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:isLatestVersion = 'foo' and @jcr:name != 'baz']",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:isLatestVersion='foo' AND cmis:name<>'baz'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[not((@jcr:isLatestVersion > 'foo' or @jcr:name < 1.0))]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where NOT (cmis:isLatestVersion>'foo' OR cmis:name< 1.0)"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[(@jcr:name = 'foo' or @jcr:objectId = 'baz' and @jcr:createdBy = 'bar')]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:name = 'foo' or cmis:objectId = 'baz' " +
-                                "and cmis:createdBy = 'bar'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[(@jcr:name = 'foo' and @jcr:objectId = 'baz' or @jcr:createdBy = 'bar')]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:name = 'foo' and cmis:objectId = 'baz' " +
-                                "or cmis:createdBy = 'bar'"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:name = 'foo' and (@jcr:objectId = 'baz' or @jcr:createdBy = 'bar')]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:name = 'foo' and (cmis:objectId = 'baz' " +
-                                "or cmis:createdBy = 'bar')"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where IN_FOLDER('folderId')"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)",
-                queryTranslator.translateToXPath("select * from cmis:document where not(not(IN_FOLDER('folderId')))"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId//element(*,jcr:document)",
-                queryTranslator.translateToXPath("select * from cmis:document where IN_TREE('folderId')"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId//element(*,jcr:document)",
-                queryTranslator.translateToXPath("select * from cmis:document where not(not(IN_TREE('folderId')))"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)[@jcr:name <= 1]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where IN_FOLDER('folderId') AND cmis:name <= 1"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId//element(*,jcr:document)[@jcr:name >= 'name' and @jcr:name = true]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where IN_TREE('folderId') AND cmis:name >= 'name' " +
-                                "AND cmis:name = TRUE"));
-
-        GregorianCalendar date = new GregorianCalendar();
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)[not(@jcr:creationDate = xs:dateTime('" +
-                        ISO8601.format(date) + "'))]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where NOT(NOT IN_FOLDER('folderId') OR cmis:creationDate = TIMESTAMP '" +
-                                CalendarHelper.toString(date) + "')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, '\u4E2D\u6587')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('\u4E2D\u6587')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, 'foo bar')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('foo AND bar')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, 'foo OR bar')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('foo OR bar')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, 'foo -bar')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('foo -bar')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, 'foo \"bar phrase\"')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('foo \"bar phrase\"')"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:contains(jcr:content, 'foo -\"bar phrase\"')]",
-                queryTranslator.translateToXPath("select * from cmis:document where contains('foo -\"bar phrase\"')"));
-
-    }
-
-    @Test
-    public void testQueryWithOrderBy() {
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)order by @jcr:name ascending",
-                queryTranslator.translateToXPath("select * from cmis:document order by cmis:name"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:isLatestVersion = 'foo']order by @jcr:name descending",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:isLatestVersion='foo' order by cmis:name desc"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[jcr:like(@jcr:isLatestVersion, 'foo')]order by @jcr:name ascending," +
-                        "@jcr:objectId descending",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where cmis:isLatestVersion LIKE 'foo' order by cmis:name asc, cmis:objectId desc"));
-    }
-
-    @Test
-    public void testQueryTranslatorWithTypeCondition() {
-        jcrTypeCondition = "@jcr:primaryType = nt:base";
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:primaryType = nt:base]",
-                queryTranslator.translateToXPath("select * from cmis:document"));
-
-        assertEquals(
-                "/jcr:root//element(*,jcr:document)[@jcr:primaryType = nt:base and @jcr:isLatestVersion = 'foo']",
-                queryTranslator.translateToXPath("select * from cmis:document where cmis:isLatestVersion='foo'"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)[@jcr:primaryType = nt:base]",
-                queryTranslator.translateToXPath("select * from cmis:document where IN_FOLDER('folderId')"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)[@jcr:primaryType = nt:base]",
-                queryTranslator.translateToXPath("select * from cmis:document where not(not(IN_FOLDER('folderId')))"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId//element(*,jcr:document)[@jcr:primaryType = nt:base]",
-                queryTranslator.translateToXPath("select * from cmis:document where IN_TREE('folderId')"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId//element(*,jcr:document)[@jcr:primaryType = nt:base]",
-                queryTranslator.translateToXPath("select * from cmis:document where not(not(IN_TREE('folderId')))"));
-
-        assertEquals(
-                "/jcr:root/jcr:folderId/element(*,jcr:document)[@jcr:primaryType = nt:base and @jcr:name <= 1]",
-                queryTranslator.translateToXPath(
-                        "select * from cmis:document where IN_FOLDER('folderId') AND cmis:name <= 1"));
-    }
-
-    @Test
-    public void testQueryTranslatorQueryTooSpecific() {
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where NOT IN_FOLDER('folderId')");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where NOT(NOT IN_FOLDER('folderId') AND cmis:name = 'name')");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where IN_FOLDER('folderId') OR cmis:name = 'name'");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where NOT(IN_FOLDER('folderId') AND cmis:name = 'name')");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where IN_FOLDER('folder1Id') OR IN_TREE('folder2Id')");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-
-        try {
-            queryTranslator.translateToXPath(
-                    "select * from cmis:document where IN_FOLDER('folder1Id') AND NOT IN_TREE('folder2Id')");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) { }
-    }
-
-    @Test
-    public void testNotImplemented() {
-        try {
-            queryTranslator.translateToXPath("select * from cmis:document where cmis:name in (1,2,3)");
-            fail();
-        }
-        catch (CmisNotSupportedException expected) {}
-
-        try {
-            queryTranslator.translateToXPath("select * from cmis:document where 'foo' = ANY cmis:name");
-            fail();
-        }
-        catch (CmisNotSupportedException expected) {}
-    }
-
-    @Test
-    public void testInvalidQuery() {
-        try {
-            queryTranslator.translateToXPath("");
-            fail();
-        } catch (CmisInvalidArgumentException expected) {
-        }
-
-        try {
-            queryTranslator.translateToXPath("select * from cmis:something");
-            fail();
-        } catch (CmisInvalidArgumentException expected) {
-        }
-
-        try {
-            queryTranslator.translateToXPath("select * from cmis:document WHERE");
-            fail();
-        } catch (CmisInvalidArgumentException expected) {
-        }
-
-        try {
-            queryTranslator.translateToXPath("select * from cmis:document WHERE cmis:something = 'foo'");
-            fail();
-        } catch (CmisInvalidArgumentException expected) {
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilderTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilderTest.java
deleted file mode 100644
index 6518e01..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/chemistry/opencmis/jcr/query/XPathBuilderTest.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.chemistry.opencmis.jcr.query;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.Arrays;
-import java.util.GregorianCalendar;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
-import org.apache.chemistry.opencmis.jcr.PathManager;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultFolderTypeHandler;
-import org.apache.chemistry.opencmis.jcr.impl.DefaultUnversionedDocumentTypeHandler;
-import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager;
-import org.apache.chemistry.opencmis.jcr.util.ISO8601;
-import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
-import org.apache.chemistry.opencmis.server.support.query.QueryObject;
-import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
-import org.junit.Before;
-import org.junit.Test;
-
-public class XPathBuilderTest {
-
-    private JcrTypeManager typeManager;
-
-    @Before
-    public void setUp() throws Exception {
-        typeManager = new JcrTypeManager();
-        PathManager pathManager = new PathManager(PathManager.CMIS_ROOT_PATH);
-        JcrTypeHandlerManager typeHandlerManager = new JcrTypeHandlerManager(pathManager, typeManager);
-        typeHandlerManager.addHandler(new DefaultFolderTypeHandler());
-        typeHandlerManager.addHandler(new DefaultDocumentTypeHandler());
-        typeHandlerManager.addHandler(new DefaultUnversionedDocumentTypeHandler());
-    }
-
-    @Test
-    public void testValidQuery() {
-        check("select * from cmis:document",
-                null,
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:isLatestVersion='foo'",
-                "cmis:isLatestVersion = 'foo'",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:isLatestVersion LIKE 'foo'",
-                "jcr:like(cmis:isLatestVersion, 'foo')",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:isLatestVersion NOT LIKE 'foo'",
-                "not(jcr:like(cmis:isLatestVersion, 'foo'))",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:isLatestVersion='foo' AND cmis:name<>'baz'",
-                "cmis:isLatestVersion = 'foo' and cmis:name != 'baz'",
-                list(),
-                null);
-
-        check("select * from cmis:document where NOT (cmis:isLatestVersion>'foo' OR cmis:name< 1.0)",
-                "not((cmis:isLatestVersion > 'foo' or cmis:name < 1.0))",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:name = 'foo' or cmis:objectId = 'baz' and cmis:createdBy = 'bar'",
-                "(cmis:name = 'foo' or cmis:objectId = 'baz' and cmis:createdBy = 'bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:name = 'foo' and cmis:objectId = 'baz' or cmis:createdBy = 'bar'",
-                "(cmis:name = 'foo' and cmis:objectId = 'baz' or cmis:createdBy = 'bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:name = 'foo' and (cmis:objectId = 'baz' or cmis:createdBy = 'bar')",
-                "cmis:name = 'foo' and (cmis:objectId = 'baz' or cmis:createdBy = 'bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where IN_FOLDER('folderId')",
-                "folderId/",
-                list("folderId/"),
-                false);
-
-        check("select * from cmis:document where not(not(IN_FOLDER('folderId')))",
-                "true()",
-                list("folderId/"),
-                false);
-
-        check("select * from cmis:document where IN_TREE('folderId')",
-                "folderId//",
-                list("folderId//"),
-                false);
-
-        check("select * from cmis:document where not(not(IN_TREE('folderId')))",
-                "true()",
-                list("folderId//"),
-                false);
-
-        check("select * from cmis:document where IN_FOLDER('folderId') AND cmis:name <= 1",
-                "cmis:name <= 1",
-                list("folderId/"),
-                false);
-
-        check("select * from cmis:document where IN_TREE('folderId') AND cmis:name >= 'name' AND cmis:name = TRUE",
-                "cmis:name >= 'name' and cmis:name = true",
-                list("folderId//"),
-                false);
-
-        GregorianCalendar date = new GregorianCalendar();
-        check("select * from cmis:document where NOT(NOT IN_FOLDER('folderId') OR cmis:name = TIMESTAMP '" +
-                CalendarHelper.toString(date) + "')",
-                "not(cmis:name = xs:dateTime('" + ISO8601.format(date) + "'))",
-                list("folderId/"),
-                false);
-
-        check("select * from cmis:document where cmis:name IS NULL",
-                "cmis:name",
-                list(),
-                null);
-
-        check("select * from cmis:document where cmis:name IS NOT NULL",
-                "not(cmis:name)",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo')",
-                "jcr:contains(jcr:content, 'foo')",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo AND bar')",
-                "jcr:contains(jcr:content, 'foo bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo OR bar')",
-                "jcr:contains(jcr:content, 'foo OR bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo -bar')",
-                "jcr:contains(jcr:content, 'foo -bar')",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo AND \"bar phrase\"')",
-                "jcr:contains(jcr:content, 'foo \"bar phrase\"')",
-                list(),
-                null);
-
-        check("select * from cmis:document where CONTAINS('foo AND -\"bar phrase\"')",
-                "jcr:contains(jcr:content, 'foo -\"bar phrase\"')",
-                list(),
-                null);
-    }
-
-    @Test
-    public void testTooSpecificQuery() {
-        check("select * from cmis:document where NOT IN_FOLDER('folderId')",
-                "false()",
-                list("folderId/"),
-                true);
-
-        check("select * from cmis:document where NOT(NOT IN_FOLDER('folderId') AND cmis:name = 'name')",
-                "true()",
-                list("folderId/"),
-                null);
-
-        check("select * from cmis:document where IN_FOLDER('folderId') OR cmis:name = 'name'",
-                "true()",
-                list("folderId/"),
-                null);
-
-        check("select * from cmis:document where NOT(IN_FOLDER('folderId') AND cmis:name = 'name')",
-                "not(cmis:name = 'name')",
-                list("folderId/"),
-                true);
-
-        check("select * from cmis:document where IN_FOLDER('folder1Id') OR IN_TREE('folder2Id')",
-                "true()",
-                list("folder1Id/", "folder2Id//"),
-                false);
-
-        check("select * from cmis:document where IN_FOLDER('folder1Id') AND NOT IN_TREE('folder2Id')",
-                "false()",
-                list("folder1Id/", "folder2Id//"),
-                false);
-    }
-
-    @Test
-    public void testNotImplemented() {
-        try {
-            execute("select * from cmis:document where cmis:name in (1,2,3)");
-            fail();
-        }
-        catch (CmisNotSupportedException expected) {}
-
-        try {
-            execute("select * from cmis:document where 'foo' = ANY cmis:name");
-            fail();
-        }
-        catch (CmisNotSupportedException expected) {}
-    }
-
-    @Test
-    public void testInvalidQuery() {
-        try {
-            execute("");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) {}
-
-        try {
-            execute("select * from cmis:something");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) {}
-
-        try {
-            execute("select * from cmis:document WHERE");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) {}
-
-        try {
-            execute("select * from cmis:document WHERE cmis:something = 'foo'");
-            fail();
-        }
-        catch (CmisInvalidArgumentException expected) {}
-    }
-
-    //------------------------------------------< private >---
-
-    private static List<String> list(String... elements) {
-        return Arrays.asList(elements);
-    }
-
-    private XPathBuilder execute(String statement) {
-        QueryObject queryObject = new QueryObject(typeManager);
-        ParseTreeWalker<XPathBuilder> parseTreeWalker = new ParseTreeWalker<XPathBuilder>(new EvaluatorXPath());
-        QueryUtilStrict queryUtil = new QueryUtilStrict(statement, typeManager, parseTreeWalker);
-        queryUtil.processStatementUsingCmisExceptions();
-        return parseTreeWalker.getResult();
-    }
-
-    private void check(String query, String result, List<String> folderPredicates, Boolean evaluation) {
-        XPathBuilder queryBuilder = execute(query);
-        if (result == null) {
-            assertEquals(null, queryBuilder);
-        } else {
-            assertEquals(result, queryBuilder.xPath());
-
-            Iterator<XPathBuilder> folderPredicatesBuilder = queryBuilder.folderPredicates().iterator();
-            for (String folderPredicate : folderPredicates) {
-                assertTrue(folderPredicatesBuilder.hasNext());
-                assertEquals(folderPredicate, folderPredicatesBuilder.next().xPath());
-            }
-            assertFalse(folderPredicatesBuilder.hasNext());
-
-            assertEquals(evaluation, queryBuilder.eval(false));
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/jackrabbit/core/security/TestSecurityManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/jackrabbit/core/security/TestSecurityManager.java
deleted file mode 100644
index 6e9a449..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/java/org/apache/jackrabbit/core/security/TestSecurityManager.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.security;
-
-import java.lang.reflect.Field;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.jackrabbit.api.security.user.Authorizable;
-import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.core.SessionImpl;
-import org.apache.jackrabbit.core.security.simple.SimpleSecurityManager;
-import org.apache.jackrabbit.core.security.user.UserImpl;
-import org.apache.jackrabbit.core.security.user.UserManagerImpl;
-
-/**
- * Provides access to the observation journal. It represents current user as administrator.  
- * The reason to use one is SimpleSecurityManager doesn't support UserManager of a session.
- */
-public class TestSecurityManager extends SimpleSecurityManager {
-
-    private static class MockAdmin extends UserImpl {
-
-        protected MockAdmin(UserManagerImpl userManager) {
-            super(null, userManager);
-        }
-
-        @Override
-        public boolean isGroup() {
-            return false;
-        }
-
-        @Override
-        public boolean isDisabled() throws RepositoryException {
-            return false;
-        }
-
-        @Override
-        public boolean isAdmin() {
-            return true;
-        }
-
-    }
-
-    private class MockUserManager extends UserManagerImpl {
-
-        public MockUserManager() throws RepositoryException {
-            super((SessionImpl) getSystemSession(), "admin");
-        }
-
-        @Override
-        public Authorizable getAuthorizable(String id) throws RepositoryException {
-            return new MockAdmin(this);
-        }
-    }
-
-    @Override
-    public UserManager getUserManager(Session session) throws RepositoryException {
-        return new MockUserManager();
-    }
-
-    protected Session getSystemSession() {
-        try {
-            Field sessionField;
-            sessionField = SimpleSecurityManager.class.getDeclaredField("systemSession");
-            sessionField.setAccessible(true);
-            return (Session) sessionField.get(this);
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/resources/repository.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/resources/repository.xml
deleted file mode 100644
index 9c45e82..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/test/resources/repository.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 Repository
-          PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.0//EN"
-          "http://jackrabbit.apache.org/dtd/repository-2.0.dtd">
-
-<!-- Example Repository Configuration File
-     Used by
-     - org.apache.jackrabbit.core.config.RepositoryConfigTest.java
-     -
--->
-<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>
-
-    <!--
-        data store configuration
-    -->
-    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore"/>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            security manager:
-            class: FQN of class implementing the JackrabbitSecurityManager interface
-        -->
-
-        <!--  <SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" workspaceName="security"> --> 
-         <SecurityManager class="org.apache.jackrabbit.core.security.TestSecurityManager" workspaceName="security"> 
-
-            <!--
-            workspace access:
-            class: FQN of class implementing the WorkspaceAccessManager interface
-            -->
-            <!-- <WorkspaceAccessManager class="..."/> -->
-            <!-- <param name="config" value="${rep.home}/security.xml"/> -->
-        </SecurityManager>
-
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
-           <!-- 
-              anonymous user name ('anonymous' is the default value)
-            -->
-           <param name="anonymousId" value="anonymous"/>
-           <!--
-              administrator user id (default value if param is missing is 'admin')
-            -->
-           <param name="adminId" value="admin"/>
-        </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.persistence.pool.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"/>
-            <param name="supportHighlighting" value="true"/>
-        </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.persistence.pool.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)
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-        <param name="supportHighlighting" value="true"/>
-    </SearchIndex>
-
-    <!--
-        Run with a cluster journal
-    -->
-    <Cluster id="node1">
-          <Journal class="org.apache.jackrabbit.core.journal.FileJournal">
-        <param name="revision" value="${rep.home}/revision.log" />
-        <param name="directory" value="${rep.home}/myjournal" />
-      </Journal>
-    </Cluster>
-</Repository>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/pom.xml b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/pom.xml
deleted file mode 100644
index 11473f9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <packaging>jar</packaging>
-
-    <artifactId>chemistry-opencmis-server-support</artifactId>
-    <name>OpenCMIS Server Support</name>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-commons-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr-runtime</artifactId>
-            <version>3.5</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>target/generated-resources</directory>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.antlr</groupId>
-                <artifactId>antlr3-maven-plugin</artifactId>
-                <version>3.5.2</version>
-                <configuration>
-                    <excludes>
-                        <exclude>**/CmisBase*.g</exclude>
-                        <exclude>**/Java*.g</exclude>
-                    </excludes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <!-- default phase: process-sources -->
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>antlr</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.5</version>
-                <executions>
-                    <execution>
-                        <phase>generate-resources</phase> <!-- after process-sources -->
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <resources>
-                                <resource>
-                                    <directory>target/generated-sources/antlr3</directory>
-                                    <includes>
-                                        <!-- don't include lexer tokens, which are identical -->
-                                        <include>*Parser.tokens</include>
-                                    </includes>
-                                </resource>
-                            </resources>
-                            <outputDirectory>target/generated-resources/org/apache/chemistry/opencmis/server/support/query</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g
deleted file mode 100644
index 57fdbd4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
- 
-parser grammar CmisBaseGrammar;
-
-// Note: The following tokenVocab option generates a warning: 
-// warning(160): CMISBaseGrammar.g:27:5: tokenVocab option ignored in imported gram
-// mar CMISBaseGrammar
-// If you omit this it results in compilation errors, may be a maven issue (not sure
-// of outside of maven this needs file needs to be compilable
-// options must have AST options otherwise 
-
-options {
-    tokenVocab = CmisQlStrictLexer;
-    output = AST;
-}
-
-@members {
-    private List<String> errorMessages = new ArrayList<String>();
-    
-    public boolean hasErrors() {
-    	return errorMessages.size() > 0;
-    }
-
-	public String getErrorMessages() {
-		StringBuffer allMessages = new StringBuffer();
-		
-		for (String msg : errorMessages)
-			allMessages.append(msg).append('\n');
-			
-		return allMessages.toString();
-	}
-
-    @Override
-    // Instead of sending all errors to System.err collect them in a list
-	public void emitErrorMessage(String msg) {
-		errorMessages.add(msg);
-	}
-	
-}
-
-query: 
-	SELECT select_list from_clause where_clause? order_by_clause?
-		-> ^(SELECT select_list from_clause order_by_clause? where_clause?)
-	;
-
-select_list
-    : STAR
-    | select_sublist ( COMMA select_sublist )*
-      -> ^(SEL_LIST select_sublist+)
-    ;
-
-select_sublist
-    : value_expression ( AS!? column_name )?
-    | qualifier DOT STAR
-    //| multi_valued_column_reference
-    ;
-
-value_expression:
-      column_reference
-    | numeric_value_function
-    ;
-
-column_reference:
-    ( qualifier DOT )? column_name
-      -> ^(COL qualifier? column_name)
-    ;
-
-multi_valued_column_reference:
-    ( qualifier DOT )? multi_valued_column_name
-      -> ^(COL qualifier? multi_valued_column_name)
-    ;
-
-numeric_value_function:
-    SCORE LPAR RPAR -> ^(SCORE);
-
-qualifier:
-      table_name
-    //| correlation_name
-    ;
-
-from_clause: FROM^ table_reference;
-
-table_reference:
-    one_table table_join*
-    ;
-
-table_join:
-    join_kind one_table join_specification?
-    -> ^(JOIN join_kind one_table join_specification?)
-    ;
-
-one_table:
-      LPAR! table_reference RPAR!
-    | table_name
-        -> ^(TABLE table_name)
-    | table_name AS? correlation_name
-        -> ^(TABLE table_name correlation_name)
-    ;
-
-join_kind:
-      JOIN
-        -> INNER
-    | INNER JOIN
-        -> INNER
-    | LEFT OUTER? JOIN
-        -> LEFT
-    | RIGHT OUTER? JOIN
-        -> RIGHT
-    ;
-
-join_specification:
-    ON^ column_reference EQ column_reference
-    ;
-
-///////////////////////////////////////////////////////////
-// Begin Where
-
-where_clause: WHERE^ search_condition;
-
-search_condition:
-    boolean_term (OR^ boolean_term)*;
-
-boolean_term:
-    boolean_factor (AND^ boolean_factor)*;
-
-boolean_factor:
-    NOT^ boolean_test
-    | boolean_test
-	;
-	
-boolean_test:
-      predicate
-    | LPAR search_condition RPAR -> search_condition
-    ;
-
-predicate:
-      comparison_predicate
-    | in_predicate
-    | like_predicate
-    | null_predicate
-    | quantified_comparison_predicate
-    | quantified_in_predicate
-    | text_search_predicate
-    | folder_predicate
-    ;
-
-comparison_predicate:
-    value_expression EQ literal
-      -> ^(EQ value_expression literal)
-    | value_expression NEQ literal
-      -> ^(NEQ value_expression literal)
-    | value_expression LT literal
-      -> ^(LT value_expression literal)
-    | value_expression GT literal
-      -> ^(GT value_expression literal)
-    | value_expression LTEQ literal
-      -> ^(LTEQ value_expression literal)
-    | value_expression GTEQ literal
-      -> ^(GTEQ value_expression literal)
-    ;
-
-literal:
-      NUM_LIT
-    | STRING_LIT
-    | TIME_LIT
-    | BOOL_LIT
-    ;
-
-in_predicate:
-      column_reference IN LPAR in_value_list RPAR
-        -> ^(IN column_reference in_value_list)
-    | column_reference NOT IN LPAR in_value_list RPAR
-        -> ^(NOT_IN column_reference in_value_list)
-    ;
-
-in_value_list:
-    literal ( COMMA literal )*
-      -> ^(IN_LIST literal+)
-    ;
-
-like_predicate:
-      column_reference LIKE STRING_LIT
-        -> ^(LIKE column_reference STRING_LIT)
-    | column_reference NOT LIKE STRING_LIT
-        -> ^(NOT_LIKE column_reference STRING_LIT)
-    ;
-
-null_predicate:
-    // second alternative commented out to remove left recursion for now.
-    //( column_reference | multi_valued_column_reference ) 'IS' 'NOT'? 'NULL';
-    column_reference IS
-      ( NOT NULL -> ^(IS_NOT_NULL column_reference)
-      | NULL     -> ^(IS_NULL     column_reference)
-      )
-    ;
-
-quantified_comparison_predicate:
-    literal EQ ANY multi_valued_column_reference
-      -> ^(EQ_ANY literal multi_valued_column_reference)
-    ;
-
-quantified_in_predicate:
-    ANY multi_valued_column_reference
-      ( NOT IN LPAR in_value_list RPAR
-          -> ^(NOT_IN_ANY multi_valued_column_reference in_value_list )
-      | IN     LPAR in_value_list RPAR
-          -> ^(IN_ANY    multi_valued_column_reference in_value_list )
-      )
-    ;
-
-text_search_predicate :// returns [CommonTree result]:
-    CONTAINS LPAR (qualifier COMMA)? text_search_expression RPAR
-      -> ^(CONTAINS qualifier? text_search_expression) //{ 
-//      $result = StringUtil.parseTextSearchPredicate($text_search_expression.text)
-//    }
-    ;
-
-// end where
-/////////////////////////////////////////////////////////////////
-
-folder_predicate:
-    ( f=IN_FOLDER | f=IN_TREE ) LPAR (qualifier COMMA)? folder_id RPAR
-      -> ^($f qualifier? folder_id)
-    ;
-
-order_by_clause:
-    ORDER BY sort_specification ( COMMA sort_specification )*
-      -> ^(ORDER_BY sort_specification+)
-    ;
-
-sort_specification:
-      column_reference -> column_reference ASC
-    | column_reference ( ASC | DESC )
-    ;
-
-correlation_name:
-    ID;
-
-table_name:
-    ID;
-
-column_name:
-    ID;
-
-multi_valued_column_name:
-    ID;
-
-folder_id:
-    STRING_LIT;
-
-text_search_expression:
-    STRING_LIT;
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseLexer.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseLexer.g
deleted file mode 100644
index e8642cc..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseLexer.g
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
- 
- 
-/**
- * CMISQL lexer.
- */
-lexer grammar CmisBaseLexer;
-
-tokens {
-    TABLE;
-    COL;
-    SEL_LIST;
-    IN_LIST;
-    IN_ANY;
-    NOT_IN_ANY;
-    EQ_ANY;
-    NOT_IN;
-    NOT_LIKE;
-    IS_NULL;
-    IS_NOT_NULL;
-    ORDER_BY;
-}
-
-@members {
-    private List<String> errorMessages = new ArrayList<String>();
-    
-    public boolean hasErrors() {
-    	return !errorMessages.isEmpty();
-    }
-
-	public String getErrorMessages() {
-		StringBuilder allMessages = new StringBuilder();
-		
-		for (String msg : errorMessages) {
-			allMessages.append(msg).append('\n');
-		}
-			
-		return allMessages.toString();
-	}
-
-    @Override
-    // Instead of sending all errors to System.err collect them in a list
-	public void emitErrorMessage(String msg) {
-		errorMessages.add(msg);
-	}
-	
-}
-
-// ----- Generic SQL -----
-
-SELECT : ('S'|'s')('E'|'e')('L'|'l')('E'|'e')('C'|'c')('T'|'t');
-//DISTINCT : ('D'|'d')('I'|'i')('S'|'s')('T'|'t')('I'|'i')('N'|'n')('C'|'c')('T'|'t');
-FROM : ('F'|'f')('R'|'r')('O'|'o')('M'|'m');
-AS : ('A'|'a')('S'|'s');
-JOIN : ('J'|'j')('O'|'o')('I'|'i')('N'|'n');
-INNER : ('I'|'i')('N'|'n')('N'|'n')('E'|'e')('R'|'r');
-OUTER : ('O'|'o')('U'|'u')('T'|'t')('E'|'e')('R'|'r');
-LEFT : ('L'|'l')('E'|'e')('F'|'f')('T'|'t');
-RIGHT : ('R'|'r')('I'|'i')('G'|'g')('H'|'h')('T'|'t');
-ON : ('O'|'o')('N'|'n');
-WHERE : ('W'|'w')('H'|'h')('E'|'e')('R'|'r')('E'|'e');
-ORDER : ('O'|'o')('R'|'r')('D'|'d')('E'|'e')('R'|'r');
-BY : ('B'|'b')('Y'|'y');
-ASC : ('A'|'a')('S'|'s')('C'|'c');
-DESC : ('D'|'d')('E'|'e')('S'|'s')('C'|'c');
-
-// ----- Operators -----
-
-IS : ('I'|'i')('S'|'s');
-NULL : ('N'|'n')('U'|'u')('L'|'l')('L'|'l');
-AND : ('A'|'a')('N'|'n')('D'|'d');
-OR : ('O'|'o')('R'|'r');
-NOT : ('N'|'n')('O'|'o')('T'|'t');
-IN : ('I'|'i')('N'|'n');
-LIKE : ('L'|'l')('I'|'i')('K'|'k')('E'|'e');
-ANY : ('A'|'a')('N'|'n')('Y'|'y');
-CONTAINS : ('C'|'c')('O'|'o')('N'|'n')('T'|'t')('A'|'a')('I'|'i')('N'|'n')('S'|'s');
-SCORE : ('S'|'s')('C'|'c')('O'|'o')('R'|'r')('E'|'e');
-IN_FOLDER : ('I'|'i')('N'|'n')'_'('F'|'f')('O'|'o')('L'|'l')('D'|'d')('E'|'e')('R'|'r');
-IN_TREE : ('I'|'i')('N'|'n')'_'('T'|'t')('R'|'r')('E'|'e')('E'|'e');
-TIMESTAMP : 'TIMESTAMP'|'timestamp';
-
-STAR : '*';
-LPAR : '(';
-RPAR : ')';
-COMMA : ',';
-DOT : '.';
-EQ : '=';
-NEQ : '<>';
-LT : '<';
-GT : '>';
-LTEQ : '<=';
-GTEQ : '>=';
-
-// ----- Literals -----
-
-BOOL_LIT : 'TRUE' | 'true' | 'FALSE' | 'false';
-
-fragment Sign : ('+'|'-')?;
-fragment Digits : ('0'..'9')+;
-fragment ExactNumLit : Digits DOT Digits | Digits DOT | DOT Digits | Digits;
-fragment ApproxNumLit : ExactNumLit ('e'|'E') Sign Digits;
-NUM_LIT : Sign (ExactNumLit | ApproxNumLit);
-
-fragment QUOTE: '\'';
-fragment BACKSL: '\\';
-fragment UNDERSCORE: '_';
-fragment PERCENT: '%';
-
-// An escape sequence is two backslashes for backslash, backslash single quote for single quote
-// or single quote single quote for single quote
-fragment
-ESC 
-	: BACKSL (QUOTE | BACKSL | PERCENT | UNDERSCORE)
-	| QUOTE QUOTE
-	;
-	
-STRING_LIT
-    :  QUOTE ( ESC | ~(BACKSL|QUOTE) )* QUOTE
-	;
-
-WS : ( ' ' | '\t' | '\r'? '\n' )+ { $channel=HIDDEN; };
-
-TIME_LIT : TIMESTAMP WS STRING_LIT;
-
-ID :
-    ('a'..'z'|'A'..'Z'|'_')
-    ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|':')*
-    ;
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g
deleted file mode 100644
index d442417..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Florent Guillaume, Nuxeo
- */
-/**
- * CMISQL tree grammar, walker for the inmemory implementation.
- * This aims at implementing proper semantics without any speed
- * optimization.
- */
-tree grammar CmisBaseWalker;
-
-options {
-    tokenVocab = CmisQlStrictLexer;
-    ASTLabelType = CommonTree;
-    output = AST;
-}
-
-@members {
-    private QueryObject queryObj;
-    private Tree wherePredicateTree;
-    private boolean doFullTextParse = true;
-    private int noContains = 0;
-
-    public Tree getWherePredicateTree() {
-        return wherePredicateTree;
-    }
-
-    protected void mismatch(IntStream input, int ttype, BitSet follow)
-        throws RecognitionException
-    {
-        throw new MismatchedTokenException(ttype, input);
-    }
-
-    public void recoverFromMismatchedSet(IntStream input, RecognitionException e, antlr.collections.impl.BitSet follow)
-        throws RecognitionException
-    {
-        throw e;
-    }
-
-	public void setDoFullTextParse(boolean value) {
-		doFullTextParse = value;
-	}
-	
-	public boolean getDoFullTextParse() {
-		return doFullTextParse;
-	}
-	
-	public int getNumberOfContainsClauses() {
-	    return noContains;
-	}
-	
-    private static CommonTree parseTextSearchPredicate(String expr) throws RecognitionException {
-        String unescapedExpr = StringUtil.unescape(expr.substring(1, expr.length()-1), null);
-        CharStream input = new ANTLRStringStream(unescapedExpr);
-        TokenSource lexer = new TextSearchLexer(input);
-        TokenStream tokens = new CommonTokenStream(lexer);
-        TextSearchParser parser = new TextSearchParser(tokens);
-
-        TextSearchParser.text_search_expression_return parsedStatement = parser.text_search_expression();
-        return (CommonTree) parsedStatement.getTree();
-    }
-
-}
-
-
-// For CMIS SQL it will be sufficient to stop on first error:
-@rulecatch {
-    catch (RecognitionException e) {
-        throw e;
-    }
-}
-
-query [QueryObject qo, PredicateWalkerBase pw]
-    @init {
-        queryObj = qo;
-    }:
-    ^(SELECT select_list from_clause order_by_clause? where_clause)
-    {
-        wherePredicateTree = $where_clause.tree==null ? null : $where_clause.tree.getChild(0);
-        boolean resolved = queryObj.resolveTypes();
-        if (null != pw && null != $where_clause.tree)
-            pw.walkPredicate(wherePredicateTree);
-    }
-    {
-        resolved
-    }?
-    ;
-    catch[FailedPredicateException e]
-    {
-        // change default text to preserved text which is useful
-        e.predicateText = queryObj.getErrorMessage();
-        throw e;
-    }
-
-select_list:
-      STAR
-      {
-            queryObj.addSelectReference($STAR, new ColumnReference($STAR.text));
-      }
-    | ^(SEL_LIST select_sublist+)
-    ;
-
-select_sublist
-    scope { String current; }
-    :
-      value_expression column_name?
-      {
-          // add selector
-          queryObj.addSelectReference($value_expression.start, $value_expression.result);
-          // add alias for column
-          if ($column_name.text != null) {
-             queryObj.addAlias($column_name.text, $value_expression.result);
-          }
-      }
-    | s=qualifier DOT STAR
-      {
-            queryObj.addSelectReference($s.start, new ColumnReference($qualifier.value, $STAR.text));
-      }
-    ;
-
-
-value_expression returns [CmisSelector result]:
-      column_reference
-      {
-          $result = $column_reference.result;
-      }
-    | SCORE^
-        {
-            $result = new FunctionReference(FunctionReference.CmisQlFunction.SCORE);
-        }
-    ;
-
-column_reference returns [ColumnReference result]:
-    ^(COL qualifier? column_name)
-      {
-          $result = new ColumnReference($qualifier.value, $column_name.text);
-      }
-    ;
-
-multi_valued_column_reference returns [ColumnReference result]:
-    ^(COL qualifier? column_name)
-      {
-          $result = new ColumnReference($qualifier.value, $column_name.text);
-      }
-    ;
-
-qualifier returns [String value]:
-      table_name
-//    | correlation_name
-    {
-      $value = $table_name.text;
-    }
-    ;
-
-from_clause:
-    ^(FROM table_reference)
-    ;
-
-table_reference:
-    one_table table_join*
-    ;
-
-table_join:
-    ^(JOIN join_kind one_table join_specification?)
-    {
-        boolean hasSpec = $join_specification.tree != null;
-        queryObj.addJoin($join_kind.kind, $one_table.alias, hasSpec);
-    }
-    ;
-
-one_table returns [String alias]:
-    ^(TABLE table_name correlation_name?)
-      {
-          ($alias = queryObj.addType($correlation_name.text, $table_name.text)) != null
-      }?
-    ;
-    catch[FailedPredicateException e]
-    {
-        // change default text to preserved text which is useful
-        e.predicateText = queryObj.getErrorMessage();
-        throw e;
-    }
-
-join_kind returns [String kind]:
-      INNER { $kind = "INNER"; }
-    | LEFT  { $kind = "LEFT"; }
-    | RIGHT { $kind = "RIGHT"; }
-    ;
-
-join_specification:
-    ^(ON cr1=column_reference EQ cr2=column_reference)
-    {
-        queryObj.addJoinReference($cr1.start, $cr1.result);
-        queryObj.addJoinReference($cr2.start, $cr2.result);
-    }
-    ;
-
-where_clause:
-      ^(WHERE search_condition)
-    | /* nothing */
-    ;
-
-search_condition
-@init {
-    List<Object> listLiterals;
-}:
-    ^(OR s1=search_condition s2=search_condition)
-    | ^(AND s1=search_condition s2=search_condition)
-    | ^(NOT search_condition)
-    | ^(EQ search_condition search_condition)
-    | ^(NEQ search_condition search_condition)
-    | ^(LT search_condition search_condition)
-    | ^(GT search_condition search_condition)
-    | ^(GTEQ search_condition search_condition)
-    | ^(LTEQ search_condition search_condition)
-    | ^(LIKE search_condition search_condition)
-    | ^(NOT_LIKE search_condition search_condition)
-    | ^(IS_NULL search_condition)
-    | ^(IS_NOT_NULL search_condition)
-    | ^(EQ_ANY literal mvcr=multi_valued_column_reference)
-      {
-            queryObj.addWhereReference($mvcr.start, $mvcr.result);
-      }
-    | ^(IN_ANY mvcr=multi_valued_column_reference in_value_list )
-      {
-            queryObj.addWhereReference($mvcr.start, $mvcr.result);
-      }
-    | ^(NOT_IN_ANY mvcr=multi_valued_column_reference in_value_list)
-      {
-            queryObj.addWhereReference($mvcr.start, $mvcr.result);
-      }
-    | ^(CONTAINS qualifier? text_search_expression)
-      {
-            queryObj.addWhereTypeReference($qualifier.start, $qualifier.value);
-            ++noContains;
-      }
-    | ^(IN_FOLDER qualifier? search_condition)
-      {
-            queryObj.addWhereTypeReference($qualifier.start, $qualifier.value);
-      }
-    | ^(IN_TREE qualifier? search_condition)
-      {
-            queryObj.addWhereTypeReference($qualifier.start, $qualifier.value);
-      }
-    | ^(IN column_reference in_value_list)
-      {
-            queryObj.addWhereReference($column_reference.start, $column_reference.result);
-      }
-    | ^(NOT_IN column_reference in_value_list)
-      {
-            queryObj.addWhereReference($column_reference.start, $column_reference.result);
-      }
-    | value_expression
-      {
-          queryObj.addWhereReference($value_expression.start, $value_expression.result);
-      }
-    | literal
-    ;
-
-in_value_list returns [Object inList]
-@init {
-    List<Object> inLiterals = new ArrayList<Object>();
-}:
-    ^(IN_LIST (l=literal {inLiterals.add($l.value);})+ )
-    {
-        $inList = inLiterals;
-    }
-    ;
-
-text_search_expression
-@init {
-    CommonTree tse = null;
-}
-@after {
-   if (doFullTextParse) {
-       $tree = tse;
-   }
-} :
-    STRING_LIT
-    {
-        if (doFullTextParse) {
-            tse = parseTextSearchPredicate($STRING_LIT.text);
-        }
-    }
-    ;
-
-
-literal returns [Object value]:
-      NUM_LIT
-        {
-            try {
-                $value = Long.valueOf($NUM_LIT.text);
-            } catch (NumberFormatException e) {
-                $value = new BigDecimal($NUM_LIT.text);
-            }
-        }
-    | STRING_LIT
-        {
-            String s = $STRING_LIT.text;
-            $value = s!= null ? s.substring(1, s.length() - 1) : null;
-        }
-    | TIME_LIT
-        {
-            String s = $TIME_LIT.text;
-            s = s!= null ? s.substring(s.indexOf('\'') + 1, s.length() - 1) : null;
-        }
-    | BOOL_LIT
-        {
-            $value = Boolean.valueOf($BOOL_LIT.text);
-        }
-    ;
-
-order_by_clause:
-    ^(ORDER_BY sort_specification+)
-    ;
-
-sort_specification:
-    column_reference ASC
-    {
-       queryObj.addSortCriterium($column_reference.start, $column_reference.result, true);
-    }
-    | column_reference DESC
-    {
-       queryObj.addSortCriterium($column_reference.start, $column_reference.result, false);
-    }
-    ;
-
-correlation_name:
-    ID;
-
-table_name:
-    ID;
-
-column_name:
-    ID;
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtLexer.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtLexer.g
deleted file mode 100644
index d07c03a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtLexer.g
+++ /dev/null
@@ -1,79 +0,0 @@
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
- 
-lexer grammar CmisQlExtLexer;
-
-import CmisBaseLexer;
-
-tokens {
-    FUNC;
-    OP_ANY;
-}
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- *
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- */
-
-package org.apache.chemistry.opencmis.server.support.query;
-
-}
-
-@members {
-    public boolean hasErrors() {
-    	return gCmisBaseLexer.hasErrors();
-    }
-
-	public String getErrorMessages() {
-    	return gCmisBaseLexer.getErrorMessages();
-	}
-
-	public void emitErrorMessage(String msg) {
-    	gCmisBaseLexer.emitErrorMessage(msg);
-	}
-}
-DISTINCT : ('D'|'d')('I'|'i')('S'|'s')('T'|'t')('I'|'i')('N'|'n')('C'|'c')('T'|'t');
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g
deleted file mode 100644
index aa13ab3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
-/**
- * CMISQL parser.
- */
-parser grammar CmisQlExtParser;
-
-options {
-    tokenVocab = CmisQlExtLexer;
-    output = AST;
-}
-
-import CmisBaseGrammar;
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- *
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-@members {
-    public boolean hasErrors() {
-    	return gCmisBaseGrammar.hasErrors();
-    }
-
-	public String getErrorMessages() {
-    	return gCmisBaseGrammar.getErrorMessages();
-	}
-}
-
-query: SELECT^ DISTINCT? select_list from_clause where_clause? order_by_clause?;
-
-value_expression:
-      column_reference
-    | string_value_function
-    | numeric_value_function
-    ;
-
-quantified_comparison_predicate:
-    literal comp_op ANY multi_valued_column_reference
-      -> ^(OP_ANY comp_op literal multi_valued_column_reference)
-    ;
-
-comp_op:
-    EQ | NEQ | LT | GT | LTEQ | GTEQ
-    ;
-
-string_value_function:
-    ID LPAR column_reference RPAR
-      -> ^(FUNC ID column_reference)
-    ;
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictLexer.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictLexer.g
deleted file mode 100644
index 883a99d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictLexer.g
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
- 
-lexer grammar CmisQlStrictLexer;
-
-import CmisBaseLexer;
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- *
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- */
-
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-@members {
-    public boolean hasErrors() {
-    	return gCmisBaseLexer.hasErrors();
-    }
-
-	public String getErrorMessages() {
-    	return gCmisBaseLexer.getErrorMessages();
-	}
-	
-	public void emitErrorMessage(String msg) {
-    	gCmisBaseLexer.emitErrorMessage(msg);
-	}
-}
-
-// all lexer rules for a strict CMIS parser are in the base lexer defined
-
-// we need a dummy rule to make AntLR happy (an empty file will not compile)
-fragment DUMMY: 'xyz';
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
deleted file mode 100644
index 9c9130e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-parser grammar CmisQlStrictParser;
-
-// Note: ANTLR is very sensitive to compilation errors, you must
-// have first options, then import and then @header.
-// @header must only be in derived grammars not in base grammars
-// no package declarations in base grammars
-
-
-options {
-    tokenVocab = CmisQlStrictLexer;
-    output = AST;
-}
-
-import CmisBaseGrammar;
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- *
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-@members {
-    private List<String> errorMessages = new ArrayList<String>();
-
-    public boolean hasErrors() {
-    	return errorMessages.size() > 0 ||  gCmisBaseGrammar.hasErrors();
-    }
-
-	public String getStrictParserErrorMessages() {
-		StringBuffer allMessages = new StringBuffer();
-		
-		for (String msg : errorMessages)
-			allMessages.append(msg).append('\n');
-			
-		return allMessages.toString();
-	}
-	
-	public String getErrorMessages() {
-	    if (errorMessages.size() > 0) {
-	        return getStrictParserErrorMessages();
-	    } else {
-    	    return gCmisBaseGrammar.getErrorMessages();
-    	}
-	}
-	
-	@Override
-    // Instead of sending all errors to System.err collect them in a list
-	public void emitErrorMessage(String msg) {
-		errorMessages.add(msg);
-	}
-	
-}
-
-  // Rules can't be empty so we have one dummy rule here
-root : query EOF;
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQueryWalker.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQueryWalker.g
deleted file mode 100644
index 19f7475..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQueryWalker.g
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Florent Guillaume, Nuxeo
- */
-/**
- * CMISQL tree grammar, walker for the inmemory implementation.
- * This aims at implementing proper semantics without any speed
- * optimization.
- */
-tree grammar CmisQueryWalker;
-
-options {
-    tokenVocab = CmisQlStrictLexer;
-    ASTLabelType = CommonTree;
-    output = AST;
-}
-
-import CmisBaseWalker;
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Florent Guillaume, Nuxeo
- *
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import java.math.BigDecimal;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-}
-
-
-@members {
-    public Tree getWherePredicateTree() {
-        return gCmisBaseWalker.getWherePredicateTree();
-    }
-
-    protected void mismatch(IntStream input, int ttype, BitSet follow) throws RecognitionException
-    {
-        gCmisBaseWalker.mismatch(input, ttype, follow);
-    }
-
-    public void recoverFromMismatchedSet(IntStream input, RecognitionException e, antlr.collections.impl.BitSet follow) throws RecognitionException
-    {
-        gCmisBaseWalker.recoverFromMismatchedSet(input, e, follow);
-    }
-
-    public void setDoFullTextParse(boolean value) {
-        gCmisBaseWalker.setDoFullTextParse(value);
-    }
-	
-    public boolean getDoFullTextParse() {
-        return gCmisBaseWalker.getDoFullTextParse();
-    }
-    
-    public int getNumberOfContainsClauses() {
-        return gCmisBaseWalker.getNumberOfContainsClauses();
-    }
-	
-}
-
-// For CMIS SQL it will be sufficient to stop on first error:
-@rulecatch {
-    catch (RecognitionException e) {
-        throw e;
-    }
-}
-
-root [QueryObject go, PredicateWalkerBase pw] throws CmisQueryException:
-      query [go, pw];
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g
deleted file mode 100644
index edd9bc0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors: Jens
- */
-
-/**
- * CMISQL parser.
- http://stackoverflow.com/questions/504402/how-to-handle-escape-sequences-in-string-literals-in-antlr-3
- */
-grammar TextSearch;
-
-options {
-    ASTLabelType = CommonTree;
-    output = AST;
-}
-
-tokens {
-    TEXT_AND;
-	TEXT_OR;
-	TEXT_MINUS;
-}
-
-@header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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 IS AUTO-GENERATED, DO NOT EDIT.
- */
-
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-@lexer::header {
-/*
- * THIS FILE IS AUTO-GENERATED, DO NOT EDIT.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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 IS AUTO-GENERATED, DO NOT EDIT.
- */
-
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-@lexer::members {
-	public void reportError(RecognitionException e) {
-	   super.reportError(e);
-	   throw new RuntimeException(e);
-	}
-}
-
-//////////////////////////////////////////////////////////////////////////7
-// Lexer Part
-
-AND : ('A'|'a')('N'|'n')('D'|'d');
-OR : ('O'|'o')('R'|'r');
-TEXT_MINUS : '-';
-
-// test search related tokens
-
-fragment 
-QUOTE: '\'';
-
-fragment 
-DOUBLE_QUOTE: '\"';
-
-fragment 
-BACKSL: '\\';
-
-// An escape sequence is two backslashes for backslash, backslash single quote for single quote
-// single quote single quote for single quote
-fragment
-ESC 
-	: BACKSL (QUOTE | DOUBLE_QUOTE | BACKSL | TEXT_MINUS | '*' | '?')
-// add this line if you want to support double single quote as escaped quote for full text as in SQL-92	
-//	| { ((CharStream)input).LT(2)=='\'' }? => QUOTE QUOTE
-	;
-	
-WS : ( ' ' | '\t' | '\r'? '\n' )+ { $channel=HIDDEN; };
-
-fragment
-TEXT_SEARCH_PHRASE_STRING 
-   : 
-     ( ESC 
-       | ~(BACKSL | DOUBLE_QUOTE | TEXT_MINUS | QUOTE)
-     )+
-   ;
-   
-TEXT_SEARCH_PHRASE_STRING_LIT
-    : DOUBLE_QUOTE TEXT_SEARCH_PHRASE_STRING DOUBLE_QUOTE
-	;
-
-	// a literal for text search is a very generic rule and matches almost anything
-TEXT_SEARCH_WORD_LIT 
-   : 
-     ( ESC 
-       | ~(BACKSL | QUOTE | ' ' | '\t' | '\r' | '\n' | '-')
-     )+
-   ;
-
-// ----- Parser -----
-	
-text_search_expression
-    : conjunct (OR conjunct)+
-	    -> ^(TEXT_OR conjunct+)
-	| conjunct
-	;
-
-conjunct
-    : term (AND? term)+
-	    -> ^(TEXT_AND term+)
-	  | term
-	;
-	
-term
-    : TEXT_MINUS^? (word | phrase)
-	;
-	
-phrase
-    : TEXT_SEARCH_PHRASE_STRING_LIT
-	;
-
-word
-    : TEXT_SEARCH_WORD_LIT 
-	;
-	
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CallContextWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CallContextWrapper.java
deleted file mode 100644
index 5e0f9fd..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CallContextWrapper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import java.io.File;
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-
-/**
- * Provides a convenient implementation of the {@link CallContext} interface that can be
- * subclassed by developers wishing to change, add, or hide call context data.
- * 
- * This class implements the Wrapper or Decorator pattern. Methods default to
- * calling through to the wrapped request object.
- */
-public class CallContextWrapper implements CallContext {
-
-    private final CallContext context;
-
-    public CallContextWrapper(CallContext context) {
-        this.context = context;
-    }
-
-    public String getBinding() {
-        return context.getBinding();
-    }
-
-    public boolean isObjectInfoRequired() {
-        return context.isObjectInfoRequired();
-    }
-
-    public Object get(String key) {
-        return context.get(key);
-    }
-
-    public CmisVersion getCmisVersion() {
-        return context.getCmisVersion();
-    }
-
-    public String getRepositoryId() {
-        return context.getRepositoryId();
-    }
-
-    public String getUsername() {
-        return context.getUsername();
-    }
-
-    public String getPassword() {
-        return context.getPassword();
-    }
-
-    public String getLocale() {
-        return context.getLocale();
-    }
-
-    public BigInteger getOffset() {
-        return context.getOffset();
-    }
-
-    public BigInteger getLength() {
-        return context.getLength();
-    }
-
-    public File getTempDirectory() {
-        return context.getTempDirectory();
-    }
-
-    public boolean encryptTempFiles() {
-        return context.encryptTempFiles();
-    }
-
-    public int getMemoryThreshold() {
-        return context.getMemoryThreshold();
-    }
-
-    public long getMaxContentSize() {
-        return context.getMaxContentSize();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java
deleted file mode 100644
index 3ce8b09..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import java.math.BigInteger;
-
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.server.support.wrapper.ConformanceCmisServiceWrapper;
-
-/**
- * Service wrapper.
- * 
- * @deprecated use {@link ConformanceCmisServiceWrapper} instead
- */
-@Deprecated
-public class CmisServiceWrapper<T extends CmisService> extends ConformanceCmisServiceWrapper {
-
-    /**
-     * Constructor.
-     */
-    public CmisServiceWrapper(T service, BigInteger defaultTypesMaxItems, BigInteger defaultTypesDepth,
-            BigInteger defaultMaxItems, BigInteger defaultDepth) {
-        super(service, defaultTypesMaxItems, defaultTypesDepth, defaultMaxItems, defaultDepth);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public T getWrappedService() {
-        return (T) super.getWrappedService();
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/MutableCallContextWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/MutableCallContextWrapper.java
deleted file mode 100644
index 53376c4..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/MutableCallContextWrapper.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.MutableCallContext;
-
-/**
- * Provides a convenient implementation of the {@link MutableCallContext}
- * interface that can be subclassed by developers wishing to change, add, or
- * hide call context data.
- * 
- * If the provided {@link CallContext} object implements the
- * {@link MutableCallContext} interface, all {@link #get(String)},
- * {@link #put(String, Object)}, and {@link #remove(String)} calls are forwarded
- * to this call context object. If this {@link CallContext} object does not
- * implement the {@link MutableCallContext} interface, the key-value pairs are
- * stored here and hide the values of the provided {@link CallContext} object.
- * That is, the first {@link MutableCallContext} object in the chain of
- * {@link MutableCallContextWrapper} objects manages the data.
- */
-public class MutableCallContextWrapper implements MutableCallContext {
-
-    private final CallContext context;
-    private final Map<String, Object> values;
-
-    public MutableCallContextWrapper(CallContext context) {
-        this.context = context;
-        if (context instanceof MutableCallContext) {
-            values = null;
-        } else {
-            values = new HashMap<String, Object>();
-        }
-    }
-
-    public Object get(String key) {
-        if (values == null) {
-            return context.get(key);
-        } else {
-            if (values.containsKey(key)) {
-                return values.get(key);
-            } else {
-                return context.get(key);
-            }
-        }
-    }
-
-    public void put(String key, Object value) {
-        if (values == null) {
-            ((MutableCallContext) context).put(key, value);
-        } else {
-            values.put(key, value);
-        }
-    }
-
-    public Object remove(String key) {
-        if (values == null) {
-            return ((MutableCallContext) context).remove(key);
-        } else {
-            Object value = context.get(key);
-            if (value != null) {
-                // hide value of origin call context
-                values.put(key, null);
-                return value;
-            } else {
-                return values.remove(key);
-            }
-        }
-    }
-
-    public String getBinding() {
-        return context.getBinding();
-    }
-
-    public boolean isObjectInfoRequired() {
-        return context.isObjectInfoRequired();
-    }
-
-    public CmisVersion getCmisVersion() {
-        return (CmisVersion) get(CMIS_VERSION);
-    }
-
-    public String getRepositoryId() {
-        return (String) get(REPOSITORY_ID);
-    }
-
-    public String getUsername() {
-        return (String) get(USERNAME);
-    }
-
-    public String getPassword() {
-        return (String) get(PASSWORD);
-    }
-
-    public String getLocale() {
-        return (String) get(LOCALE);
-    }
-
-    public BigInteger getOffset() {
-        return (BigInteger) get(OFFSET);
-    }
-
-    public BigInteger getLength() {
-        return (BigInteger) get(LENGTH);
-    }
-
-    public File getTempDirectory() {
-        return (File) get(TEMP_DIR);
-    }
-
-    public boolean encryptTempFiles() {
-        return Boolean.TRUE.equals(get(ENCRYPT_TEMP_FILE));
-    }
-
-    public int getMemoryThreshold() {
-        return (Integer) get(MEMORY_THRESHOLD);
-    }
-
-    public long getMaxContentSize() {
-        return (Long) get(MAX_CONTENT_SIZE);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java
deleted file mode 100644
index f29f45b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java
+++ /dev/null
@@ -1,1461 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-
-/**
- * Type definition factory.
- */
-public final class TypeDefinitionFactory {
-
-    private static final Set<String> NEW_CMIS11_PROPERTIES = new HashSet<String>();
-    static {
-        NEW_CMIS11_PROPERTIES.add(PropertyIds.DESCRIPTION);
-        NEW_CMIS11_PROPERTIES.add(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        NEW_CMIS11_PROPERTIES.add(PropertyIds.IS_PRIVATE_WORKING_COPY);
-    }
-
-    private Class<? extends MutableDocumentTypeDefinition> documentTypeDefinitionClass;
-    private Class<? extends MutableFolderTypeDefinition> folderTypeDefinitionClass;
-    private Class<? extends MutablePolicyTypeDefinition> policyTypeDefinitionClass;
-    private Class<? extends MutableRelationshipTypeDefinition> relationshipTypeDefinitionClass;
-    private Class<? extends MutableItemTypeDefinition> itemTypeDefinitionClass;
-    private Class<? extends MutableSecondaryTypeDefinition> secondaryTypeDefinitionClass;
-
-    private String defaultNamespace;
-    private boolean defaultControllableAcl;
-    private boolean defaultIsFullTextIndexed;
-    private boolean defaultControllablePolicy;
-    private boolean defaultQueryable;
-    private boolean defaultFulltextIndexed;
-    private TypeMutability defaultTypeMutability;
-
-    private TypeDefinitionFactory() {
-        documentTypeDefinitionClass = DocumentTypeDefinitionImpl.class;
-        folderTypeDefinitionClass = FolderTypeDefinitionImpl.class;
-        policyTypeDefinitionClass = PolicyTypeDefinitionImpl.class;
-        relationshipTypeDefinitionClass = RelationshipTypeDefinitionImpl.class;
-        itemTypeDefinitionClass = ItemTypeDefinitionImpl.class;
-        secondaryTypeDefinitionClass = SecondaryTypeDefinitionImpl.class;
-
-        defaultNamespace = null;
-        defaultControllableAcl = false;
-        defaultControllablePolicy = false;
-        defaultQueryable = true;
-        defaultFulltextIndexed = false;
-
-        TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
-        typeMutability.setCanCreate(false);
-        typeMutability.setCanUpdate(false);
-        typeMutability.setCanDelete(false);
-        defaultTypeMutability = typeMutability;
-    }
-
-    /**
-     * Creates a new instance of the factory.
-     */
-    public static TypeDefinitionFactory newInstance() {
-        return new TypeDefinitionFactory();
-    }
-
-    // --- definition classes ---
-
-    public Class<? extends MutableDocumentTypeDefinition> getDocumentTypeDefinitionClass() {
-        return documentTypeDefinitionClass;
-    }
-
-    public void setDocumentTypeDefinitionClass(
-            Class<? extends MutableDocumentTypeDefinition> documentTypeDefinitionClass) {
-        checkClass(documentTypeDefinitionClass);
-        this.documentTypeDefinitionClass = documentTypeDefinitionClass;
-    }
-
-    protected MutableDocumentTypeDefinition createDocumentTypeDefinitionObject() {
-        try {
-            return documentTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    public Class<? extends MutableFolderTypeDefinition> getFolderTypeDefinitionClass() {
-        return folderTypeDefinitionClass;
-    }
-
-    public void setFolderTypeDefinitionClass(Class<? extends MutableFolderTypeDefinition> folderTypeDefinitionClass) {
-        checkClass(folderTypeDefinitionClass);
-        this.folderTypeDefinitionClass = folderTypeDefinitionClass;
-    }
-
-    protected MutableFolderTypeDefinition createFolderTypeDefinitionObject() {
-        try {
-            return folderTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    public Class<? extends MutablePolicyTypeDefinition> getPolicyTypeDefinitionClass() {
-        return policyTypeDefinitionClass;
-    }
-
-    public void setPolicyTypeDefinitionClass(Class<? extends MutablePolicyTypeDefinition> policyTypeDefinitionClass) {
-        checkClass(policyTypeDefinitionClass);
-        this.policyTypeDefinitionClass = policyTypeDefinitionClass;
-    }
-
-    protected MutablePolicyTypeDefinition createPolicyTypeDefinitionObject() {
-        try {
-            return policyTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    public Class<? extends MutableRelationshipTypeDefinition> getRelationshipTypeDefinitionClass() {
-        return relationshipTypeDefinitionClass;
-    }
-
-    public void setRelationshipTypeDefinitionClass(
-            Class<? extends MutableRelationshipTypeDefinition> relationshipTypeDefinitionClass) {
-        checkClass(relationshipTypeDefinitionClass);
-        this.relationshipTypeDefinitionClass = relationshipTypeDefinitionClass;
-    }
-
-    protected MutableRelationshipTypeDefinition createRelationshipTypeDefinitionObject() {
-        try {
-            return relationshipTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    public Class<? extends MutableItemTypeDefinition> getItemTypeDefinitionClass() {
-        return itemTypeDefinitionClass;
-    }
-
-    public void setItemTypeDefinitionClass(Class<? extends MutableItemTypeDefinition> itemTypeDefinitionClass) {
-        checkClass(itemTypeDefinitionClass);
-        this.itemTypeDefinitionClass = itemTypeDefinitionClass;
-    }
-
-    protected MutableItemTypeDefinition createItemTypeDefinitionObject() {
-        try {
-            return itemTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    public Class<? extends MutableSecondaryTypeDefinition> getSecondaryTypeDefinitionClass() {
-        return secondaryTypeDefinitionClass;
-    }
-
-    public void setSecondaryTypeDefinitionClass(
-            Class<? extends MutableSecondaryTypeDefinition> secondaryTypeDefinitionClass) {
-        checkClass(secondaryTypeDefinitionClass);
-        this.secondaryTypeDefinitionClass = secondaryTypeDefinitionClass;
-    }
-
-    protected MutableSecondaryTypeDefinition createSecondaryTypeDefinitionObject() {
-        try {
-            return secondaryTypeDefinitionClass.newInstance();
-        } catch (Exception e) {
-            throw new CmisRuntimeException("Cannot create type defintion object: " + e.getMessage(), e);
-        }
-    }
-
-    private void checkClass(Class<? extends MutableTypeDefinition> clazz) {
-        if (clazz == null) {
-            throw new IllegalArgumentException("Class must be set!");
-        }
-
-        // check for default constructor
-        try {
-            clazz.getConstructor(new Class[0]);
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Class has no accessible default constructor!", e);
-        }
-    }
-
-    // --- default values ---
-
-    public String getDefaultNamespace() {
-        return defaultNamespace;
-    }
-
-    public void setDefaultNamespace(String defaultNamespace) {
-        this.defaultNamespace = defaultNamespace;
-    }
-
-    public boolean getDefaultIsFulltextIndexed() {
-        return defaultIsFullTextIndexed;
-    }
-
-    public void setDefaultIsFulltextIndexed(boolean defaultIsFullTextIndexed) {
-        this.defaultIsFullTextIndexed = defaultIsFullTextIndexed;
-    }
-
-    public boolean getDefaultControllableAcl() {
-        return defaultControllableAcl;
-    }
-
-    public void setDefaultControllableAcl(boolean defaultControllableAcl) {
-        this.defaultControllableAcl = defaultControllableAcl;
-    }
-
-    public boolean getDefaultControllablePolicy() {
-        return defaultControllablePolicy;
-    }
-
-    public void setDefaultControllablePolicy(boolean defaultControllablePolicy) {
-        this.defaultControllablePolicy = defaultControllablePolicy;
-    }
-
-    public boolean getDefaultQueryable() {
-        return defaultQueryable;
-    }
-
-    public void setDefaultQueryable(boolean defaultQueryable) {
-        this.defaultQueryable = defaultQueryable;
-    }
-
-    public boolean getDefaultFulltextIndexed() {
-        return defaultFulltextIndexed;
-    }
-
-    public void setDefaultFulltextIndexed(boolean defaultFulltextIndexed) {
-        this.defaultFulltextIndexed = defaultFulltextIndexed;
-    }
-
-    public TypeMutability getDefaultTypeMutability() {
-        return defaultTypeMutability;
-    }
-
-    public void setDefaultTypeMutability(TypeMutability defaultTypeMutability) {
-        this.defaultTypeMutability = defaultTypeMutability;
-    }
-
-    // --- create methods ---
-
-    /**
-     * Creates a new type mutability object.
-     */
-    public TypeMutability createTypeMutability(boolean canCreate, boolean canUpdate, boolean canDelete) {
-        TypeMutabilityImpl result = new TypeMutabilityImpl();
-
-        result.setCanCreate(canCreate);
-        result.setCanUpdate(canUpdate);
-        result.setCanDelete(canDelete);
-
-        return result;
-    }
-
-    /**
-     * Creates a new mutable base document type definition including all
-     * property definitions defined in the CMIS specification.
-     */
-    public MutableDocumentTypeDefinition createBaseDocumentTypeDefinition(CmisVersion cmisVersion) {
-        return createDocumentTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable document type definition including all base
-     * property definitions defined in the CMIS specification.
-     */
-    public MutableDocumentTypeDefinition createDocumentTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        MutableDocumentTypeDefinition documentType = createDocumentTypeDefinitionObject();
-        documentType.setBaseTypeId(BaseTypeId.CMIS_DOCUMENT);
-        documentType.setParentTypeId(parentId);
-        documentType.setIsControllableAcl(defaultControllableAcl);
-        documentType.setIsControllablePolicy(defaultControllablePolicy);
-        documentType.setIsCreatable(true);
-        documentType.setDescription("Document");
-        documentType.setDisplayName("Document");
-        documentType.setIsFileable(true);
-        documentType.setIsFulltextIndexed(defaultFulltextIndexed);
-        documentType.setIsIncludedInSupertypeQuery(true);
-        documentType.setLocalName("Document");
-        documentType.setLocalNamespace(defaultNamespace);
-        documentType.setIsQueryable(defaultQueryable);
-        documentType.setQueryName("cmis:document");
-        documentType.setId(BaseTypeId.CMIS_DOCUMENT.value());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            documentType.setTypeMutability(defaultTypeMutability);
-        }
-
-        documentType.setIsVersionable(false);
-        documentType.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-
-        addBasePropertyDefinitions(documentType, cmisVersion, parentId != null);
-        addDocumentPropertyDefinitions(documentType, cmisVersion, parentId != null);
-
-        return documentType;
-    }
-
-    /**
-     * Creates a new mutable base folder type definition including all property
-     * definitions defined in the CMIS specification.
-     */
-    public MutableFolderTypeDefinition createBaseFolderTypeDefinition(CmisVersion cmisVersion) {
-        return createFolderTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable folder type definition including all base property
-     * definitions defined in the CMIS specification.
-     */
-    public MutableFolderTypeDefinition createFolderTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        MutableFolderTypeDefinition folderType = createFolderTypeDefinitionObject();
-        folderType.setBaseTypeId(BaseTypeId.CMIS_FOLDER);
-        folderType.setParentTypeId(parentId);
-        folderType.setIsControllableAcl(defaultControllableAcl);
-        folderType.setIsControllablePolicy(defaultControllablePolicy);
-        folderType.setIsCreatable(true);
-        folderType.setDescription("Folder");
-        folderType.setDisplayName("Folder");
-        folderType.setIsFileable(true);
-        folderType.setIsFulltextIndexed(defaultFulltextIndexed);
-        folderType.setIsIncludedInSupertypeQuery(true);
-        folderType.setLocalName("Folder");
-        folderType.setLocalNamespace(defaultNamespace);
-        folderType.setIsQueryable(defaultQueryable);
-        folderType.setQueryName("cmis:folder");
-        folderType.setId(BaseTypeId.CMIS_FOLDER.value());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            folderType.setTypeMutability(defaultTypeMutability);
-        }
-
-        addBasePropertyDefinitions(folderType, cmisVersion, parentId != null);
-        addFolderPropertyDefinitions(folderType, cmisVersion, parentId != null);
-
-        return folderType;
-    }
-
-    /**
-     * Creates a new mutable base policy type definition including all property
-     * definitions defined in the CMIS specification.
-     */
-    public MutablePolicyTypeDefinition createBasePolicyTypeDefinition(CmisVersion cmisVersion) {
-        return createPolicyTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable policy type definition including all base property
-     * definitions defined in the CMIS specification.
-     */
-    public MutablePolicyTypeDefinition createPolicyTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        MutablePolicyTypeDefinition policyType = createPolicyTypeDefinitionObject();
-        policyType.setBaseTypeId(BaseTypeId.CMIS_POLICY);
-        policyType.setParentTypeId(parentId);
-        policyType.setIsControllableAcl(defaultControllableAcl);
-        policyType.setIsControllablePolicy(defaultControllablePolicy);
-        policyType.setIsCreatable(false);
-        policyType.setDescription("Policy");
-        policyType.setDisplayName("Policy");
-        policyType.setIsFileable(false);
-        policyType.setIsFulltextIndexed(defaultFulltextIndexed);
-        policyType.setIsIncludedInSupertypeQuery(true);
-        policyType.setLocalName("Policy");
-        policyType.setLocalNamespace(defaultNamespace);
-        policyType.setIsQueryable(defaultQueryable);
-        policyType.setQueryName("cmis:policy");
-        policyType.setId(BaseTypeId.CMIS_POLICY.value());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            policyType.setTypeMutability(defaultTypeMutability);
-        }
-
-        addBasePropertyDefinitions(policyType, cmisVersion, parentId != null);
-        addPolicyPropertyDefinitions(policyType, cmisVersion, parentId != null);
-
-        return policyType;
-    }
-
-    /**
-     * Creates a new mutable base relationship type definition including all
-     * property definitions defined in the CMIS specification.
-     */
-    public MutableRelationshipTypeDefinition createBaseRelationshipTypeDefinition(CmisVersion cmisVersion) {
-        return createRelationshipTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable relationship type definition including all base
-     * property definitions defined in the CMIS specification.
-     */
-    public MutableRelationshipTypeDefinition createRelationshipTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        MutableRelationshipTypeDefinition relationshipType = createRelationshipTypeDefinitionObject();
-        relationshipType.setBaseTypeId(BaseTypeId.CMIS_RELATIONSHIP);
-        relationshipType.setParentTypeId(parentId);
-        relationshipType.setIsControllableAcl(defaultControllableAcl);
-        relationshipType.setIsControllablePolicy(defaultControllablePolicy);
-        relationshipType.setIsCreatable(false);
-        relationshipType.setDescription("Relationship");
-        relationshipType.setDisplayName("Relationship");
-        relationshipType.setIsFileable(false);
-        relationshipType.setIsFulltextIndexed(defaultFulltextIndexed);
-        relationshipType.setIsIncludedInSupertypeQuery(true);
-        relationshipType.setLocalName("Relationship");
-        relationshipType.setLocalNamespace(defaultNamespace);
-        relationshipType.setIsQueryable(defaultQueryable);
-        relationshipType.setQueryName("cmis:relationship");
-        relationshipType.setId(BaseTypeId.CMIS_RELATIONSHIP.value());
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            relationshipType.setTypeMutability(defaultTypeMutability);
-        }
-
-        addBasePropertyDefinitions(relationshipType, cmisVersion, parentId != null);
-        addRelationshipPropertyDefinitions(relationshipType, cmisVersion, parentId != null);
-
-        return relationshipType;
-    }
-
-    /**
-     * Creates a new mutable base item type definition including all property
-     * definitions defined in the CMIS specification.
-     */
-    public MutableItemTypeDefinition createBaseItemTypeDefinition(CmisVersion cmisVersion) {
-        return createItemTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable item type definition including all base property
-     * definitions defined in the CMIS specification.
-     */
-    public MutableItemTypeDefinition createItemTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            throw new IllegalArgumentException("CMIS 1.0 doesn't support item types!");
-        }
-
-        MutableItemTypeDefinition itemType = createItemTypeDefinitionObject();
-        itemType.setBaseTypeId(BaseTypeId.CMIS_ITEM);
-        itemType.setParentTypeId(parentId);
-        itemType.setIsControllableAcl(defaultControllableAcl);
-        itemType.setIsControllablePolicy(defaultControllablePolicy);
-        itemType.setIsCreatable(true);
-        itemType.setDescription("Item");
-        itemType.setDisplayName("Item");
-        itemType.setIsFileable(true);
-        itemType.setIsFulltextIndexed(defaultFulltextIndexed);
-        itemType.setIsIncludedInSupertypeQuery(true);
-        itemType.setLocalName("Item");
-        itemType.setLocalNamespace(defaultNamespace);
-        itemType.setIsQueryable(defaultQueryable);
-        itemType.setQueryName("cmis:item");
-        itemType.setId(BaseTypeId.CMIS_ITEM.value());
-        itemType.setTypeMutability(defaultTypeMutability);
-
-        addBasePropertyDefinitions(itemType, cmisVersion, parentId != null);
-
-        return itemType;
-    }
-
-    /**
-     * Creates a new mutable base secondary type definition.
-     */
-    public MutableSecondaryTypeDefinition createBaseSecondaryTypeDefinition(CmisVersion cmisVersion) {
-        return createSecondaryTypeDefinition(cmisVersion, null);
-    }
-
-    /**
-     * Creates a new mutable secondary type definition.
-     */
-    public MutableSecondaryTypeDefinition createSecondaryTypeDefinition(CmisVersion cmisVersion, String parentId) {
-        if (cmisVersion == CmisVersion.CMIS_1_0) {
-            throw new IllegalArgumentException("CMIS 1.0 doesn't support secondary types!");
-        }
-
-        MutableSecondaryTypeDefinition secondaryType = createSecondaryTypeDefinitionObject();
-        secondaryType.setBaseTypeId(BaseTypeId.CMIS_SECONDARY);
-        secondaryType.setParentTypeId(parentId);
-        secondaryType.setIsControllableAcl(defaultControllableAcl);
-        secondaryType.setIsControllablePolicy(defaultControllablePolicy);
-        secondaryType.setIsCreatable(true);
-        secondaryType.setDescription("Secondary");
-        secondaryType.setDisplayName("Secondary");
-        secondaryType.setIsFileable(false);
-        secondaryType.setIsFulltextIndexed(false);
-        secondaryType.setIsIncludedInSupertypeQuery(true);
-        secondaryType.setLocalName("Secondary");
-        secondaryType.setLocalNamespace(defaultNamespace);
-        secondaryType.setIsQueryable(defaultQueryable);
-        secondaryType.setQueryName("cmis:secondary");
-        secondaryType.setId(BaseTypeId.CMIS_SECONDARY.value());
-        secondaryType.setTypeMutability(defaultTypeMutability);
-
-        return secondaryType;
-    }
-
-    /**
-     * Creates a new mutable type definition, which is a child of the provided
-     * type definition. Property definitions are copied from the parent and
-     * marked as inherited.
-     * 
-     * @param parentTypeDefinition
-     *            the type definition of the parent
-     * @param id
-     *            the id of the child type definition
-     * 
-     * @return a mutable child type definition
-     */
-    public MutableTypeDefinition createChildTypeDefinition(TypeDefinition parentTypeDefinition, String id) {
-        return createChildTypeDefinition(parentTypeDefinition, id, id, id, id, null, true, null);
-    }
-
-    /**
-     * Creates a new mutable type definition, which is a child of the provided
-     * type definition. If the parameter {@code includePropertyDefinitions} is
-     * set to {@code true} property definitions are copied from the parent and
-     * marked as inherited.
-     */
-    public MutableTypeDefinition createChildTypeDefinition(TypeDefinition parentTypeDefinition, String id,
-            String localName, String queryName, String displayName, String description,
-            boolean includePropertyDefinitions, CmisVersion cmisVersion) {
-        if (parentTypeDefinition == null) {
-            throw new IllegalArgumentException("Parent type must be set!");
-        }
-
-        if (id == null) {
-            throw new IllegalArgumentException("Child id must be set!");
-        }
-
-        MutableTypeDefinition childType = copy(parentTypeDefinition, false);
-
-        childType.setParentTypeId(parentTypeDefinition.getId());
-        childType.setDescription(description);
-        childType.setDisplayName(displayName);
-        childType.setLocalName(localName);
-        childType.setQueryName(queryName);
-        childType.setId(id);
-
-        if (includePropertyDefinitions) {
-            copyPropertyDefinitions(parentTypeDefinition, childType, cmisVersion, true);
-        }
-
-        return childType;
-    }
-
-    /**
-     * Creates a property definition object.
-     * 
-     * @param id
-     *            the property ID, not {@code null}
-     * @param displayName
-     *            the display name, may be {@code null}
-     * @param description
-     *            the description, may be {@code null}
-     * @param datatype
-     *            the datatype, not {@code null}
-     * @param cardinality
-     *            the cardinality, not {@code null}
-     * @param updateability
-     *            the updateability, not {@code null}
-     * @param inherited
-     *            {@code true} if the property definition is inherited,
-     *            {@code false} otherwise
-     * @param required
-     *            {@code true} if a property value is required, {@code false}
-     *            otherwise
-     * @param queryable
-     *            {@code true} if the property can be used in the WHERE clause
-     *            of a query, {@code false} otherwise
-     * @param orderable
-     *            {@code true} if the property can be used in the ORDER BY
-     *            clause of a query, {@code false} otherwise
-     * 
-     * @return a mutable property definition object
-     */
-    public MutablePropertyDefinition<?> createPropertyDefinition(String id, String displayName, String description,
-            PropertyType datatype, Cardinality cardinality, Updatability updateability, boolean inherited,
-            boolean required, boolean queryable, boolean orderable) {
-        if (id == null) {
-            throw new IllegalArgumentException("ID must be set!");
-        }
-        if (datatype == null) {
-            throw new IllegalArgumentException("Datatype must be set!");
-        }
-        if (cardinality == null) {
-            throw new IllegalArgumentException("Cardinality must be set!");
-        }
-        if (updateability == null) {
-            throw new IllegalArgumentException("Updateability must be set!");
-        }
-
-        MutablePropertyDefinition<?> result = null;
-
-        switch (datatype) {
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            break;
-        case STRING:
-            result = new PropertyStringDefinitionImpl();
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            break;
-        default:
-            throw new IllegalArgumentException("Unknown datatype! Spec change?");
-        }
-
-        result.setId(id);
-        result.setLocalName(id);
-        result.setDisplayName(displayName);
-        result.setDescription(description);
-        result.setPropertyType(datatype);
-        result.setCardinality(cardinality);
-        result.setUpdatability(updateability);
-        result.setIsInherited(inherited);
-        result.setIsRequired(required);
-        result.setIsQueryable(queryable);
-        result.setIsOrderable(orderable);
-        result.setQueryName(id);
-
-        return result;
-    }
-
-    /**
-     * Creates a single value Choice object.
-     * 
-     * @param displayName
-     *            the choice display name
-     * @param value
-     *            the value
-     * 
-     * @return the Choice object
-     */
-    public <T> Choice<T> createChoice(String displayName, T value) {
-        ChoiceImpl<T> result = new ChoiceImpl<T>();
-        result.setDisplayName(displayName);
-        result.setValue(value);
-
-        return result;
-    }
-
-    /**
-     * Creates a multi value Choice object.
-     * 
-     * @param displayName
-     *            the choice display name
-     * @param value
-     *            the value
-     * 
-     * @return the Choice object
-     */
-    public <T> Choice<T> createChoice(String displayName, List<T> value) {
-        ChoiceImpl<T> result = new ChoiceImpl<T>();
-        result.setDisplayName(displayName);
-        result.setValue(value);
-
-        return result;
-    }
-
-    /**
-     * Creates a Choice object with sub choices.
-     * 
-     * @param displayName
-     *            the choice display name
-     * @param subChoice
-     *            the sub choice list
-     * 
-     * @return the Choice object
-     */
-    public <T> Choice<T> createChoiceWithSubChoices(String displayName, List<Choice<T>> subChoice) {
-        ChoiceImpl<T> result = new ChoiceImpl<T>();
-        result.setDisplayName(displayName);
-        result.setChoice(subChoice);
-
-        return result;
-    }
-
-    /**
-     * Creates a type definition list.
-     * 
-     * @param list
-     *            the list of type definitions, not {@code null}
-     * @param hasMoreItems
-     *            {@code true} if there are more items, {@code false} otherwise
-     * @param numItems
-     *            the total (positive) number of types at this level or
-     *            {@code null} if the number is unknown
-     * 
-     * @return the TypeDefinitionList object
-     */
-    public TypeDefinitionList createTypeDefinitionList(List<TypeDefinition> list, boolean hasMoreItems,
-            BigInteger numItems) {
-        if (list == null) {
-            throw new IllegalArgumentException("List must be set!");
-        }
-        if (numItems != null && numItems.signum() < 0) {
-            throw new IllegalArgumentException("Number of items is negative!");
-        }
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl(list);
-        result.setHasMoreItems(hasMoreItems);
-        result.setNumItems(numItems);
-
-        return result;
-    }
-
-    /**
-     * Creates a {@link TypeDefinitionList} for
-     * {@link RepositoryService#getTypeChildren(String, String, Boolean, BigInteger, BigInteger, ExtensionsData)}
-     * .
-     */
-    public TypeDefinitionList createTypeDefinitionList(Map<String, TypeDefinition> allTypes, String typeId,
-            Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount) {
-        return createTypeDefinitionList(allTypes, typeId, includePropertyDefinitions, maxItems, skipCount, null);
-    }
-
-    /**
-     * Creates a {@link TypeDefinitionList} for
-     * {@link RepositoryService#getTypeChildren(String, String, Boolean, BigInteger, BigInteger, ExtensionsData)}
-     * .
-     */
-    public TypeDefinitionList createTypeDefinitionList(Map<String, TypeDefinition> allTypes, String typeId,
-            Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, CmisVersion cmisVersion) {
-        if (allTypes == null) {
-            throw new IllegalArgumentException("Types map must be set!");
-        }
-
-        if (typeId != null && !allTypes.containsKey(typeId)) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' does not exist!");
-        }
-
-        TypeDefinitionListImpl result = new TypeDefinitionListImpl(Collections.<TypeDefinition> emptyList());
-        result.setHasMoreItems(false);
-        result.setNumItems(BigInteger.ZERO);
-
-        if (allTypes.isEmpty()) {
-            return result;
-        }
-
-        int maxItemsInt = (maxItems == null ? Integer.MAX_VALUE : maxItems.intValue());
-        if (maxItemsInt < 0) {
-            maxItemsInt = 0;
-        }
-
-        int skipCountInt = (skipCount == null ? 0 : skipCount.intValue());
-        if (skipCountInt < 0) {
-            skipCountInt = 0;
-        }
-
-        boolean includePropertyDefinitionsBool = (includePropertyDefinitions == null ? false
-                : includePropertyDefinitions.booleanValue());
-
-        List<TypeDefinition> targetList = new ArrayList<TypeDefinition>();
-        for (TypeDefinition typeDef : allTypes.values()) {
-            if ((typeId == null && typeDef.getParentTypeId() == null)
-                    || (typeId != null && typeId.equals(typeDef.getParentTypeId()))) {
-                targetList.add(copy(typeDef, includePropertyDefinitionsBool, cmisVersion));
-            }
-        }
-
-        Collections.sort(targetList, new Comparator<TypeDefinition>() {
-            public int compare(TypeDefinition td1, TypeDefinition td2) {
-                String pid1 = td1.getParentTypeId();
-                String pid2 = td2.getParentTypeId();
-                if (pid1 == null) {
-                    if (pid2 == null) {
-                        return td1.getId().compareTo(td2.getId());
-                    } else {
-                        return -1;
-                    }
-                } else {
-                    if (pid2 == null) {
-                        return 1;
-                    } else {
-                        int c = pid1.compareTo(pid2);
-                        if (c == 0) {
-                            return td1.getId().compareTo(td2.getId());
-                        }
-
-                        return c;
-                    }
-                }
-            }
-        });
-
-        result.setList(targetList.subList(skipCountInt, Math.min(skipCountInt + maxItemsInt, targetList.size())));
-        result.setNumItems(BigInteger.valueOf(targetList.size()));
-        result.setHasMoreItems(targetList.size() > skipCountInt + maxItemsInt);
-
-        return result;
-    }
-
-    /**
-     * Creates a type definition container.
-     * 
-     * @param typeDef
-     *            the type definition, not {@code null}
-     * @param children
-     *            the child type definitions, may be {@code null}
-     * 
-     * @return the TypeDefinitionContainer object
-     */
-    public TypeDefinitionContainer createTypeDefinitionContainer(TypeDefinition typeDef,
-            List<TypeDefinitionContainer> children) {
-        if (typeDef == null) {
-            throw new IllegalArgumentException("Type definition must be set!");
-        }
-
-        TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl(typeDef);
-        result.setChildren(children);
-
-        return result;
-    }
-
-    /**
-     * Creates a list of {@link TypeDefinitionContainer} for
-     * {@link RepositoryService#getTypeDescendants(String, String, BigInteger, Boolean, ExtensionsData)}
-     * .
-     */
-    public List<TypeDefinitionContainer> createTypeDescendants(Map<String, TypeDefinition> allTypes, String typeId,
-            BigInteger depth, Boolean includePropertyDefinitions) {
-        return createTypeDescendants(allTypes, typeId, depth, includePropertyDefinitions, null);
-    }
-
-    /**
-     * Creates a list of {@link TypeDefinitionContainer} for
-     * {@link RepositoryService#getTypeDescendants(String, String, BigInteger, Boolean, ExtensionsData)}
-     * .
-     */
-    public List<TypeDefinitionContainer> createTypeDescendants(Map<String, TypeDefinition> allTypes, String typeId,
-            BigInteger depth, Boolean includePropertyDefinitions, CmisVersion cmisVersion) {
-        if (allTypes == null) {
-            throw new IllegalArgumentException("Types map must be set!");
-        }
-
-        int depthInt = (depth == null ? -1 : depth.intValue());
-        if (depthInt == 0) {
-            throw new IllegalArgumentException("Depth must not be 0!");
-        }
-        if (typeId == null) {
-            depthInt = -1;
-        }
-
-        if (typeId != null && !allTypes.containsKey(typeId)) {
-            throw new CmisObjectNotFoundException("Type '" + typeId + "' does not exist!");
-        }
-
-        if (allTypes.isEmpty()) {
-            return Collections.<TypeDefinitionContainer> emptyList();
-        }
-
-        boolean includePropertyDefinitionsBool = (includePropertyDefinitions == null ? false
-                : includePropertyDefinitions.booleanValue());
-
-        // gather parent ids
-        Map<String, Set<String>> typeDefChildren = new HashMap<String, Set<String>>();
-
-        for (TypeDefinition typeDef : allTypes.values()) {
-            Set<String> children = typeDefChildren.get(typeDef.getParentTypeId());
-            if (children == null) {
-                children = new HashSet<String>();
-                typeDefChildren.put(typeDef.getParentTypeId(), children);
-            }
-            children.add(typeDef.getId());
-        }
-
-        Set<String> children = typeDefChildren.get(typeId);
-        if (children == null) {
-            return Collections.<TypeDefinitionContainer> emptyList();
-        }
-
-        // build container tree
-        List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-        for (String child : children) {
-            result.add(createTypeDefinitionContainer(allTypes, typeDefChildren, child, depthInt - 1,
-                    includePropertyDefinitionsBool, cmisVersion));
-        }
-
-        return result;
-    }
-
-    private TypeDefinitionContainer createTypeDefinitionContainer(Map<String, TypeDefinition> allTypes,
-            Map<String, Set<String>> typeDefChildren, String typeId, int depth, boolean includePropertyDefinitions,
-            CmisVersion cmisVersion) {
-        TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
-        result.setTypeDefinition(includePropertyDefinitions ? copy(allTypes.get(typeId), true, cmisVersion) : copy(
-                allTypes.get(typeId), false, cmisVersion));
-
-        if (depth != 0) {
-            if (typeDefChildren.containsKey(typeId)) {
-                for (String child : typeDefChildren.get(typeId)) {
-                    result.getChildren().add(
-                            createTypeDefinitionContainer(allTypes, typeDefChildren, child, depth < 0 ? -1 : depth - 1,
-                                    includePropertyDefinitions, cmisVersion));
-                }
-            }
-        }
-
-        return result;
-    }
-
-    // --- copy methods ---
-
-    /**
-     * Copies the given type definition and returns a mutable object.
-     */
-    public MutableTypeDefinition copy(TypeDefinition sourceTypeDefintion, boolean includePropertyDefinitions) {
-        return copy(sourceTypeDefintion, includePropertyDefinitions, null);
-    }
-
-    /**
-     * Copies the given type definition and returns a mutable object.
-     */
-    public MutableTypeDefinition copy(TypeDefinition sourceTypeDefintion, boolean includePropertyDefinitions,
-            CmisVersion cmisVersion) {
-        if (sourceTypeDefintion == null) {
-            throw new IllegalArgumentException("Source type must be set!");
-        }
-
-        if (sourceTypeDefintion.getBaseTypeId() == null) {
-            throw new IllegalArgumentException("Source type has no base type!");
-        }
-
-        MutableTypeDefinition result = null;
-
-        switch (sourceTypeDefintion.getBaseTypeId()) {
-        case CMIS_DOCUMENT:
-            result = createDocumentTypeDefinitionObject();
-            ((MutableDocumentTypeDefinition) result).setIsVersionable(((DocumentTypeDefinition) sourceTypeDefintion)
-                    .isVersionable());
-            ((MutableDocumentTypeDefinition) result)
-                    .setContentStreamAllowed(((DocumentTypeDefinition) sourceTypeDefintion).getContentStreamAllowed());
-            break;
-        case CMIS_FOLDER:
-            result = createFolderTypeDefinitionObject();
-            break;
-        case CMIS_POLICY:
-            result = createPolicyTypeDefinitionObject();
-            break;
-        case CMIS_RELATIONSHIP:
-            result = createRelationshipTypeDefinitionObject();
-            List<String> sourceTypeIds = ((RelationshipTypeDefinition) sourceTypeDefintion).getAllowedSourceTypeIds();
-            if (sourceTypeIds != null) {
-                ((MutableRelationshipTypeDefinition) result)
-                        .setAllowedSourceTypes(new ArrayList<String>(sourceTypeIds));
-            }
-            List<String> targetTypeIds = ((RelationshipTypeDefinition) sourceTypeDefintion).getAllowedTargetTypeIds();
-            if (targetTypeIds != null) {
-                ((MutableRelationshipTypeDefinition) result)
-                        .setAllowedTargetTypes(new ArrayList<String>(targetTypeIds));
-            }
-            break;
-        case CMIS_ITEM:
-            if (cmisVersion == CmisVersion.CMIS_1_0) {
-                throw new IllegalArgumentException("CMIS 1.0 doesn't support item types!");
-            }
-            result = createItemTypeDefinitionObject();
-            break;
-        case CMIS_SECONDARY:
-            if (cmisVersion == CmisVersion.CMIS_1_0) {
-                throw new IllegalArgumentException("CMIS 1.0 doesn't support secondary types!");
-            }
-            result = createSecondaryTypeDefinitionObject();
-            break;
-        default:
-            throw new RuntimeException("Unknown base type!");
-        }
-
-        result.setId(sourceTypeDefintion.getId());
-        result.setLocalName(sourceTypeDefintion.getLocalName());
-        result.setLocalNamespace(sourceTypeDefintion.getLocalNamespace());
-        result.setDisplayName(sourceTypeDefintion.getDisplayName());
-        result.setQueryName(sourceTypeDefintion.getQueryName());
-        result.setDescription(sourceTypeDefintion.getDescription());
-        result.setBaseTypeId(sourceTypeDefintion.getBaseTypeId());
-        result.setParentTypeId(sourceTypeDefintion.getParentTypeId());
-        result.setIsCreatable(sourceTypeDefintion.isCreatable());
-        result.setIsFileable(sourceTypeDefintion.isFileable());
-        result.setIsQueryable(sourceTypeDefintion.isQueryable());
-        result.setIsFulltextIndexed(sourceTypeDefintion.isFulltextIndexed());
-        result.setIsIncludedInSupertypeQuery(sourceTypeDefintion.isIncludedInSupertypeQuery());
-        result.setIsControllablePolicy(sourceTypeDefintion.isControllablePolicy());
-        result.setIsControllableAcl(sourceTypeDefintion.isControllableAcl());
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            if (sourceTypeDefintion.getTypeMutability() != null) {
-                result.setTypeMutability(createTypeMutability(sourceTypeDefintion.getTypeMutability().canCreate(),
-                        sourceTypeDefintion.getTypeMutability().canUpdate(), sourceTypeDefintion.getTypeMutability()
-                                .canDelete()));
-            }
-        }
-
-        copyExtensions(sourceTypeDefintion, result);
-
-        if (includePropertyDefinitions) {
-            copyPropertyDefinitions(sourceTypeDefintion, result, cmisVersion, false);
-        }
-
-        return result;
-    }
-
-    /**
-     * Copies the given property definition and returns a mutable object.
-     */
-    public MutablePropertyDefinition<?> copy(PropertyDefinition<?> sourcePropertyDefinition) {
-        if (sourcePropertyDefinition == null) {
-            throw new IllegalArgumentException("Source definition must be set!");
-        }
-
-        if (sourcePropertyDefinition.getPropertyType() == null) {
-            throw new IllegalArgumentException("Source definition property type must be set!");
-        }
-
-        MutablePropertyDefinition<?> result = null;
-
-        switch (sourcePropertyDefinition.getPropertyType()) {
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            ((PropertyBooleanDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyBooleanDefinition) sourcePropertyDefinition));
-            ((PropertyBooleanDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyBooleanDefinition) sourcePropertyDefinition));
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            ((PropertyDateTimeDefinitionImpl) result)
-                    .setDateTimeResolution(((PropertyDateTimeDefinition) sourcePropertyDefinition)
-                            .getDateTimeResolution());
-            ((PropertyDateTimeDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyDateTimeDefinition) sourcePropertyDefinition));
-            ((PropertyDateTimeDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyDateTimeDefinition) sourcePropertyDefinition));
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            ((PropertyDecimalDefinitionImpl) result).setMinValue(((PropertyDecimalDefinition) sourcePropertyDefinition)
-                    .getMinValue());
-            ((PropertyDecimalDefinitionImpl) result).setMaxValue(((PropertyDecimalDefinition) sourcePropertyDefinition)
-                    .getMaxValue());
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setPrecision(((PropertyDecimalDefinition) sourcePropertyDefinition).getPrecision());
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyDecimalDefinition) sourcePropertyDefinition));
-            ((PropertyDecimalDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyDecimalDefinition) sourcePropertyDefinition));
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            ((PropertyHtmlDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyHtmlDefinition) sourcePropertyDefinition));
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            ((PropertyIdDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyIdDefinition) sourcePropertyDefinition));
-            ((PropertyIdDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyIdDefinition) sourcePropertyDefinition));
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            ((PropertyIntegerDefinitionImpl) result).setMinValue(((PropertyIntegerDefinition) sourcePropertyDefinition)
-                    .getMinValue());
-            ((PropertyIntegerDefinitionImpl) result).setMaxValue(((PropertyIntegerDefinition) sourcePropertyDefinition)
-                    .getMaxValue());
-            ((PropertyIntegerDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyIntegerDefinition) sourcePropertyDefinition));
-            ((PropertyIntegerDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyIntegerDefinition) sourcePropertyDefinition));
-            break;
-        case STRING:
-            result = new PropertyStringDefinitionImpl();
-            ((PropertyStringDefinitionImpl) result).setMaxLength((((PropertyStringDefinition) sourcePropertyDefinition)
-                    .getMaxLength()));
-            ((PropertyStringDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyStringDefinition) sourcePropertyDefinition));
-            ((PropertyStringDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyStringDefinition) sourcePropertyDefinition));
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            ((PropertyUriDefinitionImpl) result)
-                    .setDefaultValue(copyDefaultValue((PropertyUriDefinition) sourcePropertyDefinition));
-            ((PropertyUriDefinitionImpl) result)
-                    .setChoices(copyChoices((PropertyUriDefinition) sourcePropertyDefinition));
-            break;
-        default:
-            throw new RuntimeException("Unknown datatype!");
-        }
-
-        result.setId(sourcePropertyDefinition.getId());
-        result.setLocalName(sourcePropertyDefinition.getLocalName());
-        result.setLocalNamespace(sourcePropertyDefinition.getLocalNamespace());
-        result.setDisplayName(sourcePropertyDefinition.getDisplayName());
-        result.setDescription(sourcePropertyDefinition.getDescription());
-        result.setPropertyType(sourcePropertyDefinition.getPropertyType());
-        result.setCardinality(sourcePropertyDefinition.getCardinality());
-        result.setUpdatability(sourcePropertyDefinition.getUpdatability());
-        result.setIsInherited(sourcePropertyDefinition.isInherited());
-        result.setIsRequired(sourcePropertyDefinition.isRequired());
-        result.setIsQueryable(sourcePropertyDefinition.isQueryable());
-        result.setIsOrderable(sourcePropertyDefinition.isOrderable());
-        result.setQueryName(sourcePropertyDefinition.getQueryName());
-        result.setIsOpenChoice(sourcePropertyDefinition.isOpenChoice());
-
-        copyExtensions(sourcePropertyDefinition, result);
-
-        return result;
-    }
-
-    // --- internal methods ---
-
-    /**
-     * Copies the property definitions from a source type to a target type.
-     */
-    protected void copyPropertyDefinitions(TypeDefinition source, MutableTypeDefinition target,
-            CmisVersion cmisVersion, boolean markAsInherited) {
-        assert source != null;
-        assert target != null;
-
-        if (source.getPropertyDefinitions() != null) {
-            for (PropertyDefinition<?> propDef : source.getPropertyDefinitions().values()) {
-                if (cmisVersion == CmisVersion.CMIS_1_0) {
-                    if (NEW_CMIS11_PROPERTIES.contains(propDef.getId())) {
-                        continue;
-                    }
-                }
-
-                MutablePropertyDefinition<?> newPropDef = copy(propDef);
-                if (markAsInherited) {
-                    newPropDef.setIsInherited(true);
-                }
-                target.addPropertyDefinition(newPropDef);
-            }
-        }
-    }
-
-    /**
-     * Returns a copy of a default value.
-     */
-    protected <T> List<T> copyDefaultValue(PropertyDefinition<T> source) {
-        if (source == null || source.getDefaultValue() == null) {
-            return null;
-        }
-
-        return new ArrayList<T>(source.getDefaultValue());
-    }
-
-    /**
-     * Returns a copy of a choice tree.
-     */
-    protected <T> List<Choice<T>> copyChoices(PropertyDefinition<T> source) {
-        if (source == null || source.getChoices() == null) {
-            return null;
-        }
-
-        List<Choice<T>> result = new ArrayList<Choice<T>>();
-
-        for (Choice<T> c : source.getChoices()) {
-            result.add(copyChoice(c));
-        }
-
-        return result;
-    }
-
-    private <T> Choice<T> copyChoice(Choice<T> source) {
-        if (source == null) {
-            return null;
-        }
-
-        ChoiceImpl<T> result = new ChoiceImpl<T>();
-
-        result.setDisplayName(source.getDisplayName());
-        if (source.getValue() != null) {
-            result.setValue(new ArrayList<T>(source.getValue()));
-        }
-        if (source.getChoice() != null) {
-            List<Choice<T>> choices = new ArrayList<Choice<T>>();
-            for (Choice<T> c : source.getChoice()) {
-                choices.add(copyChoice(c));
-            }
-            result.setChoice(choices);
-        }
-
-        return result;
-    }
-
-    /**
-     * Makes a deep copy of extension of a source object and adds them to a
-     * target object.
-     */
-    protected void copyExtensions(ExtensionsData source, ExtensionsData target) {
-        if (source == null || target == null) {
-            return;
-        }
-
-        if (source.getExtensions() == null) {
-            target.setExtensions(null);
-            return;
-        }
-
-        List<CmisExtensionElement> elementList = new ArrayList<CmisExtensionElement>();
-        for (CmisExtensionElement element : source.getExtensions()) {
-            elementList.add(copy(element));
-        }
-
-        target.setExtensions(elementList);
-    }
-
-    /**
-     * Makes a deep copy of an extension element.
-     */
-    private CmisExtensionElement copy(CmisExtensionElement element) {
-        if (element == null) {
-            return null;
-        }
-
-        Map<String, String> attrs = (element.getAttributes() != null ? new HashMap<String, String>(
-                element.getAttributes()) : null);
-
-        if (element.getChildren() == null) {
-            return new CmisExtensionElementImpl(element.getNamespace(), element.getName(), attrs, element.getValue());
-        } else {
-            List<CmisExtensionElement> children = new ArrayList<CmisExtensionElement>();
-
-            for (CmisExtensionElement child : element.getChildren()) {
-                children.add(copy(child));
-            }
-
-            return new CmisExtensionElementImpl(element.getNamespace(), element.getName(), attrs, children);
-        }
-    }
-
-    /**
-     * Adds the base property definitions to a type definition.
-     */
-    protected void addBasePropertyDefinitions(MutableTypeDefinition type, CmisVersion cmisVersion, boolean inherited) {
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.NAME, "Name", "Name", PropertyType.STRING,
-                Cardinality.SINGLE, Updatability.READWRITE, inherited, true, true, true));
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            type.addPropertyDefinition(createPropertyDefinition(PropertyIds.DESCRIPTION, "Description", "Description",
-                    PropertyType.STRING, Cardinality.SINGLE, Updatability.READWRITE, inherited, false, false, false));
-        }
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.OBJECT_ID, "Object Id", "Object Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, inherited, false, true, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.BASE_TYPE_ID, "Base Type Id", "Base Type Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, inherited, false, true, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.OBJECT_TYPE_ID, "Object Type Id",
-                "Object Type Id", PropertyType.ID, Cardinality.SINGLE, Updatability.ONCREATE, inherited, true, true,
-                false));
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            type.addPropertyDefinition(createPropertyDefinition(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
-                    "Secondary Type Ids", "Secondary Type Ids", PropertyType.ID, Cardinality.MULTI,
-                    Updatability.READONLY, inherited, false, true, false));
-        }
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CREATED_BY, "Created By", "Created By",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false, true, true));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CREATION_DATE, "Creation Date",
-                "Creation Date", PropertyType.DATETIME, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                true, true));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.LAST_MODIFIED_BY, "Last Modified By",
-                "Last Modified By", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                true, true));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.LAST_MODIFICATION_DATE,
-                "Last Modification Date", "Last Modification Date", PropertyType.DATETIME, Cardinality.SINGLE,
-                Updatability.READONLY, inherited, false, true, true));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CHANGE_TOKEN, "Change Token", "Change Token",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false, false, false));
-    }
-
-    protected void addDocumentPropertyDefinitions(MutableDocumentTypeDefinition type, CmisVersion cmisVersion,
-            boolean inherited) {
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_IMMUTABLE, "Is Immutable", "Is Immutable",
-                PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, inherited, false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_LATEST_VERSION, "Is Latest Version",
-                "Is Latest Version", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_MAJOR_VERSION, "Is Major Version",
-                "Is Major Version", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_LATEST_MAJOR_VERSION,
-                "Is Latest Major Version", "Is Latest Major Version", PropertyType.BOOLEAN, Cardinality.SINGLE,
-                Updatability.READONLY, inherited, false, false, false));
-
-        if (cmisVersion != CmisVersion.CMIS_1_0) {
-            type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_PRIVATE_WORKING_COPY,
-                    "Is Private Working Copy", "Is Private Working Copy", PropertyType.BOOLEAN, Cardinality.SINGLE,
-                    Updatability.READONLY, inherited, false, true, false));
-        }
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.VERSION_LABEL, "Version Label",
-                "Version Label", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                true, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.VERSION_SERIES_ID, "Version Series Id",
-                "Version Series Id", PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                true, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT,
-                "Is Verison Series Checked Out", "Is Verison Series Checked Out", PropertyType.BOOLEAN,
-                Cardinality.SINGLE, Updatability.READONLY, inherited, false, true, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY,
-                "Version Series Checked Out By", "Version Series Checked Out By", PropertyType.STRING,
-                Cardinality.SINGLE, Updatability.READONLY, inherited, false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID,
-                "Version Series Checked Out Id", "Version Series Checked Out Id", PropertyType.ID, Cardinality.SINGLE,
-                Updatability.READONLY, inherited, false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CHECKIN_COMMENT, "Checkin Comment",
-                "Checkin Comment", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CONTENT_STREAM_LENGTH, "Content Stream Length",
-                "Content Stream Length", PropertyType.INTEGER, Cardinality.SINGLE, Updatability.READONLY, inherited,
-                false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CONTENT_STREAM_MIME_TYPE, "MIME Type",
-                "MIME Type", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false, false,
-                false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CONTENT_STREAM_FILE_NAME, "Filename",
-                "Filename", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, inherited, false, false,
-                false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.CONTENT_STREAM_ID, "Content Stream Id",
-                "Content Stream Id", PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, inherited, false,
-                false, false));
-    }
-
-    protected void addFolderPropertyDefinitions(MutableFolderTypeDefinition type, CmisVersion cmisVersion,
-            boolean inherited) {
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.PARENT_ID, "Parent Id", "Parent Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, inherited, false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.PATH, "Path", "Path", PropertyType.STRING,
-                Cardinality.SINGLE, Updatability.READONLY, inherited, false, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS,
-                "Allowed Child Object Type Ids", "Allowed Child Object Type Ids", PropertyType.ID, Cardinality.MULTI,
-                Updatability.READONLY, inherited, false, false, false));
-    }
-
-    protected void addPolicyPropertyDefinitions(MutablePolicyTypeDefinition type, CmisVersion cmisVersion,
-            boolean inherited) {
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.POLICY_TEXT, "Policy Text", "Policy Text",
-                PropertyType.STRING, Cardinality.SINGLE, Updatability.READWRITE, inherited, false, false, false));
-    }
-
-    protected void addRelationshipPropertyDefinitions(MutableRelationshipTypeDefinition type, CmisVersion cmisVersion,
-            boolean inherited) {
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.SOURCE_ID, "Source Id", "Source Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READWRITE, inherited, true, false, false));
-
-        type.addPropertyDefinition(createPropertyDefinition(PropertyIds.TARGET_ID, "Target Id", "Target Id",
-                PropertyType.ID, Cardinality.SINGLE, Updatability.READWRITE, inherited, true, false, false));
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeManager.java
deleted file mode 100644
index 082b640..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeManager.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-
-public interface TypeManager {
-
-    /**
-     * return a type definition from the type definition id
-     * 
-     * @param typeId
-     *            id of the type definition
-     * @return type definition for this id
-     */
-    TypeDefinitionContainer getTypeById(String typeId);
-
-    /**
-     * return a type definition from the type query name or null if not found
-     * 
-     * @param typeQueryName
-     *            query name of the type definition
-     * @return type definition for this query name
-     */
-    TypeDefinition getTypeByQueryName(String typeQueryName);
-
-    /**
-     * return a list of all types known in this repository
-     * Note: This method is not needed for the query parser.
-     * 
-     * @return
-     *      list of type definitions
-     */
-    Collection<TypeDefinitionContainer> getTypeDefinitionList();
-
-    /**
-     * return a list of the root types as defined in the CMIS spec (for
-     * document, folder, policy and relationship
-     * Note: This method is not needed for the query parser.
-     * 
-     * @return
-     *      list of type definitions
-     */
-    List<TypeDefinitionContainer> getRootTypes();
-
-    /**
-     * retrieve the property id from a type for a given property query name 
-     * 
-     * @param typeDefinition
-     *      type definition containing query name
-     * @param propQueryName
-     *      query name of property
-     * @return
-     *      property id of property or null if not found
-     */
-    String getPropertyIdForQueryName(TypeDefinition typeDefinition, String propQueryName);
-
-    /**
-     * Add a type to the type system. Add all properties from inherited types,
-     * add type to children of parent types.
-     * Note: This method is not needed for the query parser.
-     * 
-     * @param typeDefinition
-     *            new type to add
-     * @param addInheritedProperties
-     *            add properties from supertype to type definition
-     */
-    void addTypeDefinition(TypeDefinition typeDefinition, boolean addInheritedProperties);
-
-    /**
-     * Modify an existing type definition.
-     * Note: This method is not needed for the query parser.
-     * 
-     * @param typeDefinition
-     *            type to be modified
-     */
-    void updateTypeDefinition(TypeDefinition typeDefinition);
-
-    /**
-     * Delete a type from the type system. Delete will succeed only if type is
-     * not in use. Otherwise an exception is thrown.
-     * Note: This method is not needed for the query parser.
-     * 
-     * @param typeId
-     *            id of type to be deleted
-     */
-    void deleteTypeDefinition(String typeId);
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeValidator.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeValidator.java
deleted file mode 100644
index 0c740d1..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeValidator.java
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-
-public final class TypeValidator {
-
-    private TypeValidator() {
-    }
-
-    public static void validateRequiredSystemProperties(Properties properties) {
-        if (properties == null || properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Cannot create object, no properties are given");
-        }
-
-        if (!properties.getProperties().containsKey(PropertyIds.OBJECT_TYPE_ID)) {
-            throw new CmisInvalidArgumentException("Cannot create object, type id is missing");
-        }
-    }
-
-    private static boolean isMandatorySystemProperty(String propertyId) {
-        return propertyId.equals(PropertyIds.OBJECT_TYPE_ID);
-    }
-
-    @SuppressWarnings("unchecked")
-    static <T> PropertyValidator<T> createPropertyValidator(PropertyDefinition<?> propDef) {
-        PropertyValidator<T> result = null;
-        if (propDef instanceof PropertyIntegerDefinition) {
-            result = (PropertyValidator<T>) new PropertyValidatorInteger();
-        } else if (propDef instanceof PropertyDecimalDefinition) {
-            result = (PropertyValidator<T>) new PropertyValidatorDecimal();
-        } else if (propDef instanceof PropertyStringDefinition) {
-            result = (PropertyValidator<T>) new PropertyValidatorString();
-        } else {
-            result = new PropertyValidator<T>();
-        }
-        return result;
-    }
-
-    /*
-     * property validations: not readonly, all required are given, all are known
-     * in type cardinality: no multi values for single value, def min max check
-     * for Integer and Decimal, choices and in list Strings, max length set
-     * default value for omitted properties
-     */
-    static class PropertyValidator<T> {
-
-        public void validate(PropertyDefinition<T> propDef, PropertyData<T> prop) {
-
-            // check general constraints for all property types
-            if (propDef.getCardinality() == Cardinality.SINGLE) {
-                if (prop.getValues() != null && prop.getValues().size() > 1) {
-                    throw new CmisConstraintException("The property with id " + propDef.getId()
-                            + " is single valued, but multiple values are passed " + prop.getValues());
-                }
-            }
-
-            if (isNotEmpty(propDef.getChoices())) {
-                validateChoices(propDef, prop);
-            }
-        }
-
-        private void validateChoices(PropertyDefinition<T> propDef, PropertyData<T> prop) {
-            boolean isAllowedValue = true;
-            boolean hasMultiValueChoiceLists = false;
-            for (Choice<?> allowedValue : propDef.getChoices()) {
-                if (allowedValue.getValue() != null && allowedValue.getValue().size() > 1) {
-                    hasMultiValueChoiceLists = true;
-                }
-            }
-
-            if (propDef.isOpenChoice() != null && propDef.isOpenChoice()) {
-            	isAllowedValue = true;
-            } else if (hasMultiValueChoiceLists) {
-                // check if value is in list
-
-            	// do a complex check if this combination of actual values is
-                // allowed check if value is in list
-                isAllowedValue = false;
-                List<?> actualValues = prop.getValues();
-                for (Choice<?> allowedValue : propDef.getChoices()) {
-                    if (allowedValue.getValue().size() == actualValues.size()) {
-                        boolean listValuesAreEqual = true;
-                        Iterator<?> it = allowedValue.getValue().iterator();
-                        for (Object actualValue : actualValues) {
-                            if (!actualValue.equals(it.next())) {
-                                listValuesAreEqual = false;
-                                break;
-                            }
-                        }
-                        if (listValuesAreEqual) {
-                            isAllowedValue = true;
-                        }
-                    }
-
-                    if (isAllowedValue) {
-                        break;
-                    }
-                }
-
-            } else {
-                List<T> allowedValues = getAllowedValues(propDef.getChoices());
-                // do a simpler check if all values are choice elements
-
-                for (Object actualValue : prop.getValues()) {
-                    if (!allowedValues.contains(actualValue)) {
-                        isAllowedValue = false;
-                        break;
-                    }
-                }
-            }
-
-            if (!isAllowedValue) {
-                throw new CmisConstraintException("The property with id " + propDef.getId()
-                        + " has a fixed set of values. Value(s) " + prop.getValues() + " are not listed.");
-            }
-        }
-
-        /**
-         * Calculate the list of allowed values for this property definition by
-         * recursively collecting all choice values from property definition
-         * 
-         * @param propDef
-         *            property definition
-         * @return list of possible values in complete hierarchy
-         */
-        private List<T> getAllowedValues(List<Choice<T>> choices) {
-            List<T> allowedValues = new ArrayList<T>(choices.size());
-            for (Choice<T> choice : choices) {
-                if (isNotEmpty(choice.getValue())) {
-                    allowedValues.add(choice.getValue().get(0));
-                }
-                if (isNotEmpty(choice.getChoice())) {
-                    List<Choice<T>> x = choice.getChoice();
-                    allowedValues.addAll(getAllowedValues(x));
-                }
-            }
-            return allowedValues;
-        }
-    }
-
-    static class PropertyValidatorInteger extends PropertyValidator<BigInteger> {
-
-        @Override
-        public void validate(PropertyDefinition<BigInteger> propDef, PropertyData<BigInteger> property) {
-
-            super.validate(propDef, property);
-
-            BigInteger propVal = property.getFirstValue();
-            BigInteger minVal = ((PropertyIntegerDefinition) propDef).getMinValue();
-            BigInteger maxVal = ((PropertyIntegerDefinition) propDef).getMaxValue();
-
-            // check min and max
-            if (minVal != null && propVal != null && propVal.compareTo(minVal) == -1) {
-                throw new CmisConstraintException("For property with id " + propDef.getId() + " the value " + propVal
-                        + " is less than the minimum value " + minVal);
-            }
-            if (maxVal != null && propVal != null && propVal.compareTo(maxVal) == 1) {
-                throw new CmisConstraintException("For property with id " + propDef.getId() + " the value " + propVal
-                        + " is bigger than the maximum value " + maxVal);
-            }
-        }
-    }
-
-    static class PropertyValidatorDecimal extends PropertyValidator<BigDecimal> {
-
-        @Override
-        public void validate(PropertyDefinition<BigDecimal> propDef, PropertyData<BigDecimal> property) {
-
-            super.validate(propDef, property);
-
-            BigDecimal propVal = property.getFirstValue();
-            BigDecimal minVal = ((PropertyDecimalDefinition) propDef).getMinValue();
-            BigDecimal maxVal = ((PropertyDecimalDefinition) propDef).getMaxValue();
-
-            // check min and max
-            if (minVal != null && propVal != null && propVal.compareTo(minVal) == -1) {
-                throw new CmisConstraintException("For property with id " + propDef.getId() + " the value " + propVal
-                        + " is less than the minimum value " + minVal);
-            }
-            if (maxVal != null && propVal != null && propVal.compareTo(maxVal) == 1) {
-                throw new CmisConstraintException("For property with id " + propDef.getId() + " the value " + propVal
-                        + " is bigger than the maximum value " + maxVal);
-            }
-        }
-    }
-
-    static class PropertyValidatorString extends PropertyValidator<String> {
-
-        @Override
-        public void validate(PropertyDefinition<String> propDef, PropertyData<String> property) {
-
-            super.validate(propDef, property);
-
-            long maxLen = ((PropertyStringDefinition) propDef).getMaxLength() == null ? -1
-                    : ((PropertyStringDefinition) propDef).getMaxLength().longValue();
-            long len = property.getFirstValue() == null ? -1 : property.getFirstValue().length();
-
-            // check max length
-            if (maxLen >= 0 && len >= 0 && maxLen < len) {
-                throw new CmisConstraintException("For property with id " + propDef.getId() + " the length of " + len
-                        + " is bigger than the maximum allowed length  " + maxLen);
-            }
-        }
-    }
-
-    public static <T> void validateProperties(TypeDefinition typeDef, Properties properties, boolean checkMandatory) {
-        validateProperties(typeDef, properties, checkMandatory, false);
-    }
-
-    public static <T> void validateProperties(TypeDefinition typeDef, Properties properties, boolean checkMandatory,
-            boolean cmis11) {
-        List<String> propDefsRequired = getMandatoryPropDefs(typeDef.getPropertyDefinitions());
-
-        if (properties != null) {
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                String propertyId = prop.getId();
-                if (null == propertyId) {
-                    throw new CmisInvalidArgumentException("Property id cannot be null");
-                }
-                BaseTypeId baseTypeId = typeDef.getBaseTypeId();
-
-                // check that all mandatory attributes are present
-                if (checkMandatory && propDefsRequired.contains(propertyId)) {
-                    propDefsRequired.remove(propertyId);
-                }
-
-                if (isSystemProperty(baseTypeId, propertyId, cmis11)) {
-                    continue; // ignore system properties for validation
-                }
-
-                // Check if all properties are known in the type
-                if (typeContainsProperty(typeDef, propertyId)) {
-                    // check all type specific constraints:
-                    PropertyDefinition<T> propDef = getPropertyDefinition(typeDef, propertyId);
-                    PropertyValidator<T> validator = createPropertyValidator(propDef);
-                    validator.validate(propDef, (PropertyData<T>) prop);
-                } else {
-                    throw new CmisConstraintException("Unknown property " + propertyId + " in type " + typeDef.getId());
-                }
-            }
-        }
-
-        if (checkMandatory && !propDefsRequired.isEmpty()) {
-            throw new CmisConstraintException("The following mandatory properties are missing: " + propDefsRequired);
-        }
-    }
-
-    public static <T> void validateProperties(List<TypeDefinition> typeDefs, Properties properties,
-            boolean checkMandatory) {
-        if (properties == null) {
-            return;
-        }
-
-        Map<String, Boolean> checkedProperties = new HashMap<String, Boolean>();
-        for (String propId : properties.getProperties().keySet()) {
-            checkedProperties.put(propId, false);
-        }
-
-        for (TypeDefinition typeDef : typeDefs) {
-
-            List<String> propDefsRequired = getMandatoryPropDefs(typeDef.getPropertyDefinitions());
-
-            for (PropertyData<?> prop : properties.getProperties().values()) {
-                String propertyId = prop.getId();
-                if (null == propertyId) {
-                    throw new CmisInvalidArgumentException("Property id cannot be null");
-                }
-                BaseTypeId baseTypeId = typeDef.getBaseTypeId();
-
-                // check that all mandatory attributes are present
-                if (checkMandatory && propDefsRequired.contains(propertyId)) {
-                    propDefsRequired.remove(propertyId);
-                }
-
-                if (isSystemProperty(baseTypeId, propertyId, true)) {
-                    checkedProperties.put(prop.getId(), true); // ignore system
-                                                               // properties for
-                                                               // validation
-                } else if (typeContainsProperty(typeDef, propertyId)) {
-                    // Check if all properties are known in the type
-                    // marked the property as found in a type of primary or
-                    // secondary types
-                    checkedProperties.put(prop.getId(), true);
-
-                    // check all type specific constraints:
-                    PropertyDefinition<T> propDef = getPropertyDefinition(typeDef, propertyId);
-                    PropertyValidator<T> validator = createPropertyValidator(propDef);
-                    validator.validate(propDef, (PropertyData<T>) prop);
-                }
-            }
-
-            if (checkMandatory && !propDefsRequired.isEmpty()) {
-                throw new CmisConstraintException("The following mandatory properties are missing: " + propDefsRequired);
-            }
-        }
-
-        // check if all properties are known in a type definition
-        List<String> unknownProperties = new ArrayList<String>();
-        for (String propId : properties.getProperties().keySet()) {
-            if (!checkedProperties.get(propId)) {
-                unknownProperties.add(propId);
-            }
-        }
-        if (!unknownProperties.isEmpty()) {
-            throw new CmisConstraintException(
-                    "The following properties are not known in any of the types of this object: " + unknownProperties);
-        }
-    }
-
-    public static void validateVersionStateForCreate(DocumentTypeDefinition typeDef, VersioningState verState) {
-        if (null == verState) {
-            return;
-        }
-        if (typeDef.isVersionable() && verState.equals(VersioningState.NONE) || !typeDef.isVersionable()
-                && !verState.equals(VersioningState.NONE)) {
-            throw new CmisConstraintException("The versioning state flag is imcompatible to the type definition.");
-        }
-
-    }
-
-    public static void validateAllowedChildObjectTypes(TypeDefinition childTypeDef, List<String> allowedChildTypes) {
-
-        validateAllowedTypes(childTypeDef, allowedChildTypes, "in this folder");
-    }
-
-    public static void validateAllowedRelationshipTypes(RelationshipTypeDefinition relationshipTypeDef,
-            TypeDefinition sourceTypeDef, TypeDefinition targetTypeDef) {
-        List<String> allowedSourceTypes = relationshipTypeDef.getAllowedSourceTypeIds();
-        validateAllowedTypes(sourceTypeDef, allowedSourceTypes, " as source type in this relationship");
-        List<String> allowedTargetTypes = relationshipTypeDef.getAllowedTargetTypeIds();
-        validateAllowedTypes(targetTypeDef, allowedTargetTypes, " as target type in this relationship");
-    }
-
-    protected static void validateAllowedTypes(TypeDefinition typeDef, List<String> allowedTypes, String description) {
-        if (isNullOrEmpty(allowedTypes)) {
-            return; // all types are allowed
-        }
-
-        for (String allowedType : allowedTypes) {
-            if (allowedType.equals(typeDef.getId())) {
-                return;
-            }
-        }
-        throw new CmisConstraintException("The requested type " + typeDef.getId() + " is not allowed " + description);
-    }
-
-    public static void validateAcl(TypeDefinition typeDef, Acl addACEs, Acl removeACEs) {
-        if (!typeDef.isControllableAcl() && (addACEs != null || removeACEs != null)) {
-            throw new CmisConstraintException("acl set for type: " + typeDef.getDisplayName()
-                    + " that is not controllableACL");
-        }
-    }
-
-    public static void validateContentAllowed(DocumentTypeDefinition typeDef, boolean hasContent) {
-        ContentStreamAllowed contentAllowed = typeDef.getContentStreamAllowed();
-        if (ContentStreamAllowed.REQUIRED == contentAllowed && !hasContent) {
-            throw new CmisConstraintException("Type " + typeDef.getId()
-                    + " requires content but document has no content.");
-        } else if (ContentStreamAllowed.NOTALLOWED == contentAllowed && hasContent) {
-            throw new CmisConstraintException("Type " + typeDef.getId()
-                    + " does not allow content but document has content.");
-        }
-    }
-
-    private static List<String> getMandatoryPropDefs(Map<String, PropertyDefinition<?>> propDefs) {
-        List<String> res = new ArrayList<String>();
-        if (null != propDefs) {
-            for (PropertyDefinition<?> propDef : propDefs.values()) {
-                if (propDef.isRequired() && !isMandatorySystemProperty(propDef.getId())) {
-                    res.add(propDef.getId());
-                }
-            }
-        }
-        return res;
-    }
-
-    public static boolean typeContainsProperty(TypeDefinition typeDef, String propertyId) {
-
-        Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-        if (null == propDefs) {
-            return false;
-        }
-
-        PropertyDefinition<?> propDef = propDefs.get(propertyId);
-
-        return propDef != null;
-    }
-
-    public static boolean typeContainsPropertyWithQueryName(TypeDefinition typeDef, String propertyQueryName) {
-
-        Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-        if (null == propDefs) {
-            return false;
-        }
-
-        for (PropertyDefinition<?> propDef : propDefs.values()) {
-            if (propDef.getQueryName().equalsIgnoreCase(propertyQueryName)) {
-                return true;
-            }
-        }
-
-        return false; // unknown property query name in this type
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <T> PropertyDefinition<T> getPropertyDefinition(TypeDefinition typeDef, String propertyId) {
-
-        Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
-        if (null == propDefs) {
-            return null;
-        }
-
-        PropertyDefinition<?> propDef = propDefs.get(propertyId);
-
-        if (null == propDef) {
-            return null; // not found
-        } else {
-            return (PropertyDefinition<T>) propDef;
-        }
-    }
-
-    private static boolean isSystemProperty(BaseTypeId baseTypeId, String propertyId, boolean cmis11) {
-
-        if (propertyId.equals(PropertyIds.NAME)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.OBJECT_ID)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.OBJECT_TYPE_ID)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.BASE_TYPE_ID)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.CREATED_BY)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.CREATION_DATE)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.LAST_MODIFIED_BY)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.LAST_MODIFICATION_DATE)) {
-            return true;
-        } else if (propertyId.equals(PropertyIds.CHANGE_TOKEN)) {
-            return true;
-        } else if (cmis11 && propertyId.equals(PropertyIds.DESCRIPTION)) {
-            return true;
-        } else if (cmis11 && propertyId.equals(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
-            return true;
-        }
-
-        if (baseTypeId.equals(BaseTypeId.CMIS_DOCUMENT)) {
-            if (propertyId.equals(PropertyIds.IS_IMMUTABLE)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.IS_LATEST_VERSION)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.IS_MAJOR_VERSION)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.VERSION_SERIES_ID)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.IS_LATEST_MAJOR_VERSION)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.VERSION_LABEL)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.VERSION_SERIES_ID)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.CHECKIN_COMMENT)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.CONTENT_STREAM_LENGTH)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.CONTENT_STREAM_MIME_TYPE)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.CONTENT_STREAM_FILE_NAME)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.CONTENT_STREAM_ID)) {
-                return true;
-            }
-
-            return false;
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_FOLDER)) {
-            if (propertyId.equals(PropertyIds.PARENT_ID)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.PATH)) {
-                return true;
-            }
-
-            return false;
-        } else if (baseTypeId.equals(BaseTypeId.CMIS_POLICY)) {
-            if (propertyId.equals(PropertyIds.SOURCE_ID)) {
-                return true;
-            } else if (propertyId.equals(PropertyIds.TARGET_ID)) {
-                return true;
-            }
-            return false;
-        } else { // relationship
-            if (propertyId.equals(PropertyIds.POLICY_TEXT)) {
-                return true;
-            }
-
-            return false;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/JsonPrettyPrinter.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/JsonPrettyPrinter.java
deleted file mode 100644
index 5fe5836..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/JsonPrettyPrinter.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.server.support.filter;

-

-/**

- * A super simple JSON pretty printer

- */

-public class JsonPrettyPrinter {

-

-    private int indent = 0;

-    private String indentStr;

-    private StringBuilder sb = new StringBuilder();

-

-    public JsonPrettyPrinter() {

-        init(3);

-    }

-

-    public JsonPrettyPrinter(int indent) {

-        init(indent);

-    }

-

-    private void init(final int indent) {

-        StringBuilder indentBuilder = new StringBuilder(indent);

-        for (int i = 0; i < indent; i++) {

-            indentBuilder.append(' ');

-        }

-        indentStr = indentBuilder.toString();

-    }

-

-    public String prettyPrint(final String jsonStr) {

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

-            char c = jsonStr.charAt(i);

-            writeChar(c);

-        }

-        return sb.toString();

-    }

-

-    private void writeChar(char c) {

-        if (c == '[' || c == '{') {

-            sb.append(c);

-            sb.append('\n');

-            indent++;

-            addIndent();

-        } else if (c == ',') {

-            sb.append(c);

-            sb.append('\n');

-            addIndent();

-        } else if (c == ']' || c == '}') {

-            sb.append('\n');

-            indent--;

-            addIndent();

-            sb.append(c);

-        } else {

-            sb.append(c);

-        }

-    }

-

-    private void addIndent() {

-        for (int i = 0; i < indent; i++) {

-            sb.append(indentStr);

-        }

-    }

-

-//    public static void main(String[] args) {

-//        args = new String[2];

-//        args[0] = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";

-//        args[1] = "{\"abc\":{\"def\":{\"ghi\":{\"jkl\":[5,{\"mno\":7}]}}}}";

-//        for (String s : args) {

-//            JsonPrettyPrinter pp = new JsonPrettyPrinter();

-//            System.out.println("Pretty Printing JSON String: " + s);

-//            String result = pp.prettyPrint(s);

-//            System.out.println("Pretty Printed JSON: " + result);

-//        }

-//    }

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java
deleted file mode 100644
index 2c9fa5b..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java
+++ /dev/null
@@ -1,621 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.filter;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Scanner;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LoggingFilter implements Filter {
-
-    private static final Logger LOG = LoggerFactory.getLogger(LoggingFilter.class);
-    private static int requestNo = 0;
-    private String logDir;
-    private boolean prettyPrint = true;
-    private boolean logHeaders = true;
-    private int indent = -1;
-
-    public void init(FilterConfig cfg) throws ServletException {
-
-        String val;
-        logDir = cfg.getInitParameter("LogDir");
-        if (null == logDir || logDir.length() == 0) {
-            logDir = System.getProperty("java.io.tmpdir");
-        }
-        if (null == logDir || logDir.length() == 0) {
-            logDir = "." + File.separator;
-        }
-
-        if (!logDir.endsWith(File.separator)) {
-            logDir += File.separator;
-        }
-
-        val = cfg.getInitParameter("Indent");
-        if (null != val) {
-            indent = Integer.parseInt(val);
-        }
-        if (indent < 0) {
-            indent = 4;
-        }
-
-        val = cfg.getInitParameter("PrettyPrint");
-        if (null != val) {
-            prettyPrint = Boolean.parseBoolean(val);
-        }
-
-        val = cfg.getInitParameter("LogHeaders");
-        if (null != val) {
-            logHeaders = Boolean.parseBoolean(val);
-        }
-    }
-
-    public void destroy() {
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
-            ServletException {
-        LOG.debug("Logging filter doFilter");
-
-        if (resp instanceof HttpServletResponse && req instanceof HttpServletRequest) {
-            LoggingRequestWrapper logReq = new LoggingRequestWrapper((HttpServletRequest) req);
-            LoggingResponseWrapper logResponse = new LoggingResponseWrapper((HttpServletResponse) resp);
-
-            chain.doFilter(logReq, logResponse);
-
-            int reqNo = getNextRequestNumber();
-            String requestFileName = getRequestFileName(reqNo);
-            String cType = logReq.getContentType();
-            String xmlRequest = logReq.getPayload();
-            StringBuilder sb = new StringBuilder();
-
-            if (logHeaders) {
-                logHeaders(logReq, sb);
-            }
-
-            if (xmlRequest == null || xmlRequest.length() == 0) {
-                xmlRequest = "";
-            }
-
-            if (prettyPrint && cType != null) {
-                if (cType.startsWith("multipart")) {
-                    xmlRequest = processMultipart(cType, xmlRequest);
-                } else if (cType.contains("xml")) {
-                    xmlRequest = prettyPrintXml(xmlRequest, indent);
-                }
-            }
-
-            xmlRequest = sb.toString() + xmlRequest;
-            LOG.debug("Found request: " + requestFileName + ": " + xmlRequest);
-            writeTextToFile(requestFileName, xmlRequest);
-
-            sb = new StringBuilder();
-            cType = logResponse.getContentType();
-            String xmlResponse = logResponse.getPayload();
-            String responseFileName = getResponseFileName(reqNo);
-
-            if (logHeaders) {
-                logHeaders(logResponse, req.getProtocol(), sb);
-            }
-
-            if (xmlResponse == null || xmlResponse.length() == 0) {
-                xmlResponse = "";
-            }
-
-            if (prettyPrint && cType != null) {
-                if (cType.startsWith("multipart")) {
-                    xmlResponse = processMultipart(cType, xmlResponse);
-                } else if (cType.contains("xml")) {
-                    xmlResponse = prettyPrintXml(xmlResponse, indent);
-                } else if (cType.contains("json")) {
-                    xmlResponse = prettyPrintJson(xmlResponse, indent);
-                }
-            }
-
-            xmlResponse = sb.toString() + xmlResponse;
-            LOG.debug("Found response: " + responseFileName + ": " + xmlResponse);
-            writeTextToFile(responseFileName, xmlResponse);
-        } else {
-            chain.doFilter(req, resp);
-        }
-    }
-
-    private void writeTextToFile(String filename, String content) {
-        PrintWriter pw = null;
-        OutputStreamWriter fw = null;
-        try {
-            fw = new OutputStreamWriter(new FileOutputStream(filename), IOUtils.UTF8);
-            pw = new PrintWriter(fw);
-
-            Scanner scanner = new Scanner(content);
-            while (scanner.hasNextLine()) {
-                String line = scanner.nextLine();
-                pw.println(line);
-            }
-            scanner.close();
-
-            pw.flush();
-        } catch (IOException e) {
-            LOG.error(e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(pw);
-            IOUtils.closeQuietly(fw);
-        }
-    }
-
-    private static String prettyPrintXml(String input, int indent) {
-        try {
-            Source xmlInput = new StreamSource(new StringReader(input));
-            StringWriter stringWriter = new StringWriter();
-            StreamResult xmlOutput = new StreamResult(stringWriter);
-            TransformerFactory transformerFactory = TransformerFactory.newInstance();
-            transformerFactory.setAttribute("indent-number", indent);
-            Transformer transformer = transformerFactory.newTransformer();
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            transformer.transform(xmlInput, xmlOutput);
-            return xmlOutput.getWriter().toString();
-        } catch (Exception e) {
-            throw new RuntimeException(e); // simple exception handling, please
-                                           // review it
-        }
-    }
-
-    private static String prettyPrintJson(String input, int indent) {
-        JsonPrettyPrinter pp = new JsonPrettyPrinter(indent);
-        return pp.prettyPrint(input);
-    }
-
-    private String processMultipart(String cType, String messageBody) throws IOException {
-        int beginIndex = cType.indexOf("boundary=\"") + 10;
-        int endIndex = cType.indexOf('\"', beginIndex);
-        if (endIndex < 0) {
-            endIndex = cType.length();
-        }
-        String boundary = "--" + cType.substring(beginIndex, endIndex);
-        LOG.debug("Boundary = " + boundary);
-        BufferedReader in = new BufferedReader(new StringReader(messageBody));
-        StringBuffer out = new StringBuffer();
-        String line;
-        ByteArrayOutputStream xmlBodyBuffer = new ByteArrayOutputStream(32 * 1024);
-        boolean boundaryFound;
-
-        boolean inXmlOrJsonBody = false;
-        boolean inXmlOrJsonPart = false;
-        boolean isXml;
-        while ((line = in.readLine()) != null) {
-            if (inXmlOrJsonPart) {
-                if (line.startsWith("<?xml") || line.startsWith("{")) {
-                    inXmlOrJsonBody = true;
-                    isXml = line.startsWith("<?xml");
-                    byte[] lienBytes = IOUtils.toUTF8Bytes(line);
-                    xmlBodyBuffer.write(lienBytes, 0, lienBytes.length);
-                    while (inXmlOrJsonBody) {
-                        line = in.readLine();
-                        if (line == null) {
-                            break;
-                        }
-                        boundaryFound = line.startsWith(boundary);
-                        if (boundaryFound) {
-                            LOG.debug("Leaving XML body: " + line);
-                            inXmlOrJsonBody = false;
-                            inXmlOrJsonPart = false;
-                            if (isXml) {
-                                out.append(prettyPrintXml(xmlBodyBuffer.toString(IOUtils.UTF8), indent));
-                            } else {
-                                out.append(prettyPrintJson(xmlBodyBuffer.toString(IOUtils.UTF8), indent));
-                            }
-                            out.append(line).append('\n');
-                        } else {
-                            xmlBodyBuffer.write(lienBytes, 0, lienBytes.length);
-                        }
-                    }
-                } else {
-                    LOG.debug("in XML part is: " + line);
-                    out.append(line).append('\n');
-                }
-
-            } else {
-                LOG.debug("not in XML part: " + line);
-                out.append(line).append('\n');
-                boundaryFound = line.startsWith(boundary);
-                if (boundaryFound) {
-                    LOG.debug("Boundardy found!");
-                    inXmlOrJsonPart = true;
-                }
-            }
-        }
-        in.close();
-        LOG.debug("End parsing multipart.");
-
-        return out.toString();
-    }
-
-    @SuppressWarnings("rawtypes")
-    private void logHeaders(LoggingRequestWrapper req, StringBuilder sb) {
-        sb.append(req.getMethod());
-        sb.append(' ');
-        sb.append(req.getRequestURI());
-        String queryString = req.getQueryString();
-        if (null != queryString && queryString.length() > 0) {
-            sb.append('?');
-            sb.append(queryString);
-        }
-        sb.append(' ');
-        sb.append(req.getProtocol());
-        sb.append('\n');
-        Enumeration headerNames = req.getHeaderNames();
-        while (headerNames.hasMoreElements()) {
-            String headerName = headerNames.nextElement().toString();
-            headerName = headerName.substring(0, 1).toUpperCase() + headerName.substring(1);
-            sb.append(headerName);
-            sb.append(": ");
-            sb.append(req.getHeader(headerName));
-            sb.append('\n');
-        }
-        sb.append('\n');
-    }
-
-    private void logHeaders(LoggingResponseWrapper resp, String protocol, StringBuilder sb) {
-        sb.append(protocol);
-        sb.append(' ');
-        sb.append(String.valueOf(resp.getStatus()));
-        sb.append('\n');
-        Map<String, String> headers = resp.getHeaders();
-        for (Map.Entry<String, String> header : headers.entrySet()) {
-            sb.append(header.getKey());
-            sb.append(": ");
-            sb.append(header.getValue());
-            sb.append('\n');
-        }
-        sb.append('\n');
-    }
-
-    private String getRequestFileName(int no) {
-        return logDir + String.format("%05d-request.log", no);
-    }
-
-    private String getResponseFileName(int no) {
-        return logDir + String.format("%05d-response.log", no);
-    }
-
-    private static synchronized int getNextRequestNumber() {
-        return requestNo++;
-    }
-
-    private static class LoggingRequestWrapper extends HttpServletRequestWrapper {
-
-        private LoggingInputStream is;
-
-        public LoggingRequestWrapper(HttpServletRequest request) throws IOException {
-            super(request);
-        }
-
-        @Override
-        public ServletInputStream getInputStream() throws IOException {
-            this.is = new LoggingInputStream(super.getInputStream());
-            return is;
-        }
-
-        public String getPayload() {
-            return null == is ? "" : is.getPayload();
-        }
-    }
-
-    private static class LoggingInputStream extends ServletInputStream {
-
-        private ByteArrayOutputStream baous = new ByteArrayOutputStream();
-        private ServletInputStream is;
-
-        public LoggingInputStream(ServletInputStream is) {
-            super();
-            this.is = is;
-        }
-
-        // Since we are not sure which method is used just overwrite all 4 of
-        // them:
-        @Override
-        public int read() throws IOException {
-            int ch = is.read();
-            if (ch != -1) {
-                baous.write(ch);
-            }
-            return ch;
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            int ch = is.read(b);
-            if (ch != -1) {
-                baous.write(b, 0, ch);
-            }
-            return ch;
-        }
-
-        @Override
-        public int read(byte[] b, int o, int l) throws IOException {
-            int ch = is.read(b, o, l);
-            if (ch != -1) {
-                baous.write(b, o, ch);
-            }
-            return ch;
-        }
-
-        @Override
-        public int readLine(byte[] b, int o, int l) throws IOException {
-            int ch = is.readLine(b, o, l);
-            if (ch != -1) {
-                baous.write(b, o, ch);
-            }
-            return ch;
-        }
-
-        public String getPayload() {
-            try {
-                return baous.toString(IOUtils.UTF8);
-            } catch (UnsupportedEncodingException e) {
-                throw new CmisRuntimeException("Unsupported encoding 'UTF-8'!", e);
-            }
-        }
-    }
-
-    private static class LoggingResponseWrapper extends HttpServletResponseWrapper {
-
-        private LoggingOutputStream os;
-        private PrintWriter writer;
-        private int statusCode;
-        private Map<String, String> headers = new HashMap<String, String>();
-        private String encoding;
-
-        public LoggingResponseWrapper(HttpServletResponse response) throws IOException {
-            super(response);
-            this.os = new LoggingOutputStream(response.getOutputStream());
-        }
-
-        @Override
-        public PrintWriter getWriter() {
-            try {
-                if (null == writer) {
-                    writer = new PrintWriter(new OutputStreamWriter(this.getOutputStream(), IOUtils.UTF8));
-                }
-                return writer;
-            } catch (IOException e) {
-                LOG.error("Failed to get PrintWriter in LoggingFilter: " + e, e);
-                return null;
-            }
-        }
-
-        @Override
-        public ServletOutputStream getOutputStream() throws IOException {
-            return os;
-        }
-
-        public String getPayload() {
-            return os.getPayload();
-        }
-
-        @Override
-        public void addCookie(Cookie cookie) {
-            super.addCookie(cookie);
-            String value;
-            if (headers.containsKey("Cookie")) {
-                value = headers.get("Cookie") + "; " + cookie.toString();
-            } else {
-                value = cookie.toString();
-            }
-            headers.put("Cookie", value);
-        }
-
-        @Override
-        public void setContentType(String type) {
-            super.setContentType(type);
-            if (headers.containsKey("Content-Type")) {
-                String cType = headers.get("Content-Type");
-                int pos = cType.indexOf(";charset=");
-                if (pos < 0 && encoding != null) {
-                    type = cType + ";charset=" + encoding;
-                } else if (pos >= 0) {
-                    encoding = null;
-                }
-            }
-            headers.put("Content-Type", type);
-        }
-
-        @Override
-        public void setCharacterEncoding(java.lang.String charset) {
-            super.setCharacterEncoding(charset);
-            encoding = charset;
-            if (headers.containsKey("Content-Type")) {
-                String cType = headers.get("Content-Type");
-                int pos = cType.indexOf(";charset=");
-                if (pos >= 0) {
-                    cType = cType.substring(0, pos) + ";charset=" + encoding;
-                } else {
-                    cType = cType + ";charset=" + encoding;
-                }
-                headers.put("Content-Type", cType);
-            }
-        }
-
-        @Override
-        public void setContentLength(int len) {
-            super.setContentLength(len);
-            headers.put("Content-Length", String.valueOf(len));
-        }
-
-        private String getDateString(long date) {
-            return DateTimeHelper.formatXmlDateTime(date);
-        }
-
-        @Override
-        public void setDateHeader(String name, long date) {
-            super.setDateHeader(name, date);
-            headers.put(name, getDateString(date));
-        }
-
-        @Override
-        public void addDateHeader(String name, long date) {
-            super.addDateHeader(name, date);
-            if (headers.containsKey(name)) {
-                headers.put(name, headers.get(name) + "; " + getDateString(date));
-            } else {
-                headers.put(name, getDateString(date));
-            }
-        }
-
-        @Override
-        public void setHeader(String name, String value) {
-            super.setHeader(name, value);
-            headers.put(name, value);
-        }
-
-        @Override
-        public void addHeader(String name, String value) {
-            super.addHeader(name, value);
-            if (headers.containsKey(name)) {
-                headers.put(name, headers.get(name) + "; " + value);
-            } else {
-                headers.put(name, value);
-            }
-        }
-
-        @Override
-        public void setIntHeader(String name, int value) {
-            super.setIntHeader(name, value);
-            headers.put(name, String.valueOf(value));
-        }
-
-        @Override
-        public void addIntHeader(String name, int value) {
-            super.addIntHeader(name, value);
-            if (headers.containsKey(name)) {
-                headers.put(name, headers.get(name) + "; " + value);
-            } else {
-                headers.put(name, String.valueOf(value));
-            }
-        }
-
-        @Override
-        public void sendError(int sc) throws IOException {
-            statusCode = sc;
-            super.sendError(sc);
-        }
-
-        @Override
-        public void sendError(int sc, String msg) throws IOException {
-            statusCode = sc;
-            super.sendError(sc, msg);
-        }
-
-        @Override
-        public void sendRedirect(String location) throws IOException {
-            statusCode = 302;
-            super.sendRedirect(location);
-        }
-
-        @Override
-        public void setStatus(int sc) {
-            statusCode = sc;
-            super.setStatus(sc);
-        }
-
-        public int getStatus() {
-            return statusCode;
-        }
-
-        public Map<String, String> getHeaders() {
-            return headers;
-        }
-    }
-
-    private static class LoggingOutputStream extends ServletOutputStream {
-        private ByteArrayOutputStream baous = new ByteArrayOutputStream();
-        private ServletOutputStream os;
-
-        public LoggingOutputStream(ServletOutputStream os) {
-            super();
-            this.os = os;
-        }
-
-        public String getPayload() {
-            return IOUtils.toUTF8String(baous.toByteArray());
-        }
-
-        @Override
-        public void write(byte[] b, int off, int len) {
-            try {
-                baous.write(b, off, len);
-                os.write(b, off, len);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public void write(byte[] b) {
-            try {
-                baous.write(b);
-                os.write(b);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public void write(int ch) throws IOException {
-            baous.write(ch);
-            os.write(ch);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java
deleted file mode 100644
index 1cf4213..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-
-/**
- * Basic implementation walking a predicate in lexical order.
- * <p>
- * The {@code walkXYZ} methods can be overridden to change the walking order.
- */
-public abstract class AbstractPredicateWalker implements PredicateWalker {
-
-    public Boolean walkPredicate(Tree node) {
-        switch (node.getType()) {
-        case CmisQlStrictLexer.NOT:
-            return walkNot(node, node.getChild(0));
-        case CmisQlStrictLexer.AND:
-            return walkAnd(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.OR:
-            return walkOr(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.EQ:
-            return walkEquals(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.NEQ:
-            return walkNotEquals(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.GT:
-            return walkGreaterThan(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.GTEQ:
-            return walkGreaterOrEquals(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.LT:
-            return walkLessThan(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.LTEQ:
-            return walkLessOrEquals(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.IN:
-            return walkIn(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.NOT_IN:
-            return walkNotIn(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.IN_ANY:
-            return walkInAny(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.NOT_IN_ANY:
-            return walkNotInAny(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.EQ_ANY:
-            return walkEqAny(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.IS_NULL:
-            return walkIsNull(node, node.getChild(0));
-        case CmisQlStrictLexer.IS_NOT_NULL:
-            return walkIsNotNull(node, node.getChild(0));
-        case CmisQlStrictLexer.LIKE:
-            return walkLike(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.NOT_LIKE:
-            return walkNotLike(node, node.getChild(0), node.getChild(1));
-        case CmisQlStrictLexer.CONTAINS:
-            if (node.getChildCount() == 1) {
-                return walkContains(node, null, node.getChild(0));
-            } else {
-                return walkContains(node, node.getChild(0), node.getChild(1));
-            }
-        case CmisQlStrictLexer.IN_FOLDER:
-            if (node.getChildCount() == 1) {
-                return walkInFolder(node, null, node.getChild(0));
-            } else {
-                return walkInFolder(node, node.getChild(0), node.getChild(1));
-            }
-        case CmisQlStrictLexer.IN_TREE:
-            if (node.getChildCount() == 1) {
-                return walkInTree(node, null, node.getChild(0));
-            } else {
-                return walkInTree(node, node.getChild(0), node.getChild(1));
-            }
-        case CmisQlStrictLexer.BOOL_LIT:
-            walkBoolean(node);
-            return false;
-        case CmisQlStrictLexer.NUM_LIT:
-            walkNumber(node);
-            return false;
-        case CmisQlStrictLexer.STRING_LIT:
-            walkString(node);
-            return false;
-        case CmisQlStrictLexer.TIME_LIT:
-            walkTimestamp(node);
-            return false;
-        case CmisQlStrictLexer.IN_LIST:
-            walkList(node);
-            return false;
-        case CmisQlStrictLexer.COL:
-            walkCol(node);
-            return false;
-        case CmisQlStrictLexer.ID:
-            walkId(node);
-            return false;
-        case CmisQlStrictLexer.SCORE:
-            return walkScore(node);
-        default:
-            return walkOtherPredicate(node);
-        }
-    }
-
-
-    /** For extensibility. */
-    protected Boolean walkOtherPredicate(Tree node) {
-        throw new CmisRuntimeException("Unknown node type: " + node.getType() + " (" + node.getText() + ")");
-    }
-
-    public Boolean walkNot(Tree opNode, Tree node) {
-        walkPredicate(node);
-        return false;
-    }
-
-    public Boolean walkAnd(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkPredicate(leftNode);
-        walkPredicate(rightNode);
-        return false;
-    }
-
-    public Boolean walkOr(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkPredicate(leftNode);
-        walkPredicate(rightNode);
-        return false;
-    }
-
-    public Object walkExpr(Tree node) {
-        switch (node.getType()) {
-        case CmisQlStrictLexer.BOOL_LIT:
-            return walkBoolean(node);
-        case CmisQlStrictLexer.NUM_LIT:
-            return walkNumber(node);
-        case CmisQlStrictLexer.STRING_LIT:
-            return walkString(node);
-        case CmisQlStrictLexer.TIME_LIT:
-            return walkTimestamp(node);
-        case CmisQlStrictLexer.IN_LIST:
-            return walkList(node);
-        case CmisQlStrictLexer.COL:
-            return walkCol(node);
-        case CmisQlStrictLexer.ID:
-            return walkId(node);
-        default:
-            return walkOtherExpr(node);
-        }
-    }
-
-    public Boolean walkSearchExpr(Tree node) {
-        switch (node.getType()) {
-        case TextSearchLexer.TEXT_AND:
-            return walkTextAnd(node);
-        case TextSearchLexer.TEXT_OR:
-            return walkTextOr(node);
-        case TextSearchLexer.TEXT_MINUS:
-            return walkTextMinus(node);
-        case TextSearchLexer.TEXT_SEARCH_WORD_LIT:
-            return walkTextWord(node);
-        case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
-            return walkTextPhrase(node);
-        default:
-            walkOtherExpr(node);
-            return null;
-        }
-    }
-
-    /** For extensibility. */
-    protected Object walkOtherExpr(Tree node) {
-        throw new CmisRuntimeException("Unknown node type: " + node.getType() + " (" + node.getText() + ")");
-    }
-
-    public Boolean walkEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkNotEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkGreaterThan(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkGreaterOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkLessThan(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkLessOrEquals(Tree opNode, Tree leftNode, Tree rightNode) {
-        walkExpr(leftNode);
-        walkExpr(rightNode);
-        return false;
-    }
-
-    public Boolean walkIn(Tree opNode, Tree colNode, Tree listNode) {
-        walkExpr(colNode);
-        walkExpr(listNode);
-        return false;
-    }
-
-    public Boolean walkNotIn(Tree opNode, Tree colNode, Tree listNode) {
-        walkExpr(colNode);
-        walkExpr(listNode);
-        return false;
-    }
-
-    public Boolean walkInAny(Tree opNode, Tree colNode, Tree listNode) {
-        walkExpr(colNode);
-        walkExpr(listNode);
-        return false;
-    }
-
-    public Boolean walkNotInAny(Tree opNode, Tree colNode, Tree listNode) {
-        walkExpr(colNode);
-        walkExpr(listNode);
-        return false;
-    }
-
-    public Boolean walkEqAny(Tree opNode, Tree literalNode, Tree colNode) {
-        walkExpr(literalNode);
-        walkExpr(colNode);
-        return false;
-    }
-
-    public Boolean walkIsNull(Tree opNode, Tree colNode) {
-        walkExpr(colNode);
-        return false;
-    }
-
-    public Boolean walkIsNotNull(Tree opNode, Tree colNode) {
-        walkExpr(colNode);
-        return false;
-    }
-
-    public Boolean walkLike(Tree opNode, Tree colNode, Tree stringNode) {
-        walkExpr(colNode);
-        walkExpr(stringNode);
-        return false;
-    }
-
-    public Boolean walkNotLike(Tree opNode, Tree colNode, Tree stringNode) {
-        walkExpr(colNode);
-        walkExpr(stringNode);
-        return false;
-    }
-
-    public Boolean walkContains(Tree opNode, Tree qualNode, Tree queryNode) {
-        if (qualNode != null) {
-            return walkSearchExpr(qualNode);
-        }
-        return walkSearchExpr(queryNode);
-    }
-
-    public Boolean walkInFolder(Tree opNode, Tree qualNode, Tree paramNode) {
-        if (qualNode != null) {
-            walkExpr(qualNode);
-        }
-        walkExpr(paramNode);
-        return false;
-    }
-
-    public Boolean walkInTree(Tree opNode, Tree qualNode, Tree paramNode) {
-        if (qualNode != null) {
-            walkExpr(qualNode);
-        }
-        walkExpr(paramNode);
-        return false;
-    }
-
-    public Object walkList(Tree node) {
-        int n = node.getChildCount();
-        List<Object> res = new ArrayList<Object>(n);
-        for (int i = 0; i < n; i++) {
-            res.add(walkExpr(node.getChild(i)));
-        }
-        return res;
-    }
-
-    public Object walkBoolean(Tree node) {
-        String s = node.getText();
-        return Boolean.valueOf(s);
-    }
-
-    public Object walkNumber(Tree node) {
-        String s = node.getText();
-        if (s.contains(".") || s.contains("e") || s.contains("E")) {
-            return Double.valueOf(s);
-        } else {
-            return Long.valueOf(s);
-        }
-    }
-
-    public Object walkString(Tree node) {
-        String s = node.getText();
-        s = s.substring(1, s.length() - 1);
-        s = s.replace("''", "'"); // unescape quotes
-        return s;
-    }
-
-    public Object walkTimestamp(Tree node) {
-        String s = node.getText();
-        s = s.substring(s.indexOf('\'') + 1, s.length() - 1);
-        return CalendarHelper.fromString(s);
-    }
-
-    public Object walkCol(Tree node) {
-        return null;
-    }
-
-    public Object walkId(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkTextAnd(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkTextOr(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkTextMinus(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkTextWord(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkTextPhrase(Tree node) {
-        return null;
-    }
-    
-    protected Boolean walkScore(Tree node) {
-       return false;        
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CalendarHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CalendarHelper.java
deleted file mode 100644
index 4baaa4f..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CalendarHelper.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Helper dealing with conversion of {@link Calendar} to and from the string
- * format specified by CMISQL.
- */
-public final class CalendarHelper {
-
-    private static final Pattern CMISQL_PATTERN = Pattern.compile( //
-            "(\\d{4})-(\\d{2})-(\\d{2})[Tt]" + "(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?"
-                    + "(?:[Zz]|([+-]\\d{2}:\\d{2}))?");
-
-    private CalendarHelper() {
-        // utility class
-    }
-
-    /**
-     * Converts a CMISQL date string representation to a
-     * {@link GregorianCalendar}.
-     * <p>
-     * Parses {@code YYYY-HH-MMThh:mm:ss.sss+hh:mm}, or a {@code Z} for the
-     * timezone, and with {@code .sss} being optional.
-     *
-     * @param datetime
-     *            the string representation in CMISQL format
-     * @return the created instance
-     */
-    public static GregorianCalendar fromString(String datetime) {
-        Matcher m = CMISQL_PATTERN.matcher(datetime);
-        if (!m.matches()) {
-            throw new IllegalArgumentException("Invalid datetime format: " + datetime);
-        }
-        String tz = m.group(8);
-        GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"
-                + (tz == null ? "" : tz)));
-        cal.set(Calendar.YEAR, Integer.parseInt(m.group(1)));
-        cal.set(Calendar.MONTH, Integer.parseInt(m.group(2)) - 1);
-        cal.set(Calendar.DATE, Integer.parseInt(m.group(3)));
-        cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(m.group(4)));
-        cal.set(Calendar.MINUTE, Integer.parseInt(m.group(5)));
-        cal.set(Calendar.SECOND, Integer.parseInt(m.group(6)));
-        String decimals = m.group(7);
-        int ms = decimals == null ? 0 : Integer.parseInt((decimals + "00").substring(0, 3));
-        cal.set(Calendar.MILLISECOND, ms);
-        return cal;
-    }
-
-    /**
-     * Converts a Calendar to its CMISQL string representation.
-     *
-     * @param cal
-     *            a {@link Calendar}
-     * @return the CMISQL string representation
-     */
-    public static String toString(Calendar cal) {
-        StringBuilder buf = new StringBuilder(28);
-        toString(cal, buf);
-        return buf.toString();
-    }
-
-    /**
-     * Converts a Calendar to its CMISQL string representation.
-     *
-     * @param cal
-     *            a {@link Calendar}
-     * @param buf
-     *            a buffer in which to add the CMISQL string representation
-     */
-    public static void toString(Calendar cal, StringBuilder buf) {
-        buf.append(cal.get(Calendar.YEAR));
-        buf.append('-');
-        int f = cal.get(Calendar.MONTH);
-        if (f < 9) {
-            buf.append('0');
-        }
-        buf.append(f + 1);
-        buf.append('-');
-        f = cal.get(Calendar.DATE);
-        if (f < 10) {
-            buf.append('0');
-        }
-        buf.append(f);
-        buf.append('T');
-        f = cal.get(Calendar.HOUR_OF_DAY);
-        if (f < 10) {
-            buf.append('0');
-        }
-        buf.append(f);
-        buf.append(':');
-        f = cal.get(Calendar.MINUTE);
-        if (f < 10) {
-            buf.append('0');
-        }
-        buf.append(f);
-        buf.append(':');
-        f = cal.get(Calendar.SECOND);
-        if (f < 10) {
-            buf.append('0');
-        }
-        buf.append(f);
-        buf.append('.');
-        f = cal.get(Calendar.MILLISECOND);
-        if (f < 100) {
-            buf.append('0');
-        }
-        if (f < 10) {
-            buf.append('0');
-        }
-        buf.append(f);
-        int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis()) / 60000;
-        if (offset == 0) {
-            buf.append('Z');
-        } else {
-            char sign;
-            if (offset < 0) {
-                offset = -offset;
-                sign = '-';
-            } else {
-                sign = '+';
-            }
-            buf.append(sign);
-            f = offset / 60;
-            if (f < 10) {
-                buf.append('0');
-            }
-            buf.append(f);
-            buf.append(':');
-            f = offset % 60;
-            if (f < 10) {
-                buf.append('0');
-            }
-            buf.append(f);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java
deleted file mode 100644
index f2a54f8..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.server.support.query;

-

-

-public class CmisQueryException extends RuntimeException {

-

-    private static final long serialVersionUID = 1L;

-

-    public CmisQueryException() {

-        super();

-    }

-

-    public CmisQueryException(String message) {

-        super(message);

-    }

-

-    public CmisQueryException(String message, Throwable cause) {

-        super(message, cause);

-    }

-

-    public CmisQueryException(Throwable cause) {

-        super(cause);

-    }

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisSelector.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisSelector.java
deleted file mode 100644
index 978f2d9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisSelector.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-public abstract class CmisSelector {
-
-    /** Alias name for a column (only in SELECT part set). */
-    public String aliasName;
-
-    /** Arbitrary info for this selector (used by servers during parsing). */
-    public Object info;
-
-    public void setAliasName(String alias) {
-        aliasName = alias;
-    }
-
-    public String getAliasName() {
-        return aliasName;
-    }
-
-    public void setInfo(Object info) {
-        this.info = info;
-    }
-
-    public Object getInfo() {
-        return info;
-    }
-
-    public abstract String getName();
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/ColumnReference.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/ColumnReference.java
deleted file mode 100644
index d4e71e0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/ColumnReference.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-
-public class ColumnReference extends CmisSelector {
-
-    private final String qualifier;      // type qualifier coming from query statement
-    private final String propQueryName;  // property query name coming from query statement
-
-    // The following fields are set when the types are resolved:
-    private String propertyId;
-    private TypeDefinition typeDef;
-
-    public ColumnReference(String qualifier, String propQueryName) {
-        this.qualifier = qualifier;
-        this.propQueryName = propQueryName;
-    }
-
-    public ColumnReference(String propQueryName) {
-        this.qualifier = null;
-        this.propQueryName = propQueryName;
-    }
-
-    public String getQualifier() {
-        return qualifier;
-    }
-
-    public String getPropertyQueryName() {
-        return propQueryName;
-    }
-
-    @Override
-    public String getName() {
-        return propQueryName;
-    }
-
-    public void setTypeDefinition(String propertyId, TypeDefinition typeDef) {
-        this.typeDef = typeDef;
-        this.propertyId = propertyId;
-    }
-
-    public TypeDefinition getTypeDefinition() {
-        return typeDef;
-    }
-
-    public PropertyDefinition<?> getPropertyDefinition() {
-        return typeDef.getPropertyDefinitions().get(getPropertyId());
-    }
-
-    public String getPropertyId() {
-        return propertyId;
-    }
-
-    @Override
-    public String toString() {
-        return "ColumnReference("
-                + (qualifier == null ? "" : qualifier + ".")
-                + propQueryName + (aliasName == null ? "" : " AS " + aliasName)
-                + ")";
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/FunctionReference.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/FunctionReference.java
deleted file mode 100644
index 467c569..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/FunctionReference.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-public class FunctionReference extends CmisSelector {
-
-    public enum CmisQlFunction {
-        SCORE
-    }
-
-    private final CmisQlFunction function;
-
-    public FunctionReference(CmisQlFunction func) {
-        this.function = func;
-    }
-
-    public CmisQlFunction getFunction() {
-        return function;
-    }
-
-    @Override
-    public String toString() {
-        return "FunctionReference(" + function.toString() + ")";
-    }
-
-    @Override
-    public String getName() {
-        return function.toString();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalker.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalker.java
deleted file mode 100644
index 64623ec..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalker.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contributors:
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.antlr.runtime.tree.Tree;
-
-/**
- * Interface for a tree walker of a WHERE clause.
- * <p>
- * Can be used to build another datastructure, or for direct value evaluation
- * (thus the boolean return values for clauses, and Object for values).
- * <p>
- * The method {@link #walkExpr} is the entry point.
- */
-public interface PredicateWalker extends PredicateWalkerBase {
-
-    Boolean walkNot(Tree opNode, Tree leftNode);
-
-    Boolean walkAnd(Tree opNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkOr(Tree opNode, Tree leftNode, Tree rightNode);
-
-    Object walkExpr(Tree node);
-
-    Boolean walkEquals(Tree eqNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkNotEquals(Tree neNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkLessThan(Tree ltNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);
-
-    Boolean walkIn(Tree node, Tree colNode, Tree listNode);
-
-    Boolean walkNotIn(Tree node, Tree colNode, Tree listNode);
-
-    Boolean walkInAny(Tree node, Tree colNode, Tree listNode);
-
-    Boolean walkNotInAny(Tree node, Tree colNode, Tree listNode);
-
-    Boolean walkEqAny(Tree node, Tree literalNode, Tree colNode);
-
-    Boolean walkIsNull(Tree nullNode, Tree colNode);
-
-    Boolean walkIsNotNull(Tree notNullNode, Tree colNode);
-
-    Boolean walkLike(Tree node, Tree colNode, Tree stringNode);
-
-    Boolean walkNotLike(Tree node, Tree colNode, Tree stringNode);
-
-    Boolean walkContains(Tree node, Tree qualNode, Tree paramNode);
-
-    Boolean walkInFolder(Tree node, Tree qualNode, Tree paramNode);
-
-    Boolean walkInTree(Tree node, Tree qualNode, Tree paramNode);
-
-    Object walkList(Tree node);
-
-    Object walkBoolean(Tree node);
-
-    Object walkNumber(Tree node);
-
-    Object walkString(Tree node);
-
-    Object walkTimestamp(Tree node);
-
-    Object walkCol(Tree node);
-
-    Object walkId(Tree node);
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalkerBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalkerBase.java
deleted file mode 100644
index e3ab4ac..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/PredicateWalkerBase.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.server.support.query;

-

-import org.antlr.runtime.tree.Tree;

-

-/**

- * Base interface for a tree walker of a WHERE clause.

- * <p>

- * COntains only a single method used by the ANTLR query walker to

- * initiate a tree walk for evaluating the query. You can inherit from

- * this interface if you want to have your own walking mechanism

- * <p>

- */

-public interface PredicateWalkerBase {

-

-    Boolean walkPredicate(Tree whereNode);

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java
deleted file mode 100644
index 5bb6069..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.TypeValidator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * QueryObject is a class used to encapsulate a CMIS query. It is created from
- * an ANTLR parser on an incoming query string. During parsing various
- * informations are collected and stored in objects suitable for evaluating the
- * query (like selected properties, effected types and order statements. A query
- * evaluator can use this information to perform the query and build the result.
- */
-public class QueryObject {
-
-    private static final Logger LOG = LoggerFactory.getLogger(QueryObject.class);
-
-    // For error handling see:
-    // http://www.antlr.org/pipermail/antlr-interest/2008-April/027600.html
-    // select part
-    protected TypeManager typeMgr;
-    protected final List<CmisSelector> selectReferences = new ArrayList<CmisSelector>();
-    protected final List<CmisSelector> whereReferences = new ArrayList<CmisSelector>();
-    protected final List<CmisSelector> joinReferences = new ArrayList<CmisSelector>();
-    // --> Join not implemented yet
-    protected final Map<String, CmisSelector> colOrFuncAlias = new HashMap<String, CmisSelector>();
-
-    // from part
-    /** map from alias name to type query name */
-    protected final Map<String, String> froms = new LinkedHashMap<String, String>();
-
-    /** main from alias name */
-    protected String from = null;
-
-    protected final List<JoinSpec> joinSpecs = new ArrayList<JoinSpec>();
-
-    // where part
-    protected final Map<Integer, CmisSelector> columnReferences = new HashMap<Integer, CmisSelector>();
-    protected final Map<Integer, String> typeReferences = new HashMap<Integer, String>();
-
-    // order by part
-    protected final List<SortSpec> sortSpecs = new ArrayList<SortSpec>();
-
-    @SuppressWarnings("serial")
-    protected List<String> predefinedQueryNames = new ArrayList<String>() {
-        {
-            add("SEARCH_SCORE");
-        }
-    };
-
-    private String errorMessage;
-
-    public static class JoinSpec {
-
-        /** INNER / LEFT / RIGHT */
-        public final String kind;
-
-        /** Alias or full table type */
-        public final String alias;
-
-        public ColumnReference onLeft;
-
-        public ColumnReference onRight;
-
-        public JoinSpec(String kind, String alias) {
-            this.kind = kind;
-            this.alias = alias;
-        }
-
-        public void setSelectors(ColumnReference onLeft, ColumnReference onRight) {
-            this.onLeft = onLeft;
-            this.onRight = onRight;
-        }
-
-        @Override
-        public String toString() {
-            return "JoinReference(" + kind + "," + alias + "," + onLeft + "," + onRight + ")";
-        }
-    }
-
-    public class SortSpec {
-        public final boolean ascending;
-        public final Integer colRefKey; // key in columnReferencesMap point to
-                                        // column
-
-        // descriptions
-
-        public SortSpec(Integer key, boolean ascending) {
-            this.colRefKey = key;
-            this.ascending = ascending;
-        }
-
-        public CmisSelector getSelector() {
-            return columnReferences.get(colRefKey);
-        }
-
-        public boolean isAscending() {
-            return ascending;
-        }
-    }
-
-    public QueryObject() {
-    }
-
-    public QueryObject(TypeManager tm) {
-        typeMgr = tm;
-    }
-
-    public Map<Integer, CmisSelector> getColumnReferences() {
-        return Collections.unmodifiableMap(columnReferences);
-    }
-
-    public CmisSelector getColumnReference(Integer token) {
-        return columnReferences.get(token);
-    }
-
-    public String getTypeReference(Integer token) {
-        return typeReferences.get(token);
-    }
-
-    public String getErrorMessage() {
-        return errorMessage;
-    }
-
-    // ///////////////////////////////////////////////////////
-    // SELECT part
-
-    // public accessor methods
-    public List<CmisSelector> getSelectReferences() {
-        return selectReferences;
-    }
-
-    public void addSelectReference(Tree node, CmisSelector selRef) {
-        selectReferences.add(selRef);
-        columnReferences.put(node.getTokenStartIndex(), selRef);
-    }
-
-    public void addAlias(String aliasName, CmisSelector aliasRef) {
-        LOG.debug("add alias: " + aliasName + " for: " + aliasRef);
-        if (colOrFuncAlias.containsKey(aliasName)) {
-            throw new CmisQueryException("You cannot use name " + aliasName + " more than once as alias in a select.");
-        } else {
-            aliasRef.setAliasName(aliasName);
-            colOrFuncAlias.put(aliasName, aliasRef);
-        }
-    }
-
-    public CmisSelector getSelectAlias(String aliasName) {
-        return colOrFuncAlias.get(aliasName);
-    }
-
-    // ///////////////////////////////////////////////////////
-    // FROM part
-
-    public String addType(String aliasName, String typeQueryName) {
-        try {
-            LOG.debug("add alias: " + aliasName + " for: " + typeQueryName);
-            if (froms.containsKey(aliasName)) {
-                throw new CmisQueryException("You cannot use name " + aliasName
-                        + " more than once as alias in a from part.");
-            }
-            if (aliasName == null) {
-                aliasName = typeQueryName;
-            }
-            froms.put(aliasName, typeQueryName);
-            if (from == null) {
-                from = aliasName;
-            }
-            return aliasName;
-        } catch (CmisQueryException cqe) {
-            errorMessage = cqe.getMessage(); // preserve message
-            return null; // indicate an error to ANTLR so that it generates
-                         // FailedPredicateException
-        }
-    }
-
-    public String getMainTypeAlias() {
-        return from;
-    }
-
-    public Map<String, String> getTypes() {
-        return Collections.unmodifiableMap(froms);
-    }
-
-    public String getTypeQueryName(String qualifier) {
-        return froms.get(qualifier);
-    }
-
-    public TypeDefinition getTypeDefinitionFromQueryName(String queryName) {
-        return typeMgr.getTypeByQueryName(queryName);
-    }
-
-    public TypeDefinition getParentType(TypeDefinition td) {
-        String parentType = td.getParentTypeId();
-        return parentType == null ? null : typeMgr.getTypeById(parentType).getTypeDefinition();
-    }
-
-    public TypeDefinition getParentType(String typeId) {
-        TypeDefinition td = typeMgr.getTypeById(typeId).getTypeDefinition();
-        String parentType = td == null ? null : td.getParentTypeId();
-        return parentType == null ? null : typeMgr.getTypeById(parentType).getTypeDefinition();
-    }
-
-    public TypeDefinition getMainFromName() {
-        // as we don't support JOINS take first type
-        String queryName = froms.values().iterator().next();
-        TypeDefinition td = getTypeDefinitionFromQueryName(queryName);
-        return td;
-    }
-
-    /**
-     * return a map of all columns that have been requested in the SELECT part
-     * of the statement.
-     * 
-     * @return a map with a String as a key and value. key is the alias if an
-     *         alias was given or the query name otherwise. value is the query
-     *         name of the property.
-     */
-    public Map<String, String> getRequestedPropertiesByAlias() {
-        return getRequestedProperties(true);
-    }
-
-    private Map<String, String> getRequestedProperties(boolean byAlias) {
-
-        Map<String, String> res = new HashMap<String, String>();
-        for (CmisSelector sel : selectReferences) {
-            if (sel instanceof ColumnReference) {
-                ColumnReference colRef = (ColumnReference) sel;
-                String key = colRef.getPropertyId();
-                if (null == key) {
-                    key = colRef.getPropertyQueryName(); // happens for *
-                }
-                String propDescr = colRef.getAliasName() == null ? colRef.getPropertyQueryName() : colRef
-                        .getAliasName();
-                if (byAlias) {
-                    res.put(propDescr, key);
-                } else {
-                    res.put(key, propDescr);
-                }
-            }
-        }
-        return res;
-    }
-
-    /**
-     * return a map of all functions that have been requested in the SELECT part
-     * of the statement.
-     * 
-     * @return a map with a String as a key and value. key is the alias if an
-     *         alias was given or the function name otherwise, value is the a
-     *         name of the property.
-     */
-    public Map<String, String> getRequestedFuncsByAlias() {
-        return getRequestedFuncs(true);
-    }
-
-    private Map<String, String> getRequestedFuncs(boolean byAlias) {
-
-        Map<String, String> res = new HashMap<String, String>();
-        for (CmisSelector sel : selectReferences) {
-            if (sel instanceof FunctionReference) {
-                FunctionReference funcRef = (FunctionReference) sel;
-                String propDescr = funcRef.getAliasName() == null ? funcRef.getName() : funcRef.getAliasName();
-                if (byAlias) {
-                    res.put(propDescr, funcRef.getName());
-                } else {
-                    res.put(funcRef.getName(), propDescr);
-                }
-            }
-        }
-        return res;
-    }
-
-    // ///////////////////////////////////////////////////////
-    // JOINS
-
-    public void addJoinReference(Tree node, CmisSelector reference) {
-        columnReferences.put(node.getTokenStartIndex(), reference);
-        joinReferences.add(reference);
-    }
-
-    public List<CmisSelector> getJoinReferences() {
-        return Collections.unmodifiableList(joinReferences);
-    }
-
-    public void addJoin(String kind, String alias, boolean hasSpec) {
-        JoinSpec join = new JoinSpec(kind, alias);
-        if (hasSpec) {
-            // get columns from last added references
-            int n = joinReferences.size();
-            ColumnReference onLeft = (ColumnReference) joinReferences.get(n - 2);
-            ColumnReference onRight = (ColumnReference) joinReferences.get(n - 1);
-            join.setSelectors(onLeft, onRight);
-        }
-        joinSpecs.add(join);
-    }
-
-    public List<JoinSpec> getJoins() {
-        return joinSpecs;
-    }
-
-    // ///////////////////////////////////////////////////////
-    // WHERE part
-
-    public void addWhereReference(Tree node, CmisSelector reference) {
-        LOG.debug("add node to where: " + System.identityHashCode(node));
-        columnReferences.put(node.getTokenStartIndex(), reference);
-        whereReferences.add(reference);
-    }
-
-    public List<CmisSelector> getWhereReferences() {
-        return Collections.unmodifiableList(whereReferences);
-    }
-
-    public void addWhereTypeReference(Tree node, String qualifier) {
-        if (node != null) {
-            typeReferences.put(node.getTokenStartIndex(), qualifier);
-        }
-    }
-
-    // ///////////////////////////////////////////////////////
-    // ORDER_BY part
-
-    public List<SortSpec> getOrderBys() {
-        return Collections.unmodifiableList(sortSpecs);
-    }
-
-    public void addSortCriterium(Tree node, ColumnReference colRef, boolean ascending) {
-        LOG.debug("addSortCriterium: " + colRef + " ascending: " + ascending);
-        columnReferences.put(node.getTokenStartIndex(), colRef);
-        sortSpecs.add(new SortSpec(node.getTokenStartIndex(), ascending));
-    }
-
-    /**
-     * Tests if the query has a JOIN from one primary type to only secondary
-     * types (This JOIN does not require a JOIN capability in CMIS).
-     * 
-     * @return list of secondary type ids that are joined or null if the query
-     *         has no JOINs or has joins to primary types
-     */
-    public List<TypeDefinition> getJoinedSecondaryTypes() {
-        List<TypeDefinition> secondaryTypeIds = new ArrayList<TypeDefinition>();
-        Map<String, String> froms = getTypes();
-        if (froms.size() == 1) {
-            return null; // no JOIN in query
-        }
-        String mainTypeQueryName = froms.get(getMainTypeAlias());
-        for (String queryName : froms.values()) {
-            TypeDefinition td = getTypeDefinitionFromQueryName(queryName);
-            if (queryName.equals(mainTypeQueryName)) {
-                continue;
-            }
-            if (td.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY) {
-                secondaryTypeIds.add(td);
-            } else {
-                return null;
-            }
-        }
-        for (JoinSpec join : getJoins()) {
-            if (!(null != join.onLeft && null != join.onRight && ((join.onRight.getPropertyId() == null
-                    && join.onRight.getTypeDefinition().getBaseTypeId() == BaseTypeId.CMIS_SECONDARY && join.onLeft
-                    .getPropertyId().equals(PropertyIds.OBJECT_ID)) || (join.onLeft.getPropertyId() == null
-                    && join.onLeft.getTypeDefinition().getBaseTypeId() == BaseTypeId.CMIS_SECONDARY && join.onRight
-                    .getPropertyId().equals(PropertyIds.OBJECT_ID))))) {
-                return null;
-            }
-        }
-        return secondaryTypeIds;
-    }
-
-    // ///////////////////////////////////////////////////////
-    // resolve types after first pass traversing the AST is complete
-
-    public boolean resolveTypes() {
-        try {
-            LOG.debug("First pass of query traversal is complete, resolving types");
-            if (null == typeMgr) {
-                return true;
-            }
-
-            // First resolve all alias names defined in SELECT:
-            for (CmisSelector alias : colOrFuncAlias.values()) {
-                if (alias instanceof ColumnReference) {
-                    ColumnReference colRef = ((ColumnReference) alias);
-                    resolveTypeForAlias(colRef);
-                }
-            }
-
-            // Then replace all aliases used somewhere by their resolved column
-            // reference:
-            for (Integer obj : columnReferences.keySet()) {
-                CmisSelector selector = columnReferences.get(obj);
-                String key = selector.getName();
-                if (colOrFuncAlias.containsKey(key)) { // it is an alias
-                    CmisSelector resolvedReference = colOrFuncAlias.get(key);
-                    columnReferences.put(obj, resolvedReference);
-                    // Note: ^ This may replace the value in the map with the
-                    // same
-                    // value, but this does not harm.
-                    // Otherwise we need to check if it is resolved or not which
-                    // causes two more ifs:
-                    // if (selector instanceof ColumnReference) {
-                    // ColumnReference colRef = ((ColumnReference) selector);
-                    // if (colRef.getTypeDefinition() == null) // it is not yet
-                    // resolved
-                    // // replace unresolved column reference by resolved on
-                    // from
-                    // alias map
-                    // columnReferences.put(obj,
-                    // colOrFuncAlias.get(selector.getAliasName()));
-                    // } else
-                    // columnReferences.put(obj,
-                    // colOrFuncAlias.get(selector.getAliasName()));
-                    if (whereReferences.remove(selector)) {
-                        // replace unresolved by resolved reference
-                        whereReferences.add(resolvedReference);
-                    }
-                    if (joinReferences.remove(selector)) {
-                        // replace unresolved by resolved reference
-                        joinReferences.add(resolvedReference);
-                    }
-                }
-            }
-
-            // The replace all remaining column references not using an alias
-            for (CmisSelector select : columnReferences.values()) {
-                // ignore functions here
-                if (select instanceof ColumnReference) {
-                    ColumnReference colRef = ((ColumnReference) select);
-                    if (colRef.getTypeDefinition() == null) { // not yet
-                                                              // resolved
-                        if (colRef.getQualifier() == null) {
-                            // unqualified select: SELECT p FROM
-                            resolveTypeForColumnReference(colRef);
-                        } else {
-                            // qualified select: SELECT t.p FROM
-                            validateColumnReferenceAndResolveType(colRef);
-                        }
-                    }
-                }
-            }
-
-            // Replace types used as qualifiers (IN_TREE, IN_FOLDER,
-            // CONTAINS) by their corresponding alias (correlation name)
-            for (Entry<Integer, String> en : typeReferences.entrySet()) {
-                Integer obj = en.getKey();
-                String qualifier = en.getValue();
-                String typeQueryName = getReferencedTypeQueryName(qualifier);
-                if (typeQueryName == null) {
-                    throw new CmisQueryException(qualifier + " is neither a type query name nor an alias.");
-                }
-                if (typeQueryName.equals(qualifier)) {
-                    // try to find an alias for it
-                    String alias = null;
-                    for (Entry<String, String> e : froms.entrySet()) {
-                        String q = e.getKey();
-                        String tqn = e.getValue();
-                        if (!tqn.equals(q) && typeQueryName.equals(tqn)) {
-                            alias = q;
-                            break;
-                        }
-                    }
-                    if (alias != null) {
-                        typeReferences.put(obj, alias);
-                    }
-                }
-            }
-
-            return true;
-        } catch (CmisQueryException cqe) {
-            errorMessage = cqe.getMessage(); // preserve message
-            return false; // indicate an error to ANTLR so that it generates
-                          // FailedPredicateException
-        }
-    }
-
-    protected void resolveTypeForAlias(ColumnReference colRef) {
-        String aliasName = colRef.getAliasName();
-
-        if (colOrFuncAlias.containsKey(aliasName)) {
-            CmisSelector selector = colOrFuncAlias.get(aliasName);
-            if (selector instanceof ColumnReference) {
-                colRef = (ColumnReference) selector; // alias target
-                if (colRef.getQualifier() == null) {
-                    // unqualified select: SELECT p FROM
-                    resolveTypeForColumnReference(colRef);
-                } else {
-                    // qualified select: SELECT t.p FROM
-                    validateColumnReferenceAndResolveType(colRef);
-                }
-            }
-            // else --> ignore FunctionReference
-        }
-    }
-
-    // for a select x from y, z ... find the type in type manager for x
-    protected void resolveTypeForColumnReference(ColumnReference colRef) {
-        String propName = colRef.getPropertyQueryName();
-        boolean isStar = propName.equals("*");
-
-        // it is property query name without a type, so find type
-        int noFound = 0;
-        TypeDefinition tdFound = null;
-
-        if (isPredfinedQueryName(propName)) {
-            return;
-        }
-
-        for (String typeQueryName : froms.values()) {
-            TypeDefinition td = typeMgr.getTypeByQueryName(typeQueryName);
-            if (null == td) {
-                throw new CmisQueryException(typeQueryName + " is neither a type query name nor an alias.");
-            } else if (isStar) {
-                ++noFound;
-                tdFound = null;
-            } else if (TypeValidator.typeContainsPropertyWithQueryName(td, propName)) {
-                ++noFound;
-                tdFound = td;
-            }
-        }
-        if (noFound == 0) {
-            throw new CmisQueryException(propName + " is not a property query name in any of the types in from ...");
-        } else if (noFound > 1 && !isStar) {
-            throw new CmisQueryException(propName + " is not a unique property query name within the types in from ...");
-        } else {
-            if (null != tdFound) {
-                validateColumnReferenceAndResolveType(tdFound, colRef);
-            }
-        }
-    }
-
-    public boolean isPredfinedQueryName(String name) {
-        return predefinedQueryNames.contains(name);
-    }
-
-    // for a select x.y from x ... check that x has property y and that x is in
-    // from
-    protected void validateColumnReferenceAndResolveType(ColumnReference colRef) {
-        // either same name or mapped alias
-        String typeQueryName = getReferencedTypeQueryName(colRef.getQualifier());
-        TypeDefinition td = typeMgr.getTypeByQueryName(typeQueryName);
-        if (null == td) {
-            throw new CmisQueryException(colRef.getQualifier() + " is neither a type query name nor an alias.");
-        }
-
-        validateColumnReferenceAndResolveType(td, colRef);
-    }
-
-    protected void validateColumnReferenceAndResolveType(TypeDefinition td, ColumnReference colRef) {
-
-        // type found, check if property exists
-        boolean hasProp;
-        if (colRef.getPropertyQueryName().equals("*")) {
-            hasProp = true;
-        } else {
-            hasProp = TypeValidator.typeContainsPropertyWithQueryName(td, colRef.getPropertyQueryName());
-            if (!hasProp && td.getBaseTypeId() == BaseTypeId.CMIS_SECONDARY
-                    && colRef.getPropertyQueryName().equals(PropertyIds.OBJECT_ID)) {
-                hasProp = true; // special handling for object id on secondary
-                                // types which are required for JOINS
-            }
-        }
-        if (!hasProp) {
-            throw new CmisQueryException(colRef.getPropertyQueryName() + " is not a valid property query name in type "
-                    + td.getId() + ".");
-        }
-
-        colRef.setTypeDefinition(typeMgr.getPropertyIdForQueryName(td, colRef.getPropertyQueryName()), td);
-    }
-
-    // return type query name for a referenced column (which can be the name
-    // itself or an alias
-    protected String getReferencedTypeQueryName(String qualifier) {
-        String typeQueryName = froms.get(qualifier);
-        if (null == typeQueryName) {
-            // if an alias was defined but still the original is used we have to
-            // search case: SELECT T.p FROM T AS TAlias
-            String q = null;
-            for (String tqn : froms.values()) {
-                if (qualifier.equals(tqn)) {
-                    if (q != null) {
-                        throw new CmisQueryException(qualifier + " is an ambiguous type query name.");
-                    }
-                    q = tqn;
-                }
-            }
-            return q;
-        } else {
-            return typeQueryName;
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java
deleted file mode 100644
index 19a729e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.CommonTreeNodeStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser_CmisBaseGrammar.query_return;
-
-/**
- * Support class to assist in parsing and processing CMIS queries.
- * This class inherits from QueryUtilBase to use the error handling
- * methods. It does not follow its design and is only maintained for
- * backwards compatibility.
- * 
- * @deprecated Use {@link QueryUtilBase} instead.
- */
-@Deprecated
-public class QueryUtil extends QueryUtilBase<CmisQueryWalker> {
-    
-    public QueryUtil() {
-        super(null, null, null);
-    }
-    
-    @Override
-    public CommonTree parseStatement() throws RecognitionException {
-        throw new CmisRuntimeException("Not supported, use getWalker to parse a query using this legacy class.");        
-    }
-
-    @Override
-    public void walkStatement() throws CmisQueryException, RecognitionException {
-        throw new CmisRuntimeException("Not supported, use getWalker to parse a query using this legacy class.");
-    }
-
-    /**
-     * Parse a CMISQL statement and return a tree that can be walked to evaluate the expression
-     * of the query (usually not used directly but through traverseStatement)
-     * 
-     * @param statement
-     *      CMISQL statement
-     * @return
-     *      an AntLR tree grammar that can be traversed to evaluate the query
-     *      
-     * @throws RecognitionException
-     */
-    public static CmisQueryWalker getWalker(String statement) throws RecognitionException {
-        CharStream input = new ANTLRStringStream(statement);
-        CmisQlStrictLexer lexer = new CmisQlStrictLexer(input);
-        TokenStream tokens = new CommonTokenStream(lexer);
-        CmisQlStrictParser parser = new CmisQlStrictParser(tokens);
-        CommonTree parserTree; // the ANTLR tree after parsing phase
-
-        query_return parsedStatement = parser.query();
-        if (lexer.hasErrors()) {
-            throw new CmisInvalidArgumentException(lexer.getErrorMessages());
-        } else if (parser.hasErrors()) {
-            throw new CmisInvalidArgumentException(parser.getErrorMessages());
-        } else if ( tokens.index()!=tokens.size() ) {
-            throw new  CmisInvalidArgumentException("Query String has illegal tokens after end of statement: " + tokens.get(tokens.index()));
-        }
-        
-        parserTree = (CommonTree) parsedStatement.getTree();
-
-        CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserTree);
-        nodes.setTokenStream(tokens);
-        CmisQueryWalker walker = new CmisQueryWalker(nodes);
-        return walker;               
-    }
-    
-    /**
-     * Parse and process a CMISQL statement using the higher level support classes
-     * 
-     * @param statement
-     *      CMISQL statement
-     * @param queryObj
-     *      CMIS query object filled with information what data need to be retrieved
-     * @param pw
-     *      predicate walker that evaluates the where clause
-     * @return
-     *      AntLR tree grammar created by this statement
-     *      
-     * @throws UnsupportedEncodingException
-     * @throws IOException
-     * @throws RecognitionException
-     */
-    public CmisQueryWalker traverseStatement(String statement, QueryObject queryObj, PredicateWalkerBase pw)
-            throws UnsupportedEncodingException, IOException, RecognitionException {
-        walker = getWalker(statement);
-        walker.query(queryObj, pw);
-        walker.getWherePredicateTree();
-        return walker;        
-    }
-
-    public CmisQueryWalker traverseStatementAndCatchExc(String statement, QueryObject queryObj, PredicateWalkerBase pw) {
-        try {
-            return traverseStatement(statement, queryObj, pw);
-        } catch (RecognitionException e) {
-            String errorMsg = queryObj.getErrorMessage();
-            throw new CmisInvalidArgumentException("Walking of statement failed with RecognitionException error: \n   " + errorMsg, e);
-        } catch (CmisBaseException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new CmisInvalidArgumentException("Walking of statement failed with exception: \n   ", e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java
deleted file mode 100644
index d5aad2d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.TreeParser;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-
-/**
- * Utility class to help parsing and processing a query statement using the
- * AntLR parser Subclasses have to implement methods that setup parser and query
- * walker and parse and process a query. This class provides common methods for
- * error handling and for storing the necessary opencmis objects for query
- * support
- * 
- * @param <T>
- *            AntLR tree grammar, will usually be a CmisQueryWalker but can be
- *            custom class for customized (extended) parsers
- */
-public abstract class QueryUtilBase<T extends TreeParser> {
-
-    protected T walker;
-    protected QueryObject queryObj;
-    protected PredicateWalkerBase predicateWalker;
-    protected String statement;
-
-    protected CommonTree parserTree; // the ANTLR tree after parsing phase
-    protected TokenStream tokens; // the ANTLR token stream
-
-    /**
-     * Perform the first phase of query processing. Setup lexer and parser,
-     * parse the statement, check for syntax errors and create an AST
-     * 
-     * @return the abstract syntax tree of the parsed statement
-     * 
-     * @throws RecognitionException
-     */
-    public abstract CommonTree parseStatement() throws RecognitionException;
-
-    /**
-     * Perform the second phase of query processing, analyzes the select part,
-     * check for semantic errors, fill the query object. Usually a walker will
-     * be CmisQueryWalker (or subclass) if the supporting OpenCMIS query classes
-     * are used.
-     * 
-     * @throws RecognitionException
-     */
-    public abstract void walkStatement() throws RecognitionException;
-
-    /**
-     * Fully process a query by parsing and walking it and setting up the
-     * supporting objects
-     * 
-     * @throws RecognitionException
-     */
-    public void processStatement() throws RecognitionException {
-        parseStatement();
-        walkStatement();
-    }
-
-    protected QueryUtilBase(String statement, TypeManager tm, PredicateWalkerBase pw) {
-        walker = null;
-        queryObj = new QueryObject(tm);
-        predicateWalker = pw;
-        this.statement = statement;
-    }
-
-    public T getWalker() {
-        return walker;
-    }
-
-    public PredicateWalkerBase getPredicateWalker() {
-        return predicateWalker;
-    }
-
-    public QueryObject getQueryObject() {
-        return queryObj;
-    }
-
-    public String getStatement() {
-        return statement;
-    }
-
-    /**
-     * Same as traverseStatement but throws only CMIS Exceptions
-    */
-    public void processStatementUsingCmisExceptions() {
-        try {
-            processStatement();
-        } catch (RecognitionException e) {
-            String errorMsg = queryObj.getErrorMessage();
-            throw new CmisInvalidArgumentException("Walking of statement failed with RecognitionException error: \n   "
-                    + errorMsg, e);
-        } catch (CmisBaseException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new CmisInvalidArgumentException("Walking of statement failed with exception: \n   ", e);
-        }
-    }
-
-    public String getErrorMessage(RecognitionException e) {
-        if (null == walker) {
-            return e.toString();
-        } else {
-            return getErrorMessage(walker, e);
-        }
-    }
-
-    private static String getErrorMessage(BaseRecognizer recognizer, RecognitionException e) {
-        String[] tokenNames = recognizer.getTokenNames();
-        String hdr = "Line " + e.line + ":" + e.charPositionInLine;
-        String msg = recognizer.getErrorMessage(e, tokenNames);
-        return hdr + " " + msg;
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java
deleted file mode 100644
index 5b94810..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.CommonTreeNodeStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.server.support.TypeManager;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser.root_return;
-
-public class QueryUtilStrict extends QueryUtilBase<CmisQueryWalker> {
-
-    /* the ANTLR tree after parsing phase */
-    private CommonTree parserTree;
-    /* the ANTLR token stream */
-    private TokenStream tokens;
-    private boolean parseFulltext = true;
-
-    public QueryUtilStrict(String statement, TypeManager tm, PredicateWalkerBase pw) {
-        super(statement, tm, pw);
-    }
-
-    public QueryUtilStrict(String statement, TypeManager tm, PredicateWalkerBase pw, boolean parseFulltext) {
-        super(statement, tm, pw);
-        this.parseFulltext = parseFulltext;
-    }
-
-    @Override
-    public CommonTree parseStatement() throws RecognitionException {
-        CharStream input = new ANTLRStringStream(statement);
-        CmisQlStrictLexer lexer = new CmisQlStrictLexer(input);
-        tokens = new CommonTokenStream(lexer);
-        CmisQlStrictParser parser = new CmisQlStrictParser(tokens);
-
-        root_return parsedStatement = parser.root();
-        if (lexer.hasErrors()) {
-            throw new CmisInvalidArgumentException(lexer.getErrorMessages());
-        } else if (parser.hasErrors()) {
-            throw new CmisInvalidArgumentException(parser.getErrorMessages());
-        }
-
-        parserTree = (CommonTree) parsedStatement.getTree();
-        return parserTree;
-    }
-
-    @Override
-    public void walkStatement() throws RecognitionException {
-
-        if (null == parserTree) {
-            throw new CmisQueryException("You must parse the query before you can walk it.");
-        }
-
-        CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserTree);
-        nodes.setTokenStream(tokens);
-        walker = new CmisQueryWalker(nodes);
-        walker.setDoFullTextParse(parseFulltext);
-        walker.query(queryObj, predicateWalker);
-        walker.getWherePredicateTree();
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/StringUtil.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/StringUtil.java
deleted file mode 100644
index d429ee0..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/StringUtil.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.server.support.query;

-

-public final class StringUtil {

-

-    private StringUtil() {

-    }

-

-    /**

-     * Removes all escape sequences in a string and return unescaped string

-     * escape character is backslash \, so \\ --> \, \' --> ' additional escaped

-     * characters can be allowed in escapedChars.

-     * 

-     * @param literal

-     *            String to unescape

-     * @param escapedChars

-     *            set of allowed characters to be escaped with a backslash, if

-     *            set to null then ' (quote) and \ (backslash) are allowed to be

-     *            escaped

-     * @return unescaped literal or null if the literal is illegal

-     */

-    public static String unescape(String literal, String escapedChars) {

-        char c = '?';

-        int i = 0;

-        StringBuilder sb = new StringBuilder();

-

-        if (null == escapedChars) {

-            escapedChars = "\\'";

-        }

-

-        if (null == literal) {

-            return null;

-        }

-

-        int len = literal.length();

-

-        if (len == 1 && literal.charAt(0) == '\\') {

-            return null;

-        }

-

-        if (len > 1 && literal.charAt(len - 2) != '\\' && literal.charAt(len - 1) == '\\') {

-            return null;

-        }

-

-        for (i = 0; i < len; i++) {

-            c = literal.charAt(i);

-            if (c == '\\') {

-                char escChar = literal.charAt(i + 1);

-                boolean matched = false;

-                for (int j = 0; j < escapedChars.length(); j++) {

-                    if (escChar == escapedChars.charAt(j)) {

-                        sb.append(escChar);

-                        ++i;

-                        matched = true;

-                        break;

-                    }

-                }

-

-                if (!matched) {

-                    return null;

-                }

-

-            } else {

-                sb.append(literal.charAt(i));

-            }

-        }

-

-        return sb.toString();

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractBindingCmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractBindingCmisServiceWrapper.java
deleted file mode 100644
index fd4235d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractBindingCmisServiceWrapper.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import java.util.Date;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * This abstract service wrapper is intended for manipulating and replacing
- * server responses.
- */
-public abstract class AbstractBindingCmisServiceWrapper extends AbstractCmisServiceWrapper {
-
-    private Progress beforeCall = Progress.CONTINUE;
-    private Progress afterCall = Progress.CONTINUE;
-
-    public AbstractBindingCmisServiceWrapper(CmisService service) {
-        super(service);
-    }
-
-    @Override
-    public Progress beforeServiceCall() {
-        return beforeCall;
-    }
-
-    @Override
-    public Progress afterServiceCall() {
-        return afterCall;
-    }
-
-    /**
-     * Sets whether the server framework should continue before the service is
-     * called.
-     * 
-     * @param progress
-     *            {@link Progress#CONTINUE} if the server framework should
-     *            continue, {@link Progress#STOP} if the server framework should
-     *            stop
-     */
-    public void setBeforeServiceCall(Progress progress) {
-        beforeCall = progress;
-    }
-
-    /**
-     * Sets whether the server framework should continue after the service is
-     * called.
-     * 
-     * @param progress
-     *            {@link Progress#CONTINUE} if the server framework should
-     *            continue, {@link Progress#STOP} if the server framework should
-     *            stop
-     */
-    public void setAfterServiceCall(Progress progress) {
-        afterCall = progress;
-    }
-
-    /**
-     * Returns the binding type.
-     * 
-     * @return the binding type
-     */
-    public BindingType getBindingType() {
-        String binding = getCallContext().getBinding();
-
-        if (CallContext.BINDING_ATOMPUB.equals(binding)) {
-            return BindingType.ATOMPUB;
-        } else if (CallContext.BINDING_BROWSER.equals(binding)) {
-            return BindingType.BROWSER;
-        } else if (CallContext.BINDING_WEBSERVICES.equals(binding)) {
-            return BindingType.WEBSERVICES;
-        } else if (CallContext.BINDING_LOCAL.equals(binding)) {
-            return BindingType.LOCAL;
-        } else {
-            return BindingType.CUSTOM;
-        }
-    }
-
-    /**
-     * Returns the {@link HttpServletRequest} object.
-     * 
-     * @return the {@link HttpServletRequest} object or {@code null} if the
-     *         binding is a non-HTTP binding
-     */
-    public HttpServletRequest getHttpServletRequest() {
-        return (HttpServletRequest) getCallContext().get(CallContext.HTTP_SERVLET_REQUEST);
-    }
-
-    /**
-     * Returns the {@link HttpServletResponse} object.
-     * 
-     * @return the {@link HttpServletResponse} object or {@code null} if the
-     *         binding is a non-HTTP binding
-     */
-    public HttpServletResponse getHttpServletResponse() {
-        return (HttpServletResponse) getCallContext().get(CallContext.HTTP_SERVLET_RESPONSE);
-    }
-
-    /**
-     * Gets a request header value as String.
-     * 
-     * @param name
-     *            the header name
-     * @return the header value or {@code null} if the header isn't set or if
-     *         the binding is a non-HTTP binding
-     */
-    public String getRequestHeader(String name) {
-        HttpServletRequest req = getHttpServletRequest();
-        if (req == null) {
-            return null;
-        }
-
-        return req.getHeader(name);
-    }
-
-    /**
-     * Gets a request header value as Date.
-     * 
-     * @param name
-     *            the header name
-     * @return the header value or {@code null} if the header isn't set or if
-     *         the binding is a non-HTTP binding or if the date cannot be parsed
-     */
-    public Date getDateRequestHeader(String name) {
-        return DateTimeHelper.parseHttpDateTime(getRequestHeader(name));
-    }
-
-    /**
-     * Sets a String response header.
-     * 
-     * If the binding is a non-HTTP binding, this method does nothing.
-     * 
-     * @param name
-     *            the header name
-     * @param value
-     *            the header value
-     */
-    public void setResponseHeader(String name, String value) {
-        HttpServletResponse resp = getHttpServletResponse();
-        if (resp != null) {
-            resp.setHeader(name, value);
-        }
-    }
-
-    /**
-     * Sets a Date response header.
-     * 
-     * If the binding is a non-HTTP binding, this method does nothing.
-     * 
-     * @param name
-     *            the header name
-     * @param value
-     *            the header value
-     */
-    public void setResponseHeader(String name, Date value) {
-        HttpServletResponse resp = getHttpServletResponse();
-        if (resp != null) {
-            resp.setHeader(name, DateTimeHelper.formatHttpDateTime(value));
-        }
-    }
-
-    /**
-     * Compares the provided date with the "If-Modified-Since" HTTP header (if
-     * present) and returns whether the resource has been modified or not.
-     * 
-     * @param date
-     *            date to compare the "If-Modified-Since" HTTP header to
-     * 
-     * @return {@code true} if the "If-Modified-Since" HTTP header is set and ,
-     *         {@code false} otherwise
-     */
-    public boolean isNotModified(Date date) {
-        if (date == null) {
-            return false;
-        }
-
-        Date modifiedSince = getDateRequestHeader("If-Modified-Since");
-        if (modifiedSince == null) {
-            return false;
-        }
-
-        long dateSecs = (long) Math.floor((double) date.getTime() / 1000);
-        long modifiedSinceSecs = (long) Math.floor((double) modifiedSince.getTime() / 1000);
-
-        return dateSecs > modifiedSinceSecs;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractCmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractCmisServiceWrapper.java
deleted file mode 100644
index 87d0f15..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/AbstractCmisServiceWrapper.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
-import org.apache.chemistry.opencmis.commons.server.ProgressControlCmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-
-/**
- * An abstract CMIS service wrapper.
- * <p>
- * All service wrappers managed by {@link CmisServiceWrapperManager} must be
- * derived from this class and must provide a constructor that takes a
- * {@link CmisService} object as the sole parameter.
- */
-public abstract class AbstractCmisServiceWrapper implements CallContextAwareCmisService, ProgressControlCmisService {
-
-    private CmisService service;
-    private CallContext context;
-
-    public AbstractCmisServiceWrapper(CmisService service) {
-        if (service == null) {
-            throw new IllegalArgumentException("Service must be set!");
-        }
-
-        this.service = service;
-    }
-
-    /**
-     * Initializes the wrapper with a set of parameters.
-     */
-    public void initialize(Object[] params) {
-    }
-
-    /**
-     * Returns the wrapped service or the next service wrapper.
-     * 
-     * @return the wrapped service
-     */
-    public CmisService getWrappedService() {
-        return service;
-    }
-
-    /**
-     * Sets the call context and propagates it down to the next service wrapper
-     * or service if it implements the {@link CallContextAwareCmisService}
-     * interface.
-     */
-    public void setCallContext(CallContext callContext) {
-        this.context = callContext;
-
-        if (service instanceof CallContextAwareCmisService) {
-            ((CallContextAwareCmisService) service).setCallContext(callContext);
-        }
-    }
-
-    /**
-     * Gets the current call context.
-     */
-    public CallContext getCallContext() {
-        return context;
-    }
-
-    // --- processing ---
-
-    public ProgressControlCmisService.Progress beforeServiceCall() {
-        if (service instanceof ProgressControlCmisService) {
-            return ((ProgressControlCmisService) service).beforeServiceCall();
-        }
-
-        return ProgressControlCmisService.Progress.CONTINUE;
-    }
-
-    public ProgressControlCmisService.Progress afterServiceCall() {
-        if (service instanceof ProgressControlCmisService) {
-            return ((ProgressControlCmisService) service).afterServiceCall();
-        }
-
-        return ProgressControlCmisService.Progress.CONTINUE;
-    }
-
-    // --- service methods ---
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        return service.getRepositoryInfos(extension);
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        return service.getRepositoryInfo(repositoryId, extension);
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service
-                .getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount, extension);
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        return service.getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions, extension);
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        return service.getTypeDefinition(repositoryId, typeId, extension);
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        return service.createType(repositoryId, type, extension);
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        return service.updateType(repositoryId, type, extension);
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        service.deleteType(repositoryId, typeId, extension);
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service.getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension);
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return service.getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        return service.getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        return service.getObjectParents(repositoryId, objectId, filter, includeAllowableActions, includeRelationships,
-                renditionFilter, includeRelativePathSegment, extension);
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        return service.getFolderParent(repositoryId, folderId, filter, extension);
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return service.createDocument(repositoryId, properties, folderId, contentStream, versioningState, policies,
-                addAces, removeAces, extension);
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        return service.createDocumentFromSource(repositoryId, sourceId, properties, folderId, versioningState,
-                policies, addAces, removeAces, extension);
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return service.createFolder(repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        return service.createRelationship(repositoryId, properties, policies, addAces, removeAces, extension);
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return service.createPolicy(repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        return service.createItem(repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        return service.getAllowableActions(repositoryId, objectId, extension);
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return service.getObject(repositoryId, objectId, filter, includeAllowableActions, includeRelationships,
-                renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        return service.getProperties(repositoryId, objectId, filter, extension);
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service.getRenditions(repositoryId, objectId, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        return service.getObjectByPath(repositoryId, path, filter, includeAllowableActions, includeRelationships,
-                renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        return service.getContentStream(repositoryId, objectId, streamId, offset, length, extension);
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        service.updateProperties(repositoryId, objectId, changeToken, properties, extension);
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        return service.bulkUpdateProperties(repositoryId, objectIdsAndChangeTokens, properties, addSecondaryTypeIds,
-                removeSecondaryTypeIds, extension);
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        service.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        service.deleteObject(repositoryId, objectId, allVersions, extension);
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        return service.deleteTree(repositoryId, folderId, allVersions, unfileObjects, continueOnFailure, extension);
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        service.setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        service.deleteContentStream(repositoryId, objectId, changeToken, extension);
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        service.appendContentStream(repositoryId, objectId, changeToken, contentStream, isLastChunk, extension);
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        service.checkOut(repositoryId, objectId, extension, contentCopied);
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        service.cancelCheckOut(repositoryId, objectId, extension);
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        service.checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment, policies, addAces,
-                removeAces, extension);
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        return service
-                .getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter,
-                        includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
-                        extension);
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        return service.getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, extension);
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        return service.getAllVersions(repositoryId, objectId, versionSeriesId, filter, includeAllowableActions,
-                extension);
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service.query(repositoryId, statement, searchAllVersions, includeAllowableActions, includeRelationships,
-                renditionFilter, maxItems, skipCount, extension);
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        return service.getContentChanges(repositoryId, changeLogToken, includeProperties, filter, includePolicyIds,
-                includeAcl, maxItems, extension);
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        service.addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        service.removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return service.getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes,
-                relationshipDirection, typeId, filter, includeAllowableActions, maxItems, skipCount, extension);
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        return service.getAcl(repositoryId, objectId, onlyBasicPermissions, extension);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        return service.applyAcl(repositoryId, objectId, addAces, removeAces, aclPropagation, extension);
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        service.applyPolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        service.removePolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        return service.getAppliedPolicies(repositoryId, objectId, filter, extension);
-    }
-
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        return service.create(repositoryId, properties, folderId, contentStream, versioningState, policies, extension);
-    }
-
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        service.deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, extension);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        return service.applyAcl(repositoryId, objectId, aces, aclPropagation);
-    }
-
-    public ObjectInfo getObjectInfo(String repositoryId, String objectId) {
-        return service.getObjectInfo(repositoryId, objectId);
-    }
-
-    public void close() {
-        service.close();
-        context = null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CallContextAwareCmisService.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CallContextAwareCmisService.java
deleted file mode 100644
index f877347..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CallContextAwareCmisService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-
-/**
- * Identifies a CMIS service object that can handle call contexts.
- */
-public interface CallContextAwareCmisService extends CmisService {
-
-    /**
-     * Returns the current call context.
-     * 
-     * @return the call context
-     */
-    CallContext getCallContext();
-
-    /**
-     * Sets a new call context.
-     * 
-     * @param callContext
-     *            the new call context
-     */
-    void setCallContext(CallContext callContext);
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManager.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManager.java
deleted file mode 100644
index da3fd5a..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManager.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import java.lang.reflect.Constructor;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Manages a list of CMIS service wrappers.
- */
-public class CmisServiceWrapperManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CmisServiceWrapperManager.class);
-
-    private static final String PARAMS_SERVICE_WRAPPER_PREFIX = "servicewrapper.";
-
-    private WrapperDefinition outerMost;
-    private WrapperDefinition innerMost;
-
-    /**
-     * Constructor.
-     */
-    public CmisServiceWrapperManager() {
-        outerMost = null;
-        innerMost = null;
-    }
-
-    /**
-     * Adds an outer-most (called first) wrapper.
-     * 
-     * @param wrapperClass
-     *            the wrapper class
-     * @param params
-     *            wrapper parameters
-     */
-    public void addOuterWrapper(Class<? extends AbstractCmisServiceWrapper> wrapperClass, Object... params) {
-        WrapperDefinition wd = new WrapperDefinition(wrapperClass, params);
-        if (outerMost == null) {
-            outerMost = wd;
-            innerMost = wd;
-        } else {
-            outerMost.setOuterWrapper(wd);
-            outerMost = wd;
-        }
-
-        LOG.debug("Added outer service wrapper: {}", wrapperClass.getName());
-    }
-
-    /**
-     * Adds an inner-most (called last) wrapper.
-     * 
-     * @param wrapperClass
-     *            the wrapper class
-     * @param params
-     *            wrapper parameters
-     */
-    public void addInnerWrapper(Class<? extends AbstractCmisServiceWrapper> wrapperClass, Object... params) {
-        WrapperDefinition wd = new WrapperDefinition(wrapperClass, params);
-        if (innerMost == null) {
-            outerMost = wd;
-            innerMost = wd;
-        } else {
-            innerMost.setInnerWrapper(wd);
-            innerMost = wd;
-        }
-
-        LOG.debug("Added inner service wrapper: {}", wrapperClass.getName());
-    }
-
-    /**
-     * Gets wrapper settings from the service factory parameters and adds them
-     * to the wrappers.
-     * <p>
-     * The factory parameters properties file should look like this:
-     * 
-     * <pre>
-     * servicewrapper.1=com.example.my.SimpleWrapper
-     * servicewrapper.2=com.example.my.AdvancedWrapper,1,cmis:documents
-     * servicewrapper.3=com.example.my.DebuggingWrapper,testRepositoryId
-     * </pre>
-     * 
-     * Syntax:
-     * {@code servicewrapper.&lt;position>=&lt;classname>[,parameter1[,parameter2[...]]]}
-     * 
-     * @param parameters
-     *            service factory parameters
-     */
-    @SuppressWarnings("unchecked")
-    public void addWrappersFromServiceFactoryParameters(Map<String, String> parameters) {
-        if (parameters == null) {
-            return;
-        }
-
-        TreeMap<Integer, WrapperDefinition> wrappers = new TreeMap<Integer, WrapperDefinition>();
-
-        for (Map.Entry<String, String> entry : parameters.entrySet()) {
-            String key = entry.getKey().trim().toLowerCase(Locale.ENGLISH);
-            if (key.startsWith(PARAMS_SERVICE_WRAPPER_PREFIX) && entry.getKey() != null) {
-                int index = 0;
-                try {
-                    index = Integer.valueOf(key.substring(PARAMS_SERVICE_WRAPPER_PREFIX.length()));
-                } catch (NumberFormatException e) {
-                    throw new CmisRuntimeException("Invalid service wrapper configuration: " + key, e);
-                }
-
-                String[] value = entry.getValue().trim().split(",");
-                if (value.length > 0) {
-                    Class<?> wrapperClass = null;
-                    try {
-                        wrapperClass = ClassLoaderUtil.loadClass(value[0]);
-                    } catch (ClassNotFoundException e) {
-                        throw new CmisRuntimeException("Service wrapper class not found: " + value[0], e);
-                    }
-
-                    if (!AbstractCmisServiceWrapper.class.isAssignableFrom(wrapperClass)) {
-                        throw new CmisRuntimeException("Class is not a service wrapper: " + value[0]);
-                    }
-
-                    Object[] params = null;
-                    if (value.length > 1) {
-                        params = new Object[value.length - 1];
-                        System.arraycopy(value, 1, params, 0, params.length);
-                    }
-
-                    if (wrappers.containsKey(index)) {
-                        throw new CmisRuntimeException("More than one service wrapper at the same position: " + index);
-                    }
-
-                    if (LOG.isTraceEnabled()) {
-                        LOG.trace("Found wrapper at index {}: {}{}", index, wrapperClass.getName(), params == null ? ""
-                                : Arrays.asList(params).toString());
-                    }
-
-                    wrappers.put(index, new WrapperDefinition(
-                            (Class<? extends AbstractCmisServiceWrapper>) wrapperClass, params));
-                }
-            }
-        }
-
-        if (!wrappers.isEmpty()) {
-            WrapperDefinition first = null;
-            WrapperDefinition prev = null;
-            for (WrapperDefinition def : wrappers.values()) {
-                def.setOuterWrapper(prev);
-                prev = def;
-                if (first == null) {
-                    first = def;
-                }
-
-                LOG.debug("Added service wrapper: {}", def.getWrapperClass().getName());
-            }
-
-            if (outerMost == null) {
-                outerMost = first;
-                innerMost = prev;
-            } else {
-                outerMost.setOuterWrapper(prev);
-                outerMost = first;
-            }
-        }
-    }
-
-    /**
-     * Removes the outer-most wrapper.
-     */
-    public void removeOuterWrapper() {
-        if (outerMost != null) {
-            outerMost = outerMost.getInnerWrapper();
-            if (outerMost == null) {
-                innerMost = null;
-            } else {
-                outerMost.setOuterWrapper(null);
-            }
-        }
-    }
-
-    /**
-     * Removes the inner-most wrapper.
-     */
-    public void removeInnerWrapper() {
-        if (innerMost != null) {
-            innerMost = innerMost.getOuterWrapper();
-            if (innerMost == null) {
-                outerMost = null;
-            } else {
-                innerMost.setInnerWrapper(null);
-            }
-        }
-    }
-
-    /**
-     * Wraps a service with all configured wrappers.
-     * 
-     * @param service
-     *            the CMIS service object
-     * @return the wrapped service
-     */
-    public CmisService wrap(CmisService service) {
-        CmisService result = service;
-
-        WrapperDefinition def = innerMost;
-        while (def != null) {
-            result = def.createWrapperObject(result);
-            def = def.getOuterWrapper();
-        }
-
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        WrapperDefinition def = outerMost;
-        while (def != null) {
-
-            sb.append('[');
-            sb.append(def.toString());
-            sb.append(']');
-
-            def = def.getInnerWrapper();
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Wrapper Definition.
-     */
-    private static class WrapperDefinition {
-
-        private static final Class<?>[] CONSTRUCTOR_PARAMETERS = new Class<?>[] { CmisService.class };
-
-        private final Class<? extends AbstractCmisServiceWrapper> wrapperClass;
-        private final Constructor<? extends AbstractCmisServiceWrapper> wrapperConstructor;
-        private final Object[] params;
-
-        private WrapperDefinition outer;
-        private WrapperDefinition inner;
-
-        public WrapperDefinition(Class<? extends AbstractCmisServiceWrapper> wrapperClass, Object... params) {
-            this.wrapperClass = wrapperClass;
-            this.params = params;
-
-            if (wrapperClass == null) {
-                throw new CmisRuntimeException("Wrapper class must be set!");
-            }
-
-            try {
-                wrapperConstructor = wrapperClass.getConstructor(CONSTRUCTOR_PARAMETERS);
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Could not access constructor of service wrapper "
-                        + wrapperClass.getName() + ": " + e.toString(), e);
-            }
-        }
-
-        public Class<? extends AbstractCmisServiceWrapper> getWrapperClass() {
-            return wrapperClass;
-        }
-
-        public AbstractCmisServiceWrapper createWrapperObject(CmisService service) {
-            try {
-                AbstractCmisServiceWrapper wrapper = wrapperConstructor.newInstance(service);
-                wrapper.initialize(params);
-
-                return wrapper;
-            } catch (Exception e) {
-                throw new CmisRuntimeException("Could not instantiate service wrapper " + wrapperClass.getName() + ": "
-                        + e.toString(), e);
-            }
-        }
-
-        public void setOuterWrapper(WrapperDefinition wrapper) {
-            outer = wrapper;
-            if (wrapper != null) {
-                wrapper.inner = this;
-            }
-        }
-
-        public WrapperDefinition getOuterWrapper() {
-            return outer;
-        }
-
-        public void setInnerWrapper(WrapperDefinition wrapper) {
-            inner = wrapper;
-            if (wrapper != null) {
-                wrapper.outer = this;
-            }
-        }
-
-        public WrapperDefinition getInnerWrapper() {
-            return inner;
-        }
-
-        @Override
-        public String toString() {
-            StringBuilder sb = new StringBuilder(wrapperClass.getName());
-            if (params != null) {
-                for (int i = 0; i < params.length; i++) {
-                    sb.append(',');
-                    sb.append(params[i]);
-                }
-            }
-
-            return sb.toString();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/ConformanceCmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/ConformanceCmisServiceWrapper.java
deleted file mode 100644
index b74206d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/ConformanceCmisServiceWrapper.java
+++ /dev/null
@@ -1,1273 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Service wrapper that checks in incoming calls for specification conformance.
- */
-public class ConformanceCmisServiceWrapper extends AbstractCmisServiceWrapper {
-
-    public static final BigInteger MINUS_ONE = BigInteger.valueOf(-1);
-
-    private static final Logger LOG = LoggerFactory.getLogger(ConformanceCmisServiceWrapper.class);
-
-    private BigInteger defaultTypesMaxItems = null;
-    private BigInteger defaultTypesDepth = MINUS_ONE;
-
-    private BigInteger defaultMaxItems = null;
-    private BigInteger defaultDepth = MINUS_ONE;
-
-    /**
-     * Constructor used by {@link CmisServiceWrapperManager}.
-     */
-    public ConformanceCmisServiceWrapper(CmisService service) {
-        super(service);
-    }
-
-    /**
-     * Alternative constructor.
-     */
-    public ConformanceCmisServiceWrapper(CmisService service, BigInteger defaultTypesMaxItems,
-            BigInteger defaultTypesDepth, BigInteger defaultMaxItems, BigInteger defaultDepth) {
-        super(service);
-
-        this.defaultTypesMaxItems = defaultTypesMaxItems;
-        this.defaultTypesDepth = defaultTypesDepth;
-        this.defaultMaxItems = defaultMaxItems;
-        this.defaultDepth = defaultDepth;
-    }
-
-    public void initialize(Object[] params) {
-        if (params == null) {
-            return;
-        }
-
-        if (params.length > 0) {
-            defaultTypesMaxItems = convertToBigInteger(params[0]);
-        }
-
-        if (params.length > 1) {
-            defaultTypesDepth = convertToBigInteger(params[1]);
-        }
-
-        if (params.length > 2) {
-            defaultMaxItems = convertToBigInteger(params[2]);
-        }
-
-        if (params.length > 3) {
-            defaultDepth = convertToBigInteger(params[3]);
-        }
-    }
-
-    private BigInteger convertToBigInteger(Object obj) {
-        try {
-            if (obj instanceof BigInteger) {
-                return (BigInteger) obj;
-            } else if (obj instanceof String) {
-                return new BigInteger((String) obj);
-            } else if (obj instanceof Number) {
-                return BigInteger.valueOf(((Number) obj).longValue());
-            }
-        } catch (NumberFormatException e) {
-            throw new CmisRuntimeException("Invalid number: " + obj.toString(), e);
-        }
-
-        return null;
-    }
-
-    // --- wrapper operations ---
-
-    /**
-     * Set the default maxItems.
-     */
-    protected void setDefaultTypesMaxItems(BigInteger defaultTypesMaxItems) {
-        this.defaultTypesMaxItems = defaultTypesMaxItems;
-    }
-
-    /**
-     * Set the default depth.
-     */
-    protected void setDefaultTypesDepth(BigInteger defaultTypesDepth) {
-        this.defaultTypesDepth = defaultTypesDepth;
-    }
-
-    /**
-     * Set the default maxItems.
-     */
-    protected void setDefaultMaxItems(BigInteger defaultMaxItems) {
-        this.defaultMaxItems = defaultMaxItems;
-    }
-
-    /**
-     * Set the default depth.
-     */
-    protected void setDefaultDepth(BigInteger defaultDepth) {
-        this.defaultDepth = defaultDepth;
-    }
-
-    /**
-     * Converts the given exception into a CMIS exception.
-     */
-    protected CmisBaseException createCmisException(Exception e) {
-        if (e == null) {
-            // should never happen
-            // if it happens its the fault of the framework...
-
-            return new CmisRuntimeException("Unknown exception!");
-        } else if (e instanceof CmisBaseException) {
-            return (CmisBaseException) e;
-        } else {
-            // should not happen if the connector works correctly
-            // it's alarming enough to log the exception
-            LOG.warn(e.toString(), e);
-
-            return new CmisRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Throws an exception if the given id is {@code null} or empty.
-     */
-    protected void checkId(String name, String id) {
-        if (id == null) {
-            throw new CmisInvalidArgumentException(name + " must be set!");
-        }
-
-        if (id.length() == 0) {
-            throw new CmisInvalidArgumentException(name + " must not be empty!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given ids are all {@code null} or empty.
-     */
-    protected void checkIds(String name, String... ids) {
-        for (String id : ids) {
-            if (id != null && id.length() > 0) {
-                return;
-            }
-        }
-
-        throw new CmisInvalidArgumentException(name + " must be set!");
-    }
-
-    /**
-     * Throws an exception if the given holder or id is {@code null} or empty.
-     */
-    protected void checkHolderId(String name, Holder<String> holder) {
-        if (holder == null) {
-            throw new CmisInvalidArgumentException(name + " must be set!");
-        }
-
-        checkId(name, holder.getValue());
-    }
-
-    /**
-     * Throws an exception if the repository id is {@code null} or empty.
-     */
-    protected void checkRepositoryId(String repositoryId) {
-        checkId("Repository Id", repositoryId);
-    }
-
-    /**
-     * Throws an exception if the given path is {@code null} or invalid.
-     */
-    protected void checkPath(String name, String path) {
-        if (path == null) {
-            throw new CmisInvalidArgumentException(name + " must be set!");
-        }
-
-        if (path.length() == 0) {
-            throw new CmisInvalidArgumentException(name + " must not be empty!");
-        }
-
-        if (path.charAt(0) != '/') {
-            throw new CmisInvalidArgumentException(name + " must start with '/'!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given properties set is {@code null}.
-     */
-    protected void checkProperties(Properties properties) {
-        if (properties == null) {
-            throw new CmisInvalidArgumentException("Properties must be set!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given property isn't set or of the wrong type.
-     */
-    protected void checkProperty(Properties properties, String propertyId, Class<?> clazz) {
-        if (properties.getProperties() == null) {
-            throw new CmisInvalidArgumentException("Property " + propertyId + " must be set!");
-        }
-
-        PropertyData<?> property = properties.getProperties().get(propertyId);
-        if (property == null) {
-            throw new CmisInvalidArgumentException("Property " + propertyId + " must be set!");
-        }
-
-        Object value = property.getFirstValue();
-        if (value == null) {
-            throw new CmisInvalidArgumentException("Property " + propertyId + " must have a value!");
-        }
-
-        if (!clazz.isAssignableFrom(value.getClass())) {
-            throw new CmisInvalidArgumentException("Property " + propertyId + " has the wrong type!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given content object is {@code null}.
-     */
-    protected void checkContentStream(ContentStream content) {
-        if (content == null) {
-            throw new CmisInvalidArgumentException("Content must be set!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given query statement is {@code null} or
-     * empty.
-     */
-    protected void checkQueryStatement(String statement) {
-        if (statement == null) {
-            throw new CmisInvalidArgumentException("Statement must be set!");
-        }
-
-        if (statement.length() == 0) {
-            throw new CmisInvalidArgumentException("Statement must not be empty!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given type definition is {@code null}.
-     */
-    protected void checkTypeDefinition(TypeDefinition typeDef) {
-        if (typeDef == null) {
-            throw new CmisInvalidArgumentException("Type definition must be set!");
-        }
-    }
-
-    /**
-     * Throws an exception if the given list is {@code null} or empty.
-     */
-    protected void checkList(String name, List<?> list) {
-        if (list == null) {
-            throw new CmisInvalidArgumentException(name + " must be set!");
-        }
-
-        if (list.isEmpty()) {
-            throw new CmisInvalidArgumentException(name + " must not be empty!");
-        }
-    }
-
-    /**
-     * Returns <code>true</code> if <code>value</code> is {@code null}.
-     */
-    protected Boolean getDefaultTrue(Boolean value) {
-        if (value == null) {
-            return Boolean.TRUE;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns <code>false</code> if <code>value</code> is {@code null}.
-     */
-    protected Boolean getDefaultFalse(Boolean value) {
-        if (value == null) {
-            return Boolean.FALSE;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the <code>IncludeRelationships.NONE</code> if <code>value</code>
-     * is {@code null}.
-     */
-    protected IncludeRelationships getDefault(IncludeRelationships value) {
-        if (value == null) {
-            return IncludeRelationships.NONE;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the <code>UnfileObjects.DELETE</code> if <code>value</code> is
-     * {@code null}.
-     */
-    protected UnfileObject getDefault(UnfileObject value) {
-        if (value == null) {
-            return UnfileObject.DELETE;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the <code>AclPropagation.REPOSITORYDETERMINED</code> if
-     * <code>value</code> is {@code null}.
-     */
-    protected AclPropagation getDefault(AclPropagation value) {
-        if (value == null) {
-            return AclPropagation.REPOSITORYDETERMINED;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the <code>RelationshipDirection.SOURCE</code> if
-     * <code>value</code> is {@code null} .
-     */
-    protected RelationshipDirection getDefault(RelationshipDirection value) {
-        if (value == null) {
-            return RelationshipDirection.SOURCE;
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the <code>"cmis:none"</code> if <code>value</code> is
-     * {@code null}.
-     */
-    protected String getDefaultRenditionFilter(String value) {
-        if ((value == null) || (value.length() == 0)) {
-            return "cmis:none";
-        }
-
-        return value;
-    }
-
-    /**
-     * Returns the default maxItems if <code>maxItems</code> == {@code null},
-     * throws an exception if <code>maxItems</code> &lt; 0, returns
-     * <code>maxItems</code> otherwise.
-     */
-    protected BigInteger getTypesMaxItems(BigInteger maxItems) {
-        if (maxItems == null) {
-            return defaultTypesMaxItems;
-        }
-
-        if (maxItems.compareTo(BigInteger.ZERO) == -1) {
-            throw new CmisInvalidArgumentException("maxItems must not be negative!");
-        }
-
-        return maxItems;
-    }
-
-    /**
-     * Checks the depth parameter if it complies with CMIS specification and
-     * returns the default value if {@code depth} is {@code null}.
-     */
-    protected BigInteger getTypesDepth(BigInteger depth) {
-        if (depth == null) {
-            return defaultTypesDepth;
-        }
-
-        if (depth.compareTo(BigInteger.ZERO) == 0) {
-            throw new CmisInvalidArgumentException("depth must not be 0!");
-        }
-
-        if (depth.compareTo(MINUS_ONE) == -1) {
-            throw new CmisInvalidArgumentException("depth must not be <-1!");
-        }
-
-        return depth;
-    }
-
-    /**
-     * Returns the default maxItems if <code>maxItems</code> == {@code null},
-     * throws an exception if <code>maxItems</code> &lt; 0, returns
-     * <code>maxItems</code> otherwise.
-     */
-    protected BigInteger getMaxItems(BigInteger maxItems) {
-        if (maxItems == null) {
-            return defaultMaxItems;
-        }
-
-        if (maxItems.compareTo(BigInteger.ZERO) == -1) {
-            throw new CmisInvalidArgumentException("maxItems must not be negative!");
-        }
-
-        return maxItems;
-    }
-
-    /**
-     * Returns 0 if <code>skipCount</code> == {@code null}, throws an exception
-     * if <code>skipCount</code> &lt; 0, returns <code>skipCount</code>
-     * otherwise.
-     */
-    protected BigInteger getSkipCount(BigInteger skipCount) {
-        if (skipCount == null) {
-            return BigInteger.ZERO;
-        }
-
-        if (skipCount.compareTo(BigInteger.ZERO) == -1) {
-            throw new CmisInvalidArgumentException("skipCount must not be negative!");
-        }
-
-        return skipCount;
-    }
-
-    /**
-     * Checks the depth parameter if it complies with CMIS specification and
-     * returns the default value if {@code depth} is {@code null}.
-     */
-    protected BigInteger getDepth(BigInteger depth) {
-        if (depth == null) {
-            return defaultDepth;
-        }
-
-        if (depth.compareTo(BigInteger.ZERO) == 0) {
-            throw new CmisInvalidArgumentException("depth must not be 0!");
-        }
-
-        if (depth.compareTo(MINUS_ONE) == -1) {
-            throw new CmisInvalidArgumentException("depth must not be <-1!");
-        }
-
-        return depth;
-    }
-
-    /**
-     * Throws an exception if the given value is negative.
-     */
-    protected void checkNullOrPositive(String name, BigInteger value) {
-        if (value == null) {
-            return;
-        }
-
-        if (value.compareTo(BigInteger.ZERO) == -1) {
-            throw new CmisInvalidArgumentException(name + " must not be negative!");
-        }
-    }
-
-    // --- repository service ---
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-
-        try {
-            return getWrappedService().getRepositoryInfo(repositoryId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        try {
-            return getWrappedService().getRepositoryInfos(extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        includePropertyDefinitions = getDefaultFalse(includePropertyDefinitions);
-        maxItems = getTypesMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems,
-                    skipCount, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Type Id", typeId);
-
-        try {
-            return getWrappedService().getTypeDefinition(repositoryId, typeId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        includePropertyDefinitions = getDefaultFalse(includePropertyDefinitions);
-        depth = getTypesDepth(depth);
-
-        try {
-            return getWrappedService().getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkTypeDefinition(type);
-
-        try {
-            return getWrappedService().createType(repositoryId, type, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkTypeDefinition(type);
-
-        try {
-            return getWrappedService().updateType(repositoryId, type, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Type Id", typeId);
-
-        try {
-            getWrappedService().deleteType(repositoryId, typeId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- navigation service ---
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        maxItems = getMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
-                    includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Folder Id", folderId);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePathSegment = getDefaultFalse(includePathSegment);
-        maxItems = getMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Folder Id", folderId);
-        depth = getDepth(depth);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePathSegment = getDefaultFalse(includePathSegment);
-
-        try {
-            return getWrappedService().getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePathSegment, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Folder Id", folderId);
-
-        try {
-            return getWrappedService().getFolderParent(repositoryId, folderId, filter, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Folder Id", folderId);
-        depth = getDepth(depth);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePathSegment = getDefaultFalse(includePathSegment);
-
-        try {
-            return getWrappedService().getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePathSegment, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includeRelativePathSegment = getDefaultFalse(includeRelativePathSegment);
-
-        try {
-            return getWrappedService().getObjectParents(repositoryId, objectId, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includeRelativePathSegment, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- object service ---
-
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-
-        try {
-            return getWrappedService().create(repositoryId, properties, folderId, contentStream, versioningState,
-                    policies, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-
-        try {
-            return getWrappedService().createDocument(repositoryId, properties, folderId, contentStream,
-                    versioningState, policies, addAces, removeAces, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Source Id", sourceId);
-
-        try {
-            return getWrappedService().createDocumentFromSource(repositoryId, sourceId, properties, folderId,
-                    versioningState, policies, addAces, removeAces, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-        checkId("Folder Id", folderId);
-
-        try {
-            return getWrappedService().createFolder(repositoryId, properties, folderId, policies, addAces, removeAces,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-
-        try {
-            return getWrappedService().createPolicy(repositoryId, properties, folderId, policies, addAces, removeAces,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-
-        try {
-            return getWrappedService().createItem(repositoryId, properties, folderId, policies, addAces, removeAces,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkProperties(properties);
-        checkProperty(properties, PropertyIds.OBJECT_TYPE_ID, String.class);
-        // checkProperty(properties, PropertyIds.SOURCE_ID, String.class);
-        // checkProperty(properties, PropertyIds.TARGET_ID, String.class);
-
-        try {
-            return getWrappedService().createRelationship(repositoryId, properties, policies, addAces, removeAces,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-
-        try {
-            getWrappedService().deleteContentStream(repositoryId, objectId, changeToken, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        allVersions = getDefaultTrue(allVersions);
-
-        try {
-            getWrappedService().deleteObject(repositoryId, objectId, allVersions, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        allVersions = getDefaultTrue(allVersions);
-
-        try {
-            getWrappedService().deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Folder Id", folderId);
-        allVersions = getDefaultTrue(allVersions);
-        unfileObjects = getDefault(unfileObjects);
-        continueOnFailure = getDefaultFalse(continueOnFailure);
-
-        try {
-            return getWrappedService().deleteTree(repositoryId, folderId, allVersions, unfileObjects,
-                    continueOnFailure, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-
-        try {
-            return getWrappedService().getAllowableActions(repositoryId, objectId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        checkNullOrPositive("Offset", offset);
-        checkNullOrPositive("Length", length);
-
-        try {
-            return getWrappedService().getContentStream(repositoryId, objectId, streamId, offset, length, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePolicyIds = getDefaultFalse(includePolicyIds);
-        includeAcl = getDefaultFalse(includeAcl);
-
-        try {
-            return getWrappedService().getObject(repositoryId, objectId, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkPath("Path", path);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePolicyIds = getDefaultFalse(includePolicyIds);
-        includeAcl = getDefaultFalse(includeAcl);
-
-        try {
-            return getWrappedService().getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                    includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-
-        try {
-            return getWrappedService().getProperties(repositoryId, objectId, filter, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        maxItems = getMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().getRenditions(repositoryId, objectId, renditionFilter, maxItems, skipCount,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-        checkId("Target Folder Id", targetFolderId);
-
-        try {
-            getWrappedService().moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-        overwriteFlag = getDefaultTrue(overwriteFlag);
-        checkContentStream(contentStream);
-
-        try {
-            getWrappedService().setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-        checkContentStream(contentStream);
-
-        try {
-            getWrappedService().appendContentStream(repositoryId, objectId, changeToken, contentStream, isLastChunk,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-        checkProperties(properties);
-
-        try {
-            getWrappedService().updateProperties(repositoryId, objectId, changeToken, properties, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkList("Object Id list", objectIdAndChangeToken);
-        checkProperties(properties);
-
-        try {
-            return getWrappedService().bulkUpdateProperties(repositoryId, objectIdAndChangeToken, properties,
-                    addSecondaryTypeIds, removeSecondaryTypeIds, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- versioning service ---
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-
-        try {
-            getWrappedService().cancelCheckOut(repositoryId, objectId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-        major = getDefaultTrue(major);
-
-        try {
-            getWrappedService().checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment,
-                    policies, addAces, removeAces, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        checkRepositoryId(repositoryId);
-        checkHolderId("Object Id", objectId);
-
-        try {
-            getWrappedService().checkOut(repositoryId, objectId, extension, contentCopied);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkIds("Version Series Id", objectId, versionSeriesId);
-        major = getDefaultFalse(major);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        includePolicyIds = getDefaultFalse(includePolicyIds);
-        includeAcl = getDefaultFalse(includeAcl);
-
-        try {
-            return getWrappedService().getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter,
-                    includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
-                    extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkIds("Version Series Id", objectId, versionSeriesId);
-        major = getDefaultFalse(major);
-
-        try {
-            return getWrappedService().getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId, major,
-                    filter, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkIds("Version Series Id", objectId, versionSeriesId);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-
-        try {
-            return getWrappedService().getAllVersions(repositoryId, objectId, versionSeriesId, filter,
-                    includeAllowableActions, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- discovery service ---
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        includeProperties = getDefaultFalse(includeProperties);
-        includePolicyIds = getDefaultFalse(includePolicyIds);
-        includeAcl = getDefaultFalse(includeAcl);
-        maxItems = getMaxItems(maxItems);
-
-        try {
-            return getWrappedService().getContentChanges(repositoryId, changeLogToken, includeProperties, filter,
-                    includePolicyIds, includeAcl, maxItems, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkQueryStatement(statement);
-        searchAllVersions = getDefaultFalse(searchAllVersions);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        includeRelationships = getDefault(includeRelationships);
-        renditionFilter = getDefaultRenditionFilter(renditionFilter);
-        maxItems = getMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                    includeRelationships, renditionFilter, maxItems, skipCount, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- multi filing service ---
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        checkId("Folder Id", folderId);
-        allVersions = getDefaultTrue(allVersions);
-
-        try {
-            getWrappedService().addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-
-        try {
-            getWrappedService().removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- relationship service ---
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        includeSubRelationshipTypes = getDefaultFalse(includeSubRelationshipTypes);
-        relationshipDirection = getDefault(relationshipDirection);
-        includeAllowableActions = getDefaultFalse(includeAllowableActions);
-        maxItems = getMaxItems(maxItems);
-        skipCount = getSkipCount(skipCount);
-
-        try {
-            return getWrappedService().getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes,
-                    relationshipDirection, typeId, filter, includeAllowableActions, maxItems, skipCount, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- ACL service ---
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        aclPropagation = getDefault(aclPropagation);
-
-        try {
-            return getWrappedService().applyAcl(repositoryId, objectId, aces, aclPropagation);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        aclPropagation = getDefault(aclPropagation);
-
-        try {
-            return getWrappedService().applyAcl(repositoryId, objectId, addAces, removeAces, aclPropagation, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-        onlyBasicPermissions = getDefaultTrue(onlyBasicPermissions);
-
-        try {
-            return getWrappedService().getAcl(repositoryId, objectId, onlyBasicPermissions, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    // --- policy service ---
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Policy Id", policyId);
-        checkId("Object Id", objectId);
-
-        try {
-            getWrappedService().applyPolicy(repositoryId, policyId, objectId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Object Id", objectId);
-
-        try {
-            return getWrappedService().getAppliedPolicies(repositoryId, objectId, filter, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        checkRepositoryId(repositoryId);
-        checkId("Policy Id", policyId);
-        checkId("Object Id", objectId);
-
-        try {
-            getWrappedService().removePolicy(repositoryId, policyId, objectId, extension);
-        } catch (Exception e) {
-            throw createCmisException(e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/SimpleLoggingCmisServiceWrapper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/SimpleLoggingCmisServiceWrapper.java
deleted file mode 100644
index 70d69a7..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/wrapper/SimpleLoggingCmisServiceWrapper.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License",repositoryId); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import java.math.BigInteger;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.server.CallContext;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A simple CMIS service wrapper that logs CMIS calls.
- */
-public class SimpleLoggingCmisServiceWrapper extends AbstractCmisServiceWrapper {
-
-    private static final Logger LOG = LoggerFactory.getLogger(SimpleLoggingCmisServiceWrapper.class);
-
-    public SimpleLoggingCmisServiceWrapper(CmisService service) {
-        super(service);
-    }
-
-    /**
-     * Logs a call.
-     */
-    protected void log(String operation, String repositoryId) {
-        if (repositoryId == null) {
-            repositoryId = "<none>";
-        }
-
-        HttpServletRequest request = (HttpServletRequest) getCallContext().get(CallContext.HTTP_SERVLET_REQUEST);
-        String userAgent = request.getHeader("User-Agent");
-        if (userAgent == null) {
-            userAgent = "<unknown>";
-        }
-
-        String binding = getCallContext().getBinding();
-
-        LOG.info("Operation: {}, Repository ID: {}, Binding: {}, User Agent: {}", operation, repositoryId, binding,
-                userAgent);
-    }
-
-    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        log("getRepositoryInfos", null);
-        return getWrappedService().getRepositoryInfos(extension);
-    }
-
-    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        log("getRepositoryInfo", repositoryId);
-        return getWrappedService().getRepositoryInfo(repositoryId, extension);
-    }
-
-    public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("getTypeChildren", repositoryId);
-        return getWrappedService().getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems,
-                skipCount, extension);
-    }
-
-    public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
-            Boolean includePropertyDefinitions, ExtensionsData extension) {
-        log("getTypeDescendants", repositoryId);
-        return getWrappedService().getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions,
-                extension);
-    }
-
-    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-        log("getTypeDefinition", repositoryId);
-        return getWrappedService().getTypeDefinition(repositoryId, typeId, extension);
-    }
-
-    public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        log("createType", repositoryId);
-        return getWrappedService().createType(repositoryId, type, extension);
-    }
-
-    public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
-        log("updateType", repositoryId);
-        return getWrappedService().updateType(repositoryId, type, extension);
-    }
-
-    public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
-        log("deleteType", repositoryId);
-        getWrappedService().deleteType(repositoryId, typeId, extension);
-    }
-
-    public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("getChildren", repositoryId);
-        return getWrappedService().getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension);
-    }
-
-    public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        log("getDescendants", repositoryId);
-        return getWrappedService().getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-        log("getFolderTree", repositoryId);
-        return getWrappedService().getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePathSegment, extension);
-    }
-
-    public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includeRelativePathSegment, ExtensionsData extension) {
-        log("getObjectParents", repositoryId);
-        return getWrappedService().getObjectParents(repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includeRelativePathSegment, extension);
-    }
-
-    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-        log("getFolderParent", repositoryId);
-        return getWrappedService().getFolderParent(repositoryId, folderId, filter, extension);
-    }
-
-    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("getCheckedOutDocs", repositoryId);
-        return getWrappedService().getCheckedOutDocs(repositoryId, folderId, filter, orderBy, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    public String createDocument(String repositoryId, Properties properties, String folderId,
-            ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        log("createDocument", repositoryId);
-        return getWrappedService().createDocument(repositoryId, properties, folderId, contentStream, versioningState,
-                policies, addAces, removeAces, extension);
-    }
-
-    public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
-            String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        log("createDocumentFromSource", repositoryId);
-        return getWrappedService().createDocumentFromSource(repositoryId, sourceId, properties, folderId,
-                versioningState, policies, addAces, removeAces, extension);
-    }
-
-    public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        log("createFolder", repositoryId);
-        return getWrappedService().createFolder(repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
-            Acl removeAces, ExtensionsData extension) {
-        log("createRelationship", repositoryId);
-        return getWrappedService().createRelationship(repositoryId, properties, policies, addAces, removeAces,
-                extension);
-    }
-
-    public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        log("createPolicy", repositoryId);
-        return getWrappedService().createPolicy(repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
-            Acl addAces, Acl removeAces, ExtensionsData extension) {
-        log("createItem", repositoryId);
-        return getWrappedService().createItem(repositoryId, properties, folderId, policies, addAces, removeAces,
-                extension);
-    }
-
-    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-        log("getAllowableActions", repositoryId);
-        return getWrappedService().getAllowableActions(repositoryId, objectId, extension);
-    }
-
-    public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        log("getObject", repositoryId);
-        return getWrappedService().getObject(repositoryId, objectId, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-        log("getProperties", repositoryId);
-        return getWrappedService().getProperties(repositoryId, objectId, filter, extension);
-    }
-
-    public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("getRenditions", repositoryId);
-        return getWrappedService().getRenditions(repositoryId, objectId, renditionFilter, maxItems, skipCount,
-                extension);
-    }
-
-    public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
-            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-            Boolean includeAcl, ExtensionsData extension) {
-        log("getObjectByPath", repositoryId);
-        return getWrappedService().getObjectByPath(repositoryId, path, filter, includeAllowableActions,
-                includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-    }
-
-    public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
-            BigInteger length, ExtensionsData extension) {
-        log("getContentStream", repositoryId);
-        return getWrappedService().getContentStream(repositoryId, objectId, streamId, offset, length, extension);
-    }
-
-    public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            Properties properties, ExtensionsData extension) {
-        log("updateProperties", repositoryId);
-        getWrappedService().updateProperties(repositoryId, objectId, changeToken, properties, extension);
-    }
-
-    public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
-            List<BulkUpdateObjectIdAndChangeToken> objectIdsAndChangeTokens, Properties properties,
-            List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
-        log("bulkUpdateProperties", repositoryId);
-        return getWrappedService().bulkUpdateProperties(repositoryId, objectIdsAndChangeTokens, properties,
-                addSecondaryTypeIds, removeSecondaryTypeIds, extension);
-    }
-
-    public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
-            ExtensionsData extension) {
-        log("moveObject", repositoryId);
-        getWrappedService().moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-    }
-
-    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-        log("deleteObject", repositoryId);
-        getWrappedService().deleteObject(repositoryId, objectId, allVersions, extension);
-    }
-
-    public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
-            UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-        log("deleteTree", repositoryId);
-        return getWrappedService().deleteTree(repositoryId, folderId, allVersions, unfileObjects, continueOnFailure,
-                extension);
-    }
-
-    public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
-            Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-        log("setContentStream", repositoryId);
-        getWrappedService().setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream,
-                extension);
-    }
-
-    public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ExtensionsData extension) {
-        log("deleteContentStream", repositoryId);
-        getWrappedService().deleteContentStream(repositoryId, objectId, changeToken, extension);
-    }
-
-    public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
-            ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
-        log("appendContentStream", repositoryId);
-        getWrappedService().appendContentStream(repositoryId, objectId, changeToken, contentStream, isLastChunk,
-                extension);
-    }
-
-    public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
-            Holder<Boolean> contentCopied) {
-        log("checkOut", repositoryId);
-        getWrappedService().checkOut(repositoryId, objectId, extension, contentCopied);
-    }
-
-    public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-        log("cancelCheckOut", repositoryId);
-        getWrappedService().cancelCheckOut(repositoryId, objectId, extension);
-    }
-
-    public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
-            ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
-            ExtensionsData extension) {
-        log("checkIn", repositoryId);
-        getWrappedService().checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment, policies,
-                addAces, removeAces, extension);
-    }
-
-    public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
-            String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-        log("getObjectOfLatestVersion", repositoryId);
-        return getWrappedService()
-                .getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter,
-                        includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
-                        extension);
-    }
-
-    public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
-            Boolean major, String filter, ExtensionsData extension) {
-        log("getPropertiesOfLatestVersion", repositoryId);
-        return getWrappedService().getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter,
-                extension);
-    }
-
-    public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
-            Boolean includeAllowableActions, ExtensionsData extension) {
-        log("getAllVersions", repositoryId);
-        return getWrappedService().getAllVersions(repositoryId, objectId, versionSeriesId, filter,
-                includeAllowableActions, extension);
-    }
-
-    public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("query", repositoryId);
-        return getWrappedService().query(repositoryId, statement, searchAllVersions, includeAllowableActions,
-                includeRelationships, renditionFilter, maxItems, skipCount, extension);
-    }
-
-    public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
-            String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
-        log("getContentChanges", repositoryId);
-        return getWrappedService().getContentChanges(repositoryId, changeLogToken, includeProperties, filter,
-                includePolicyIds, includeAcl, maxItems, extension);
-    }
-
-    public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
-            ExtensionsData extension) {
-        log("addObjectToFolder", repositoryId);
-        getWrappedService().addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-    }
-
-    public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-        log("removeObjectFromFolder", repositoryId);
-        getWrappedService().removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-    }
-
-    public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
-            RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
-            BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        log("getObjectRelationships", repositoryId);
-        return getWrappedService().getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes,
-                relationshipDirection, typeId, filter, includeAllowableActions, maxItems, skipCount, extension);
-    }
-
-    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
-        log("getAcl", repositoryId);
-        return getWrappedService().getAcl(repositoryId, objectId, onlyBasicPermissions, extension);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
-            AclPropagation aclPropagation, ExtensionsData extension) {
-        log("applyAcl", repositoryId);
-        return getWrappedService().applyAcl(repositoryId, objectId, addAces, removeAces, aclPropagation, extension);
-    }
-
-    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        log("applyPolicy", repositoryId);
-        getWrappedService().applyPolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
-        log("removePolicy", repositoryId);
-        getWrappedService().removePolicy(repositoryId, policyId, objectId, extension);
-    }
-
-    public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
-            ExtensionsData extension) {
-        log("getRepositoryInfos", repositoryId);
-        return getWrappedService().getAppliedPolicies(repositoryId, objectId, filter, extension);
-    }
-
-    public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-        log("create", repositoryId);
-        return getWrappedService().create(repositoryId, properties, folderId, contentStream, versioningState, policies,
-                extension);
-    }
-
-    public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
-            ExtensionsData extension) {
-        log("deleteObjectOrCancelCheckOut", repositoryId);
-        getWrappedService().deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, extension);
-    }
-
-    public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
-        log("applyAcl", repositoryId);
-        return getWrappedService().applyAcl(repositoryId, objectId, aces, aclPropagation);
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/gunit/org/apache/chemistry/opencmis/server/support/query/CMISQL.testsuite b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/gunit/org/apache/chemistry/opencmis/server/support/query/CMISQL.testsuite
deleted file mode 100644
index 7fe8a67..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/gunit/org/apache/chemistry/opencmis/server/support/query/CMISQL.testsuite
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Stefane Fermigier, Nuxeo
- *     Florent Guillaume, Nuxeo
- */
-gunit CMISQL;
-
-@header{
-package org.apache.chemistry.opencmis.server.support.query;
-}
-
-// ----- Lexer tests -----
-
-ID:
-"a" OK
-"!" FAIL
-"toto" OK
-"toto123" OK
-"toto123_" OK
-"_foo" OK
-"foo:bar" OK
-"123" FAIL
-"123abc" FAIL
-
-NUM_LIT:
-"123" OK
-"0" OK
-"-0" OK
-"1" OK
-"-1" OK
-"-123" OK
-"0123" OK
-"-0123" OK
-"123abc" FAIL
-"123E" FAIL
-"123.456" OK
-"+123.456" OK
-"-123.456" OK
-".456" OK
-"+.456" OK
-"-.456" OK
-"123." OK
-"+123." OK
-"-123." OK
-"+123.456E78" OK
-"-123.456E-78" OK
-".456E78" OK
-"+123.E+78" OK
-
-STRING_LIT:
-"'abc'" OK
-"'a''bc'" OK
-"'abc" FAIL
-"abc'" FAIL
-"'ab'c'" FAIL
-
-BOOL_LIT:
-"TRUE" OK
-"true" OK
-"FALSE" OK
-"false" OK
-
-TIME_LIT:
-"TIMESTAMP '2010-01-01Z01:01:01.000Z'" OK
-"timestamp   '123'" OK
-"TIMESTAMP 123" FAIL
-
-// ----- Parser tests -----
-
-literal:
-"123" OK
-"-123" OK
-"0" OK
-"0123" OK
-"abc123" OK
-"123abc" FAIL
-"'abc'" OK
-"123.345E78" OK
-
-order_by_clause:
-"ORDER BY foo" -> (ORDER_BY (COL foo) ASC)
-"ORDER BY foo ASC" -> (ORDER_BY (COL foo) ASC)
-"ORDER BY foo DESC" -> (ORDER_BY (COL foo) DESC)
-"ORDER BY t.foo, bar DESC" -> (ORDER_BY (COL t foo) ASC (COL bar) DESC)
-
-column_reference:
-"foo" -> (COL foo)
-"bar.foo" -> (COL bar foo)
-
-from_clause:
-"FROM foo JOIN bar ON x = y" -> (FROM (TABLE foo) (JOIN INNER (TABLE bar) (ON (COL x) = (COL y))))
-
-table_join:
-"LEFT OUTER JOIN foo ON x = y" -> (JOIN LEFT (TABLE foo) (ON (COL x) = (COL y)))
-"INNER JOIN foo" -> (JOIN INNER (TABLE foo))
-
-one_table:
-"foo" -> (TABLE foo)
-"foo bar" -> (TABLE foo bar)
-"foo AS bar" -> (TABLE foo bar)
-"(foo)" -> (TABLE foo)
-
-in_predicate:
-"foo IN ( 'a', 'b', 'c')" -> (BIN_OP IN (COL foo) (LIST 'a' 'b' 'c'))
-"foo NOT IN ( 1, 2, 3)" -> (BIN_OP NOT_IN (COL foo) (LIST 1 2 3))
-
-quantified_in_predicate:
-"ANY foo IN ('a', 1)" -> (BIN_OP_ANY IN (LIST 'a' 1) (COL foo))
-
-comparison_predicate:
-"foo = 1" -> (BIN_OP = (COL foo) 1)
-"foo <> 1" -> (BIN_OP <> (COL foo) 1)
-
-predicate:
-"foo = 1" -> (BIN_OP = (COL foo) 1)
-"foo IN ('bar')" -> (BIN_OP IN (COL foo) (LIST 'bar'))
-"foo IS NULL" -> (UN_OP IS_NULL (COL foo))
-"foo IS NOT NULL" -> (UN_OP IS_NOT_NULL (COL foo))
-"1 = ANY foo" -> (BIN_OP_ANY = 1 (COL foo))
-"LOWER(foo) = 'bar'" -> (BIN_OP = (FUNC LOWER (COL foo)) 'bar')
-"quux(foo) = 'bar'" -> (BIN_OP = (FUNC quux (COL foo)) 'bar')
-
-folder_predicate:
-"IN_FOLDER(foo,'ID123')" -> (FUNC IN_FOLDER foo 'ID123')
-"IN_FOLDER('ID123')" -> (FUNC IN_FOLDER 'ID123')
-"IN_TREE(foo,'ID123')" -> (FUNC IN_TREE foo 'ID123')
-"IN_TREE('ID123')" -> (FUNC IN_TREE 'ID123')
-
-text_search_predicate:
-"CONTAINS('foo')" -> (FUNC CONTAINS 'foo')
-"CONTAINS(bar, 'foo')" -> (FUNC CONTAINS bar 'foo')
-
-where_clause:
-"WHERE foo = 1" -> (WHERE (BIN_OP = (COL foo) 1))
-"WHERE a = 1 AND b <> 2 OR c >= 3 AND NOT d <= 4" -> (WHERE (BIN_OP = (COL a) 1) AND (BIN_OP <> (COL b) 2) OR (BIN_OP >= (COL c) 3) AND NOT (BIN_OP <= (COL d) 4))
-
-query:
-"SELECT * FROM Document" -> (SELECT * (FROM (TABLE Document)))
-"SELECT a, b, c FROM Document" -> (SELECT (LIST (COL a) (COL b) (COL c)) (FROM (TABLE Document)))
-"SELECT a, b FROM Document ORDER BY a, b" -> (SELECT (LIST (COL a) (COL b)) (FROM (TABLE Document)) (ORDER_BY (COL a) ASC (COL b) ASC))
-"SELECT DISTINCT a, b, c FROM Document" -> (SELECT DISTINCT (LIST (COL a) (COL b) (COL c)) (FROM (TABLE Document)))
-
-
-// Examples from the specs.
-
-<<
-SELECT TITLE, AUTHORS, DATE
-FROM WHITE_PAPER
-WHERE ( IN_TREE('ID00093854763') ) AND ( 'SMITH' = ANY AUTHORS )
->> -> (SELECT (LIST (COL TITLE) (COL AUTHORS) (COL DATE)) (FROM (TABLE WHITE_PAPER)) (WHERE ( (FUNC IN_TREE 'ID00093854763') ) AND ( (BIN_OP_ANY = 'SMITH' (COL AUTHORS)) )))
-
-<<
-SELECT OBJECT_ID, SCORE() AS X, DESTINATION, DEPARTURE_DATES
-FROM TRAVEL_BROCHURE
-WHERE ( CONTAINS('CARIBBEAN CENTRAL AMERICA CRUISE TOUR') ) AND
-  ( '2010-1-1' < ANY DEPARTURE_DATES )
-ORDER BY X DESC
->> OK
-
-<<
-SELECT *
-FROM CAR_REVIEW
-WHERE ( LOWER(MAKE) = 'buick' ) OR
-  ( ANY FEATURES IN ('NAVIGATION SYSTEM', 'SATELLITE RADIO', 'MP3' ) )
->> OK
-
-<<
-SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES
-FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM
-WHERE ( 100000 <= ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE '%Katrina%' )
->> OK
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java
deleted file mode 100644
index 0a45fc6..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.server.support;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.junit.Test;
-
-public class TypeDefinitionFactoryTest {
-
-    @Test
-    public void testTypeDefinitionFactory() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        assertNotNull(tdf);
-        assertNotNull(tdf.getDocumentTypeDefinitionClass());
-        assertNotNull(tdf.getFolderTypeDefinitionClass());
-        assertNotNull(tdf.getPolicyTypeDefinitionClass());
-        assertNotNull(tdf.getRelationshipTypeDefinitionClass());
-        assertNotNull(tdf.getItemTypeDefinitionClass());
-        assertNotNull(tdf.getSecondaryTypeDefinitionClass());
-    }
-
-    @Test
-    public void testCreateBaseTypes() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        CmisVersion cmisVersion = CmisVersion.CMIS_1_1;
-
-        assertTypeDefinition(tdf.createBaseDocumentTypeDefinition(cmisVersion));
-        assertTypeDefinition(tdf.createBaseFolderTypeDefinition(cmisVersion));
-        assertTypeDefinition(tdf.createBasePolicyTypeDefinition(cmisVersion));
-        assertTypeDefinition(tdf.createBaseRelationshipTypeDefinition(cmisVersion));
-        assertTypeDefinition(tdf.createBaseItemTypeDefinition(cmisVersion));
-        assertTypeDefinition(tdf.createBaseSecondaryTypeDefinition(cmisVersion));
-    }
-
-    @Test
-    public void testCopy11() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        CmisVersion cmisVersion = CmisVersion.CMIS_1_1;
-
-        TypeDefinition docType1 = tdf.createBaseDocumentTypeDefinition(cmisVersion);
-        TypeDefinition docType2 = tdf.copy(docType1, false, cmisVersion);
-        TypeDefinition docType3 = tdf.copy(docType1, true, cmisVersion);
-
-        assertTrue(docType2.getPropertyDefinitions().isEmpty());
-        assertEquals(docType1.getPropertyDefinitions().size(), docType3.getPropertyDefinitions().size());
-    }
-
-    @Test
-    public void testCopy10() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        CmisVersion cmisVersion = CmisVersion.CMIS_1_0;
-
-        TypeDefinition docType1 = tdf.createBaseDocumentTypeDefinition(cmisVersion);
-        TypeDefinition docType2 = tdf.copy(docType1, false, cmisVersion);
-        TypeDefinition docType3 = tdf.copy(docType1, true, cmisVersion);
-
-        assertTrue(docType2.getPropertyDefinitions().isEmpty());
-        assertEquals(docType1.getPropertyDefinitions().size(), docType3.getPropertyDefinitions().size());
-    }
-
-    @Test
-    public void testCreateTypeDefinitionList() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        CmisVersion cmisVersion = CmisVersion.CMIS_1_1;
-        Map<String, TypeDefinition> types = new HashMap<String, TypeDefinition>();
-
-        TypeDefinition type;
-        TypeDefinition docType;
-        TypeDefinition folderType;
-
-        docType = tdf.createBaseDocumentTypeDefinition(cmisVersion);
-        types.put(docType.getId(), docType);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType1");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType2");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType3");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType4");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType5");
-        types.put(type.getId(), type);
-
-        folderType = tdf.createBaseFolderTypeDefinition(cmisVersion);
-        types.put(folderType.getId(), folderType);
-
-        TypeDefinitionList tdl1 = tdf.createTypeDefinitionList(types, null, true, null, null);
-        assertNotNull(tdl1);
-        assertEquals(2, tdl1.getList().size());
-        assertEquals(2, tdl1.getNumItems().intValue());
-        assertEquals(Boolean.FALSE, tdl1.hasMoreItems());
-
-        assertEquals("cmis:document", tdl1.getList().get(0).getId());
-        assertEquals("cmis:folder", tdl1.getList().get(1).getId());
-        assertEquals(26, tdl1.getList().get(0).getPropertyDefinitions().size());
-        assertEquals(14, tdl1.getList().get(1).getPropertyDefinitions().size());
-
-        TypeDefinitionList tdl2 = tdf.createTypeDefinitionList(types, "cmis:document", false, null, null);
-        assertNotNull(tdl2);
-        assertEquals(5, tdl2.getList().size());
-        assertEquals(5, tdl2.getNumItems().intValue());
-        assertEquals(Boolean.FALSE, tdl2.hasMoreItems());
-        assertTrue(tdl2.getList().get(0).getPropertyDefinitions().isEmpty());
-
-        TypeDefinitionList tdl3 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(3),
-                BigInteger.ZERO);
-        assertNotNull(tdl3);
-        assertEquals(3, tdl3.getList().size());
-        assertEquals(5, tdl3.getNumItems().intValue());
-        assertEquals(Boolean.TRUE, tdl3.hasMoreItems());
-        assertFalse(tdl3.getList().get(0).getPropertyDefinitions().isEmpty());
-
-        TypeDefinitionList tdl4 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(3),
-                BigInteger.valueOf(2));
-        assertNotNull(tdl4);
-        assertEquals(3, tdl4.getList().size());
-        assertEquals(5, tdl4.getNumItems().intValue());
-        assertEquals(Boolean.FALSE, tdl4.hasMoreItems());
-
-        TypeDefinitionList tdl5 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(2),
-                BigInteger.valueOf(2));
-        assertNotNull(tdl5);
-        assertEquals(2, tdl5.getList().size());
-        assertEquals(5, tdl5.getNumItems().intValue());
-        assertEquals(Boolean.TRUE, tdl5.hasMoreItems());
-
-        assertEquals("test:docType1", tdl2.getList().get(0).getId());
-        assertEquals("test:docType2", tdl2.getList().get(1).getId());
-        assertEquals("test:docType3", tdl2.getList().get(2).getId());
-        assertEquals("test:docType4", tdl2.getList().get(3).getId());
-        assertEquals("test:docType5", tdl2.getList().get(4).getId());
-
-        assertEquals(tdl2.getList().get(0).getId(), tdl3.getList().get(0).getId());
-        assertEquals(tdl2.getList().get(2).getId(), tdl4.getList().get(0).getId());
-        assertEquals(tdl2.getList().get(2).getId(), tdl5.getList().get(0).getId());
-        assertEquals(tdl4.getList().get(0).getId(), tdl5.getList().get(0).getId());
-    }
-
-    @Test
-    public void testCreateTypeDefinitionListObject() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-
-        assertNotNull(tdf.createTypeDefinitionList(Collections.<TypeDefinition> emptyList(), true, null));
-
-        try {
-            tdf.createTypeDefinitionList(null, true, null);
-            fail();
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            tdf.createTypeDefinitionList(Collections.<TypeDefinition> emptyList(), true, BigInteger.valueOf(-1));
-            fail();
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-    }
-
-    @Test
-    public void testCreateTypeDescendants() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-        CmisVersion cmisVersion = CmisVersion.CMIS_1_1;
-        Map<String, TypeDefinition> types = new HashMap<String, TypeDefinition>();
-
-        TypeDefinition type;
-        TypeDefinition type2;
-        TypeDefinition docType;
-        TypeDefinition folderType;
-
-        docType = tdf.createBaseDocumentTypeDefinition(cmisVersion);
-        types.put(docType.getId(), docType);
-
-        type = tdf.createChildTypeDefinition(docType, "test:docType1");
-        types.put(type.getId(), type);
-
-        type2 = tdf.createChildTypeDefinition(docType, "test:docType2");
-        types.put(type2.getId(), type2);
-
-        type = tdf.createChildTypeDefinition(type2, "test:docType2-1");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(type2, "test:docType2-2");
-        types.put(type.getId(), type);
-
-        type = tdf.createChildTypeDefinition(type2, "test:docType2-3");
-        types.put(type.getId(), type);
-
-        folderType = tdf.createBaseFolderTypeDefinition(cmisVersion);
-        types.put(folderType.getId(), folderType);
-
-        List<TypeDefinitionContainer> typeDefs;
-
-        typeDefs = tdf.createTypeDescendants(types, null, BigInteger.valueOf(-1), null);
-        assertNotNull(typeDefs);
-        assertEquals(2, typeDefs.size());
-
-        typeDefs = tdf.createTypeDescendants(types, null, BigInteger.valueOf(1), null);
-        assertNotNull(typeDefs);
-        assertEquals(2, typeDefs.size());
-    }
-
-    @Test
-    public void testCreateTypeContainerObject() {
-        TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
-
-        assertNotNull(tdf.createTypeDefinitionContainer(tdf.createBaseDocumentTypeDefinition(CmisVersion.CMIS_1_1),
-                null));
-
-        try {
-            tdf.createTypeDefinitionContainer(null, null);
-            fail();
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-    }
-
-    private void assertTypeDefinition(TypeDefinition typeDef) {
-        assertNotNull(typeDef);
-        assertNotNull(typeDef.getBaseTypeId());
-        assertNotNull(typeDef.getId());
-
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java
deleted file mode 100644
index e9c970d..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import static org.junit.Assert.fail;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.Lexer;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.stringtemplate.StringTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class is clone of org.antlr.gunit.gUnitBase class adapted to Java style
- * Because the original class can't deal with composite grammar this is a
- * replacement working around this antlr bug.
- * 
- */
-public class AbstractParserTest {
-
-    private static final Logger log = LoggerFactory.getLogger(AbstractParserTest.class);
-
-    protected String superGrammarName;
-    protected String baseLexerName;
-    Class<?> lexer;
-    Class<?> parser;
-    protected String treeParserPath;
-
-    protected void setUp(Class<?> lexerClass, Class<?> parserClass, String baseGrammar, String baseLexer) {
-        lexer = lexerClass;
-        parser = parserClass;
-        this.superGrammarName = baseGrammar;
-        this.baseLexerName = baseLexer;
-    }
-
-    protected void tearDown() {
-    }
-
-    protected void testLexerOk(String rule, String statement) {
-        // test input: "a"
-        try {
-            Object retval = execLexer(rule, statement);
-            log.debug("testing rule " + rule + " parsed to: " + retval);
-        } catch (Exception e) {
-            fail("testing rule " + rule + ": " + e.toString());
-        }
-    }
-
-    protected void testLexerFail(String rule, String statement) {
-        // test input: "a"
-        try {
-            Object retval = execLexer(rule, statement);
-            fail("testing rule should fail " + rule);
-        } catch (Exception e) {
-            log.debug("testing rule " + rule + " parsed with exception: " + e);
-        }
-    }
-
-    protected void testParserOk(String rule, String statement) {
-        try {
-            Object retval = execParser(rule, statement);
-            log.debug("testing rule " + rule + " parsed to: " + retval);
-        } catch (Exception e) {
-            fail("testing rule " + rule + " failed: " + e.toString());
-        }
-    }
-
-    protected void testParserFail(String rule, String statement) {
-        try {
-            Object retval = execParser(rule, statement);
-            fail("testing rule should fail " + rule);
-        } catch (Exception e) {
-            log.debug("testing rule " + rule + " failed: " + e.toString());
-        }
-    }
-
-    protected void testParser(String rule, String statement, String expectedResult) {
-        try {
-            Object actual = execParser(rule, statement);
-            log.debug("testing rule " + rule + " parsed to: " + actual);
-        } catch (Exception e) {
-            fail("testing rule " + rule + " failed: " + e);
-        }
-    }
-
-    // Invoke target lexer.rule
-    public String execLexer(String testRuleName, String testInput) throws Exception {
-        String result = null;
-        CharStream input;
-        /** Set up ANTLR input stream based on input source, file or String */
-        input = new ANTLRStringStream(testInput);
-
-        /** Use Reflection to create instances of lexer and parser */
-        Class<?>[] lexArgTypes = new Class[] { CharStream.class }; // assign
-                                                                   // type to
-                                                                   // lexer's
-                                                                   // args
-        Constructor<?> lexConstructor = lexer.getConstructor(lexArgTypes);
-        Object[] lexArgs = new Object[] { input }; // assign value to lexer's
-                                                   // args
-        Object lexObj = lexConstructor.newInstance(lexArgs); // makes new
-                                                             // instance of
-                                                             // lexer
-        Method ruleName = null;
-
-        try {
-            ruleName = lexer.getMethod("m" + testRuleName, new Class[0]);
-        } catch (NoSuchMethodException e) {
-            // try superclass lexers
-            Class<?> lexerSuper = Class.forName(lexer.getName() + "_" + baseLexerName);
-            ruleName = lexerSuper.getMethod("m" + testRuleName, new Class[0]);
-            lexArgTypes = new Class[] { CharStream.class, CmisQlStrictLexer.class };
-            lexArgs = new Object[] { input, lexObj };
-            lexConstructor = lexerSuper.getConstructor(lexArgTypes);
-            lexObj = lexConstructor.newInstance(lexArgs);
-        }
-        /** Invoke lexer rule, and get the current index in CharStream */
-        ruleName.invoke(lexObj, new Object[0]);
-        Method ruleName2 = lexer.getMethod("getCharIndex", new Class[0]);
-        int currentIndex = (Integer) ruleName2.invoke(lexObj, new Object[0]);
-        if (currentIndex != input.size()) {
-            throw new RuntimeException("extra text found, '" + input.substring(currentIndex, input.size() - 1) + "'");
-            // System.out.println("extra text found, '"+input.substring(currentIndex,
-            // input.size()-1)+"'");
-        }
-
-        return result;
-    }
-
-    // Invoke target parser.rule
-    public Object execParser(String testRuleName, String testInput) throws Exception {
-        String result = null;
-        CharStream input;
-        /** Set up ANTLR input stream based on input source, file or String */
-        input = new ANTLRStringStream(testInput);
-
-        /** Use Reflection to create instances of lexer and parser */
-        // assign type to lexer's args
-        Class<?>[] lexArgTypes = new Class[] { CharStream.class };
-        Constructor<?> lexConstructor = lexer.getConstructor(lexArgTypes);
-
-        // assign value to lexer's args
-        Object[] lexArgs = new Object[] { input };
-
-        // makes new instance of lexer
-        Object lexObj = lexConstructor.newInstance(lexArgs);
-
-        CommonTokenStream tokens = new CommonTokenStream((Lexer) lexObj);
-        
-        // assign type to parser's args
-        Class<?>[] parArgTypes = new Class[] { TokenStream.class };
-        Constructor<?> parConstructor = parser.getConstructor(parArgTypes);
-
-        // assign value to parser's args
-        Object[] parArgs = new Object[] { tokens };
-
-        // makes new instance of parser
-        Object parObj = parConstructor.newInstance(parArgs);
-
-        Method ruleName = parser.getMethod(testRuleName);
-
-        /** Invoke grammar rule, and store if there is a return value */
-        Object ruleReturn = ruleName.invoke(parObj);
-
-        /** If rule has return value, determine if it contains an AST or a ST */
-        if (ruleReturn != null) {
-            if (ruleReturn.getClass().toString().indexOf(testRuleName + "_return") > 0) {
-                try { // NullPointerException may happen here...
-                    String classPath = parser.getName();
-                    if (null != superGrammarName) {
-                        classPath += "_" + superGrammarName;
-                    }
-                    Class<?> _return = Class.forName(classPath + "$" + testRuleName + "_return");
-                    Method[] methods = _return.getDeclaredMethods();
-                    for (Method method : methods) {
-                        if (method.getName().equals("getTree")) {
-                            Method returnName = _return.getMethod("getTree");
-                            CommonTree tree = (CommonTree) returnName.invoke(ruleReturn);
-                            result = tree.toStringTree();
-                        } else if (method.getName().equals("getTemplate")) {
-                            Method returnName = _return.getMethod("getTemplate");
-                            StringTemplate st = (StringTemplate) returnName.invoke(ruleReturn);
-                            result = st.toString();
-                        }
-                    }
-                } catch (Exception e) {
-                    // Note: If any exception occurs, the test is viewed as
-                    // failed.
-                    throw (e);
-                }
-            }
-        }
-
-        /** Invalid input */
-        // Since AntLR 3.3 we have to skip EOF tokens at the end 
-        // This requires modification of the default code 
-        // if (tokens.index() != tokens.size()) {
-        // to
-        if (tokens.get(tokens.index()).getType() != Token.EOF) {
-            throw new RuntimeException("Invalid input.");
-        }
-
-        /** Check for syntax errors */
-        if (((BaseRecognizer) parObj).getNumberOfSyntaxErrors() > 0) {
-            throw new RuntimeException("Syntax error occured");
-        }
-        return result;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/StringUtilTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/StringUtilTest.java
deleted file mode 100644
index 496cde3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/StringUtilTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.server.support.query;

-

-import static org.junit.Assert.assertEquals;

-import static org.junit.Assert.assertNull;

-

-import org.junit.Test;

-

-public class StringUtilTest {

-    

-    @Test

-    public void testUnescape() {

-        String s = "abc";

-        String res = StringUtil.unescape(s, null);

-        assertEquals("abc", res);

-        

-        s="ab\\\\c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab\\c", res);

-

-        s="ab\\'c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab'c", res);

-        

-        s="ab\\'";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab'", res);

-

-        s="\\\\abc";

-        res = StringUtil.unescape(s, null);

-        assertEquals("\\abc", res);

-        

-        s="abc\\\\";

-        res = StringUtil.unescape(s, null);

-        assertEquals("abc\\", res);

-        

-        s="abc\\";

-        res = StringUtil.unescape(s, null);

-        assertNull(res);

-

-        s="ab\\xc";

-        res = StringUtil.unescape(s, null);

-        assertNull(res);

-    

-        s="ab\\xc";

-        res = StringUtil.unescape(s, "\\'x");

-        assertEquals("abxc", res);

-        

-        s="abc\\x";

-        res = StringUtil.unescape(s, "\\'x");

-        assertEquals("abcx", res);

-

-        s="ab\\yc";

-        res = StringUtil.unescape(s, "\\'x");

-        assertNull(res);

-

-        // double escaping

-        s="ab\\\\\\\\c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab\\\\c", res);

-

-        s="ab\\\\'c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab\\'c", res);

-        

-        s="ab\\'Johnny\\'c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab'Johnny'c", res);

-

-        s="ab\\\\'Johnny\\\\'c";

-        res = StringUtil.unescape(s, null);

-        assertEquals("ab\\'Johnny\\'c", res);

-

-        s="\\\\";

-        res = StringUtil.unescape(s, null);

-        assertEquals("\\", res);

-

-        s="\\";

-        res = StringUtil.unescape(s, null);

-        assertNull(res);

-

-        s="a";

-        res = StringUtil.unescape(s, null);

-        assertEquals("a", res);

-        

-        s="";

-        res = StringUtil.unescape(s, null);

-        assertEquals("", res);

-

-        res = StringUtil.unescape(null, null);

-        assertNull(res);

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestCalendarHelper.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestCalendarHelper.java
deleted file mode 100644
index ae47cf3..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestCalendarHelper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Authors:
- *     Florent Guillaume, Nuxeo
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import org.junit.Test;
-
-public class TestCalendarHelper {
-
-    @Test
-    public void testToString1() {
-        Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT+07:30"));
-        cal.set(Calendar.YEAR, 2009);
-        cal.set(Calendar.MONTH, 0);
-        cal.set(Calendar.DATE, 2);
-        cal.set(Calendar.HOUR_OF_DAY, 3);
-        cal.set(Calendar.MINUTE, 4);
-        cal.set(Calendar.SECOND, 5);
-        cal.set(Calendar.MILLISECOND, 6);
-        assertEquals("2009-01-02T03:04:05.006+07:30", CalendarHelper.toString(cal));
-    }
-
-    @Test
-    public void testToString2() {
-        Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT-06:00"));
-        cal.set(Calendar.YEAR, 2008);
-        cal.set(Calendar.MONTH, 11);
-        cal.set(Calendar.DATE, 31);
-        cal.set(Calendar.HOUR_OF_DAY, 23);
-        cal.set(Calendar.MINUTE, 59);
-        cal.set(Calendar.SECOND, 59);
-        cal.set(Calendar.MILLISECOND, 999);
-        assertEquals("2008-12-31T23:59:59.999-06:00", CalendarHelper.toString(cal));
-    }
-
-    @Test
-    public void testToString3() {
-        Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"));
-        cal.set(Calendar.YEAR, 2008);
-        cal.set(Calendar.MONTH, 0);
-        cal.set(Calendar.DATE, 1);
-        cal.set(Calendar.HOUR_OF_DAY, 1);
-        cal.set(Calendar.MINUTE, 1);
-        cal.set(Calendar.SECOND, 1);
-        cal.set(Calendar.MILLISECOND, 1);
-        assertEquals("2008-01-01T01:01:01.001Z", CalendarHelper.toString(cal));
-    }
-
-    @Test
-    public void testFromString() {
-        Calendar cal;
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.123-06:30");
-        assertEquals("2009-07-14T12:00:00.123-06:30", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00Z");
-        assertEquals("2009-07-14T12:00:00.000Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.5Z");
-        assertEquals("2009-07-14T12:00:00.500Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.44Z");
-        assertEquals("2009-07-14T12:00:00.440Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.333Z");
-        assertEquals("2009-07-14T12:00:00.333Z", CalendarHelper.toString(cal));
-        // no timezone
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00");
-        assertEquals("2009-07-14T12:00:00.000Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.5");
-        assertEquals("2009-07-14T12:00:00.500Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.44");
-        assertEquals("2009-07-14T12:00:00.440Z", CalendarHelper.toString(cal));
-        cal = CalendarHelper.fromString("2009-07-14T12:00:00.333");
-        assertEquals("2009-07-14T12:00:00.333Z", CalendarHelper.toString(cal));
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java
deleted file mode 100644
index 6cee756..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestParserExt extends AbstractParserTest {
-
-    @Before
-    public void setUp() throws Exception {
-        super.setUp(CmisQlExtLexer.class, CmisQlExtParser.class, null, "CmisBaseLexer");
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    @Test
-    public void test_predicate1() {
-        testParser("value_expression", "LOWER(foo)", "(FUNC LOWER (COL foo))");
-    }
-
-    @Test
-    public void test_query1() {
-        testParser("query", "SELECT DISTINCT a, b, c FROM Document",
-                "(SELECT DISTINCT (LIST (COL a) (COL b) (COL c)) (FROM (TABLE Document)))");
-    }
-
-    @Test
-    public void test_query2() {
-        testParserOk("query", "SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES "
-                + "FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM "
-                + "    WHERE ( 100000 <= ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE '%Katrina%' )");
-    }
-
-    @Test
-    public void test_query3() {
-        testParserOk("query", "SELECT OBJECT_ID, SCORE() AS X, DESTINATION, DEPARTURE_DATES " + "FROM TRAVEL_BROCHURE "
-                + "WHERE ( CONTAINS('CARIBBEAN CENTRAL AMERICA CRUISE TOUR') ) AND( '2010-1-1' < ANY DEPARTURE_DATES )");
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java
deleted file mode 100644
index 78a554c..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestParserStrict extends AbstractParserTest {
-
-    @Before
-    public void setUp() {
-        super.setUp(CmisQlStrictLexer.class, CmisQlStrictParser.class, "CmisBaseGrammar", "CmisBaseLexer");
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ----- Lexer tests -----
-
-    // ID:
-    @Test
-    public void testID1() {
-        testLexerOk("ID", "a");
-    }
-
-    // "toto" OK
-    @Test
-    public void testID2() {
-        testLexerFail("ID", "!");
-    }
-
-    @Test
-    public void testID3() {
-        testLexerOk("ID", "toto");
-    }
-
-    // "toto123" OK
-    @Test
-    public void testID4() throws Exception {
-        testLexerOk("ID", "toto123");
-    }
-
-    // "toto123_" OK
-    @Test
-    public void testID5() throws Exception {
-        testLexerOk("ID", "toto123_");
-    }
-
-    // "_foo" OK
-    @Test
-    public void testID6() throws Exception {
-        testLexerOk("ID", "_foo");
-    }
-
-    // "foo:bar" OK
-    @Test
-    public void testID7() throws Exception {
-        testLexerOk("ID", "foo:bar");
-    }
-
-    // "123" FAIL
-    @Test
-    public void testID8() throws Exception {
-        testLexerFail("ID", "123");
-    }
-
-    // "123abc" FAIL
-    @Test
-    public void testID9() throws Exception {
-        testLexerFail("ID", "123abc");
-    }
-
-    // NUM_LIT:
-    // "123" OK
-    @Test
-    public void testNUM_LIT1() throws Exception {
-        testLexerOk("NUM_LIT", "123");
-    }
-
-    // "0" OK
-    @Test
-    public void testNUM_LIT2() throws Exception {
-        testLexerOk("NUM_LIT", "0");
-    }
-
-    // "-0" OK
-    @Test
-    public void testNUM_LIT3() throws Exception {
-        testLexerOk("NUM_LIT", "-0");
-    }
-
-    // "1" OK
-    @Test
-    public void testNUM_LIT4() throws Exception {
-        testLexerOk("NUM_LIT", "1");
-    }
-
-    // "-1" OK
-    @Test
-    public void testNUM_LIT5() throws Exception {
-        testLexerOk("NUM_LIT", "-1");
-    }
-
-    // "-123" OK
-    @Test
-    public void testNUM_LIT6() throws Exception {
-        testLexerOk("NUM_LIT", "123");
-    }
-
-    // "0123" OK
-    @Test
-    public void testNUM_LIT7() throws Exception {
-        testLexerOk("NUM_LIT", "0123");
-    }
-
-    // "-0123" OK
-    @Test
-    public void testNUM_LIT8() throws Exception {
-        testLexerOk("NUM_LIT", "-0123");
-    }
-
-    // "123abc" FAIL
-    @Test
-    public void testNUM_LIT9() throws Exception {
-        testLexerFail("NUM_LIT", "123abc");
-    }
-
-    // "123E" FAIL
-    @Test
-    public void testNUM_LIT10() throws Exception {
-        testLexerFail("NUM_LIT", "123E");
-    }
-
-    // "123.456" OK
-    @Test
-    public void testNUM_LIT11() throws Exception {
-        testLexerOk("NUM_LIT", "123.456");
-    }
-
-    // "+123.456" OK
-    @Test
-    public void testNUM_LIT12() throws Exception {
-        testLexerOk("NUM_LIT", "+123.456");
-    }
-
-    // "-123.456" OK
-    @Test
-    public void testNUM_LIT13() throws Exception {
-        testLexerOk("NUM_LIT", "-123.456");
-    }
-
-    // ".456" OK
-    @Test
-    public void testNUM_LIT14() throws Exception {
-        testLexerOk("NUM_LIT", ".456");
-    }
-
-    // "+.456" OK
-    @Test
-    public void testNUM_LIT15() throws Exception {
-        testLexerOk("NUM_LIT", "+.456");
-    }
-
-    // "-.456" OK
-    @Test
-    public void testNUM_LIT16() throws Exception {
-        testLexerOk("NUM_LIT", "-.456");
-    }
-
-    // "123." OK
-    @Test
-    public void testNUM_LIT17() throws Exception {
-        testLexerOk("NUM_LIT", "123.");
-    }
-
-    // "+123." OK
-    @Test
-    public void testNUM_LIT18() throws Exception {
-        testLexerOk("NUM_LIT", "+123.");
-    }
-
-    // "-123." OK
-    @Test
-    public void testNUM_LIT19() throws Exception {
-        testLexerOk("NUM_LIT", "-123.");
-    }
-
-    // "+123.456E78" OK
-    @Test
-    public void testNUM_LIT20() throws Exception {
-        testLexerOk("NUM_LIT", "+123.456E78");
-    }
-
-    // "-123.456E-78" OK
-    @Test
-    public void testNUM_LIT21() throws Exception {
-        testLexerOk("NUM_LIT", "-123.456E-78");
-    }
-
-    // ".456E78" OK
-    @Test
-    public void testNUM_LIT22() throws Exception {
-        testLexerOk("NUM_LIT", ".456E78");
-    }
-
-    // "+123.E+78" OK
-    @Test
-    public void testNUM_LIT23() throws Exception {
-        testLexerOk("NUM_LIT", "+123.E+78");
-    }
-
-    // STRING_LIT:
-    // "'abc'" OK
-    @Test
-    public void testSTRING_LIT1() throws Exception {
-        testLexerOk("STRING_LIT", "'abc'");
-    }
-
-    // "'a''bc'" OK
-    @Test
-    public void testSTRING_LIT2() throws Exception {
-        testLexerOk("STRING_LIT", "'a''bc'");
-    }
-
-    // "'abc" FAIL
-    @Test
-    public void testSTRING_LIT3() throws Exception {
-        testLexerFail("STRING_LIT", "'abc");
-    }
-
-    // "abc'" FAIL
-    @Test
-    public void testSTRING_LIT4() throws Exception {
-        testLexerFail("STRING_LIT", "abc'");
-    }
-
-    // "'ab'c'" FAIL
-    @Test
-    public void testSTRING_LIT5() throws Exception {
-        testLexerFail("STRING_LIT", "'ab'c'");
-    }
-
-    @Test
-    public void testSTRING_LIT6() throws Exception {
-        testLexerOk("STRING_LIT", "'That''s'");
-        testLexerOk("STRING_LIT", "'Gus'''");
-    }
-
-    @Test
-    public void testSTRING_LIT7() throws Exception {
-        testLexerOk("STRING_LIT", "'That\\\'s'");
-        testLexerOk("STRING_LIT", "'Gus\\\'\'");
-    }
-
-    @Test
-    public void testSTRING_LIT8() throws Exception {
-        testLexerOk("STRING_LIT", "'c:\\\\temp'");
-    }
-
-    @Test
-    public void testSTRING_LIT9() throws Exception {
-        testLexerOk("STRING_LIT", "'Like%String'");
-    }
-
-    @Test
-    public void testSTRING_LIT10() throws Exception {
-        testLexerOk("STRING_LIT", "'Like_String'");
-    }
-
-    @Test
-    public void testSTRING_LIT11() throws Exception {
-        testLexerOk("STRING_LIT", "'Like\\%String'");
-    }
-
-    @Test
-    public void testSTRING_LIT12() throws Exception {
-        testLexerOk("STRING_LIT", "'Like\\_String'");
-    }
-
-    // BOOL_LIT:
-    // "TRUE" OK
-    @Test
-    public void testBOOL_LIT1() throws Exception {
-        testLexerOk("BOOL_LIT", "TRUE");
-    }
-
-    // "true" OK
-    @Test
-    public void testSBOOL_LIT2() throws Exception {
-        testLexerOk("BOOL_LIT", "true");
-    }
-
-    // "FALSE" OK
-    @Test
-    public void testBOOL_LIT3() throws Exception {
-        testLexerOk("BOOL_LIT", "FALSE");
-    }
-
-    // "false" OK
-    @Test
-    public void testBOOL_LIT4() throws Exception {
-        testLexerOk("BOOL_LIT", "false");
-    }
-
-    // TIME_LIT:
-    // "TIMESTAMP '2010-01-01Z01:01:01.000Z'" OK
-    @Test
-    public void testTIME_LIT1() throws Exception {
-        testLexerOk("TIME_LIT", "TIMESTAMP '2010-01-01Z01:01:01.000Z'");
-    }
-
-    // "timestamp   '123'" OK
-    @Test
-    public void testTIME_LIT2() throws Exception {
-        testLexerOk("TIME_LIT", "timestamp   '123'");
-    }
-
-    // "TIMESTAMP 123" FAIL
-    @Test
-    public void testTIME_LIT3() throws Exception {
-        testLexerFail("TIME_LIT", "TIMESTAMP 123");
-    }
-
-    // ----- Parser tests -----
-
-    // literal:
-    // "123" OK
-    @Test
-    public void testLiteral1() throws Exception {
-        testParserOk("literal", "123");
-    }
-
-    // "-123" OK
-    @Test
-    public void testLiteral2() throws Exception {
-        testParserOk("literal", "123");
-    }
-
-    // "0" OK
-    @Test
-    public void testLiteral3() throws Exception {
-        testParserOk("literal", "0");
-    }
-
-    // "0123" OK
-    @Test
-    public void testLiteral4() throws Exception {
-        testParserOk("literal", "0123");
-    }
-
-    // "abc123" OK
-    // "123abc" FAIL
-    @Test
-    public void testLiteral5() throws Exception {
-        testParserFail("literal", "123abc");
-    }
-
-    // "'abc'" OK
-    @Test
-    public void testLiteral6() throws Exception {
-        testParserOk("literal", "'abc'");
-    }
-
-    // "123.345E78" OK
-    @Test
-    public void testLiteral7() throws Exception {
-        testParserOk("literal", "123.345E78");
-    }
-
-    // order_by_clause:
-    // "ORDER BY foo" -> (ORDER_BY (COL foo) ASC)
-    @Test
-    public void testOrderBy1() throws Exception {
-        testParser("order_by_clause", "ORDER BY foo", "(ORDER_BY (COL foo) ASC)");
-    }
-
-    // "ORDER BY foo ASC" -> (ORDER_BY (COL foo) ASC)
-    @Test
-    public void testOrderBy2() throws Exception {
-        testParser("order_by_clause", "ORDER BY foo ASC", "ORDER_BY (COL foo) ASC)");
-    }
-
-    // "ORDER BY foo DESC" -> (ORDER_BY (COL foo) DESC)
-    @Test
-    public void testOrderBy3() throws Exception {
-        testParser("order_by_clause", "ORDER BY foo DESC", "(ORDER_BY (COL foo) DESC)");
-    }
-
-    // "ORDER BY t.foo, bar DESC" -> (ORDER_BY (COL t foo) ASC (COL bar) DESC)
-    @Test
-    public void testOrderBy4() throws Exception {
-        testParser("order_by_clause", "ORDER BY t.foo, bar DESC", "(ORDER_BY (COL t foo) ASC (COL bar) DESC)");
-    }
-
-    // column_reference:
-    // "foo" -> (COL foo)
-    @Test
-    public void test_column_reference1() throws Exception {
-        testParser("column_reference", "foo", "(COL foo)");
-    }
-
-    // "bar.foo" -> (COL bar foo)
-    @Test
-    public void test_column_reference2() throws Exception {
-        testParser("column_reference", "bar.foo", "(COL bar foo)");
-    }
-
-    // from_clause:
-    // "FROM foo JOIN bar ON x = y" -> (FROM (TABLE foo) (JOIN INNER (TABLE bar)
-    // (ON (COL x) = (COL y))))
-    @Test
-    public void testFrom() throws Exception {
-        testParser("from_clause", "FROM foo JOIN bar ON x = y",
-                "(FROM (TABLE foo) (JOIN INNER (TABLE bar) (ON (COL x) = (COL y))))");
-    }
-
-    // table_join:
-    // "LEFT OUTER JOIN foo ON x = y" -> (JOIN LEFT (TABLE foo) (ON (COL x) =
-    // (COL y)))
-    @Test
-    public void test_column_reference11() throws Exception {
-        testParser("table_join", "LEFT OUTER JOIN foo ON x = y", "(JOIN LEFT (TABLE foo) (ON (COL x) = (COL y)))");
-    }
-
-    // "INNER JOIN foo" -> (JOIN INNER (TABLE foo))
-    @Test
-    public void test_column_reference12() throws Exception {
-        testParser("table_join", "INNER JOIN foo", "(JOIN INNER (TABLE foo))");
-    }
-
-    // one_table:
-    // "foo" -> (TABLE foo)
-    @Test
-    public void test_column_reference3() throws Exception {
-        testParser("one_table", "foo", "(TABLE foo)");
-    }
-
-    // "foo bar" -> (TABLE foo bar)
-    @Test
-    public void test_column_reference4() throws Exception {
-        testParser("one_table", "foo bar", "(TABLE foo bar)");
-    }
-
-    // "foo AS bar" -> (TABLE foo bar)
-    @Test
-    public void test_column_reference5() throws Exception {
-        testParser("one_table", "foo AS bar", "(TABLE foo bar)");
-    }
-
-    // "(foo)" -> (TABLE foo)
-    @Test
-    public void test_column_reference6() throws Exception {
-        testParser("one_table", "(foo)", "(TABLE foo)");
-    }
-
-    // in_predicate:
-    // "foo IN ( 'a', 'b', 'c')" -> (IN (COL foo) (IN_LIST 'a' 'b' 'c'))
-    @Test
-    public void test_in_predicate1() throws Exception {
-        testParser("in_predicate", "foo IN ( 'a', 'b', 'c')", "(IN (COL foo) (IN_LIST 'a' 'b' 'c'))");
-    }
-
-    // "foo NOT IN ( 1, 2, 3)" -> (NOT_IN (COL foo) (IN_LIST 1 2 3))
-    @Test
-    public void test_in_predicate2() throws Exception {
-        testParser("in_predicate", "foo NOT IN ( 1, 2, 3)", "(NOT_IN (COL foo) (IN_LIST 1 2 3))");
-    }
-
-    // quantified_in_predicate:
-    // "ANY foo IN ('a', 1)" -> (IN_ANY (COL foo) (IN_LIST 'a' 1))
-    @Test
-    public void tes_quantified_in_predicate() throws Exception {
-        testParser("quantified_in_predicate", "ANY foo IN ('a', 1)", "(IN_ANY (COL foo) (IN_LIST 'a' 1))");
-    }
-
-    // comparison_predicate:
-    // "foo = 1" -> (= (COL foo) 1)
-    @Test
-    public void test_comparison_predicate1() throws Exception {
-        testParser("comparison_predicate", "foo = 1", "(= (COL foo) 1)");
-    }
-
-    // "foo <> 1" -> (<> (COL foo) 1)
-    @Test
-    public void test_comparison_predicate2() throws Exception {
-        testParser("comparison_predicate", "foo <> 1", "(<> (COL foo) 1)");
-    }
-
-    //
-    // predicate:
-    // "foo = 1" -> (= (COL foo) 1)
-    @Test
-    public void test_predicate1() throws Exception {
-        testParser("predicate", "foo = 1", "(= (COL foo) 1)");
-    }
-
-    // "foo IN ('bar')" -> (IN (COL foo) (IN_LIST 'bar'))
-    @Test
-    public void test_predicate2() throws Exception {
-        testParser("predicate", "foo IN ('bar')", "(IN (COL foo) (IN_LIST 'bar'))");
-    }
-
-    // "foo IS NULL" -> (IS_NULL (COL foo))
-    @Test
-    public void test_predicate3() throws Exception {
-        testParser("predicate", "foo IS NULL", "(IS_NULL (COL foo))");
-    }
-
-    // "foo IS NOT NULL" -> (IS_NOT_NULL (COL foo))
-    @Test
-    public void test_predicate4() throws Exception {
-        testParser("predicate", "foo IS NOT NULL", "(IS_NOT_NULL (COL foo))");
-    }
-
-    // "1 = ANY foo" -> (EQ_ANY 1 (COL foo))
-    @Test
-    public void test_predicate5() throws Exception {
-        testParser("predicate", "1 = ANY foo", "(EQ_ANY 1 (COL foo))");
-    }
-
-    // "SCORE() = 'bar'" -> (= SCORE 'bar')
-    @Test
-    public void test_predicate6() throws Exception {
-        testParser("predicate", "SCORE() = 'bar'", "(= SCORE 'bar')");
-    }
-
-    // boolean_term:
-    // "c >= 3 AND d <= 4" -> (AND (>= (COL c) 3) (<= (COL d) 4))
-    @Test
-    public void boolean_term1() throws Exception {
-        testParser("boolean_term", "c >= 3 AND d <= 4", "(AND (>= (COL c) 3) (<= (COL d) 4))");
-    }
-
-    // "c >= 3 AND NOT d <= 4" -> (AND (>= (COL c) 3) (NOT (<= (COL d) 4)))
-    @Test
-    public void boolean_term2() throws Exception {
-        testParser("boolean_term", "c >= 3 AND NOT d <= 4", "(AND (>= (COL c) 3) (NOT (<= (COL d) 4)))");
-    }
-
-    // folder_predicate:
-    // "IN_FOLDER(foo,'ID123')" -> (IN_FOLDER foo 'ID123')
-    @Test
-    public void folder_predicate1() throws Exception {
-        testParser("folder_predicate", "IN_FOLDER(foo,'ID123')", "(IN_FOLDER foo 'ID123')");
-    }
-
-    // "IN_FOLDER('ID123')" -> (IN_FOLDER 'ID123')
-    @Test
-    public void folder_predicate2() throws Exception {
-        testParser("folder_predicate", "IN_FOLDER('ID123')", "(IN_FOLDER 'ID123')");
-    }
-
-    // "IN_TREE(foo,'ID123')" -> (IN_TREE foo 'ID123')
-    @Test
-    public void folder_predicate3() throws Exception {
-        testParser("folder_predicate", "IN_TREE(foo,'ID123')", "(IN_FOLDER 'ID123')");
-    }
-
-    // "IN_TREE('ID123')" -> (IN_TREE 'ID123')
-    @Test
-    public void folder_predicate4() throws Exception {
-        testParser("folder_predicate", "IN_TREE('ID123')", " (IN_TREE 'ID123')");
-    }
-
-    @Test
-    public void folder_predicate() throws Exception {
-        testParser("search_condition", "id456 LIKE 'Foo%' AND IN_FOLDER('abc')",
-                "(AND (LIKE 'id456' 'Foo%') (IN_FOLDER 'abc')");
-    }
-
-    // text_search_predicate:
-    // "CONTAINS('foo')" -> (CONTAINS 'foo')
-    @Test
-    public void text_search_predicate1() throws Exception {
-        testParser("text_search_predicate", "CONTAINS('foo')", "(CONTAINS 'foo')");
-    }
-
-    // "CONTAINS(bar, 'foo')" -> (CONTAINS bar 'foo')
-    @Test
-    public void text_search_predicate2() throws Exception {
-        testParser("text_search_predicate", "CONTAINS(bar, 'foo')", "(CONTAINS bar 'foo')");
-    }
-
-    // where_clause:
-    // "WHERE foo = 1" -> (WHERE (= (COL foo) 1))
-    @Test
-    public void test_where_clause1() throws Exception {
-        testParser("where_clause", "WHERE foo = 1", "(WHERE (= (COL foo) 1))");
-    }
-
-    // "WHERE a = 1 AND b <> 2 OR c >= 3" -> (WHERE (OR (AND (= (COL a) 1) (<>
-    // (COL b) 2)) (>= (COL c) 3)))
-    @Test
-    public void test_where_clause2() throws Exception {
-        testParser("where_clause", "WHERE a = 1 AND b <> 2 OR c >= 3",
-                "(WHERE (OR (AND (= (COL a) 1) (<> (COL b) 2)) (>= (COL c) 3)))");
-    }
-
-    // "WHERE a = 1 AND b <> 2 OR c >= 3 AND d <= 4" -> (WHERE (OR (AND (= (COL
-    // a) 1) (<> (COL b) 2)) (AND (>= (COL c) 3) (<= (COL d) 4))))
-    @Test
-    public void test_where_clause3() throws Exception {
-        testParser("where_clause", "WHERE a = 1 AND b <> 2 OR c >= 3 AND d <= 4",
-                "(WHERE (OR (AND (= (COL a) 1) (<> (COL b) 2)) (AND (>= (COL c) 3) (<= (COL d) 4))))");
-    }
-
-    // "WHERE a = 1 AND b <> 2 OR c >= 3 AND NOT d <= 4" -> (WHERE (OR (AND (=
-    // (COL a) 1) (<> (COL b) 2)) (AND (>= (COL c) 3) (NOT (<= (COL d) 4)))))
-    @Test
-    public void test_where_clause4() throws Exception {
-        testParser("where_clause", "WHERE a = 1 AND b <> 2 OR c >= 3 AND NOT d <= 4",
-                "(WHERE (OR (AND (= (COL a) 1) (<> (COL b) 2)) (AND (>= (COL c) 3) (NOT (<= (COL d) 4)))))");
-    }
-
-    // query:
-    // "SELECT * FROM Document" -> (SELECT * (FROM (TABLE Document)))
-    @Test
-    public void test_query1() throws Exception {
-        testParser("query", "SELECT * FROM Document", "(SELECT * (FROM (TABLE Document)))");
-    }
-
-    // "SELECT a, b, c FROM Document" -> (SELECT (SEL_LIST (COL a) (COL b) (COL
-    // c)) (FROM (TABLE Document)))
-    @Test
-    public void test_query2() throws Exception {
-        testParser("query", "SELECT a, b, c FROM Document",
-                "(SELECT (SEL_LIST (COL a) (COL b) (COL c)) (FROM (TABLE Document)))");
-    }
-
-    // "SELECT a, b FROM Document ORDER BY a, b" -> (SELECT (SEL_LIST (COL a)
-    // (COL b)) (FROM (TABLE Document)) (ORDER_BY (COL a) ASC (COL b) ASC))
-    @Test
-    public void test_query3() throws Exception {
-        testParser("query", "SELECT a, b FROM Document ORDER BY a, b",
-                "(SELECT (SEL_LIST (COL a) (COL b)) (FROM (TABLE Document)) (ORDER_BY (COL a) ASC (COL b) ASC))");
-    }
-
-    // where_clause:
-    // "WHERE IN_TREE('ID00093854763') AND ('SMITH' = ANY AUTHORS)" -> (WHERE
-    // (AND (IN_TREE 'ID00093854763') (EQ_ANY 'SMITH' (COL AUTHORS))))
-    @Test
-    public void test_where_clause5() throws Exception {
-        testParser("where_clause", "WHERE IN_TREE('ID00093854763') AND ('SMITH' = ANY AUTHORS)",
-                "(WHERE (AND (IN_TREE 'ID00093854763') (EQ_ANY 'SMITH' (COL AUTHORS))))");
-    }
-
-    // query:
-    //
-    // <<
-    // SELECT * FROM Document WHERE foo = 1
-    // >> -> (SELECT * (FROM (TABLE Document)) (WHERE (= (COL foo) 1)))
-    @Test
-    public void query1() throws Exception {
-        testParser("query", "SELECT * FROM Document WHERE foo = 1",
-                "(SELECT * (FROM (TABLE Document)) (WHERE (= (COL foo) 1)))");
-    }
-
-    // Examples from older versions of the specs.
-
-    // <<
-    // SELECT * FROM WHITE_PAPER
-    // >> -> (SELECT * (FROM (TABLE WHITE_PAPER)))
-    @Test
-    public void query2() throws Exception {
-        testParser("query", "SELECT * FROM WHITE_PAPER", "(SELECT * (FROM (TABLE WHITE_PAPER)))");
-    }
-
-    // <<
-    // SELECT TITLE, AUTHORS, DATE
-    // FROM WHITE_PAPER
-    // WHERE ( IN_TREE('ID00093854763') ) AND ( 'SMITH' = ANY AUTHORS )
-    // >> -> (SELECT (SEL_LIST (COL TITLE) (COL AUTHORS) (COL DATE)) (FROM
-    // (TABLE WHITE_PAPER)) (WHERE (AND (IN_TREE 'ID00093854763') (EQ_ANY
-    // 'SMITH' (COL AUTHORS)))))
-    @Test
-    public void query3() throws Exception {
-        testParser(
-                "query",
-                "SELECT TITLE, AUTHORS, DATE " + "FROM WHITE_PAPER "
-                        + "WHERE ( IN_TREE('ID00093854763') ) AND ( 'SMITH' = ANY AUTHORS )",
-                "(SELECT (SEL_LIST (COL TITLE) (COL AUTHORS) (COL DATE)) (FROM (TABLE WHITE_PAPER)) (WHERE (AND (IN_TREE 'ID00093854763') (EQ_ANY 'SMITH' (COL AUTHORS)))))");
-    }
-
-    // <<
-    // SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES
-    // FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM
-    // WHERE ( 100000 = ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE
-    // '%Katrina%' )
-    // >> OK
-    @Test
-    public void query4() throws Exception {
-        testParserOk("query", "SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES "
-                + "FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM "
-                + "WHERE ( 100000 = ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE '%Katrina%' )");
-    }
-
-    // <<
-    // SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES
-    // FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM
-    // WHERE ( 100000 <= ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE
-    // '%Katrina%' )
-    // >> FAIL
-    @Test
-    public void query5() throws Exception {
-        testParserFail("query", "SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES "
-                + "FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM "
-                + "    WHERE ( 100000 <= ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE '%Katrina%' )");
-    }
-
-    // <<
-    // SELECT *
-    // FROM CAR_REVIEW
-    // WHERE ANY FEATURES IN ('NAVIGATION SYSTEM', 'SATELLITE RADIO', 'MP3' )
-    // >> OK
-    @Test
-    public void query6() throws Exception {
-        testParserOk("query",
-                " SELECT * FROM CAR_REVIEW WHERE ANY FEATURES IN ('NAVIGATION SYSTEM', 'SATELLITE RADIO', 'MP3' )");
-    }
-
-    // <<
-    // SELECT OBJECT_ID, SCORE() AS X, DESTINATION, DEPARTURE_DATES
-    // FROM TRAVEL_BROCHURE
-    // WHERE ( CONTAINS('CARIBBEAN CENTRAL AMERICA CRUISE TOUR') ) AND
-    // ( '2010-1-1' = ANY DEPARTURE_DATES )
-    // ORDER BY X DESC
-    // >> OK
-    @Test
-    public void query7() throws Exception {
-        testParserOk("query", "SELECT OBJECT_ID, SCORE() AS X, DESTINATION, DEPARTURE_DATES " + "FROM TRAVEL_BROCHURE "
-                + "WHERE ( CONTAINS('CARIBBEAN CENTRAL AMERICA CRUISE TOUR') ) AND( '2010-1-1' = ANY DEPARTURE_DATES )");
-    }
-
-    @Test
-    public void queryEsc1() throws Exception {
-        testParserOk("query", "SELECT * FROM cmis:document " + "WHERE cmis:name LIKE 'abc\\%'");
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
deleted file mode 100644
index d8661a9..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestParserTextSearch extends AbstractParserTest{
-
-    //private static final Logger log = LoggerFactory.getLogger(TestParserTextSearch.class);
-
-    @Before
-    public void setUp() {
-        super.setUp(TextSearchLexer.class, TextSearchParser.class, null, "CmisBaseLexer");
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // full text search parser
-    //    OR:
-    //    <<
-    //    OR
-    //    >> OK
-    @Test
-    public void testOR1() {
-      testLexerOk("OR", "OR");
-    }
-    
-    //
-    //    TEXT_SEARCH_WORD_LIT:
-    //    <<
-    //    abc
-    //    >> OK
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT2() {
-      testLexerOk("TEXT_SEARCH_WORD_LIT", "abc");
-    }
-    
-    //
-    //    <<
-    //    ab c
-    //    >> FAIL
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT3() {
-        testLexerFail("TEXT_SEARCH_WORD_LIT", "ab c");
-    }
-    
-    //
-    //    <<
-    //    'abc' 
-    //    >> FAIL
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT4() {
-        testLexerFail("TEXT_SEARCH_WORD_LIT", "\'abc\'");
-    }
-    
-    //
-    //    <<
-    //    ab\'c
-    //    >> OK
-    @Test
-    public void testWordLiteralWithSingleQuote() {
-        testLexerOk("TEXT_SEARCH_WORD_LIT", "ab\\'c");
-        testLexerFail("TEXT_SEARCH_WORD_LIT", "ab'c");
-    }
-    
-    //
-    //    <<
-    //    "ab\\c"
-    //    >> OK
-    @Test
-    public void testPhraseWithBackslash() {
-      testLexerOk("TEXT_SEARCH_PHRASE_STRING_LIT", "\"ab\\\\c\"");
-    }
-    
-    //
-    //    phrase:
-    //
-    //    <<
-    //    \'abc\'
-    //    >> FAIL
-    @Test
-    public void testPhrase1() {
-        testParserFail("phrase", "\\'abc\\'");
-    }
-    
-    //
-    //    <<
-    //    "abc"
-    //    >> OK
-    @Test
-    public void testPhrase2() {
-        testParserOk("phrase", "\"abc\"");
-    }
-    
-    //
-    //    <<
-    //    "'abc'"
-    //    >> OK
-    @Test
-    public void testPhrase3() {
-      testParserFail("phrase", "'abc'");
-      testParserOk("phrase", "\"\\'abc\\'\"");
-    }
-    
-    //
-    //    <<
-    //    "abc def"
-    //    >> OK
-    @Test
-    public void testPhrase4() {
-      testParserOk("phrase", "\"abc def\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\\c"
-    //    >> OK
-    @Test
-    public void testPhrase6() {
-      testParserOk("phrase", "\"ab\\\\c\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\c"
-    //    >> FAIL
-    @Test
-    public void testPhraseEscapedBackslash() {
-        testParserFail("phrase", "\"ab\\c\"");
-        testParserOk("phrase", "\"ab\\\\c\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\\\c"
-    //    >> FAIL
-    @Test
-    public void testPhrase8() {
-        testParserFail("phrase", "\"ab\\\\\\c\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\'c"
-    //    >> OK
-    @Test
-    public void testPhraseSingleQuote() {
-        assertEquals("ab'c", "ab\'c");
-        testParserOk("phrase", "\"ab\\'c\"");
-        testParserFail("phrase", "\"ab'c\""); //!!
-    }
-    
-    //
-    //    <<
-    //    "ab\-c"
-    //    >> OK
-    @Test
-    public void testPhraseHyphen() {
-        testParserOk("phrase", "\"ab\\-c\"");
-        testParserFail("phrase", "\"ab-c\"");     // !!!
-    }
-    
-    //
-    //    << 
-    //    "abc*"
-    //    "abc\*"
-    //    "abc?"
-    //    "abc\?"
-    //    >> OK
-    @Test
-    public void testPhraseWildcards() {
-      testParserOk("phrase", "\"abc*\"");
-      testParserOk("phrase", "\"abc\\*\"");
-      testParserOk("phrase", "\"abc?\"");
-      testParserOk("phrase", "\"abc\\?\"");
-    }
-
-    //
-    //    <<
-    //    "abc def"
-    //    >> OK
-    @Test
-    public void testPhrase10() {
-      testParserOk("phrase", "\"abc def\"");
-    }
-    
-    //
-    //    <<
-    //    "\'abc\'"
-    //    >> OK
-    @Test
-    public void testPhrase11() {
-      testParserOk("phrase", "\"\\'abc\\'\"");
-    }
-    
-    //
-    //    <<
-    //    "abc AND def"
-    //    >> OK
-    @Test
-    public void testPhrase12() {
-      testParserOk("phrase", "\"abc AND def\"");
-    }
-    
-    //
-    //    << 
-    //    "AND"
-    //    >> OK
-    @Test
-    public void testPhrase13() {
-      testParserOk("phrase", "\"AND\"");
-    }
-    
-    //
-    //    word:
-    //
-    //    << 
-    //    abc
-    //    >> OK
-    @Test
-    public void testWord1() {
-      testParserOk("word", "abc");
-    }
-    
-    //
-    //    << 
-    //    312#+!&abc
-    //    >> OK
-    @Test
-    public void testWord2() {
-      testParserOk("word", "312#+!&abc");
-    }
-    
-    //
-    //    << 
-    //    \'abc\'
-    //    >> OK
-    @Test
-    public void testWord3() {
-      testParserOk("word", "\\'abc\\'");
-    }
-    
-    //
-    //    << 
-    //    'abc'
-    //    >> FAIL
-    @Test
-    public void testWord4() {
-        testParserFail("word", "'abc'");
-    }    
-    
-    //
-    //    <<
-    //    ab\-c
-    //    >> OK
-    @Test
-    public void testWord6() {
-        testParserOk("word", "ab\\-c");
-    }
-    
-    //
-    //    <<
-    //    ab\\c
-    //    >> OK
-    @Test
-    public void testWord7() {
-        testParserOk("word", "ab\\\\c");
-    }
-    
-    //
-    //    <<
-    //    ab\'c
-    //    >> OK
-    @Test
-    public void testWord8() {
-        testParserOk("word", "ab\\'c");
-    }
-    
-    //
-    //    <<
-    //    OR
-    //    >> FAIL
-    @Test
-    public void testWord9() {
-        testParserFail("word", "OR");
-    }
-    
-    //
-    //    <<
-    //    AND
-    //    >> FAIL
-    @Test
-    public void testWord10() {
-        testParserFail("word", "AND");
-    }
-    
-    //
-    //
-    //    term:
-    //
-    //    <<
-    //    -abc
-    //    >> OK
-    @Test
-    public void testWord11() {
-      testParserOk("term", "-abc");
-    }
-    
-    //
-    //    <<
-    //    abc
-    //    >> OK
-    @Test
-    public void testWord12() {
-      testParserOk("term", "abc");
-    }
-    
-    //
-    //    <<
-    //    'abc def'
-    //    >> OK
-    @Test
-    public void testWord13() {
-      testParserOk("term", "\"abc def\"");
-    }
-    
-    //
-    //    <<
-    //    -'abc def'
-    //    >> OK
-    @Test
-    public void testWord14() {
-      testParserOk("term", "-\"abc def\"");
-    }
-    
-    //
-    //    conjunct:
-    //
-    //    <<
-    //    abc def
-    //    >> OK
-    @Test
-    public void testConjunct1() {
-      testParserOk("conjunct", "abc def");
-    }
-    
-    //
-    //    <<
-    //    abc AND def
-    //    >> OK
-    @Test
-    public void testConjunct2() {
-      testParserOk("conjunct", "abc AND def");
-    }
-    
-    //
-    //    <<
-    //    abc AND def ghi John\'s
-    //    >> OK
-    @Test
-    public void testConjunct3() {
-      testParserOk("conjunct", "abc AND def ghi John\\'s");
-    }
-    
-    //
-    //    text_search_expression:
-    //
-    //    <<
-    //    cat mouse dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression1() {
-      testParserOk("text_search_expression", "cat mouse dog");
-    }
-    
-    //
-    //    <<
-    //    cat AND mouse AND dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression2() {
-      testParserOk("text_search_expression", "cat AND mouse AND dog");
-    }
-    
-    //
-    //    <<
-    //    cat OR mouse OR dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression3() {
-      testParserOk("text_search_expression", "cat OR mouse OR dog");
-    }
-    
-    //
-    //    <<
-    //    cat mouse OR dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression4() {
-      testParserOk("text_search_expression", "cat mouse OR dog");
-    }
-    
-    //
-    //    <<
-    //    cat AND mouse OR dog AND John\'s
-    //    >> OK
-    @Test
-    public void testTextSearchExpression5() {
-      testParserOk("text_search_expression", "cat AND mouse OR dog AND John\\'s");
-    }
-    
-    //
-    //    <<
-    //    "cat AND mouse"
-    //    >> OK
-    @Test
-    public void testTextSearchExpression6() {
-      testParserOk("text_search_expression", "\"cat AND mouse\"");
-    }
-    
-    //
-    //    <<
-    //    "text search expression"
-    //    >> OK
-    @Test
-    public void testTextSearchExpression7() {
-      testParserOk("text_search_expression", "\"text search expression\"");
-    }
-    
-    //
-    //    <<
-    //    "John\'s presentation"
-    //    >> OK
-    @Test
-    public void testTextSearchExpression8() {
-      testParserOk("text_search_expression", "\"John\\'s presentation\"");
-    }
-    
-    //
-    //    <<
-    //    "John\\'s presentation"
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression9() {
-        testParserFail("text_search_expression", "\"John\\\\'s presentation\"");
-    }
-    
-    //
-    //    <<
-    //    A\-1
-    //    >> OK
-    @Test
-    public void testTextSearchExpression10() {
-      testParserOk("text_search_expression", "A\\-1");
-    }
-    
-    //
-    //    <<
-    //    "c:\\My Documents"
-    //    >> OK
-    @Test
-    public void testTextSearchExpression11() {
-      testParserOk("text_search_expression", "\"c:\\\\My Documents\"");
-    }
-    
-    //
-    //    <<
-    //    "c:\\\My Documents"
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression13() {
-        testParserFail("text_search_expression", "\"c:\\\\\\My Documents\"");
-    }
-    
-    //
-    //    <<
-    //    "c:\My Documents"
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression14() {
-      testParserFail("text_search_expression", "\"c:\\My Documents\"");
-    }
-    
-    //
-    //    <<
-    //    c:\My Documents
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression15() {
-      testParserFail("text_search_expression", "c:\\My Documents");
-    }
-    
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManagerTest.java b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManagerTest.java
deleted file mode 100644
index ad38f30..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/wrapper/CmisServiceWrapperManagerTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.chemistry.opencmis.server.support.wrapper;
-
-import static org.junit.Assert.assertTrue;
-
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
-import org.apache.chemistry.opencmis.commons.server.CmisService;
-import org.junit.Test;
-
-public class CmisServiceWrapperManagerTest {
-
-    @Test
-    public void testWrapperManager() {
-        CmisServiceWrapperManager manager = new CmisServiceWrapperManager();
-
-        manager.addOuterWrapper(SimpleLoggingCmisServiceWrapper.class);
-        manager.addOuterWrapper(ConformanceCmisServiceWrapper.class, -1, 100, -1, 1000);
-        manager.addOuterWrapper(SimpleLoggingCmisServiceWrapper.class, "outer");
-        manager.addInnerWrapper(SimpleLoggingCmisServiceWrapper.class, "inner");
-
-        DummyService service = new DummyService();
-        CmisService wrapperedService = manager.wrap(service);
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        AbstractCmisServiceWrapper wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-
-        // removing outer wrapper
-        manager.removeOuterWrapper();
-
-        service = new DummyService();
-        wrapperedService = manager.wrap(service);
-
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-
-        // removing inner wrapper
-        manager.removeInnerWrapper();
-
-        service = new DummyService();
-        wrapperedService = manager.wrap(service);
-
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-    }
-
-    @Test
-    public void testWrapperManagerFromParameters() {
-        Map<String, String> parameters = new HashMap<String, String>();
-
-        parameters.put("dummy", "something");
-
-        parameters.put("servicewrapper.1", SimpleLoggingCmisServiceWrapper.class.getName() + ",1");
-        parameters.put("servicewrapper.2", ConformanceCmisServiceWrapper.class.getName() + ",2");
-        parameters.put("servicewrapper.3", SimpleLoggingCmisServiceWrapper.class.getName() + ",3");
-        parameters.put("servicewrapper.4", SimpleLoggingCmisServiceWrapper.class.getName() + ",4");
-
-        CmisServiceWrapperManager manager = new CmisServiceWrapperManager();
-        manager.addWrappersFromServiceFactoryParameters(parameters);
-
-        DummyService service = new DummyService();
-        CmisService wrapperedService = manager.wrap(service);
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        AbstractCmisServiceWrapper wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-
-        // removing outer wrapper
-        manager.removeOuterWrapper();
-
-        service = new DummyService();
-        wrapperedService = manager.wrap(service);
-
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-
-        // removing inner wrapper
-        manager.removeInnerWrapper();
-
-        service = new DummyService();
-        wrapperedService = manager.wrap(service);
-
-        assertTrue(wrapperedService instanceof AbstractCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapperedService;
-        assertTrue(wrapper instanceof ConformanceCmisServiceWrapper);
-
-        wrapper = (AbstractCmisServiceWrapper) wrapper.getWrappedService();
-        assertTrue(wrapper instanceof SimpleLoggingCmisServiceWrapper);
-
-        assertTrue(wrapper.getWrappedService() instanceof DummyService);
-    }
-
-    private static class DummyService extends AbstractCmisService {
-
-        @Override
-        public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-            return null;
-        }
-
-        @Override
-        public TypeDefinitionList getTypeChildren(String repositoryId, String typeId,
-                Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-            return null;
-        }
-
-        @Override
-        public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-            return null;
-        }
-
-        @Override
-        public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
-                Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-                Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-            return null;
-        }
-
-        @Override
-        public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
-                Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-                Boolean includeRelativePathSegment, ExtensionsData extension) {
-            return null;
-        }
-
-        @Override
-        public ObjectData getObject(String repositoryId, String objectId, String filter,
-                Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-                Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-            return null;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/resources/log4j.properties
deleted file mode 100644
index 8d4975e..0000000
--- a/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# sample log4j.properties
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=target/logs/log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.chemistry.opencmis.server.support=WARN
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/pom.xml
deleted file mode 100644
index 4765ec3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-
-    <artifactId>chemistry-opencmis-test-browser-app</artifactId>
-    <name>OpenCMIS Browser Application</name>
-    <packaging>war</packaging>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-    
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <!--
-                            OSGi Bundle Support
-                        -->
-                        <manifestEntries>
-                            <Bundle-Name>org.apache.chemistry.opencmis.browser</Bundle-Name>
-                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.browser</Bundle-SymbolicName>
-                            <Bundle-Version>0.0.1</Bundle-Version>
-                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
-                            <Bundle-Classpath>.</Bundle-Classpath>
-                            <Web-ContextPath>browser</Web-ContextPath>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-test-browser</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/acl.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/acl.xsl
deleted file mode 100644
index 69d1037..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/acl.xsl
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title>ACL</title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<h1>ACL</h1>
-				<table class="entrytable">
-				<tr>
-					<th>Principal Id</th>
-					<th>Permissions</th>
-					<th>Direct</th>
-				</tr>
-				<xsl:for-each select="cmis:acl/cmis:permission">
-					<tr>
-						<td><xsl:value-of select="cmis:principal/cmis:principalId" /></td>
-						<td><xsl:for-each select="cmis:permission"><xsl:value-of select="current()" /><br/></xsl:for-each></td>
-						<td><xsl:value-of select="cmis:direct" /></td>
-					</tr>
-				</xsl:for-each>
-				</table>
-			</body>
-		</html>
-	</xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/actions.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/actions.xsl
deleted file mode 100644
index c00de4e..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/actions.xsl
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title>Allowable Actions</title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<h1>Allowable Actions</h1>
-				<table class="entrytable">
-				<xsl:for-each select="cmis:allowableActions/*[not(*)]">
-					<tr>
-						<td><xsl:value-of select="local-name()" /></td>
-						<td><xsl:value-of select="current()" /></td>
-					</tr>
-				</xsl:for-each>
-				</table>
-			</body>
-		</html>
-	</xsl:template>
-	
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/entry.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/entry.xsl
deleted file mode 100644
index a8675af..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/entry.xsl
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-	<xsl:param name="browseOverrideStylesheet"/>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title><xsl:value-of select="atom:entry/atom:title" /></title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;" />
-				<h1>
-				<xsl:choose>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-						<img src="{$auxRoot}document.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-						<img src="{$auxRoot}folder.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:relationship')">
-						<img src="{$auxRoot}relationship.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:policy')">
-						<img src="{$auxRoot}policy.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="atom:entry/cmisra:type">
-						<img src="{$auxRoot}type.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:otherwise>
-						<img src="{$auxRoot}unknown.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:otherwise>
-				</xsl:choose>
-				<xsl:value-of select="atom:entry/atom:title" /></h1>
-
-				<div class="navigationbox">
-					<xsl:if test="atom:entry/atom:link[@rel='service']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='service']/@href}">Service</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='up']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='up']/@href}">Up</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='down']">
-						<xsl:for-each select="atom:entry/atom:link[@rel='down']">
-							<a href="{$browseUrl}{@href}">Down (<xsl:value-of select="@type" />)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']/@href}">Folder Tree</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:content">
-						<a href="{atom:entry/atom:content/@src}">Download</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='version-history']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='version-history']/@href}">All Versions</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='alternate']">
-						<xsl:for-each select="atom:entry/atom:link[@rel='alternate']">
-							<a href="{@href}">Rendition (<xsl:value-of select="@cmisra:renditionKind"></xsl:value-of>)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']/@href}&amp;relationshipDirection=either{$browseOverrideStylesheet}relationships">Relationships</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}">Allowable Actions</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}">ACL</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']/@href}">Policies</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='describedby']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='describedby']/@href}">Type</a>
-					</xsl:if>
-				</div>
-
-				<xsl:if test="atom:entry/atom:summary">
-				<h2>Summary</h2>
-				<div class="entrysummary">
-					<xsl:value-of select="atom:entry/atom:summary" disable-output-escaping="yes"/>
-				</div>
-				</xsl:if>
-
-				<xsl:if test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:relationship')">
-				<h2>Relationship</h2>
-				<table class="entrytable">
-					<tr>
-						<th>Source Id</th>
-						<th>Target Id</th>
-					</tr>
-					<tr>
-						<xsl:variable name="objectId">
-							<xsl:value-of select="atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:objectId']/cmis:value"></xsl:value-of>
-						</xsl:variable>
-						<xsl:variable name="entryUrl">
-							<xsl:value-of select="atom:entry/atom:link[@rel='self']/@href"></xsl:value-of>
-						</xsl:variable>
-						<xsl:variable name="sourceId">
-							<xsl:value-of select="atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:sourceId']/cmis:value"></xsl:value-of>
-						</xsl:variable>
-						<xsl:variable name="targetId">
-							<xsl:value-of select="atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:targetId']/cmis:value"></xsl:value-of>
-						</xsl:variable>
-						<xsl:variable name="sourceEntryUrl">
-							<xsl:value-of select="substring-before($entryUrl, $objectId)"></xsl:value-of>
-							<xsl:value-of select="$sourceId"></xsl:value-of>
-						</xsl:variable>
-						<xsl:variable name="targetEntryUrl">
-							<xsl:value-of select="substring-before($entryUrl, $objectId)"></xsl:value-of>
-							<xsl:value-of select="$targetId"></xsl:value-of>
-						</xsl:variable>
-
-						<td style="font-weight: bold;"><a href="{$browseUrl}{$sourceEntryUrl}"><xsl:value-of select="$sourceId"></xsl:value-of></a></td>
-						<td style="font-weight: bold;"><a href="{$browseUrl}{$targetEntryUrl}"><xsl:value-of select="$targetId"></xsl:value-of></a></td>
-					</tr>
-				</table>
-				</xsl:if>
-
-				<h2>Properties</h2>
-				<table class="entrytable">
-				<xsl:for-each select="atom:entry/cmisra:object/cmis:properties/*">
-					<tr>
-						<td style="font-weight: bold;"><xsl:value-of select="@propertyDefinitionId" /></td>
-						<td>
-						<xsl:for-each select="cmis:value">
-							<xsl:value-of select="current()" /><br/>
-						</xsl:for-each>
-						</td>
-					</tr>
-				</xsl:for-each>
-				<xsl:for-each select="atom:entry/cmisra:type/*[not(*)]">
-					<tr>
-						<td style="font-weight: bold;"><xsl:value-of select="local-name()" /></td>
-						<td><xsl:value-of select="current()" /></td>
-					</tr>
-				</xsl:for-each>
-				<xsl:if test="atom:entry/cmisra:pathSegment">
-					<tr>
-						<td style="font-weight: bold; font-style:italic;">Path Segment</td>
-						<td style="font-style:italic;"><xsl:value-of select="atom:entry/cmisra:pathSegment" /></td>
-					</tr>
-				</xsl:if>
-				</table>
-
-				<xsl:if test="atom:entry/cmisra:type">
-					<h2>Property Definitions</h2>
-					<xsl:for-each select="atom:entry/cmisra:type/*[*]">
-						<h3><xsl:value-of select="cmis:id"/></h3>
-						<table class="entrytable">
-						<xsl:for-each select="*">
-							<tr>
-								<td><xsl:value-of select="local-name()" /></td>
-								<td><xsl:value-of select="current()" /></td>
-							</tr>
-						</xsl:for-each>
-						</table>
-					</xsl:for-each>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-
-</xsl:stylesheet>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/feed.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/feed.xsl
deleted file mode 100644
index 635e107..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/feed.xsl
+++ /dev/null
@@ -1,325 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" version="1.0">
-	<xsl:output method="html"/>
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-	<xsl:param name="browseOverrideStylesheet"/>
-	
-	<xsl:variable name="filter">
-		<xsl:text>cmis:baseTypeId,cmis:name,cmis:objectTypeId,cmis:contentStreamMimeType,cmis:contentStreamLength,cmis:createdBy,cmis:creationDate,cmis:versionLabel,cmis:isMajorVersion,cmis:lastModifiedBy,cmis:lastModificationDate,cmis:isLatestVersion</xsl:text>
-	</xsl:variable>
-	
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title>
-					<xsl:value-of select="atom:feed/atom:title"/>
-				</title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css"/>
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;"/>
-				<h1>
-					<xsl:value-of select="atom:feed/atom:title"/>
-				</h1>
-				<div class="navigationbox">
-					<form name="urlform">
-						<input type="text" name="url" value="" size="100"/>
-						<input type="hidden" name="browseUrl" value="{$browseUrl}"/>
-						<input type="button" value="Go" onClick="load()"/>
-						<input type="button" value="Atom" onClick="loadAtom()"/>
-					</form>
-					<script type="text/javascript"> var x = window.location.search.indexOf("="); if(x > -1) { document.forms.urlform.url.value = decodeURI(window.location.search.substring(x+1)); } function load() { window.location.href = document.forms.urlform.browseUrl.value + document.forms.urlform.url.value; } function loadAtom() { window.location.href = document.forms.urlform.url.value; }</script>
-					<xsl:if test="atom:feed/atom:link[@rel='service']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='service']/@href}">Service</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='self']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='self']/@href}">Entry</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='up']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='up']/@href}">Up</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='down']">
-						<xsl:for-each select="atom:feed/atom:link[@rel='down']">
-							<a href="{$browseUrl}{@href}">Down (<xsl:value-of select="@type"/>)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='first']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='first']/@href}">First</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='previous']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='previous']/@href}">Previous</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='next']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='next']/@href}">Next</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='last']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='last']/@href}">Last</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']/@href}">Folder Tree</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}">Allowable Actions</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}">ACL</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']/@href}">Policies</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='describedby']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='describedby']/@href}"> Type</a>
-					</xsl:if>
-				</div>
-				<xsl:if test="atom:feed/atom:entry/cmisra:object">
-					<table class="feedtable">
-						<tr>
-							<th/>
-							<th>Name</th>
-							<th>Type</th>
-							<th>MIME Type</th>
-							<th>Size</th>
-							<th>Created By /<br/>Last Modified By</th>
-							<th>Creation Date /<br/>Last Modification Date</th>
-							<th>Version Label</th>
-							<th>Major /<br/> Latest</th>
-						</tr>
-						<xsl:for-each select="atom:feed/atom:entry">
-							<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId']"/>
-							<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:name']"/>
-							<xsl:call-template name="object">
-								<xsl:with-param name="depth"> 0</xsl:with-param>
-							</xsl:call-template>
-						</xsl:for-each>
-					</table>
-				</xsl:if>
-				<xsl:if test="atom:feed/atom:entry/cmisra:type">
-					<table class="feedtable">
-						<tr>
-							<th/>
-							<th>Id</th>
-							<th>Local Name</th>
-							<th>Local Namespace</th>
-							<th>Display Name</th>
-							<th>Query Name</th>
-							<th>Base Id</th>
-							<th>Description</th>
-						</tr>
-						<xsl:for-each select="atom:feed/atom:entry">
-							<xsl:call-template name="type">
-								<xsl:with-param name="depth"> 0</xsl:with-param>
-							</xsl:call-template>
-						</xsl:for-each>
-					</table>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-
-	<xsl:template name="object">
-		<xsl:param name="depth"/>
-
-		<xsl:variable name="odd">
-			<xsl:if test="(position() mod 2) != 1"/>
-			<xsl:if test="(position() mod 2) = 1">-odd</xsl:if>
-		</xsl:variable>
-
-		<tr>
-			<td class="tdlinks{$odd}" rowspan="2">
-				<xsl:choose>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-						<img src="{$auxRoot}document.png"/>
-					</xsl:when>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-						<img src="{$auxRoot}folder.png"/>
-					</xsl:when>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:relationship')">
-						<img src="{$auxRoot}relationship.png"/>
-					</xsl:when>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:policy')">
-						<img src="{$auxRoot}policy.png"/>
-					</xsl:when>
-					<xsl:otherwise>
-						<img src="{$auxRoot}unknown.png"/>
-					</xsl:otherwise>
-				</xsl:choose>
-			</td>
-			<td class="tdinfo{$odd}" style="font-weight: bold;">
-				<xsl:if test="$depth &gt; 0">
-					<xsl:value-of select="substring('********************', 1, $depth)"/><xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
-				</xsl:if>
-				<xsl:choose>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-						<a href="{atom:content/@src}">
-							<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']"/>
-						</a>
-					</xsl:when>
-					<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-						<a href="{$browseUrl}{atom:link[@rel='down']/@href}&amp;filter={$filter}">
-							<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']"/>
-						</a>
-					</xsl:when>
-					<xsl:otherwise>
-						<a href="{$browseUrl}{atom:link[@rel='self']/@href}">
-							<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']"/>
-						</a>
-					</xsl:otherwise>
-				</xsl:choose>
-			</td>
-			<td class="tdinfo{$odd}">
-				<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}">
-					<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:objectTypeId']"/>
-				</a>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:contentStreamMimeType']"/>
-			</td>
-			<td class="tdinfo{$odd}" align="right">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyInteger[@propertyDefinitionId='cmis:contentStreamLength']"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:createdBy']"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyDateTime[@propertyDefinitionId='cmis:creationDate']"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:versionLabel']"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyBoolean[@propertyDefinitionId='cmis:isMajorVersion']"/>
-			</td>
-		</tr>
-		<tr>
-			<td class="tdlinks{$odd}" colspan="4">
-				<a href="{$browseUrl}{atom:link[@rel='self']/@href}" class="actionlink">Entry</a> -
-				<xsl:if test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-					<a href="{$browseUrl}{atom:link[@rel='self']/@href}&amp;renditionFilter=*{$browseOverrideStylesheet}renditions" class="actionlink">Renditions</a> -
-				</xsl:if>
-				<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}" class="actionlink">Type Info</a> -
-				<xsl:if test="atom:link[@rel='down']">
-					<xsl:for-each select="atom:link[@rel='down']">
-						<a href="{$browseUrl}{@href}" class="actionlink">Down (<xsl:value-of select="@type"/>)</a> -
-					</xsl:for-each>
-				</xsl:if>
-				<xsl:if test="atom:content">
-					<a href="{atom:content/@src}" class="actionlink">Download</a> -
-				</xsl:if>
-				<xsl:if test="atom:link[@rel='version-history']">
-					<a href="{$browseUrl}{atom:link[@rel='version-history']/@href}" class="actionlink">All Versions</a> -
-				</xsl:if>
-				<xsl:if test="atom:link[@rel='alternate']">
-					<xsl:for-each select="atom:link[@rel='alternate']">
-						<a href="{@href}" class="actionlink">Rendition (<xsl:value-of select="@cmisra:renditionKind"/>)</a> -
-					</xsl:for-each>
-				</xsl:if>
-				<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']">
-					<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']/@href}&amp;relationshipDirection=either{$browseOverrideStylesheet}relationships" class="actionlink">Relationships</a> -
-				</xsl:if>
-				<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-					<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}" class="actionlink">Allowable Actions</a> -
-				</xsl:if>
-				<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-					<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}" class="actionlink">ACL</a> -
-				</xsl:if>
-				<xsl:if test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-					<a href="{$browseUrl}{atom:link[@rel='down']/@href}&amp;filter={$filter}&amp;renditionFilter=cmis:thumbnail{$browseOverrideStylesheet}thumbnails" class="actionlink">Thumbnails</a>
-				</xsl:if>
-			</td>
-			<td class="tdinfo2{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:lastModifiedBy']"/>
-			</td>
-			<td class="tdinfo2{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyDateTime[@propertyDefinitionId='cmis:lastModificationDate']"/>
-			</td>
-			<td class="tdinfo2{$odd}"/>
-			<td class="tdinfo2{$odd}">
-				<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyBoolean[@propertyDefinitionId='cmis:isLatestVersion']"/>
-			</td>
-		</tr>
-
-		<xsl:for-each select="cmisra:children/atom:feed/atom:entry">
-			<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId']"/>
-			<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:name']"/>
-			<xsl:call-template name="object">
-				<xsl:with-param name="depth" select="$depth + 1"/>
-			</xsl:call-template>
-		</xsl:for-each>
-	</xsl:template>
-
-	<xsl:template name="type">
-		<xsl:param name="depth"/>
-
-		<xsl:variable name="odd">
-			<xsl:if test="(position() mod 2) != 1"/>
-			<xsl:if test="(position() mod 2) = 1">-odd</xsl:if>
-		</xsl:variable>
-
-		<tr>
-			<td class="tdlinks{$odd}" rowspan="2">
-				<img src="{$auxRoot}type.png"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:if test="$depth &gt; 0">
-					<xsl:value-of select="substring('********************', 1, $depth)"/><xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
-				</xsl:if>
-			<a href="{$browseUrl}{atom:link[@rel='self']/@href}" style="font-weight: bold;">
-					<xsl:value-of select="cmisra:type/cmis:id"/>
-				</a>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:localName"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:localNamespace"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:displayName"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:queryName"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:baseId"/>
-			</td>
-			<td class="tdinfo{$odd}">
-				<xsl:value-of select="cmisra:type/cmis:description"/>
-			</td>
-		</tr>
-		<tr>
-			<td class="tdlinks{$odd}" colspan="7">
-				<a href="{$browseUrl}{atom:link[@rel='self']/@href}" class="actionlink">Entry</a> -
-				<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}" class="actionlink">Type Info</a> -
-				<xsl:if test="atom:link[@rel='down']">
-					<a href="{$browseUrl}{atom:link[@rel='down']/@href}" class="actionlink">Down</a>
-				</xsl:if>
-			</td>
-		</tr>
-
-		<xsl:for-each select="cmisra:children/atom:feed/atom:entry">
-			<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:name']"/>
-			<xsl:call-template name="type">
-				<xsl:with-param name="depth" select="$depth + 1"/>
-			</xsl:call-template>
-		</xsl:for-each>
-	</xsl:template>
-</xsl:stylesheet>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/relationships.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/relationships.xsl
deleted file mode 100644
index 1cc48d0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/relationships.xsl
+++ /dev/null
@@ -1,280 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-	<xsl:param name="browseOverrideStylesheet"/>
-
-	<xsl:variable name="filter">
-		<xsl:text>cmis:baseTypeId,cmis:name,cmis:objectTypeId,cmis:contentStreamMimeType,cmis:contentStreamLength,cmis:createdBy,cmis:creationDate,cmis:versionLabel,cmis:isMajorVersion,cmis:lastModifiedBy,cmis:lastModificationDate,cmis:isLatestVersion</xsl:text>
-	</xsl:variable>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title><xsl:value-of select="atom:feed/atom:title" /></title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;" />
-				<h1><xsl:value-of select="atom:feed/atom:title" /></h1>
-				<div class="navigationbox">
-					<form name="urlform">
-						<input type="text" name="url" value="" size="100"/>
-						<input type="hidden" name="browseUrl" value="{$browseUrl}" />
-						<input type="button" value="Go" onClick="load()" />
-						<input type="button" value="Atom" onClick="loadAtom()" />
-					</form>
-					<script type="text/javascript">
-						var x = window.location.search.indexOf("=");
-						if(x > -1) {
-							document.forms.urlform.url.value = decodeURI(window.location.search.substring(x+1));
-						}
-						function load() { window.location.href = document.forms.urlform.browseUrl.value + document.forms.urlform.url.value; }
-						function loadAtom() { window.location.href = document.forms.urlform.url.value; }
-					</script>
-					<xsl:if test="atom:feed/atom:link[@rel='service']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='service']/@href}">Service</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='self']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='self']/@href}">Entry</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='up']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='up']/@href}">Up</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='down']">
-						<xsl:for-each select="atom:feed/atom:link[@rel='down']">
-							<a href="{$browseUrl}{@href}">Down (<xsl:value-of select="@type" />)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='first']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='first']/@href}">First</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='previous']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='previous']/@href}">Previous</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='next']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='next']/@href}">Next</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='last']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='last']/@href}">Last</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']/@href}">Folder Tree</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}">Allowable Actions</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}">ACL</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']/@href}">Policies</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='describedby']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='describedby']/@href}">Type</a>
-					</xsl:if>
-				</div>
-				<xsl:if test="atom:feed/atom:entry/cmisra:object">
-					<h2>Relationships</h2>
-					<table class="feedtable">
-					<tr>
-						<th></th>
-						<th>Name</th>
-						<th>Type</th>
-						<th>Source</th>
-						<th>Target</th>
-						<th>Creation Date /<br/> Last Modification Date</th>
-					</tr>
-					<xsl:for-each select="atom:feed/atom:entry">
-						<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId']" />
-						<xsl:sort select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:name']" />
-
-						<xsl:variable name="odd">
-							<xsl:if test="(position() mod 2) != 1"></xsl:if>
-							<xsl:if test="(position() mod 2) = 1">-odd</xsl:if>
-						</xsl:variable>
-
-						<tr>
-							<td class="tdlinks{$odd}" rowspan="2">
-								<xsl:choose>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-										<img src="{$auxRoot}document.png" />
-									</xsl:when>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-										<img src="{$auxRoot}folder.png" />
-									</xsl:when>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:relationship')">
-										<img src="{$auxRoot}relationship.png" />
-									</xsl:when>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:policy')">
-										<img src="{$auxRoot}policy.png" />
-									</xsl:when>
-									<xsl:otherwise>
-										<img src="{$auxRoot}unknown.png" />
-									</xsl:otherwise>
-								</xsl:choose>
-							</td>
-							<td class="tdinfo{$odd}" style="font-weight: bold;">
-								<xsl:choose>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-										<a href="{atom:content/@src}">
-										<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']" />
-										</a>
-									</xsl:when>
-									<xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-										<a href="{$browseUrl}{atom:link[@rel='down']/@href}&amp;filter={$filter}">
-										<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']" />
-										</a>
-									</xsl:when>
-									<xsl:otherwise>
-										<a href="{$browseUrl}{atom:link[@rel='self']/@href}">
-										<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']" />
-										</a>
-									</xsl:otherwise>
-								</xsl:choose>
-							</td>
-							<td class="tdinfo{$odd}">
-								<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}">
-								<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:objectTypeId']" />
-								</a>
-							</td>
-
-							<xsl:variable name="objectId">
-								<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:objectId']/cmis:value"></xsl:value-of>
-							</xsl:variable>
-							<xsl:variable name="entryUrl">
-								<xsl:value-of select="atom:link[@rel='self']/@href"></xsl:value-of>
-							</xsl:variable>
-							<xsl:variable name="sourceId">
-								<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:sourceId']/cmis:value"></xsl:value-of>
-							</xsl:variable>
-							<xsl:variable name="targetId">
-								<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:targetId']/cmis:value"></xsl:value-of>
-							</xsl:variable>
-							<xsl:variable name="sourceEntryUrl">
-								<xsl:value-of select="substring-before($entryUrl, $objectId)"></xsl:value-of>
-								<xsl:value-of select="$sourceId"></xsl:value-of>
-							</xsl:variable>
-							<xsl:variable name="targetEntryUrl">
-								<xsl:value-of select="substring-before($entryUrl, $objectId)"></xsl:value-of>
-								<xsl:value-of select="$targetId"></xsl:value-of>
-							</xsl:variable>
-
-							<td class="tdinfo{$odd}"><a href="{$browseUrl}{$sourceEntryUrl}"><xsl:value-of select="$sourceId"></xsl:value-of></a></td>
-							<td class="tdinfo{$odd}"><a href="{$browseUrl}{$targetEntryUrl}"><xsl:value-of select="$targetId"></xsl:value-of></a></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyDateTime[@propertyDefinitionId='cmis:creationDate']" /></td>
-						</tr>
-						<tr>
-							<td class="tdlinks{$odd}" colspan="4">
-								<a href="{$browseUrl}{atom:link[@rel='self']/@href}" class="actionlink">Entry</a> -
-								<xsl:if test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-									<a href="{$browseUrl}{atom:link[@rel='self']/@href}&amp;renditionFilter=*{$browseOverrideStylesheet}renditions" class="actionlink">Renditions</a> -
-								</xsl:if>
-								<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}" class="actionlink">Type Info</a> -
-								<xsl:if test="atom:link[@rel='down']">
-									<xsl:for-each select="atom:link[@rel='down']">
-										<a href="{$browseUrl}{@href}" class="actionlink">Down (<xsl:value-of select="@type" />)</a> -
-									</xsl:for-each>
-								</xsl:if>
-								<xsl:if test="atom:content">
-									<a href="{atom:content/@src}" class="actionlink">Download</a> -
-								</xsl:if>
-								<xsl:if test="atom:link[@rel='version-history']">
-									<a href="{$browseUrl}{atom:link[@rel='version-history']/@href}" class="actionlink">All Versions</a> -
-								</xsl:if>
-								<xsl:if test="atom:link[@rel='alternate']">
-									<xsl:for-each select="atom:link[@rel='alternate']">
-										<a href="{@href}" class="actionlink">Rendition (<xsl:value-of select="@cmisra:renditionKind"></xsl:value-of>)</a> -
-									</xsl:for-each>
-								</xsl:if>
-								<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']">
-									<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']/@href}{$browseOverrideStylesheet}relationships">Relationships</a> -
-								</xsl:if>
-								<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-									<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}" class="actionlink">Allowable Actions</a> -
-								</xsl:if>
-								<xsl:if test="atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-									<a href="{$browseUrl}{atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}" class="actionlink">ACL</a>
-								</xsl:if>
-							</td>
-							<td class="tdinfo2{$odd}"><xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyDateTime[@propertyDefinitionId='cmis:lastModificationDate']" /></td>
-					</tr>
-					</xsl:for-each>
-					</table>
-				</xsl:if>
-				<xsl:if test="atom:feed/atom:entry/cmisra:type">
-
-					<table class="feedtable">
-					<tr>
-						<th></th>
-						<th>Id</th>
-						<th>Local Name</th>
-						<th>Local Namespace</th>
-						<th>Display Name</th>
-						<th>Query Name</th>
-						<th>Base Id</th>
-						<th>Description</th>
-					</tr>
-					<xsl:for-each select="atom:feed/atom:entry">
-					<xsl:variable name="odd">
-							<xsl:if test="(position() mod 2) != 1"></xsl:if>
-							<xsl:if test="(position() mod 2) = 1">-odd</xsl:if>
-						</xsl:variable>
-
-						<tr>
-							<td class="tdlinks{$odd}" rowspan="2">
-								<img src="{$auxRoot}type.png" />
-							</td>
-							<td class="tdinfo{$odd}">
-								<a href="{$browseUrl}{atom:link[@rel='self']/@href}" style="font-weight: bold;">
-								<xsl:value-of select="cmisra:type/cmis:id" />
-								</a>
-							</td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:localName" /></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:localNamespace" /></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:displayName" /></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:queryName" /></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:baseId" /></td>
-							<td class="tdinfo{$odd}"><xsl:value-of select="cmisra:type/cmis:description" /></td>
-						</tr>
-						<tr>
-							<td class="tdlinks{$odd}" colspan="7">
-								<a href="{$browseUrl}{atom:link[@rel='self']/@href}" class="actionlink">Entry</a> -
-								<a href="{$browseUrl}{atom:link[@rel='describedby']/@href}" class="actionlink">Type Info</a> -
-								<xsl:if test="atom:link[@rel='down']">
-									<a href="{$browseUrl}{atom:link[@rel='down']/@href}" class="actionlink">Down</a>
-								</xsl:if>
-							</td>
-						</tr>
-					</xsl:for-each>
-					</table>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-
-</xsl:stylesheet>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/renditions.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/renditions.xsl
deleted file mode 100644
index e911be3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/renditions.xsl
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title><xsl:value-of select="atom:entry/atom:title" /></title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;" />
-				<h1>
-				<xsl:choose>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-						<img src="{$auxRoot}document.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-						<img src="{$auxRoot}folder.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:relationship')">
-						<img src="{$auxRoot}relationship.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="contains(atom:entry/cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:policy')">
-						<img src="{$auxRoot}policy.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:when test="atom:entry/cmisra:type">
-						<img src="{$auxRoot}type.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:when>
-					<xsl:otherwise>
-						<img src="{$auxRoot}unknown.png" style="vertical-align:middle; padding-right: 10px;" />
-					</xsl:otherwise>
-				</xsl:choose>
-				<xsl:value-of select="atom:entry/atom:title" /></h1>
-
-				<div class="navigationbox">
-					<xsl:if test="atom:entry/atom:link[@rel='service']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='service']/@href}">Service</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='up']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='up']/@href}">Up</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='down']">
-						<xsl:for-each select="atom:entry/atom:link[@rel='down']">
-							<a href="{$browseUrl}{@href}">Down (<xsl:value-of select="@type" />)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']/@href}">Folder Tree</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:content">
-						<a href="{atom:entry/atom:content/@src}">Download</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='version-history']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='version-history']/@href}">All Versions</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='alternate']">
-						<xsl:for-each select="atom:entry/atom:link[@rel='alternate']">
-							<a href="{@href}">Rendition (<xsl:value-of select="@cmisra:renditionKind"></xsl:value-of>)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/relationships']/@href}">Relationships</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}">Allowable Actions</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}">ACL</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']/@href}">Policies</a> -
-					</xsl:if>
-					<xsl:if test="atom:entry/atom:link[@rel='describedby']">
-						<a href="{$browseUrl}{atom:entry/atom:link[@rel='describedby']/@href}">Type</a>
-					</xsl:if>
-				</div>
-
-				<xsl:if test="atom:entry/atom:summary">
-				<h2>Summary</h2>
-				<div class="entrysummary">
-					<xsl:value-of select="atom:entry/atom:summary" disable-output-escaping="yes"/>
-				</div>
-				</xsl:if>
-
-
-				<xsl:if test="atom:entry/atom:link[@rel='alternate']">
-				<h2>Renditions</h2>
-				<table>
-					<tr>
-						<td>
-						<xsl:if test="atom:entry/atom:link[@rel='alternate' and @cmisra:renditionKind='cmis:thumbnail']">
-							<img src="{atom:entry/atom:link[@rel='alternate' and @cmisra:renditionKind='cmis:thumbnail']/@href}" />
-						</xsl:if>
-						</td>
-						<td>
-							<table class="entrytable">
-								<tr>
-									<th>Kind</th>
-									<th>MIME Type</th>
-									<th>Size</th>
-									<th>Height</th>
-									<th>Width</th>
-								</tr>
-							<xsl:for-each select="atom:entry/cmisra:object/cmis:rendition">
-								<xsl:variable name="odd">
-									<xsl:if test="(position() mod 2) != 1"></xsl:if>
-									<xsl:if test="(position() mod 2) = 1">-odd</xsl:if>
-								</xsl:variable>
-								<xsl:variable name="renditionKind">
-									<xsl:value-of select="cmis:kind"></xsl:value-of>
-								</xsl:variable>
-								<xsl:variable name="renditionURL">
-									<xsl:for-each select="//atom:entry/atom:link[@rel='alternate']">
-										<xsl:if test="@cmisra:renditionKind = $renditionKind">
-											<xsl:value-of select="@href"></xsl:value-of>
-										</xsl:if>
-									</xsl:for-each>
-								</xsl:variable>
-
-								<tr>
-									<td class="tdlinks{$odd}"><a href="{$renditionURL}"><xsl:value-of select="$renditionKind"></xsl:value-of></a></td>
-									<td class="tdlinks{$odd}"><xsl:value-of select="cmis:mimetype"></xsl:value-of></td>
-									<td class="tdlinks{$odd}"><xsl:value-of select="cmis:length"></xsl:value-of></td>
-									<td class="tdlinks{$odd}"><xsl:value-of select="cmis:height"></xsl:value-of></td>
-									<td class="tdlinks{$odd}"><xsl:value-of select="cmis:width"></xsl:value-of></td>
-								</tr>
-							</xsl:for-each>
-							</table>
-						</td>
-					</tr>
-				</table>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-
-</xsl:stylesheet>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/service.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/service.xsl
deleted file mode 100644
index 16aeee4..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/service.xsl
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title>Service</title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;" />
-				<H1>Repositories</H1>
-				<xsl:for-each select="app:service/app:workspace">
-					<div class="servicebox">
-						<h2>Repository <xsl:value-of select="cmisra:repositoryInfo/cmis:repositoryId" /></h2>
-						<h3>Collections:</h3><ul><xsl:apply-templates select="app:collection" /></ul>
-						<h3>Links:</h3><ul><xsl:apply-templates select="atom:link" /></ul>
-						<h3>URI Templates:</h3><ul><xsl:apply-templates select="cmisra:uritemplate" /></ul>
-						<table style="border-spacing:5px">
-							<tr>
-								<td style="vertical-align:top;"><xsl:apply-templates select="cmisra:repositoryInfo" /></td>
-								<td style="vertical-align:top;"><xsl:apply-templates select="cmisra:repositoryInfo/cmis:capabilities" /></td>
-								<td style="vertical-align:top;"><xsl:apply-templates select="cmisra:repositoryInfo/cmis:aclCapability" /></td>
-							</tr>
-						</table>
-					</div>
-				</xsl:for-each>
-			</body>
-		</html>
-	</xsl:template>
-
-	<xsl:template match="cmisra:repositoryInfo">
-		<div>
-		<h3>Info</h3>
-		<table class="servicetable">
-			<xsl:for-each select="*[not(*)]">
-				<tr>
-					<td><xsl:value-of select="local-name()" /></td>
-					<td><xsl:value-of select="current()" /></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		</div>
-	</xsl:template>
-
-	<xsl:template match="cmis:capabilities">
-		<div>
-		<h3>Capabilities</h3>
-		<table class="servicetable">
-			<xsl:for-each select="*[not(*)]">
-				<tr>
-					<td><xsl:value-of select="substring-after(local-name(), 'capability')" /></td>
-					<td><xsl:value-of select="current()" /></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		</div>
-	</xsl:template>
-
-	<xsl:template match="cmis:aclCapability">
-		<div>
-		<h3>ACL Capabilities</h3>
-		<table class="servicetable">
-			<tr>
-				<td>Supported Permissions</td><td><xsl:value-of select="cmis:supportedPermissions" /></td>
-			</tr>
-			<tr>
-				<td>Propagation</td><td><xsl:value-of select="cmis:propagation" /></td>
-			</tr>
-		</table>
-		<h4>Permissions</h4>
-		<table class="servicetable">
-			<tr><th>Permission</th><th>Description</th></tr>
-			<xsl:for-each select="cmis:permissions">
-				<tr>
-					<td><xsl:value-of select="cmis:permission" /></td>
-					<td><xsl:value-of select="cmis:description" /></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		<h4>Mappings</h4>
-		<table class="servicetable">
-			<tr><th>Key</th><th>Permission</th></tr>
-			<xsl:for-each select="cmis:mapping">
-				<tr>
-					<td><xsl:value-of select="cmis:key" /></td>
-					<td><xsl:value-of select="cmis:permission" /></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		</div>
-	</xsl:template>
-
-	<xsl:template match="app:collection">
-		<li><a href="{$browseUrl}{@href}"><xsl:value-of select="atom:title" /> (<xsl:value-of select="cmisra:collectionType" />)</a></li>
-	</xsl:template>
-
-	<xsl:template match="atom:link">
-		<li><a href="{$browseUrl}{@href}"><xsl:value-of select="@rel" /></a> (<xsl:value-of select="@type" />)</li>
-	</xsl:template>
-	
-	<xsl:template match="cmisra:uritemplate">
-		<li><xsl:value-of select="cmisra:type" /> (<xsl:value-of select="cmisra:mediatype" />): 
-		<a href="{$browseUrl}{cmisra:template}"><xsl:value-of select="cmisra:template" /></a></li>
-	</xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/thumbnails.xsl b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/thumbnails.xsl
deleted file mode 100644
index dbc80de..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/stylesheets/thumbnails.xsl
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:app="http://www.w3.org/2007/app"
-	xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
-	xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
-
-	<xsl:output method="html" />
-
-	<xsl:param name="browseUrl"/>
-	<xsl:param name="auxRoot"/>
-	<xsl:param name="browseOverrideStylesheet"/>
-
-	<xsl:variable name="filter">
-		<xsl:text>cmis:baseTypeId,cmis:name,cmis:objectTypeId,cmis:contentStreamMimeType,cmis:contentStreamLength,cmis:createdBy,cmis:creationDate,cmis:versionLabel,cmis:isMajorVersion,cmis:lastModifiedBy,cmis:lastModificationDate,cmis:isLatestVersion</xsl:text>
-	</xsl:variable>
-
-	<xsl:template match="*">
-		<xsl:variable name="width">
-			<xsl:value-of select="cmisra:object/cmis:rendition/cmis:kind[text() = 'cmis:thumbnail']/../cmis:width"></xsl:value-of>
-		</xsl:variable>
-		<xsl:variable name="height">
-			<xsl:value-of select="cmisra:object/cmis:rendition/cmis:kind[text() = 'cmis:thumbnail']/../cmis:height"></xsl:value-of>
-		</xsl:variable>
-
-		<table class="feedtable">
-			<tr>
-				<td class="tdthumb">
-				    <xsl:choose>
-					    <xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:document')">
-                            <a href="{atom:content/@src}">
-                                <xsl:choose>
-                                    <xsl:when test="atom:link[@rel='alternate' and @cmisra:renditionKind='cmis:thumbnail']/@href">
-                                        <img src="{atom:link[@rel='alternate' and @cmisra:renditionKind='cmis:thumbnail']/@href}" width="{$width}px" height="{$height}px"/>
-                                    </xsl:when>
-                                    <xsl:otherwise>
-                                        <img src="{$auxRoot}unknown.png"/>
-                                    </xsl:otherwise>
-                              	</xsl:choose>
-						    </a>
-					    </xsl:when>
-                        <xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:folder')">
-						    <a href="{$browseUrl}{atom:link[@rel='down']/@href}&amp;filter={$filter}">
-							    <img src="{$auxRoot}folder.png"/>
-						    </a>
-						</xsl:when>    
-					    <xsl:when test="contains(cmisra:object/cmis:properties/cmis:propertyId[@propertyDefinitionId='cmis:baseTypeId'],'cmis:policy')">
-					        <a href="{$browseUrl}{atom:link[@rel='self']/@href}">
-						        <img src="{$auxRoot}policy.png"/>
-						    </a>    
-					    </xsl:when>
-					    <xsl:otherwise>
-                            <a href="{$browseUrl}{atom:link[@rel='self']/@href}">
-						        <img src="{$auxRoot}unknown.png"/>
-                            </a>
-                        </xsl:otherwise>
-                    </xsl:choose>
-				</td>
-			</tr>
-			<tr>
-				<td class="tdthumbId">
-					<a href="{$browseUrl}{atom:link[@rel='self']/@href}">
-						<xsl:value-of select="cmisra:object/cmis:properties/cmis:propertyString[@propertyDefinitionId='cmis:name']" />
-					</a>
-				</td>
-			</tr>
-		</table>
-	</xsl:template>
-
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title><xsl:value-of select="atom:feed/atom:title" /></title>
-				<link rel="stylesheet" type="text/css" href="{$auxRoot}browser.css" />
-			</head>
-			<body>
-				<img src="{$auxRoot}cmis.png" style="float: right;" />
-				<h1><xsl:value-of select="atom:feed/atom:title" /></h1>
-				<div class="navigationbox">
-					<form name="urlform">
-						<input type="text" name="url" value="" size="100"/>
-						<input type="hidden" name="browseUrl" value="{$browseUrl}" />
-						<input type="button" value="Go" onClick="load()" />
-						<input type="button" value="Atom" onClick="loadAtom()" />
-					</form>
-					<script type="text/javascript">
-						var x = window.location.search.indexOf("=");
-						if(x > -1) {
-							document.forms.urlform.url.value = decodeURI(window.location.search.substring(x+1));
-						}
-						function load() { window.location.href = document.forms.urlform.browseUrl.value + document.forms.urlform.url.value; }
-						function loadAtom() { window.location.href = document.forms.urlform.url.value; }
-					</script>
-					<xsl:if test="atom:feed/atom:link[@rel='service']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='service']/@href}">Service</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='self']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='self']/@href}">Entry</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='up']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='up']/@href}">Up</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='down']">
-						<xsl:for-each select="atom:feed/atom:link[@rel='down']">
-							<a href="{$browseUrl}{@href}">Down (<xsl:value-of select="@type" />)</a> -
-						</xsl:for-each>
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='first']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='first']/@href}{$browseOverrideStylesheet}thumbnails">First</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='previous']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='previous']/@href}{$browseOverrideStylesheet}thumbnails">Previous</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='next']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='next']/@href}{$browseOverrideStylesheet}thumbnails">Next</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='last']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='last']/@href}{$browseOverrideStylesheet}thumbnails">Last</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/foldertree']/@href}">Folder Tree</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions']/@href}">Allowable Actions</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/acl']/@href}">ACL</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='http://docs.oasis-open.org/ns/cmis/link/200908/policies']/@href}">Policies</a> -
-					</xsl:if>
-					<xsl:if test="atom:feed/atom:link[@rel='describedby']">
-						<a href="{$browseUrl}{atom:feed/atom:link[@rel='describedby']/@href}">Type</a>
-					</xsl:if>
-				</div>
-
-				<xsl:if test="atom:feed/atom:entry/cmisra:object">
-					<table>
-						<tr>
-							<td valign="top">
-								<xsl:apply-templates select="atom:feed/atom:entry[position() mod 3 = 1]"/>
-							</td>
-							<td valign="top">
-								<xsl:apply-templates select="atom:feed/atom:entry[position() mod 3 = 2]"/>
-							</td>
-							<td valign="top">
-								<xsl:apply-templates select="atom:feed/atom:entry[position() mod 3 = 0]"/>
-							</td>
-						</tr>
-					</table>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-
-</xsl:stylesheet>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/web.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 71f6b48..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. 
--->
-<web-app id="OpenCMISBrowserID" version="2.4"
-	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-	<display-name>OpenCMIS Browser</display-name>
-
-	<welcome-file-list>
-		<welcome-file>index.html</welcome-file>
-	</welcome-file-list>
-
-	<servlet>
-		<servlet-name>browse</servlet-name>
-		<servlet-class>org.apache.chemistry.opencmis.browser.BrowseServlet</servlet-class>
-		<init-param>
-			<param-name>auxroot</param-name>
-			<param-value>{ctx}/browser/</param-value>
-		</init-param>
-		<init-param>
-			<param-name>allow</param-name>
-			<param-value>http.*</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/atomsvc+xml</param-name>
-			<param-value>/WEB-INF/stylesheets/service.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/atom+xml;type=feed</param-name>
-			<param-value>/WEB-INF/stylesheets/feed.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/cmistree+xml</param-name>
-			<param-value>/WEB-INF/stylesheets/feed.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/atom+xml;type=entry</param-name>
-			<param-value>/WEB-INF/stylesheets/entry.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/cmisallowableactions+xml</param-name>
-			<param-value>/WEB-INF/stylesheets/actions.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>stylesheet:application/cmisacl+xml</param-name>
-			<param-value>/WEB-INF/stylesheets/acl.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>override-stylesheet:renditions</param-name>
-			<param-value>/WEB-INF/stylesheets/renditions.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>override-stylesheet:relationships</param-name>
-			<param-value>/WEB-INF/stylesheets/relationships.xsl</param-value>
-		</init-param>
-		<init-param>
-			<param-name>override-stylesheet:thumbnails</param-name>
-			<param-value>/WEB-INF/stylesheets/thumbnails.xsl</param-value>
-		</init-param>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>browse</servlet-name>
-		<url-pattern>/browse</url-pattern>
-	</servlet-mapping>
-
-	<session-config>
-		<session-timeout>60</session-timeout>
-	</session-config>
-</web-app>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/browser.css b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/browser.css
deleted file mode 100644
index ab63066..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/browser.css
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-@CHARSET "UTF-8";
-
-body { 
-	font-family: arial,sans-serif;
-	font-size: 10pt; 
-}
-
-h1 {
-	font-family: Georgia;
-}
-
-h2 {
-	font-family: Georgia;
-}
-
-h3 {
-	font-family: Georgia;
-}
-
-a:link {
-	color: #204a87;
-	text-decoration: none;	
-}
-
-a:visited {
-	color: #204a87;
-	text-decoration: none;
-}
-
-a:hover {
-	color: #204a87;
-	text-decoration: underline;
-}
-
-a:active {
-	color: a40000;
-	text-decoration: underline;
-}
-
-div.navigationbox {
-	background-color: #f6f1de;
-	margin-top: 10px;
-	margin-bottom: 10px;
-	margin-left: 0px;
-	margin-right: 0px;
-	padding: 5px;
-	border-style: solid;
-	border-width: 1px;
-	border-color: #888a85;
-}
-
-table.servicetable {
-	border-collapse: collapse;
-}
-
-table.servicetable th{
-	font-size: 10pt;
-	font-weight: bold;	
-	padding: 5px;
-	text-align: left;
-}
-
-table.servicetable td {
-	font-size: 10pt; 
-	padding: 5px;
-	border-bottom-style: solid;
-	border-color: #dddddd;
-	border-width: 1px;
-}
-
-.servicebox {
-	background-color: #f6f1de;
-	font-size: 10pt; 
-	padding: 10px;
-	margin: 10px;
-	border-color: #888a85;
-	border-style: solid;
-	border-width: 2px;
-}
-
-table.feedtable {
-	border-collapse: collapse;
-}
-
-table.feedtable th {
-	font-size: 10pt;
-	font-weight: bold;	
-	text-align: left;
-}
-
-.tdinfo {
-	font-size: 10pt; 
-	padding-left: 3px;
-	padding-top: 3px;
-	padding-bottom: 0px;
-	padding-right: 10px;
-}
-
-.tdinfo2 {
-	font-size: 10pt; 
-	padding: 3px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-.tdlinks {
-	font-size: 8pt; 
-	padding: 3px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-.tdmore {
-	background-color: #eeeeec;
-	font-size: 10pt; 
-	padding-left: 3px;
-	padding-top: 3px;
-	padding-bottom: 0px;
-	padding-right: 10px;
-}
-
-.tdinfo-odd {
-	background-color: #fcf9df;
-	font-size: 10pt; 
-	padding-left: 3px;
-	padding-top: 3px;
-	padding-bottom: 0px;
-	padding-right: 10px;
-}
-
-.tdinfo2-odd {
-	background-color: #fcf9df;
-	font-size: 10pt; 
-	padding: 3px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-.tdlinks-odd {
-	background-color: #fcf9df;
-	font-size: 8pt; 
-	padding: 3px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-.tdmore-odd {
-	background-color: #fce94f;
-	font-size: 10pt; 
-	padding: 3px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-a.actionlink:link {
-	color: #888a85;
-	text-decoration: none;	
-}
-
-a.actionlink:visited {
-	color: #888a85;
-	text-decoration: none;
-}
-
-a.actionlink:hover {
-	color: #2e3436;
-	text-decoration: underline;
-}
-
-a.actionlink:active {
-	color: red;
-	text-decoration: underline;
-}
-
-table.entrytable {
-	border-collapse: collapse;
-}
-
-table.entrytable th {
-	font-size: 10pt;
-	font-weight: bold;	
-	text-align: left;
-}
-
-table.entrytable td {
-	font-size: 10pt; 
-	padding: 5px;
-	border-bottom-style: solid;
-	border-color: #d3d7cf;
-	border-width: 1px;
-}
-
-div.entrysummary {
-	margin-top: 10px;
-	margin-bottom: 10px;
-	margin-left: 0px;
-	margin-right: 0px;
-	padding: 5px;
-	border-style: solid;
-	border-width: 1px;
-	border-color: #888a85;	
-	height: 150px;
-	overflow: auto;
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/cmis.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/cmis.png
deleted file mode 100644
index 871717a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/cmis.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/document.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/document.png
deleted file mode 100644
index 928a679..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/document.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/folder.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/folder.png
deleted file mode 100644
index 472484f..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/folder.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/policy.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/policy.png
deleted file mode 100644
index 5e972d1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/policy.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/relationship.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/relationship.png
deleted file mode 100644
index 56ef039..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/relationship.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/type.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/type.png
deleted file mode 100644
index 53dde74..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/type.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/unknown.png b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/unknown.png
deleted file mode 100644
index d60425f..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser-app/src/main/webapp/browser/unknown.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/pom.xml
deleted file mode 100644
index ca8cbc8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    
-    <artifactId>chemistry-opencmis-test-browser</artifactId>
-    <name>OpenCMIS Browser</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java
deleted file mode 100644
index 00337f4..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.browser;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-
-/**
- * CMIS Browser Servlet.
- */
-public class BrowseServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(BrowseServlet.class);
-
-    private static final String CONTEXT_PREFIX = "{ctx}";
-    private static final String PARAM_URL = "url";
-    private static final String PARAM_OVERRIDE_STYLESHEET = "overrideStylesheet";
-    private static final int PARAM_URL_MIN_LEN = PARAM_URL.length() + "=".length() + "http".length() + "://".length()
-            + 1;
-    private static final String INIT_PARAM_AUXROOT = "auxroot";
-    private static final String INIT_PARAM_ALLOW = "allow";
-    private static final String INIT_PARAM_STYLESHEET = "stylesheet:";
-    private static final String INIT_PARAM_OVERRIDE_STYLESHEET = "override-stylesheet:";
-
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    private String fAuxRoot = "";
-    private String fAllow = ".*";
-    private Map<String, Source> fStyleSheets;
-    private Map<String, Source> fOverrideStyleSheets;
-
-    /**
-     * Initializes the browser servlet.
-     */
-    @SuppressWarnings("unchecked")
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-        fStyleSheets = new HashMap<String, Source>();
-        fOverrideStyleSheets = new HashMap<String, Source>();
-
-        DocumentBuilder builder = null;
-        try {
-            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
-            builderFactory.setNamespaceAware(true);
-            builder = builderFactory.newDocumentBuilder();
-        } catch (Exception e) {
-            LOG.error(e.getMessage(), e);
-            return;
-        }
-
-        Enumeration<String> initParams = config.getInitParameterNames();
-        while (initParams.hasMoreElements()) {
-            String param = initParams.nextElement();
-            String stylesheetKey = null;
-            boolean isOverride = false;
-
-            if (param.startsWith(INIT_PARAM_STYLESHEET)) {
-                stylesheetKey = param.substring(INIT_PARAM_STYLESHEET.length());
-            } else if (param.startsWith(INIT_PARAM_OVERRIDE_STYLESHEET)) {
-                stylesheetKey = param.substring(INIT_PARAM_OVERRIDE_STYLESHEET.length());
-                isOverride = true;
-            }
-
-            if (stylesheetKey != null) {
-                String stylesheetFileName = config.getInitParameter(param);
-                InputStream stream = config.getServletContext().getResourceAsStream(stylesheetFileName);
-                if (stream != null) {
-                    try {
-                        Document xslDoc = builder.parse(stream);
-                        addStylesheet(stylesheetKey, new DOMSource(xslDoc), isOverride);
-
-                        LOG.info("Stylesheet: '" + stylesheetKey + "' -> '" + stylesheetFileName + "'");
-                    } catch (Exception e) {
-                        LOG.error(e.getMessage(), e);
-                    }
-                }
-            }
-        }
-
-        String initAuxRoot = config.getInitParameter(INIT_PARAM_AUXROOT);
-        if (initAuxRoot != null) {
-            fAuxRoot = initAuxRoot;
-            LOG.info("Auxiliary root: " + fAuxRoot);
-        }
-
-        String initAllow = config.getInitParameter(INIT_PARAM_ALLOW);
-        if (initAllow != null) {
-            fAllow = initAllow;
-            LOG.info("Allow pattern: " + fAllow);
-        }
-    }
-
-    /**
-     * Handles GET requests.
-     */
-    @Override
-    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-        String browseUrl = null;
-        String overrideStylesheet = null;
-
-        // The url parameter must come first!
-        String queryString = req.getQueryString();
-
-        if ((queryString != null) && (queryString.startsWith(PARAM_URL))) {
-            int urlEnd = queryString.indexOf(PARAM_OVERRIDE_STYLESHEET + "=");
-            if (urlEnd == -1) {
-                urlEnd = queryString.length();
-            } else {
-                overrideStylesheet = queryString.substring(urlEnd + PARAM_OVERRIDE_STYLESHEET.length() + 1);
-                --urlEnd;
-            }
-
-            browseUrl = queryString.substring(PARAM_URL.length() + 1, urlEnd);
-
-            if (browseUrl.length() < PARAM_URL_MIN_LEN) {
-                browseUrl = null;
-            }
-        }
-
-        if (browseUrl == null) {
-            printInput(req, resp);
-            return;
-        }
-
-        doBrowse(req, resp, browseUrl, overrideStylesheet);
-    }
-
-    /**
-     * Main method of the browser.
-     */
-    protected void doBrowse(HttpServletRequest req, HttpServletResponse resp, String browseUrl,
-            String overrideStylesheet) throws ServletException, IOException {
-        // check if decoding is necessary
-        // (if the char after 'http' or 'https' is not a colon, then it must be
-        // decoded)
-        if (browseUrl.charAt(4) != ':' && browseUrl.charAt(5) != ':') {
-            browseUrl = URLDecoder.decode(browseUrl, "UTF-8");
-        }
-
-        // check URL
-        if (!browseUrl.matches(fAllow)) {
-            printError(req, resp, "Prohibited URL!", null);
-            return;
-        }
-
-        try {
-            // get content
-            URL url = new URL(browseUrl);
-            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-            conn.setDoInput(true);
-            conn.setDoOutput(false);
-            conn.setRequestMethod("GET");
-            String authHeader = req.getHeader("Authorization");
-            if (authHeader != null) {
-                conn.setRequestProperty("Authorization", authHeader);
-            }
-            conn.connect();
-
-            // ask for login
-            if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) {
-                resp.setHeader("WWW-Authenticate", conn.getHeaderField("WWW-Authenticate"));
-                resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Required");
-                return;
-            }
-
-            // debug messages
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("'" + browseUrl + "' -> '" + conn.getContentType() + "'");
-            }
-
-            // find stylesheet
-            Source stylesheet = getStylesheet(conn.getContentType(), overrideStylesheet);
-
-            OutputStream out = null;
-            InputStream in = new BufferedInputStream(conn.getInputStream(), BUFFER_SIZE);
-
-            if (stylesheet == null) {
-                // no stylesheet found -> conduct content
-                resp.setContentType(conn.getContentType());
-                out = new BufferedOutputStream(resp.getOutputStream(), BUFFER_SIZE);
-
-                byte[] buffer = new byte[BUFFER_SIZE];
-                int b;
-                while ((b = in.read(buffer)) > -1) {
-                    out.write(buffer, 0, b);
-                }
-            } else {
-                // apply stylesheet
-                TransformerFactory f = TransformerFactory.newInstance();
-                Transformer t = f.newTransformer(stylesheet);
-                t.setParameter("browseUrl", getServletUrl(req) + "?" + PARAM_URL + "=");
-                t.setParameter("auxRoot", getAuxRoot(req, fAuxRoot));
-                t.setParameter("browseOverrideStylesheet", "&" + PARAM_OVERRIDE_STYLESHEET + "=");
-
-                resp.setContentType("text/html");
-                out = new BufferedOutputStream(resp.getOutputStream(), BUFFER_SIZE);
-
-                Source s = new StreamSource(in);
-                Result r = new StreamResult(out);
-                t.transform(s, r);
-            }
-
-            try {
-                out.flush();
-                out.close();
-            } catch (Exception e) {
-                // ignore, there isn't anything we can do
-            }
-
-            try {
-                in.close();
-            } catch (Exception e) {
-                // ignore, there isn't anything we can do
-            }
-        } catch (Exception e) {
-            printError(req, resp, e.getMessage(), e);
-            return;
-        }
-    }
-
-    // ---- utilities ----
-
-    /**
-     * Assigns a stylesheet to a content type.
-     */
-    private void addStylesheet(String contentType, Source source, boolean override) {
-        if ((contentType == null) || (source == null)) {
-            return;
-        }
-
-        if (override) {
-            fOverrideStyleSheets.put(contentType.trim().toLowerCase(), source);
-        } else {
-            fStyleSheets.put(contentType.trim().toLowerCase(), source);
-        }
-    }
-
-    /**
-     * Returns the stylesheet for the given override stylesheet, if there is is
-     * not override stylesheet given then the stylesheet for the given content
-     * type or <code>null</code> if no stylesheet is assigned to content type.
-     */
-    private Source getStylesheet(String contentType, String overrideStylesheet) {
-        if (contentType == null) {
-            return null;
-        }
-
-        Source source = null;
-
-        // First check if there is an override given and it has a match.
-        if (overrideStylesheet != null && overrideStylesheet.length() > 0) {
-            source = fOverrideStyleSheets.get(overrideStylesheet);
-        }
-
-        // If there is not match then check the content type map.
-        if (source == null) {
-            String[] ctp = contentType.trim().toLowerCase().split(";");
-
-            StringBuilder match = new StringBuilder();
-            int i = 0;
-            while (source == null && i < ctp.length) {
-                if (i > 0) {
-                    match.append(";");
-                }
-                match.append(ctp[i]);
-                source = fStyleSheets.get(match.toString());
-                i++;
-            }
-        }
-
-        return source;
-    }
-
-    /**
-     * Returns the context URL of this servlet.
-     */
-    private String getContextUrl(HttpServletRequest request) {
-        String scheme = request.getScheme();
-        int port = request.getServerPort();
-
-        if ("http".equals(scheme) && (port == 80)) {
-            port = -1;
-        }
-        if ("https".equals(scheme) && (port == 443)) {
-            port = -1;
-        }
-
-        return scheme + "://" + request.getServerName() + (port > 0 ? ":" + port : "") + request.getContextPath();
-    }
-
-    /**
-     * Returns the URL of this servlet.
-     */
-    private String getServletUrl(HttpServletRequest request) {
-        return getContextUrl(request) + request.getServletPath();
-    }
-
-    /**
-     * Returns the root URL of auxiliary files.
-     */
-    private String getAuxRoot(HttpServletRequest request, String auxRoot) {
-        if (auxRoot == null) {
-            return getContextUrl(request);
-        } else if (auxRoot.startsWith(CONTEXT_PREFIX)) {
-            return getContextUrl(request) + auxRoot.substring(CONTEXT_PREFIX.length());
-        } else {
-            return auxRoot;
-        }
-    }
-
-    // --- HTML methods ----
-
-    /**
-     * Prints a HTML header with styles.
-     */
-    private void printHeader(PrintWriter pw, String title) {
-        pw.print("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"");
-        pw.println("\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
-        pw.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
-        pw.println("<head>");
-        pw.println("<title>" + title + "</title>");
-        pw.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />");
-        pw.println("<style type=\"text/css\">");
-        pw.println("body { font-family: arial,sans-serif; font-size: 10pt; }");
-        pw.println("div.box { background-color: #f6f1de; margin-top: 10px;"
-                + " margin-bottom: 10px; margin-left: 0px; margin-right: 0px;"
-                + " padding: 5px; border-style: solid; border-width: 1px; border-color: #888a85; }");
-        pw.println("</style>");
-        pw.println("</head>");
-        pw.println("<body>");
-    }
-
-    /**
-     * Prints a HTML footer.
-     */
-    private void printFooter(PrintWriter pw) {
-        pw.println("</body>");
-        pw.println("</html>");
-    }
-
-    /**
-     * Prints a HTML error message.
-     */
-    private void printError(HttpServletRequest req, HttpServletResponse resp, String message, Exception e)
-            throws IOException {
-        resp.setContentType("text/html;charset=utf-8");
-        PrintWriter pw = resp.getWriter();
-
-        printHeader(pw, "Error");
-        pw.println("<div class=\"box\">");
-        pw.println("<h3>" + message + "</h3>");
-
-        if (e != null) {
-            pw.print("<pre>");
-            e.printStackTrace(pw);
-            pw.println("</pre>");
-        }
-
-        pw.println("</div>");
-        printFooter(pw);
-    }
-
-    /**
-     * Prints an HTML input box.
-     */
-    private void printInput(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-        resp.setContentType("text/html;charset=utf-8");
-        PrintWriter pw = resp.getWriter();
-
-        printHeader(pw, "OpenCMIS Browser");
-        pw.println("<img src=\"" + getAuxRoot(req, fAuxRoot) + "cmis.png\" " + "style=\"float: right;\" />");
-        pw.println("<h1 style=\"font-family: Georgia;\">OpenCMIS Browser</h1>");
-        pw.println("<div class=\"box\">");
-        pw.println("<form action=\"\" method=\"GET\">");
-        pw.println("CMIS AtomPub URL: ");
-        pw.println("<input name=\"url\" type=\"text\" size=\"100\" value=\"\"/>");
-        pw.println("<input type=\"submit\" value=\" GO \"/>");
-        pw.println("</form>");
-        pw.println("</div>");
-        printFooter(pw);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/pom.xml
deleted file mode 100644
index 1024d8b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/pom.xml
+++ /dev/null
@@ -1,350 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); you 
-	may not use this file except in compliance with the License. You may obtain 
-	a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
-	required by applicable law or agreed to in writing, software distributed 
-	under the License is distributed on an "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.chemistry.opencmis</groupId>
-		<artifactId>chemistry-opencmis</artifactId>
-		<version>0.13.0</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-
-	<artifactId>chemistry-opencmis-test-fit</artifactId>
-	<name>OpenCMIS Full Integration Tests</name>
-	<packaging>war</packaging>
-
-	<properties>
-		<parentBasedir>../../</parentBasedir>
-		<modeshape.version>3.2.0.Final</modeshape.version>
-        <jackrabbit-core.version>2.6.1</jackrabbit-core.version>
-        <maven-failsafe-plugin.version>2.17</maven-failsafe-plugin.version>
-        <maven-jetty-plugin.version>6.1.22</maven-jetty-plugin.version>
-        <jcr.version>2.0</jcr.version>
-        <overlay.groupId />
-        <overlay.artifactId />
-        <factory.class />
-        <!-- Used in ServiceLoader to look up impl. -->
-        <service.factory.class />
-        <repository />
-        <user />
-        <password />
-        <default.documentType>cmis:document</default.documentType>
-        <default.versionableDocumentType>VersionableType</default.versionableDocumentType>
-        <test.versionable>true</test.versionable>
-        <test.notVersionable>true</test.notVersionable>
-    </properties>
-
-
-	<build>
-		<testResources>
-			<testResource>
-				<directory>src/test/resources</directory>
-				<filtering>true</filtering>
-			</testResource>
-		</testResources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-war-plugin</artifactId>
-				<configuration>
-					<overlays>
-						<overlay>
-                            <groupId>${overlay.groupId}</groupId>
-                            <artifactId>${overlay.artifactId}</artifactId>
-						</overlay>
-					</overlays>
-				   <webResources>
-				        <resource>
-			                <directory>${project.basedir}/src/main/webapp/WEB-INF</directory>
-			                <filtering>true</filtering>
-			                <targetPath>WEB-INF</targetPath>
-			                <includes>
-			                        <include>**/*.*</include>
-			                </includes>
-				        </resource>
-				    </webResources>				
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-failsafe-plugin</artifactId>
-				<version>${maven-failsafe-plugin.version}</version>
-				<configuration>
-					<encoding>UTF-8</encoding>
-					<reuseForks>true</reuseForks>
-					<forkedProcessTimeoutInSeconds>1800</forkedProcessTimeoutInSeconds>
-					<argLine>-Xmx512m -ea:org.apache.chemistry</argLine>	
-				</configuration>
-				<executions>
-					<execution>
-						<id>integration-test</id>
-						<goals>
-							<goal>integration-test</goal>
-						</goals>
-					</execution>
-					<execution>
-						<id>verify</id>
-						<goals>
-							<goal>verify</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.mortbay.jetty</groupId>
-				<artifactId>maven-jetty-plugin</artifactId>
-				<version>${maven-jetty-plugin.version}</version>
-				<configuration>
-					<scanIntervalSeconds>10</scanIntervalSeconds>
-					<stopPort>19966</stopPort>
-					<stopKey>foo</stopKey>
-					<connectors>
-						<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-							<port>19080</port>
-							<host>0.0.0.0</host>
-						</connector>
-					</connectors>
-					<systemProperties>
-                        <systemProperty>
-			              <name>org.apache.chemistry.opencmis.session.repository.id</name>
-			              <value>${repository}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.user</name>
-			              <value>${user}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.password</name>
-			              <value>${password}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.tck.default.documentType</name>
-			              <value>${default.documentType}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.tck.default.versionableDocumentType</name>
-			              <value>${default.versionableDocumentType}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.tck.testNotVersionable</name>
-			              <value>${test.notVersionable}</value>
-			            </systemProperty>
-			            <systemProperty>
-			              <name>org.apache.chemistry.opencmis.tck.testVersionable</name>
-			              <value>${test.versionable}</value>
-			            </systemProperty>			            
-	                	<systemProperty>
-	                		<name>project.basedir</name>
-	                		<value>${project.basedir}</value>
-	                	</systemProperty>
-                        <systemProperty>
-	                		<name>project.build.directory</name>
-	                		<value>${project.build.directory}</value>
-	                	</systemProperty>
-		            </systemProperties>					
-					<webAppConfig>
-						<contextPath>/opencmis</contextPath>
-					</webAppConfig>
-				</configuration>
-				<executions>
-					<execution>
-						<id>start-jetty</id>
-						<phase>pre-integration-test</phase>
-						<goals>
-							<goal>run-war</goal>
-						</goals>
-						<configuration>
-							<scanIntervalSeconds>0</scanIntervalSeconds>
-							<daemon>true</daemon>
-						</configuration>
-					</execution>
-					<execution>
-						<id>stop-jetty</id>
-						<phase>post-integration-test</phase>
-						<goals>
-							<goal>stop</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>  				
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>chemistry-opencmis-test-tck</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>chemistry-opencmis-test-util</artifactId>
-			<version>${project.version}</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-	</dependencies>
-	
-	<profiles>
-        <profile>
-            <id>jcr-modeshape-inmemory</id>
-            <properties>
-            	<overlay.groupId>org.apache.chemistry.opencmis</overlay.groupId>
-            	<overlay.artifactId>chemistry-opencmis-server-jcr</overlay.artifactId>
-            	<factory.class>org.apache.chemistry.opencmis.jcr.JcrServiceFactory</factory.class>
-            	<!-- Used in ServiceLoader to look up impl. -->
-            	<service.factory.class>org.modeshape.jcr.JcrRepositoryFactory</service.factory.class>
-            	<repository>test</repository>
-            	<default.documentType>cmis:document</default.documentType>
-            	<default.versionableDocumentType>cmis:document</default.versionableDocumentType>
-            	<test.versionable>true</test.versionable>
-                <test.notVersionable>false</test.notVersionable>
-            	<forkMode>never</forkMode>
-            </properties>
-	        <dependencies>
-		        <dependency>
-		            <groupId>org.modeshape</groupId>
-		            <artifactId>modeshape-jcr</artifactId>
-		            <version>${modeshape.version}</version>
-		            <exclusions>
-                        <exclusion>
-                            <artifactId>tika-parsers</artifactId>
-                            <groupId>org.apache.tika</groupId>
-                        </exclusion>
-                    </exclusions>
-		        </dependency>
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-jcr</artifactId>
-		            <version>${project.version}</version>
-		            <type>war</type>
-		        </dependency>
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-		            <version>${project.version}</version>
-		        </dependency>		
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-jcr</artifactId>
-		            <version>${project.version}</version>
-		            <classifier>classes</classifier>
-		        </dependency>
-                <dependency>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                    <version>${slf4j.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                    <version>${log4j.version}</version>
-                </dependency>                
-	        </dependencies>
-        </profile>
-        <profile>
-            <id>chemistry-inmemory</id>
-             <activation>
-            	<activeByDefault>true</activeByDefault>
-            </activation> 
-            <properties>
-            	<overlay.groupId>${project.groupId}</overlay.groupId>
-            	<overlay.artifactId>chemistry-opencmis-server-inmemory</overlay.artifactId>
-            	<factory.class>org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl</factory.class>
-            	<!-- Used in ServiceLoader to look up impl. -->
-            	<service.factory.class>${factory.class}</service.factory.class>
-            	<repository>test</repository>
-                <default.documentType>cmis:document</default.documentType>
-                <default.versionableDocumentType>VersionableType</default.versionableDocumentType>
-                <test.versionable>true</test.versionable>
-                <test.notVersionable>true</test.notVersionable>
-            </properties>
-	        <dependencies>
-	        	<dependency>
-					<groupId>${project.groupId}</groupId>
-					<artifactId>chemistry-opencmis-server-inmemory</artifactId>
-					<version>${project.version}</version>
-					<type>war</type>
-				</dependency>
-                <dependency>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                    <version>${slf4j.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                    <version>${log4j.version}</version>
-                </dependency>                
-             </dependencies>
-	    </profile>
-        <profile>
-            <id>jcr-jackrabbit-inmemory</id>
-            <properties>
-            	<overlay.groupId>${project.groupId}</overlay.groupId>
-            	<overlay.artifactId>chemistry-opencmis-server-bindings-war</overlay.artifactId>
-            	<factory.class>org.apache.chemistry.opencmis.jcr.JcrServiceFactory</factory.class>
-            	<!-- Used in ServiceLoader to look up impl.  -->
-            	<service.factory.class>org.apache.jackrabbit.core.RepositoryFactoryImpl</service.factory.class>
-            	<repository>default</repository>  
-            	<user>admin</user>
-            	<password>admin</password>
-            	<default.documentType>cmis:document</default.documentType>
-            	<default.versionableDocumentType>cmis:document</default.versionableDocumentType>
-            	<test.versionable>true</test.versionable>
-                <test.notVersionable>false</test.notVersionable>
-            	<forkMode>never</forkMode>
-            </properties>
-	        <dependencies>
-              <dependency>
-                    <groupId>javax.jcr</groupId>
-                    <artifactId>jcr</artifactId>
-                    <version>${jcr.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>jackrabbit-core</artifactId>
-                    <version>${jackrabbit-core.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                    <version>${slf4j.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                    <version>${log4j.version}</version>
-                </dependency>
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-jcr</artifactId>
-		            <version>${project.version}</version>
-		            <type>war</type>
-		        </dependency>
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-bindings</artifactId>
-		            <version>${project.version}</version>
-		        </dependency>		
-		        <dependency>
-		            <groupId>org.apache.chemistry.opencmis</groupId>
-		            <artifactId>chemistry-opencmis-server-jcr</artifactId>
-		            <version>${project.version}</version>
-		            <classifier>classes</classifier>
-		        </dependency>		            	        
-	        </dependencies>
-	    </profile>	    
-    </profiles>
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/readme.txt b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/readme.txt
deleted file mode 100644
index b15c474..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/readme.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-There are three profiles: chemistry-inmemory, jcr-modeshape-inmemory,  jcr-jackrabbit-inmemory
-Please, use mvn clean install -P <profileName> for testing one of the repository implementations.
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/META-INF/services/javax.jcr.RepositoryFactory b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/META-INF/services/javax.jcr.RepositoryFactory
deleted file mode 100644
index 9c99e50..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/META-INF/services/javax.jcr.RepositoryFactory
+++ /dev/null
@@ -1 +0,0 @@
-${service.factory.class} # JCR Implementation
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties
deleted file mode 100644
index abadbe0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class=${factory.class}
-
-# In Memory Settings
-InMemoryServer.RepositoryId=${repository}
-# InMemoryServer.RepositoryInfoCreatorClass=org.apache.chemistry.opencmis.client.provider.inmemory.UnitTestRepositoryInfo
-InMemoryServer.User=${user}
-InMemoryServer.Password=${password}
-InMemoryServer.TypesCreatorClass=org.apache.chemistry.opencmis.inmemory.types.DefaultTypeSystemCreator
-
-# settings for init repository with data
-  # enable or disable
-RepositoryFiller.Enable=false
-  # Type id of documents that are created
-RepositoryFiller.DocumentTypeId=ComplexType
-  # Type id of folders that are created
-RepositoryFiller.FolderTypeId=cmis:folder
-  # Number of documents created per folder
-RepositoryFiller.DocsPerFolder=3
-  # Number of folders created per folder
-RepositoryFiller.FolderPerFolder=2
-  # number of folder levels created (depth of hierarchy)
-RepositoryFiller.Depth=3
-  # Size of content for documents (0=do not create content), default=0
-RepositoryFiller.ContentSizeInKB=32
-  # properties to set for a document
-RepositoryFiller.DocumentProperty.0=StringProp
-#RepositoryFiller.DocumentProperty.1=StringPropMV
-  # properties to set for a folder
-#RepositoryFiller.FolderProperty.0=StringFolderProp
-  
-mount-path=/
-
-#Jackrabbit properties
-#jcr.org.apache.jackrabbit.repository.uri=file:///{project.basedir}/target/jcr-repository
-jcr.org.apache.jackrabbit.repository.home={project.basedir}/target/jackrabbit-repo
-jcr.org.apache.jackrabbit.repository.conf={project.basedir}/src/test/resources/jackrabbit-repository-memory.xml
-
-#Modeshape properties
-jcr.org.modeshape.jcr.URL=file:///{project.basedir}/src/test/resources/modeshape-repository-memory.json
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/jetty-web.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/jetty-web.xml
deleted file mode 100644
index 3d0e9ae..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/jetty-web.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting// DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<Configure class="org.mortbay.jetty.webapp.WebAppContext">
-
-  <Set name="parentLoaderPriority">true</Set>
-
-  <Set name="systemClasses">
-    <Array type="java.lang.String">
-      <Item>java.</Item>
-      <Item>javax.servlet.</Item>
-      <Item>org.mortbay.</Item>
-      <Item>org.xml.</Item>
-      <Item>org.w3c.</Item>
-    </Array>
-  </Set>
-
-</Configure>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractAtomPubTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractAtomPubTckIT.java
deleted file mode 100644
index edc0f36..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractAtomPubTckIT.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-
-public abstract class AbstractAtomPubTckIT extends AbstractTckIT {
-
-    public abstract String getAtomPubPath();
-
-    @Override
-    public Map<String, String> getSessionParameters() {
-        Map<String, String> parameters = getBaseSessionParameters();
-
-        String url = "http://" + HOST + ":" + PORT + getAtomPubPath();
-
-        parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
-        parameters.put(SessionParameter.ATOMPUB_URL, url);
-
-        return parameters;
-    }
-
-    @Override
-    public BindingType getBindingType() {
-        return BindingType.ATOMPUB;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractBrowserTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractBrowserTckIT.java
deleted file mode 100644
index 66d1cc3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractBrowserTckIT.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public abstract class AbstractBrowserTckIT extends AbstractTckIT {
-
-    public static final String BROWSER_PATH = "/opencmis/browser";
-
-    @Override
-    public Map<String, String> getSessionParameters() {
-        Map<String, String> parameters = getBaseSessionParameters();
-
-        String url = "http://" + HOST + ":" + PORT + BROWSER_PATH;
-
-        parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value());
-        parameters.put(SessionParameter.BROWSER_URL, url);
-
-        return parameters;
-    }
-
-    @Override
-    public BindingType getBindingType() {
-        return BindingType.BROWSER;
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractTckIT.java
deleted file mode 100644
index 678bc50..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractTckIT.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.impl.TestParameters;
-import org.apache.chemistry.opencmis.tck.report.TextReport;
-import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
-import org.junit.Before;
-import org.junit.Test;
-
-public abstract class AbstractTckIT extends AbstractRunner {
-    public static final String TEST = "org.apache.chemistry.opencmis.tck.test";
-    public static final String TEST_CMIS_1_0 = "org.apache.chemistry.opencmis.tck.testCmis10";
-    public static final String TEST_CMIS_1_1 = "org.apache.chemistry.opencmis.tck.testCmis11";
-    public static final String TEST_ATOMPUB = "org.apache.chemistry.opencmis.tck.testAtomPub";
-    public static final String TEST_WEBSERVICES = "org.apache.chemistry.opencmis.tck.testWebServices";
-    public static final String TEST_BROWSER = "org.apache.chemistry.opencmis.tck.testBrowser";
-    public static final String TEST_NOT_VERSIONABLE = "org.apache.chemistry.opencmis.tck.testNotVersionable";
-    public static final String TEST_VERSIONABLE = "org.apache.chemistry.opencmis.tck.testVersionable";
-
-    public static final String DEFAULT_VERSIONABLE_DOCUMENT_TYPE = "org.apache.chemistry.opencmis.tck.default.versionableDocumentType";
-    public static final String DEFAULT_VERSIONABLE_DOCUMENT_TYPE_VALUE = "VersionableType"; // InMemory
-
-    public static final String HOST = "localhost";
-    public static final int PORT = 19080;
-
-    public static final String REPOSITORY_ID = "test";
-    public static final String USER = "test";
-    public static final String PASSWORD = "test";
-
-    public abstract Map<String, String> getSessionParameters();
-
-    public abstract BindingType getBindingType();
-
-    public abstract CmisVersion getCmisVersion();
-
-    public abstract boolean usesVersionableDocumentType();
-
-    public Map<String, String> getBaseSessionParameters() {
-        Map<String, String> parameters = new HashMap<String, String>();
-
-        parameters.put(SessionParameter.REPOSITORY_ID,
-                System.getProperty(SessionParameter.REPOSITORY_ID, REPOSITORY_ID));
-        parameters.put(SessionParameter.USER, System.getProperty(SessionParameter.USER, USER));
-        parameters.put(SessionParameter.PASSWORD, System.getProperty(SessionParameter.PASSWORD, PASSWORD));
-
-        if (usesVersionableDocumentType()) {
-            parameters.put(TestParameters.DEFAULT_DOCUMENT_TYPE,
-                    System.getProperty(DEFAULT_VERSIONABLE_DOCUMENT_TYPE, DEFAULT_VERSIONABLE_DOCUMENT_TYPE_VALUE));
-        } else {
-            parameters.put(TestParameters.DEFAULT_DOCUMENT_TYPE, System.getProperty(
-                    TestParameters.DEFAULT_DOCUMENT_TYPE, TestParameters.DEFAULT_DOCUMENT_TYPE_VALUE));
-        }
-
-        parameters.put(TestParameters.DEFAULT_FOLDER_TYPE,
-                System.getProperty(TestParameters.DEFAULT_FOLDER_TYPE, "cmis:folder"));
-
-        return parameters;
-    }
-
-    @Before
-    public void checkTest() {
-        assumeTrue("Skipping all TCK tests.", getSystemPropertyBoolean(TEST));
-
-        if (getCmisVersion() == CmisVersion.CMIS_1_0) {
-            assumeTrue("Skipping CMIS 1.0 TCK tests.", getSystemPropertyBoolean(TEST_CMIS_1_0));
-        } else if (getCmisVersion() == CmisVersion.CMIS_1_1) {
-            assumeTrue("Skipping CMIS 1.1 TCK tests.", getSystemPropertyBoolean(TEST_CMIS_1_1));
-        }
-
-        if (getBindingType() == BindingType.ATOMPUB) {
-            assumeTrue("Skipping AtomPub binding TCK tests.", getSystemPropertyBoolean(TEST_ATOMPUB));
-        } else if (getBindingType() == BindingType.WEBSERVICES) {
-            assumeTrue("Skipping Web Services binding TCK tests.", getSystemPropertyBoolean(TEST_WEBSERVICES));
-        } else if (getBindingType() == BindingType.BROWSER) {
-            assumeTrue("Skipping Browser binding TCK tests.", getSystemPropertyBoolean(TEST_BROWSER));
-        }
-
-        if (usesVersionableDocumentType()) {
-            assumeTrue("Skipping TCK tests with versionable document types.",
-                    getSystemPropertyBoolean(TEST_VERSIONABLE));
-        } else {
-            assumeTrue("Skipping TCK tests with non-versionable document types.",
-                    getSystemPropertyBoolean(TEST_NOT_VERSIONABLE));
-        }
-    }
-
-    protected boolean getSystemPropertyBoolean(String propName) {
-        return "true".equalsIgnoreCase(System.getProperty(propName, "true"));
-    }
-
-    @Test
-    public void runTck() throws Exception {
-        // set up TCK and run it
-        setParameters(getSessionParameters());
-        loadDefaultTckGroups();
-
-        run(new TestProgressMonitor());
-
-        // write report
-        File target = new File("target");
-        target.mkdir();
-
-        CmisTestReport report = new TextReport();
-        report.createReport(getParameters(), getGroups(), new File(target, "tck-result-" + getBindingType().value()
-                + "-" + getCmisVersion().value() + "-"
-                + (usesVersionableDocumentType() ? "versionable" : "nonversionable") + ".txt"));
-
-        // find failures
-        for (CmisTestGroup group : getGroups()) {
-            for (CmisTest test : group.getTests()) {
-                for (CmisTestResult result : test.getResults()) {
-                    assertNotNull("The test '" + test.getName() + "' returned an invalid result.", result);
-                    assertTrue("The test '" + test.getName() + "' returned a failure: " + result.getMessage(),
-                            result.getStatus() != CmisTestResultStatus.FAILURE);
-                    assertTrue(
-                            "The test '" + test.getName() + "' returned at an unexcepted exception: "
-                                    + result.getMessage(),
-                            result.getStatus() != CmisTestResultStatus.UNEXPECTED_EXCEPTION);
-                }
-            }
-        }
-    }
-
-    public static CmisTestResultStatus getWorst(List<CmisTestResult> results) {
-        if (isNullOrEmpty(results)) {
-            return CmisTestResultStatus.OK;
-        }
-
-        int max = 0;
-
-        for (CmisTestResult result : results) {
-            if (max < result.getStatus().getLevel()) {
-                max = result.getStatus().getLevel();
-            }
-        }
-
-        return CmisTestResultStatus.fromLevel(max);
-    }
-
-    private static class TestProgressMonitor implements CmisTestProgressMonitor {
-        public void startGroup(CmisTestGroup group) {
-            System.out.println();
-            System.out.println(group.getName() + " (" + group.getTests().size() + " tests)");
-        }
-
-        public void endGroup(CmisTestGroup group) {
-            System.out.println();
-        }
-
-        public void startTest(CmisTest test) {
-            System.out.print("  " + test.getName());
-        }
-
-        public void endTest(CmisTest test) {
-            System.out.print(" (" + test.getTime() + "ms): ");
-            System.out.println(getWorst(test.getResults()));
-        }
-
-        public void message(String msg) {
-            System.out.println(msg);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractWebServicesTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractWebServicesTckIT.java
deleted file mode 100644
index 05a78dc..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AbstractWebServicesTckIT.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-
-public abstract class AbstractWebServicesTckIT extends AbstractTckIT {
-
-    public abstract String getWebServicesPath();
-
-    @Override
-    public Map<String, String> getSessionParameters() {
-        Map<String, String> parameters = getBaseSessionParameters();
-
-        String url = "http://" + HOST + ":" + PORT + getWebServicesPath() + "/";
-
-        parameters.put(SessionParameter.BINDING_TYPE, BindingType.WEBSERVICES.value());
-        parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url + "RepositoryService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url + "NavigationService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url + "ObjectService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url + "VersioningService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url + "DiscoveryService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url + "RelationshipService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url + "MultiFilingService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url + "PolicyService?wsdl");
-        parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url + "ACLService?wsdl");
-
-        return parameters;
-    }
-
-    @Override
-    public BindingType getBindingType() {
-        return BindingType.WEBSERVICES;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10NonVersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10NonVersTckIT.java
deleted file mode 100644
index 70841f8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10NonVersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class AtomPub10NonVersTckIT extends AbstractAtomPubTckIT {
-
-    @Override
-    public String getAtomPubPath() {
-        return "/opencmis/atom";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_0;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10VersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10VersTckIT.java
deleted file mode 100644
index 3d523db..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub10VersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class AtomPub10VersTckIT extends AbstractAtomPubTckIT {
-
-    @Override
-    public String getAtomPubPath() {
-        return "/opencmis/atom";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_0;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11NonVersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11NonVersTckIT.java
deleted file mode 100644
index 2dca9a5..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11NonVersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class AtomPub11NonVersTckIT extends AbstractAtomPubTckIT {
-
-    @Override
-    public String getAtomPubPath() {
-        return "/opencmis/atom11";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11VersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11VersTckIT.java
deleted file mode 100644
index 1139ce1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/AtomPub11VersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class AtomPub11VersTckIT extends AbstractAtomPubTckIT {
-
-    @Override
-    public String getAtomPubPath() {
-        return "/opencmis/atom11";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11NonVersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11NonVersTckIT.java
deleted file mode 100644
index 2a81b37..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11NonVersTckIT.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-public class Browser11NonVersTckIT extends AbstractBrowserTckIT {
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11VersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11VersTckIT.java
deleted file mode 100644
index de19ffe..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/Browser11VersTckIT.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-public class Browser11VersTckIT extends AbstractBrowserTckIT {
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10NonVersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10NonVersTckIT.java
deleted file mode 100644
index 360e42c..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10NonVersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class WebServices10NonVersTckIT extends AbstractWebServicesTckIT {
-
-    @Override
-    public String getWebServicesPath() {
-        return "/opencmis/services";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_0;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10VersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10VersTckIT.java
deleted file mode 100644
index 74d3f9d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices10VersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class WebServices10VersTckIT extends AbstractWebServicesTckIT {
-
-    @Override
-    public String getWebServicesPath() {
-        return "/opencmis/services";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_0;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11NonVersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11NonVersTckIT.java
deleted file mode 100644
index b32089e..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11NonVersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class WebServices11NonVersTckIT extends AbstractWebServicesTckIT {
-
-    @Override
-    public String getWebServicesPath() {
-        return "/opencmis/services11";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11VersTckIT.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11VersTckIT.java
deleted file mode 100644
index d4c75b0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/tck/WebServices11VersTckIT.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.fit.tck;
-
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-
-public class WebServices11VersTckIT extends AbstractWebServicesTckIT {
-
-    @Override
-    public String getWebServicesPath() {
-        return "/opencmis/services11";
-    }
-
-    @Override
-    public CmisVersion getCmisVersion() {
-        return CmisVersion.CMIS_1_1;
-    }
-
-    @Override
-    public boolean usesVersionableDocumentType() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.atom.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.atom.properties
deleted file mode 100644
index 7b98ec8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.atom.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-
-org.apache.chemistry.opencmis.binding.atompub.url=http://localhost:19080/opencmis/atom
-
-org.apache.chemistry.opencmis.session.repository.id=test
-
-org.apache.chemistry.opencmis.fit.runtime.document.type.id=cmis:document
-org.apache.chemistry.opencmis.fit.runtime.folder.type.id=cmis:folder
-
-org.apache.chemistry.opencmis.fit.runtime.document1.name=My_Document-0-0
-org.apache.chemistry.opencmis.fit.runtime.document2.name=My_Document-0-1
-org.apache.chemistry.opencmis.fit.runtime.folder1.name=My_Folder-0-0
-org.apache.chemistry.opencmis.fit.runtime.folder2.name=My_Folder-0-1
-
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.browser.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.browser.properties
deleted file mode 100644
index 6c0ca15..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.browser.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
-
-org.apache.chemistry.opencmis.binding.spi.type=browser
-
-org.apache.chemistry.opencmis.binding.browser.url=http://localhost:19080/opencmis/browser
-
-org.apache.chemistry.opencmis.session.repository.id=test
-
-org.apache.chemistry.opencmis.fit.runtime.document.type.id=cmis:document
-org.apache.chemistry.opencmis.fit.runtime.folder.type.id=cmis:folder
-
-org.apache.chemistry.opencmis.fit.runtime.document1.name=My_Document-0-0
-org.apache.chemistry.opencmis.fit.runtime.document2.name=My_Document-0-1
-org.apache.chemistry.opencmis.fit.runtime.folder1.name=My_Folder-0-0
-org.apache.chemistry.opencmis.fit.runtime.folder2.name=My_Folder-0-1
-
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.ws.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.ws.properties
deleted file mode 100644
index 822b43e..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/inmemory.ws.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://localhost:19080/opencmis/services/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://localhost:19080/opencmis/services/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://localhost:19080/opencmis/services/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://localhost:19080/opencmis/services/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://localhost:19080/opencmis/services/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://localhost:19080/opencmis/services/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://localhost:19080/opencmis/services/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://localhost:19080/opencmis/services/PolicyService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://localhost:19080/opencmis/services/ACLService?wsdl
-
-org.apache.chemistry.opencmis.session.repository.id=test
-
-org.apache.chemistry.opencmis.fit.runtime.document.type.id=cmis:document
-org.apache.chemistry.opencmis.fit.runtime.folder.type.id=cmis:folder
-
-org.apache.chemistry.opencmis.fit.runtime.document1.name=My_Document-0-0
-org.apache.chemistry.opencmis.fit.runtime.document2.name=My_Document-0-1
-org.apache.chemistry.opencmis.fit.runtime.folder1.name=My_Folder-0-0
-org.apache.chemistry.opencmis.fit.runtime.folder2.name=My_Folder-0-1
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/jackrabbit-repository-memory.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/jackrabbit-repository-memory.xml
deleted file mode 100644
index 3a2b4b9..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/jackrabbit-repository-memory.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 Repository
-        PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.0//EN"
-        "http://jackrabbit.apache.org/dtd/repository-2.0.dtd">
-
-<!-- Example Repository Configuration File
-     Used by
-     - org.apache.jackrabbit.core.config.RepositoryConfigTest.java
-     -
--->
-<Repository>
-    <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"></FileSystem>
-    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore"/>
-    <Security appName="Jackrabbit">
-        <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security">
-            <!-- <WorkspaceAccessManager class="..."/> -->
-            <!-- <param name="config" value="${rep.home}/security.xml"/> -->
-        </SecurityManager>
-        <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-        <LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
-            <!--
-              anonymous user name ('anonymous' is the default value)
-            -->
-            <param name="anonymousId" value="anonymous"/>
-            <!--
-              administrator user id (default value if param is missing is 'admin')
-            -->
-            <param name="adminId" value="admin"/>
-        </LoginModule>
-    </Security>
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <Workspace name="${wsp.name}">
-        <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"/>
-        <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager">
-            <param name="blobFSBlockSize" value="1"/>
-            <!-- store in memory -->
-        </PersistenceManager>
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-            <param name="supportHighlighting" value="true"/>
-            <param name="directoryManagerClass" value="org.apache.jackrabbit.core.query.lucene.directory.RAMDirectoryManager"/>
-            <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"></FileSystem>
-        </SearchIndex>
-    </Workspace>
-    <Versioning rootPath="${rep.home}/version">
-        <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem">
-        </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.persistence.bundle.BundleFsPersistenceManager">
-            <param name="blobFSBlockSize" value="1"/>
-            <!-- store in memory -->
-        </PersistenceManager>
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-        <param name="supportHighlighting" value="true"/>
-        <param name="directoryManagerClass" value="org.apache.jackrabbit.core.query.lucene.directory.RAMDirectoryManager"/>
-        <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"></FileSystem>
-    </SearchIndex>
-
-    <!--
-        Run with a cluster journal
-    -->
-    <Cluster id="node1">
-        <Journal class="org.apache.jackrabbit.core.journal.FileJournal">
-            <param name="revision" value="${rep.home}/revision.log"/>
-            <param name="directory" value="${rep.home}/myjournal"/>
-        </Journal>
-    </Cluster>
-</Repository>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/log4j.properties
deleted file mode 100644
index dc127d0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-log4j.rootCategory=WARN, R, O
-
-# Stdout
-log4j.appender.O=org.apache.log4j.ConsoleAppender
-
-# File
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=${project.build.directory}/log4j.log
-
-# Control the maximum log file size
-log4j.appender.R.MaxFileSize=100KB
-
-# Archive log files (one backup file here)
-log4j.appender.R.MaxBackupIndex=1
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.O.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
-
-log4j.logger.org.apache.chemistry.opencmis.fit=WARN
-log4j.logger.org.apache.chemistry.opencmis.inmemory=WARN
-log4j.logger.org.apache.chemistry.opencmis.util=WARN
-log4j.logger.org.apache.chemistry.opencmis.client=WARN
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/modeshape-repository-memory.json b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/modeshape-repository-memory.json
deleted file mode 100644
index 7ab0d53..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/resources/modeshape-repository-memory.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "name" : "test",
-    "jndiName" : "",
-    "workspaces" : {
-        "predefined" : ["test"],
-        "default" : "test",
-        "allowCreation" : true
-    },
-    "security" : {
-        "anonymous" : {
-            "roles" : ["readonly","readwrite","admin"],
-            "useOnFailedLogin" : true
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/pom.xml
deleted file mode 100644
index 0a41c9a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-test-tck</artifactId>
-    <name>OpenCMIS Test Compatibility Kit</name>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-    
-    <build>
-        <resources>
-            <resource>
-                <directory>${basedir}/src/main/resources</directory>
-            </resource>
-            <resource>
-                <directory>${project.build.directory}/generated-resources</directory>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>generate-resources</phase>
-                        <configuration>
-                            <target>
-                                <property name="version" value="${maven.version}" />
-                                <property name="timestamp" value="${timestamp}" />
-                                <property name="revision" value="${buildNumber}" />
-                                <property name="targetdir" value="${project.build.directory}" />
-                                 
-                                 <!-- build timestamp -->
-                                 <echo file="${targetdir}/generated-resources/META-INF/build-timestamp.txt">Version: ${project.version} / Revision: ${revision} / Build: ${timestamp}</echo>
-                                 <echo file="${targetdir}/generated-resources/META-INF/tck-revision.txt">${revision}</echo>
-                            </target>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.chemistry.opencmis</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.ant</groupId>
-            <artifactId>ant</artifactId>
-            <version>1.8.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTest.java
deleted file mode 100644
index ba04932..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * CMIS TCK Test.
- */
-public interface CmisTest {
-
-    /**
-     * Initializes the test with test parameters.
-     */
-    void init(Map<String, String> parameters) throws Exception;
-
-    /**
-     * Returns the name of the test.
-     */
-    String getName();
-
-    /**
-     * Returns the description of the test group.
-     */
-    String getDescription();
-    
-    /**
-     * Runs the test.
-     */
-    void run() throws Exception;
-
-    /**
-     * Returns if the test is enabled or not.
-     */
-    boolean isEnabled();
-
-    /**
-     * Enables or disables the test.
-     */
-    void setEnabled(boolean enabled);
-
-    /**
-     * Returns the results of the test after {@link #run()} has be called.
-     */
-    List<CmisTestResult> getResults();
-
-    /**
-     * Gets the time (in milliseconds) that the test took to run.
-     */
-    long getTime();
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestGroup.java
deleted file mode 100644
index 8113d8a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestGroup.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * CMIS TCK Test Group.
- */
-public interface CmisTestGroup {
-
-    /**
-     * Initializes the test group with test parameters.
-     */
-    void init(Map<String, String> parameters) throws Exception;
-
-    /**
-     * Sets the progress monitor that should be used during a run.
-     */
-    void setProgressMonitor(CmisTestProgressMonitor progressMonitor);
-
-    /**
-     * Returns the name of the test group.
-     */
-    String getName();
-    
-    /**
-     * Returns the description of the test group.
-     */
-    String getDescription();
-
-    /**
-     * Returns the all tests in this group.
-     */
-    List<CmisTest> getTests();
-
-    /**
-     * Runs all enabled tests in this group.
-     */
-    void run() throws Exception;
-
-    /**
-     * Returns if the test group is enabled or not.
-     */
-    boolean isEnabled();
-
-    /**
-     * Enables or disables this test group.
-     */
-    void setEnabled(boolean enabled);
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestProgressMonitor.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestProgressMonitor.java
deleted file mode 100644
index 22e2563..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestProgressMonitor.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-/**
- * CMIS Progress Monitor.
- */
-public interface CmisTestProgressMonitor {
-
-    /**
-     * Called before a new group run starts.
-     */
-    void startGroup(CmisTestGroup group);
-
-    /**
-     * Called after a group run ended.
-     */
-    void endGroup(CmisTestGroup group);
-
-    /**
-     * Called before a new test run starts.
-     */
-    void startTest(CmisTest test);
-
-    /**
-     * Called after a test run ended.
-     */
-    void endTest(CmisTest test);
-
-    /**
-     * Called when a group or test wants to print out a message.
-     */
-    void message(String msg);
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestReport.java
deleted file mode 100644
index b9ff096..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestReport.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-import java.io.File;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-/**
- * CMIS TCK Test Report.
- */
-public interface CmisTestReport {
-
-    /**
-     * Creates a new report and writes it to a writer.
-     */
-    void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer) throws Exception;
-
-    /**
-     * Creates a new report and writes it to a file.
-     */
-    void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, File file) throws Exception;
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResult.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResult.java
deleted file mode 100644
index 503d4ce..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResult.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-import java.util.List;
-
-/**
- * CMIS TCK Test Result.
- */
-public interface CmisTestResult {
-
-    /**
-     * Returns the group name.
-     */
-    String getGroupName();
-
-    /**
-     * Returns the test name.
-     */
-    String getTestName();
-
-    /**
-     * Returns the check status.
-     */
-    CmisTestResultStatus getStatus();
-
-    /**
-     * Returns the check message.
-     */
-    String getMessage();
-
-    /**
-     * Returns the exception if available.
-     */
-    Throwable getException();
-
-    /**
-     * Returns the stack trace. The first element should point to check.
-     */
-    StackTraceElement[] getStackTrace();
-
-    /**
-     * Returns the URL of the request if available.
-     */
-    String getUrl();
-
-    /**
-     * Returns the request body if available.
-     */
-    String getRequest();
-
-    /**
-     * Returns the response body if available.
-     */
-    String getResponse();
-
-    /**
-     * Returns children of the result that contain more details.
-     */
-    List<CmisTestResult> getChildren();
-
-    /**
-     * Returns if the result was fatal for the test.
-     */
-    boolean isFatal();
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResultStatus.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResultStatus.java
deleted file mode 100644
index 8f56df9..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/CmisTestResultStatus.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck;
-
-/**
- * CMIS TCK Test Result Status.
- */
-public enum CmisTestResultStatus {
-
-    INFO(0), // no check, just for reports
-    SKIPPED(1), // check has been skipped
-    OK(2), // check passed
-    WARNING(3), // check failed but it is not specification violation
-    FAILURE(4), // check failed and it is specification violation
-    UNEXPECTED_EXCEPTION(5); // exception caught that is not handled by the test
-
-    private final int level;
-
-    CmisTestResultStatus(int level) {
-        this.level = level;
-    }
-
-    public int getLevel() {
-        return level;
-    }
-
-    public static CmisTestResultStatus fromLevel(int level) {
-        for (CmisTestResultStatus c : CmisTestResultStatus.values()) {
-            if (c.level == level) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(String.valueOf(level));
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java
deleted file mode 100644
index d7ad32d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.junit.Test;
-
-/**
- * Base class for tests.
- */
-public abstract class AbstractCmisTest implements CmisTest {
-
-    private Map<String, String> parameters;
-    private AbstractCmisTestGroup group;
-    private String name;
-    private String description;
-    private boolean isEnabled = true;
-    private List<CmisTestResult> results;
-    private long time;
-
-    public void init(Map<String, String> parameters) {
-        this.parameters = parameters;
-        results = new ArrayList<CmisTestResult>();
-    }
-
-    protected Map<String, String> getParameters() {
-        return parameters;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public void setGroup(AbstractCmisTestGroup group) {
-        this.group = group;
-    }
-
-    public AbstractCmisTestGroup getGroup() {
-        return group;
-    }
-
-    public abstract void run() throws Exception;
-
-    @Test
-    public void junit() throws Exception {
-        JUnitHelper.run(this);
-    }
-
-    public List<CmisTestResult> getResults() {
-        return results;
-    }
-
-    public boolean isEnabled() {
-        return isEnabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.isEnabled = enabled;
-    }
-
-    public long getTime() {
-        return time;
-    }
-
-    public void setTime(long time) {
-        this.time = time;
-    }
-
-    public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, Throwable exception,
-            boolean isFatal) {
-        return new CmisTestResultImpl(group.getName(), name, message, status, exception, isFatal);
-    }
-
-    public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, boolean isFatal) {
-        return new CmisTestResultImpl(group.getName(), name, message, status, null, isFatal);
-    }
-
-    public CmisTestResultImpl createResult(CmisTestResultStatus status, String message) {
-        return new CmisTestResultImpl(group.getName(), name, message, status, null, false);
-    }
-
-    public CmisTestResultImpl createInfoResult(String message) {
-        return new CmisTestResultImpl(group.getName(), name, message, CmisTestResultStatus.INFO, null, false);
-    }
-
-    public void addResult(CmisTestResult result) {
-        if (result != null) {
-            if (result instanceof CmisTestResultImpl) {
-                ((CmisTestResultImpl) result).setStackTrace(getStackTrace());
-            }
-
-            results.add(result);
-            if (result.isFatal()) {
-                throw new FatalTestException(result.getMessage());
-            }
-        }
-    }
-
-    protected StackTraceElement[] getStackTrace() {
-        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
-        StackTraceElement[] shortStackTrace = new StackTraceElement[0];
-        if (stackTrace.length > 3) {
-            shortStackTrace = new StackTraceElement[stackTrace.length - 3];
-            System.arraycopy(stackTrace, 3, shortStackTrace, 0, stackTrace.length - 3);
-        }
-
-        return shortStackTrace;
-    }
-
-    protected CmisTestResult addResultChild(CmisTestResult result, CmisTestResult child) {
-        if (result == null) {
-            return null;
-        }
-
-        result.getChildren().add(child);
-
-        return result;
-    }
-
-    // --- helpers ----
-
-    protected String formatValue(Object o) {
-        if (o == null) {
-            return "null";
-        }
-
-        if (o instanceof String) {
-            return "'" + o + "'";
-        } else if (o instanceof Calendar) {
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-            return sdf.format(((Calendar) o).getTime());
-        }
-
-        return o.toString();
-    }
-
-    // --- asserts ----
-
-    protected boolean isEqual(Object expected, Object actual) {
-        if (expected == null && actual == null) {
-            return true;
-        }
-
-        if (expected != null && expected.equals(actual)) {
-            return true;
-        }
-
-        return false;
-    }
-
-    protected CmisTestResult assertIsTrue(Boolean test, CmisTestResult success, CmisTestResult failure) {
-        if (test != null && test) {
-            return success;
-        }
-
-        if (test == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
-        } else {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "False!"));
-        }
-    }
-
-    protected CmisTestResult assertIsFalse(Boolean test, CmisTestResult success, CmisTestResult failure) {
-        if (test != null && !test) {
-            return success;
-        }
-
-        if (test == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
-        } else {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "True!"));
-        }
-    }
-
-    protected CmisTestResult assertNull(Object object, CmisTestResult success, CmisTestResult failure) {
-        if (object == null) {
-            return success;
-        }
-
-        return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is not null!"));
-    }
-
-    protected CmisTestResult assertNotNull(Object object, CmisTestResult success, CmisTestResult failure) {
-        if (object != null) {
-            return success;
-        }
-
-        return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is null!"));
-    }
-
-    protected CmisTestResult assertStringNullOrEmpty(String str, CmisTestResult success, CmisTestResult failure) {
-        if (str == null || str.length() == 0) {
-            return success;
-        }
-
-        return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String has this value: " + str));
-    }
-
-    protected CmisTestResult assertStringNotEmpty(String str, CmisTestResult success, CmisTestResult failure) {
-        if (str != null && str.length() > 0) {
-            return success;
-        }
-
-        if (str == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is null!"));
-        } else {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is empty!"));
-        }
-    }
-
-    protected CmisTestResult assertListNotEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
-        if (list != null && !list.isEmpty()) {
-            return success;
-        }
-
-        if (list == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is null!"));
-        } else {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is empty!"));
-        }
-    }
-
-    protected CmisTestResult assertListNullOrEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
-        if (list == null || list.isEmpty()) {
-            return success;
-        }
-
-        return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is not empty!"));
-
-    }
-
-    protected CmisTestResult assertEquals(Object expected, Object actual, CmisTestResult success, CmisTestResult failure) {
-        if (isEqual(expected, actual)) {
-            return success;
-        }
-
-        return addResultChild(
-                failure,
-                createResult(CmisTestResultStatus.INFO, "expected: " + formatValue(expected) + " / actual: "
-                        + formatValue(actual)));
-    }
-
-    protected CmisTestResult assertContains(Collection<?> collection, Object value, CmisTestResult success,
-            CmisTestResult failure) {
-        if (collection == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Collection is null!"));
-        }
-
-        if (collection.contains(value)) {
-            return success;
-        }
-
-        return addResultChild(failure,
-                createResult(CmisTestResultStatus.INFO, "Collection does not contain " + formatValue(value)));
-    }
-
-    protected CmisTestResult assertEqualLists(List<?> expected, List<?> actual, CmisTestResult success,
-            CmisTestResult failure) {
-        if (expected == null && actual == null) {
-            return success;
-        }
-
-        if (expected == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected list is null!"));
-        }
-
-        if (actual == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual list is null!"));
-        }
-
-        if (expected.size() != actual.size()) {
-            return addResultChild(
-                    failure,
-                    createResult(CmisTestResultStatus.INFO, "List sizes don't match! expected: " + expected.size()
-                            + " / actual: " + actual.size()));
-        }
-
-        for (int i = 0; i < expected.size(); i++) {
-            if (!isEqual(expected.get(i), actual.get(i))) {
-                return addResultChild(
-                        failure,
-                        createResult(CmisTestResultStatus.INFO, "expected list item[" + i + "]: "
-                                + formatValue(expected.get(i)) + " / actual list item[" + i + "]: "
-                                + formatValue(actual.get(i))));
-            }
-        }
-
-        return success;
-    }
-
-    protected CmisTestResult assertEqualSet(Set<?> expected, Set<?> actual, CmisTestResult success,
-            CmisTestResult failure) {
-        if (expected == null && actual == null) {
-            return success;
-        }
-
-        if (expected == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected set is null!"));
-        }
-
-        if (actual == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual set is null!"));
-        }
-
-        if (expected.size() != actual.size()) {
-            return addResultChild(
-                    failure,
-                    createResult(CmisTestResultStatus.INFO, "Set sizes don't match! expected: " + expected.size()
-                            + " / actual: " + actual.size()));
-        }
-
-        for (Object o : expected) {
-            if (!actual.contains(o)) {
-                return addResultChild(failure,
-                        createResult(CmisTestResultStatus.INFO, "Item not in actual set: " + formatValue(o)));
-            }
-        }
-
-        return success;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTestGroup.java
deleted file mode 100644
index aca9915..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTestGroup.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.junit.Test;
-
-/**
- * Base class for test groups.
- */
-public abstract class AbstractCmisTestGroup implements CmisTestGroup {
-
-    private Map<String, String> parameters;
-    private String name;
-    private String description;
-    private final List<CmisTest> tests = new ArrayList<CmisTest>();
-    private boolean isEnabled = true;
-    private CmisTestProgressMonitor progressMonitor;
-
-    public void init(Map<String, String> parameters) throws Exception {
-        this.parameters = parameters;
-    }
-
-    protected Map<String, String> getParameters() {
-        return parameters;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public List<CmisTest> getTests() {
-        return tests;
-    }
-
-    public void addTest(CmisTest test) throws Exception {
-        if (test != null) {
-            tests.add(test);
-            if (test instanceof AbstractCmisTest) {
-                ((AbstractCmisTest) test).setGroup(this);
-            }
-            test.init(parameters);
-        }
-    }
-
-    public void setProgressMonitor(CmisTestProgressMonitor progressMonitor) {
-        this.progressMonitor = progressMonitor;
-    }
-
-    protected CmisTestProgressMonitor getProgressMonitor() {
-        return this.progressMonitor;
-    }
-
-    public void run() throws Exception {
-        if (progressMonitor != null) {
-            progressMonitor.startGroup(this);
-        }
-
-        try {
-            preRun();
-            for (CmisTest test : tests) {
-                if (test == null || !test.isEnabled()) {
-                    continue;
-                }
-
-                try {
-                    if (progressMonitor != null) {
-                        progressMonitor.startTest(test);
-                    }
-
-                    preTest(test);
-
-                    long start = System.currentTimeMillis();
-
-                    test.run();
-
-                    long end = System.currentTimeMillis();
-                    if (test instanceof AbstractCmisTest) {
-                        ((AbstractCmisTest) test).setTime(end - start);
-                    }
-                } catch (Exception e) {
-                    if (!(e instanceof FatalTestException)) {
-                        throw e;
-                    }
-                } finally {
-                    postTest(test);
-
-                    if (progressMonitor != null) {
-                        progressMonitor.endTest(test);
-                    }
-                }
-            }
-        } finally {
-            postRun();
-        }
-
-        if (progressMonitor != null) {
-            progressMonitor.endGroup(this);
-        }
-    }
-
-    @Test
-    public void junit() throws Exception {
-        JUnitHelper.run(this);
-    }
-
-    protected void preRun() {
-    }
-
-    protected void postRun() {
-    }
-
-    protected void preTest(CmisTest test) {
-    }
-
-    protected void postTest(CmisTest test) {
-    }
-
-    public boolean isEnabled() {
-        return isEnabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.isEnabled = enabled;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
deleted file mode 100644
index 2261a02..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
+++ /dev/null
@@ -1,3565 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.UNEXPECTED_EXCEPTION;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Item;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-
-/**
- * Base class for tests that require an OpenCMIS session.
- */
-public abstract class AbstractSessionTest extends AbstractCmisTest {
-
-    public static final OperationContext SELECT_ALL_NO_CACHE_OC = new OperationContextImpl();
-    public static final OperationContext SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME;
-    static {
-        SELECT_ALL_NO_CACHE_OC.setFilterString("*");
-        SELECT_ALL_NO_CACHE_OC.setCacheEnabled(false);
-        SELECT_ALL_NO_CACHE_OC.setIncludeAllowableActions(true);
-        SELECT_ALL_NO_CACHE_OC.setIncludeAcls(true);
-        SELECT_ALL_NO_CACHE_OC.setIncludePathSegments(true);
-        SELECT_ALL_NO_CACHE_OC.setIncludePolicies(true);
-        SELECT_ALL_NO_CACHE_OC.setIncludeRelationships(IncludeRelationships.BOTH);
-        SELECT_ALL_NO_CACHE_OC.setRenditionFilterString("*");
-        SELECT_ALL_NO_CACHE_OC.setOrderBy(null);
-
-        SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME = new OperationContextImpl(SELECT_ALL_NO_CACHE_OC);
-        SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME.setOrderBy("cmis:name");
-    }
-
-    private final SessionFactory factory = SessionFactoryImpl.newInstance();
-    private Folder testFolder;
-
-    private Boolean supportsRelationships;
-    private Boolean supportsPolicies;
-    private Boolean supportsItems;
-    private Boolean supportsSecondaries;
-
-    public BindingType getBinding() {
-        if (getParameters() == null) {
-            return null;
-        }
-
-        try {
-            return BindingType.fromValue(getParameters().get(SessionParameter.BINDING_TYPE));
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + " (" + getBinding() + ")";
-    }
-
-    @Override
-    public void run() throws Exception {
-        Session session;
-
-        Map<String, String> parameters = getParameters();
-        String repId = parameters.get(SessionParameter.REPOSITORY_ID);
-        if ((repId != null) && (repId.length() > 0)) {
-            session = factory.createSession(parameters);
-        } else {
-            session = factory.getRepositories(parameters).get(0).createSession();
-        }
-
-        // switch off the cache
-        session.getDefaultContext().setCacheEnabled(false);
-
-        try {
-            run(session);
-        } catch (Exception e) {
-            if (!(e instanceof FatalTestException)) {
-                addResult(createResult(UNEXPECTED_EXCEPTION, "Exception: " + e, e, true));
-            }
-        } catch (Error err) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Error: " + err, err, true));
-        } finally {
-            testFolder = null;
-        }
-    }
-
-    public abstract void run(Session session) throws Exception;
-
-    protected RepositoryInfo getRepositoryInfo(Session session) {
-        RepositoryInfo ri = session.getRepositoryInfo();
-
-        CmisTestResult failure = createResult(FAILURE, "Repository info is null!", true);
-        addResult(assertNotNull(ri, null, failure));
-
-        return ri;
-    }
-
-    protected String getFolderTestTypeId() {
-        String objectTypeId = getParameters().get(TestParameters.DEFAULT_FOLDER_TYPE);
-        if (objectTypeId == null) {
-            objectTypeId = TestParameters.DEFAULT_FOLDER_TYPE_VALUE;
-        }
-
-        return objectTypeId;
-    }
-
-    protected String getDocumentTestTypeId() {
-        String objectTypeId = getParameters().get(TestParameters.DEFAULT_DOCUMENT_TYPE);
-        if (objectTypeId == null) {
-            objectTypeId = TestParameters.DEFAULT_DOCUMENT_TYPE_VALUE;
-        }
-
-        return objectTypeId;
-    }
-
-    protected String getItemTestTypeId() {
-        String objectTypeId = getParameters().get(TestParameters.DEFAULT_ITEM_TYPE);
-        if (objectTypeId == null) {
-            objectTypeId = TestParameters.DEFAULT_ITEM_TYPE_VALUE;
-        }
-
-        return objectTypeId;
-    }
-
-    protected String getSecondaryTestTypeId() {
-        String objectTypeId = getParameters().get(TestParameters.DEFAULT_SECONDARY_TYPE);
-        if (objectTypeId == null) {
-            objectTypeId = TestParameters.DEFAULT_SECONDARY_TYPE_VALUE;
-        }
-
-        return objectTypeId;
-    }
-
-    // --- helpers ---
-
-    protected String[] getAllProperties(CmisObject object) {
-        String[] propertiesk = new String[object.getType().getPropertyDefinitions().size()];
-
-        int i = 0;
-        for (String propId : object.getType().getPropertyDefinitions().keySet()) {
-            propertiesk[i++] = propId;
-        }
-
-        return propertiesk;
-    }
-
-    protected String getStringFromContentStream(ContentStream contentStream) throws IOException {
-        if (contentStream == null || contentStream.getStream() == null) {
-            return null;
-        }
-
-        StringBuilder sb = new StringBuilder();
-        Reader reader = new InputStreamReader(contentStream.getStream(), IOUtils.UTF8);
-
-        try {
-            final char[] buffer = new char[64 * 1024];
-            int b;
-            while (true) {
-                b = reader.read(buffer, 0, buffer.length);
-                if (b > 0) {
-                    sb.append(buffer, 0, b);
-                } else if (b == -1) {
-                    break;
-                }
-            }
-        } finally {
-            reader.close();
-        }
-
-        return sb.toString();
-    }
-
-    // --- handy create and delete methods ---
-
-    /**
-     * Creates a folder.
-     */
-    protected Folder createFolder(Session session, Folder parent, String name) {
-        return createFolder(session, parent, name, getFolderTestTypeId());
-    }
-
-    /**
-     * Creates a folder.
-     */
-    protected Folder createFolder(Session session, Folder parent, String name, String objectTypeId) {
-        if (parent == null) {
-            throw new IllegalArgumentException("Parent is not set!");
-        }
-        if (name == null) {
-            throw new IllegalArgumentException("Name is not set!");
-        }
-        if (objectTypeId == null) {
-            throw new IllegalArgumentException("Object Type Id is not set!");
-        }
-
-        // check type
-        ObjectType type;
-        try {
-            type = session.getTypeDefinition(objectTypeId);
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Folder type '" + objectTypeId + "' is not available: " + e.getMessage(), e, true));
-            return null;
-        }
-
-        if (Boolean.FALSE.equals(type.isCreatable())) {
-            addResult(createResult(SKIPPED, "Folder type '" + objectTypeId + "' is not creatable!", true));
-            return null;
-        }
-
-        // create
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-
-        Folder result = null;
-        try {
-            // create the folder
-            result = parent.createFolder(properties, null, null, null, SELECT_ALL_NO_CACHE_OC);
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Folder could not be created! Exception: " + e.getMessage(),
-                    e, true));
-            return null;
-        }
-
-        try {
-            CmisTestResult f;
-
-            // check folder name
-            f = createResult(FAILURE, "Folder name does not match!", false);
-            addResult(assertEquals(name, result.getName(), null, f));
-
-            // check the new folder
-            String[] propertiesToCheck = new String[result.getType().getPropertyDefinitions().size()];
-
-            int i = 0;
-            for (String propId : result.getType().getPropertyDefinitions().keySet()) {
-                propertiesToCheck[i++] = propId;
-            }
-
-            addResult(checkObject(session, result, propertiesToCheck, "New folder object spec compliance"));
-
-            // check object parents
-            List<Folder> objectParents = result.getParents();
-
-            f = createResult(FAILURE, "Newly created folder has no or more than one parent! Id: " + result.getId(),
-                    true);
-            addResult(assertEquals(1, objectParents.size(), null, f));
-
-            f = createResult(FAILURE, "First object parent of the newly created folder does not match parent! Id: "
-                    + result.getId(), true);
-            assertShallowEquals(parent, objectParents.get(0), null, f);
-
-            // check folder parent
-            Folder folderParent = result.getFolderParent();
-            f = createResult(FAILURE, "Newly created folder has no folder parent! Id: " + result.getId(), true);
-            addResult(assertNotNull(folderParent, null, f));
-
-            f = createResult(FAILURE,
-                    "Folder parent of the newly created folder does not match parent! Id: " + result.getId(), true);
-            assertShallowEquals(parent, folderParent, null, f);
-
-            // check children of parent
-            boolean found = false;
-            for (CmisObject child : parent.getChildren(SELECT_ALL_NO_CACHE_OC)) {
-                if (child == null) {
-                    addResult(createResult(FAILURE, "Parent folder contains a null child!", true));
-                } else {
-                    if (result.getId().equals(child.getId())) {
-                        found = true;
-
-                        f = createResult(FAILURE, "Folder and parent child don't match! Id: " + result.getId(), true);
-                        assertShallowEquals(result, child, null, f);
-                        break;
-                    }
-                }
-            }
-
-            if (!found) {
-                addResult(createResult(FAILURE, "Folder is not a child of the parent folder! Id: " + result.getId(),
-                        true));
-            }
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Newly created folder is invalid! Exception: " + e.getMessage(), e, true));
-        }
-
-        return result;
-    }
-
-    /**
-     * Counts the children in a folder.
-     */
-    protected int countFolderChildren(Folder folder) {
-        int count = 0;
-
-        for (@SuppressWarnings("unused")
-        CmisObject object : folder.getChildren()) {
-            count++;
-        }
-
-        return count;
-    }
-
-    /**
-     * Creates a document.
-     */
-    protected Document createDocument(Session session, Folder parent, String name, String content) {
-        return createDocument(session, parent, name, getDocumentTestTypeId(), null, content);
-    }
-
-    /**
-     * Creates a document.
-     */
-    protected Document createDocument(Session session, Folder parent, String name, String objectTypeId,
-            String[] secondaryTypeIds, String content) {
-        if (parent == null) {
-            throw new IllegalArgumentException("Parent is not set!");
-        }
-        if (name == null) {
-            throw new IllegalArgumentException("Name is not set!");
-        }
-        if (objectTypeId == null) {
-            throw new IllegalArgumentException("Object Type Id is not set!");
-        }
-
-        if (content == null) {
-            content = "";
-        }
-
-        // check type
-        ObjectType type;
-        try {
-            type = session.getTypeDefinition(objectTypeId);
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Document type '" + objectTypeId + "' is not available: " + e.getMessage(), e, true));
-            return null;
-        }
-
-        if (Boolean.FALSE.equals(type.isCreatable())) {
-            addResult(createResult(SKIPPED, "Document type '" + objectTypeId + "' is not creatable!", true));
-            return null;
-        }
-
-        // create
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-
-        if (secondaryTypeIds != null) {
-            properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, Arrays.asList(secondaryTypeIds));
-        }
-
-        type = session.getTypeDefinition(objectTypeId);
-        if (!(type instanceof DocumentTypeDefinition)) {
-            addResult(createResult(FAILURE, "Type is not a document type! Type: " + objectTypeId, true));
-            return null;
-        }
-
-        DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-        VersioningState versioningState = (Boolean.TRUE.equals(docType.isVersionable()) ? VersioningState.MAJOR
-                : VersioningState.NONE);
-
-        byte[] contentBytes = null;
-        Document result = null;
-        try {
-            contentBytes = IOUtils.toUTF8Bytes(content);
-            ContentStream contentStream = new ContentStreamImpl(name, BigInteger.valueOf(contentBytes.length),
-                    "text/plain", new ByteArrayInputStream(contentBytes));
-
-            // create the document
-            result = parent.createDocument(properties, contentStream, versioningState, null, null, null,
-                    SELECT_ALL_NO_CACHE_OC);
-
-            contentStream.getStream().close();
-        } catch (Exception e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Document could not be created! Exception: " + e.getMessage(),
-                    e, true));
-            return null;
-        }
-
-        try {
-            CmisTestResult f;
-
-            // check document name
-            f = createResult(FAILURE, "Document name does not match!", false);
-            addResult(assertEquals(name, result.getName(), null, f));
-
-            // check content length
-            f = createResult(WARNING, "Content length does not match!", false);
-            addResult(assertEquals((long) contentBytes.length, result.getContentStreamLength(), null, f));
-
-            // check the new document
-            addResult(checkObject(session, result, getAllProperties(result), "New document object spec compliance"));
-
-            // check content
-            try {
-                ContentStream contentStream = result.getContentStream();
-
-                f = createResult(WARNING, "Document filename and the filename of the content stream do not match!",
-                        false);
-                addResult(assertEquals(name, contentStream.getFileName(), null, f));
-
-                f = createResult(WARNING,
-                        "cmis:contentStreamFileName and the filename of the content stream do not match!", false);
-                addResult(assertEquals(result.getContentStreamFileName(), contentStream.getFileName(), null, f));
-
-                String fetchedContent = getStringFromContentStream(result.getContentStream());
-                if (!content.equals(fetchedContent)) {
-                    addResult(createResult(FAILURE,
-                            "Content of newly created document doesn't match the orign content!"));
-                }
-            } catch (IOException e) {
-                addResult(createResult(UNEXPECTED_EXCEPTION,
-                        "Content of newly created document couldn't be read! Exception: " + e.getMessage(), e, true));
-            }
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Newly created document is invalid! Exception: " + e.getMessage(), e, true));
-        }
-
-        // check parents
-        List<Folder> parents = result.getParents(SELECT_ALL_NO_CACHE_OC);
-        boolean found = false;
-        for (Folder folder : parents) {
-            if (parent.getId().equals(folder.getId())) {
-                found = true;
-                break;
-            }
-        }
-
-        if (!found) {
-            addResult(createResult(FAILURE,
-                    "The folder the document has been created in is not in the list of the document parents!"));
-        }
-
-        return result;
-    }
-
-    /**
-     * Creates a relationship.
-     */
-    protected Relationship createRelationship(Session session, String name, ObjectId source, ObjectId target) {
-        String objectTypeId = getParameters().get(TestParameters.DEFAULT_RELATIONSHIP_TYPE);
-        if (objectTypeId == null) {
-            objectTypeId = TestParameters.DEFAULT_RELATIONSHIP_TYPE_VALUE;
-        }
-
-        return createRelationship(session, name, source, target, objectTypeId);
-    }
-
-    /**
-     * Creates a relationship.
-     */
-    protected Relationship createRelationship(Session session, String name, ObjectId source, ObjectId target,
-            String objectTypeId) {
-        if (name == null) {
-            throw new IllegalArgumentException("Name is not set!");
-        }
-        if (objectTypeId == null) {
-            throw new IllegalArgumentException("Object Type Id is not set!");
-        }
-
-        // check type
-        ObjectType type;
-        try {
-            type = session.getTypeDefinition(objectTypeId);
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Relationship type '" + objectTypeId + "' is not available: "
-                    + e.getMessage(), e, true));
-            return null;
-        }
-
-        if (Boolean.FALSE.equals(type.isCreatable())) {
-            addResult(createResult(SKIPPED, "Relationship type '" + objectTypeId + "' is not creatable!", true));
-            return null;
-        }
-
-        // create
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-        properties.put(PropertyIds.SOURCE_ID, source.getId());
-        properties.put(PropertyIds.TARGET_ID, target.getId());
-
-        ObjectId relId;
-        Relationship result = null;
-
-        try {
-            relId = session.createRelationship(properties);
-            result = (Relationship) session.getObject(relId, SELECT_ALL_NO_CACHE_OC);
-        } catch (Exception e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Relationship could not be created! Exception: " + e.getMessage(), e, true));
-        }
-
-        if (result != null) {
-            try {
-                // check the new relationship
-                addResult(checkObject(session, result, getAllProperties(result), "New document object spec compliance"));
-            } catch (CmisBaseException e) {
-                addResult(createResult(UNEXPECTED_EXCEPTION,
-                        "Newly created document is invalid! Exception: " + e.getMessage(), e, true));
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Creates a item.
-     */
-    protected Item createItem(Session session, Folder parent, String name) {
-        return createItem(session, parent, name, getItemTestTypeId());
-    }
-
-    /**
-     * Creates a item.
-     */
-    protected Item createItem(Session session, Folder parent, String name, String objectTypeId) {
-        if (parent == null) {
-            throw new IllegalArgumentException("Parent is not set!");
-        }
-        if (name == null) {
-            throw new IllegalArgumentException("Name is not set!");
-        }
-        if (objectTypeId == null) {
-            throw new IllegalArgumentException("Object Type Id is not set!");
-        }
-
-        // check type
-        ObjectType type;
-        try {
-            type = session.getTypeDefinition(objectTypeId);
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Item type '" + objectTypeId + "' is not available: " + e.getMessage(), e, true));
-            return null;
-        }
-
-        if (Boolean.FALSE.equals(type.isCreatable())) {
-            addResult(createResult(SKIPPED, "Item type '" + objectTypeId + "' is not creatable!", true));
-            return null;
-        }
-
-        // create
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-
-        Item result = null;
-        try {
-            // create the item
-            result = parent.createItem(properties, null, null, null, SELECT_ALL_NO_CACHE_OC);
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Item could not be created! Exception: " + e.getMessage(), e,
-                    true));
-            return null;
-        }
-
-        try {
-            CmisTestResult f;
-
-            // check item name
-            f = createResult(FAILURE, "Item name does not match!", false);
-            addResult(assertEquals(name, result.getName(), null, f));
-
-            addResult(checkObject(session, result, getAllProperties(result), "New item object spec compliance"));
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION, "Newly created Item is invalid! Exception: " + e.getMessage(),
-                    e, true));
-        }
-
-        // check parents
-        List<Folder> parents = result.getParents(SELECT_ALL_NO_CACHE_OC);
-        boolean found = false;
-        for (Folder folder : parents) {
-            if (parent.getId().equals(folder.getId())) {
-                found = true;
-                break;
-            }
-        }
-
-        if (!found) {
-            addResult(createResult(FAILURE,
-                    "The folder the item has been created in is not in the list of the item parents!"));
-        }
-
-        return result;
-    }
-
-    /**
-     * Deletes an object and checks if it is deleted.
-     */
-    protected void deleteObject(CmisObject object) {
-        if (object != null) {
-            if (object instanceof Folder) {
-                try {
-                    ((Folder) object).deleteTree(true, null, true);
-                } catch (CmisBaseException e) {
-                    addResult(createResult(UNEXPECTED_EXCEPTION,
-                            "Folder could not be deleted! Exception: " + e.getMessage(), e, true));
-                }
-            } else {
-                try {
-                    object.delete(true);
-                } catch (CmisBaseException e) {
-                    addResult(createResult(UNEXPECTED_EXCEPTION,
-                            "Object could not be deleted! Exception: " + e.getMessage(), e, true));
-                }
-            }
-
-            CmisTestResult f = createResult(FAILURE, "Object should not exist anymore but it is still there! Id: "
-                    + object.getId(), true);
-            addResult(assertIsFalse(exists(object), null, f));
-        }
-    }
-
-    /**
-     * Tests if an object exists by refreshing it.
-     */
-    protected boolean exists(CmisObject object) {
-        try {
-            object.refresh();
-            return true;
-        } catch (CmisObjectNotFoundException e) {
-            return false;
-        }
-    }
-
-    // --- type helpers ---
-
-    /**
-     * Creates a new type.
-     */
-    protected ObjectType createType(Session session, TypeDefinition typeDef) {
-
-        NewTypeSettableAttributes settableAttributes = session.getRepositoryInfo().getCapabilities()
-                .getNewTypeSettableAttributes();
-        if (settableAttributes == null) {
-            addResult(createResult(WARNING, "Repository Info does not indicate, which type attributes can be set!"));
-        } else {
-            // TODO: add more tests
-        }
-
-        ObjectType newType = null;
-        try {
-            newType = session.createType(typeDef);
-            addResult(createInfoResult("Created type '" + typeDef.getId()
-                    + "'. Repository assigned the following type id: " + newType.getId()));
-        } catch (CmisBaseException e) {
-            addResult(createResult(FAILURE, "Creating type '" + typeDef.getId() + "' failed: " + e.getMessage(), e,
-                    false));
-            return null;
-        }
-
-        addResult(checkTypeDefinition(session, newType, "Newly created type spec compliance."));
-
-        if (newType.getTypeMutability() == null) {
-            addResult(createResult(FAILURE,
-                    "Newly created type does not provide type mutability data! Id: " + newType.getId()));
-        }
-
-        return newType;
-    }
-
-    /**
-     * Deletes a type.
-     */
-    protected void deleteType(Session session, String typeId) {
-        ObjectType type = session.getTypeDefinition(typeId);
-
-        if (type == null) {
-            addResult(createResult(FAILURE, "Type does not exist and therefore cannot be deleted! Id: " + typeId));
-            return;
-        }
-
-        // check if type can be deleted
-        if (type.getTypeMutability() == null) {
-            addResult(createResult(FAILURE, "Type does not provide type mutability data! Id: " + typeId));
-        } else {
-            if (!Boolean.TRUE.equals(type.getTypeMutability().canDelete())) {
-                addResult(createResult(WARNING, "Type indicates that it cannot be deleted. Trying it anyway. Id: "
-                        + typeId));
-            }
-        }
-
-        // delete it
-        try {
-            session.deleteType(typeId);
-        } catch (CmisBaseException e) {
-            addResult(createResult(FAILURE, "Deleting type '" + typeId + "' failed: " + e.getMessage(), e, false));
-            return;
-        }
-
-        // check if the type still exists
-        try {
-            session.getTypeDefinition(typeId);
-            addResult(createResult(FAILURE, "Type should not exist anymore but it is still there! Id: " + typeId, true));
-        } catch (CmisObjectNotFoundException e) {
-            // expected result
-        }
-    }
-
-    // --- test folder methods ---
-
-    /**
-     * Creates a test folder.
-     */
-    protected Folder createTestFolder(Session session) {
-
-        String testFolderParentPath = getParameters().get(TestParameters.DEFAULT_TEST_FOLDER_PARENT);
-        if (testFolderParentPath == null) {
-            testFolderParentPath = TestParameters.DEFAULT_TEST_FOLDER_PARENT_VALUE;
-        }
-
-        String name = "cmistck" + System.currentTimeMillis() + session.getRepositoryInfo().hashCode();
-
-        Folder parent = null;
-        try {
-            CmisObject parentObject = session.getObjectByPath(testFolderParentPath, SELECT_ALL_NO_CACHE_OC);
-            if (!(parentObject instanceof Folder)) {
-                addResult(createResult(FAILURE, "Parent folder of the test folder is actually not a folder! Path: "
-                        + testFolderParentPath, true));
-            }
-
-            parent = (Folder) parentObject;
-        } catch (CmisBaseException e) {
-            addResult(createResult(UNEXPECTED_EXCEPTION,
-                    "Test folder could not be created! Exception: " + e.getMessage(), e, true));
-        }
-
-        if (parent != null) {
-            testFolder = createFolder(session, parent, name);
-        }
-
-        return testFolder;
-    }
-
-    /**
-     * Get the test folder.
-     */
-    protected Folder getTestFolder() {
-        return testFolder;
-    }
-
-    /**
-     * Delete the test folder.
-     */
-    protected void deleteTestFolder() {
-        deleteObject(testFolder);
-    }
-
-    // --- reusable checks ----
-
-    protected boolean isGetDescendantsSupported(Session session) {
-        RepositoryCapabilities cap = session.getRepositoryInfo().getCapabilities();
-
-        if (cap == null) {
-            return false;
-        }
-
-        if (cap.isGetDescendantsSupported() == null) {
-            return false;
-        }
-
-        return cap.isGetDescendantsSupported().booleanValue();
-    }
-
-    protected boolean isGetFolderTreeSupported(Session session) {
-        RepositoryCapabilities cap = session.getRepositoryInfo().getCapabilities();
-
-        if (cap == null) {
-            return false;
-        }
-
-        if (cap.isGetFolderTreeSupported() == null) {
-            return false;
-        }
-
-        return cap.isGetFolderTreeSupported().booleanValue();
-    }
-
-    protected boolean isOrderByNameSupported(Session session) {
-        if (session.getRepositoryInfo().getCapabilities().getOrderByCapability() == CapabilityOrderBy.NONE) {
-            return false;
-        }
-
-        return true;
-    }
-
-    protected boolean hasRelationships(Session session) {
-        if (supportsRelationships == null) {
-            supportsRelationships = Boolean.FALSE;
-            for (ObjectType type : session.getTypeChildren(null, false)) {
-                if (BaseTypeId.CMIS_RELATIONSHIP.value().equals(type.getId())) {
-                    supportsRelationships = Boolean.TRUE;
-                    break;
-                }
-            }
-        }
-
-        return supportsRelationships.booleanValue();
-    }
-
-    protected boolean hasPolicies(Session session) {
-        if (supportsPolicies == null) {
-            supportsPolicies = Boolean.FALSE;
-            for (ObjectType type : session.getTypeChildren(null, false)) {
-                if (BaseTypeId.CMIS_POLICY.value().equals(type.getId())) {
-                    supportsPolicies = Boolean.TRUE;
-                    break;
-                }
-            }
-        }
-
-        return supportsPolicies.booleanValue();
-    }
-
-    protected boolean hasItems(Session session) {
-        if (supportsItems == null) {
-            supportsItems = Boolean.FALSE;
-            for (ObjectType type : session.getTypeChildren(null, false)) {
-                if (BaseTypeId.CMIS_ITEM.value().equals(type.getId())) {
-                    supportsItems = Boolean.TRUE;
-                    break;
-                }
-            }
-        }
-
-        return supportsItems.booleanValue();
-    }
-
-    protected boolean hasSecondaries(Session session) {
-        if (supportsSecondaries == null) {
-            supportsSecondaries = Boolean.FALSE;
-            for (ObjectType type : session.getTypeChildren(null, false)) {
-                if (BaseTypeId.CMIS_SECONDARY.value().equals(type.getId())) {
-                    supportsSecondaries = Boolean.TRUE;
-                    break;
-                }
-            }
-        }
-
-        return supportsSecondaries.booleanValue();
-    }
-
-    protected CmisTestResult checkObject(Session session, CmisObject object, String[] properties, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Object is null!", true);
-        addResult(results, assertNotNull(object, null, f));
-
-        if (object != null) {
-            f = createResult(FAILURE, "Object id is not set!");
-            addResult(results, assertStringNotEmpty(object.getId(), null, f));
-
-            GregorianCalendar creationDate = null;
-            GregorianCalendar lastModificationDate = null;
-
-            // properties
-            for (String propId : properties) {
-                Property<?> prop = object.getProperty(propId);
-
-                // values of non-spec properties are not checked here
-                PropertyCheckEnum propertyCheck = PropertyCheckEnum.NO_VALUE_CHECK;
-
-                // known properties that are strings and must be set
-                if (PropertyIds.OBJECT_ID.equals(propId) || PropertyIds.BASE_TYPE_ID.equals(propId)
-                        || PropertyIds.OBJECT_TYPE_ID.equals(propId) || PropertyIds.PATH.equals(propId)
-                        || PropertyIds.SOURCE_ID.equals(propId) || PropertyIds.TARGET_ID.equals(propId)) {
-                    propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
-                }
-
-                if (!(object instanceof Relationship)) {
-                    if (PropertyIds.CREATED_BY.equals(propId) || PropertyIds.LAST_MODIFIED_BY.equals(propId)) {
-                        propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
-                    }
-                }
-
-                // known properties that are strings and should be set
-                if (PropertyIds.NAME.equals(propId) || PropertyIds.POLICY_TEXT.equals(propId)) {
-                    propertyCheck = PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY;
-                }
-
-                // known properties that are not strings and must be set
-                if (PropertyIds.IS_IMMUTABLE.equals(propId)) {
-                    propertyCheck = PropertyCheckEnum.MUST_BE_SET;
-                }
-
-                if (!(object instanceof Relationship)) {
-                    if (PropertyIds.CREATION_DATE.equals(propId) || PropertyIds.LAST_MODIFICATION_DATE.equals(propId)) {
-                        propertyCheck = PropertyCheckEnum.MUST_BE_SET;
-                    }
-                }
-
-                // special case: parent
-                if (PropertyIds.PARENT_ID.equals(propId)) {
-                    if (object instanceof Folder) {
-                        if (((Folder) object).isRootFolder()) {
-                            propertyCheck = PropertyCheckEnum.MUST_NOT_BE_SET;
-                        } else {
-                            propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
-                        }
-                    } else {
-                        addResult(
-                                results,
-                                createResult(FAILURE, "Property " + PropertyIds.PARENT_ID
-                                        + " is only defined for folders!"));
-                    }
-                }
-
-                // special case: path
-                if (PropertyIds.PATH.equals(propId) && prop.getFirstValue() != null) {
-                    Object path = prop.getFirstValue();
-                    if (path instanceof String) {
-                        f = createResult(FAILURE, "Path does not start with '/': " + path);
-                        addResult(results,
-                                assertIsTrue(((String) path).length() > 0 && ((String) path).charAt(0) == '/', null, f));
-                    } else {
-                        addResult(results, createResult(FAILURE, "Property " + PropertyIds.PATH + " is not a string!"));
-                    }
-                }
-
-                // check property
-                addResult(results, checkProperty(prop, "Property " + propId, propertyCheck));
-
-                // catch creationDate and lastModificationDate
-                if (PropertyIds.CREATION_DATE.equals(propId)) {
-                    creationDate = (GregorianCalendar) prop.getFirstValue();
-                } else if (PropertyIds.LAST_MODIFICATION_DATE.equals(propId)) {
-                    lastModificationDate = (GregorianCalendar) prop.getFirstValue();
-                }
-            }
-
-            // check creationDate <= lastModificationDate
-            if (creationDate != null && lastModificationDate != null) {
-                f = createResult(FAILURE, "Last modification date precedes creation date!");
-                addResult(results,
-                        assertIsTrue(creationDate.getTimeInMillis() <= lastModificationDate.getTimeInMillis(), null, f));
-
-                f = createResult(WARNING, "Creation date and last modification date have different timezones.");
-                addResult(assertIsTrue(creationDate.getTimeZone().hasSameRules(lastModificationDate.getTimeZone()),
-                        null, f));
-            }
-
-            // allowable actions
-            if ((object.getAllowableActions() == null) || (object.getAllowableActions().getAllowableActions() == null)) {
-                addResult(results, createResult(FAILURE, "Object has no allowable actions!"));
-            } else {
-                Set<Action> actions = object.getAllowableActions().getAllowableActions();
-
-                f = createResult(FAILURE, "Object has no CAN_GET_PROPERTIES allowable action!");
-                addResult(results, assertAllowableAction(object, Action.CAN_GET_PROPERTIES, null, f));
-                addResult(results, assertIsTrue(object.hasAllowableAction(Action.CAN_GET_PROPERTIES), null, f));
-
-                if (object instanceof Document) {
-                    if (actions.contains(Action.CAN_CHECK_OUT) && actions.contains(Action.CAN_CHECK_IN)) {
-                        addResult(
-                                results,
-                                createResult(FAILURE,
-                                        "Document object has CAN_CHECK_OUT and CAN_CHECK_IN allowable actions!"));
-                    }
-
-                    if (actions.contains(Action.CAN_CHECK_OUT) && actions.contains(Action.CAN_CANCEL_CHECK_OUT)) {
-                        addResult(
-                                results,
-                                createResult(FAILURE,
-                                        "Document object has CAN_CHECK_OUT and CAN_CANCEL_CHECK_OUT allowable actions!"));
-                    }
-
-                    Document doc = (Document) object;
-                    DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
-                    if (doc.isVersionSeriesCheckedOut() != null) {
-                        if (doc.isVersionSeriesCheckedOut()) {
-                            f = createResult(WARNING, "Document is checked out and has CAN_CHECK_OUT allowable action!");
-                            addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
-
-                            if (doc.getVersionSeriesCheckedOutId() == null) {
-                                addResult(
-                                        results,
-                                        createResult(WARNING,
-                                                "Document is checked out and but the property cmis:versionSeriesCheckedOutId is not set!"));
-                            } else {
-                                if (doc.getVersionSeriesCheckedOutId().equals(object.getId())) {
-                                    // object is PWC
-                                    f = createResult(FAILURE, "PWC doesn't have CAN_CHECK_IN allowable action!");
-                                    addResult(results, assertAllowableAction(object, Action.CAN_CHECK_IN, null, f));
-
-                                    f = createResult(FAILURE, "PWC doesn't have CAN_CANCEL_CHECK_OUT allowable action!");
-                                    addResult(results,
-                                            assertAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
-                                } else {
-                                    // object is not PWC
-                                    f = createResult(WARNING, "Non-PWC has CAN_CHECK_IN allowable action!");
-                                    addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
-
-                                    f = createResult(WARNING, "Non-PWC has CAN_CANCEL_CHECK_OUT allowable action!");
-                                    addResult(results,
-                                            assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
-                                }
-                            }
-                        } else {
-                            f = createResult(FAILURE,
-                                    "Document is not checked out and has CAN_CHECK_IN allowable action!");
-                            addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
-
-                            f = createResult(FAILURE,
-                                    "Document is not checked out and has CAN_CANCEL_CHECK_OUT allowable action!");
-                            addResult(results, assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
-
-                            // versionable check
-                            if (docType.isVersionable()) {
-                                if (Boolean.TRUE.equals(doc.isLatestVersion())) {
-                                    f = createResult(WARNING,
-                                            "Document is versionable and not checked but has no CAN_CHECK_OUT allowable action!");
-                                    addResult(results, assertAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
-                                }
-                            } else {
-                                f = createResult(FAILURE,
-                                        "Document is not versionable but has CAN_CHECK_OUT allowable action!");
-                                addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
-                            }
-                        }
-                    } else {
-                        addResult(results, createResult(WARNING, "Property cmis:isVersionSeriesCheckedOut is not set!"));
-                    }
-
-                    // immutable check
-                    if (Boolean.TRUE.equals(doc.isImmutable())) {
-                        f = createResult(FAILURE,
-                                "Document is immutable and has CAN_UPDATE_PROPERTIES allowable action!");
-                        addResult(results, assertNotAllowableAction(object, Action.CAN_UPDATE_PROPERTIES, null, f));
-
-                        f = createResult(FAILURE, "Document is immutable and has CAN_DELETE_OBJECT allowable action!");
-                        addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_OBJECT, null, f));
-                    }
-                } else {
-                    f = createResult(FAILURE, "Non-Document object has CAN_CHECK_IN allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
-
-                    f = createResult(FAILURE, "Non-Document object has CAN_CHECK_OUT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
-
-                    f = createResult(FAILURE, "Non-Document object has CAN_CANCEL_CHECK_OUT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
-
-                    f = createResult(FAILURE, "Non-Document object has CAN_GET_CONTENT_STREAM allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_CONTENT_STREAM, null, f));
-
-                    f = createResult(FAILURE, "Non-Document object has CAN_DELETE_CONTENT_STREAM allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_CONTENT_STREAM, null, f));
-
-                    f = createResult(FAILURE, "Non-Document object has CAN_GET_ALL_VERSIONS allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_ALL_VERSIONS, null, f));
-                }
-
-                if (object instanceof Folder) {
-                    Folder folder = (Folder) object;
-                    if (folder.isRootFolder()) {
-                        f = createResult(FAILURE, "Root folder has CAN_DELETE_OBJECT allowable action!");
-                        addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_OBJECT, null, f));
-
-                        f = createResult(FAILURE, "Root folder has CAN_GET_FOLDER_PARENT allowable action!");
-                        addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
-
-                        f = createResult(FAILURE, "Root folder has CAN_MOVE_OBJECT allowable action!");
-                        addResult(results, assertNotAllowableAction(object, Action.CAN_MOVE_OBJECT, null, f));
-                    }
-                } else {
-                    f = createResult(FAILURE, "Non-Folder object has CAN_GET_DESCENDANTS allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_DESCENDANTS, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_GET_FOLDER_PARENT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_GET_CHILDREN allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_CHILDREN, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_DELETE_TREE allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_TREE, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_GET_FOLDER_PARENT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_CREATE_DOCUMENT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_CREATE_DOCUMENT, null, f));
-
-                    f = createResult(FAILURE, "Non-Folder object has CAN_CREATE_FOLDER allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_CREATE_FOLDER, null, f));
-                }
-
-                if (!(object instanceof FileableCmisObject) || (object instanceof Folder)) {
-                    f = createResult(FAILURE,
-                            "Non-Filable object or folder has CAN_ADD_OBJECT_TO_FOLDER allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_ADD_OBJECT_TO_FOLDER, null, f));
-
-                    f = createResult(FAILURE,
-                            "Non-Filable object or folder has CAN_REMOVE_OBJECT_FROM_FOLDER allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_REMOVE_OBJECT_FROM_FOLDER, null, f));
-                }
-
-                if (!(object instanceof FileableCmisObject)) {
-                    f = createResult(FAILURE, "Non-Fileable object has CAN_MOVE_OBJECT allowable action!");
-                    addResult(results, assertNotAllowableAction(object, Action.CAN_MOVE_OBJECT, null, f));
-                }
-
-                // get allowable actions again
-                AllowableActions allowableActions = session.getBinding().getObjectService()
-                        .getAllowableActions(session.getRepositoryInfo().getId(), object.getId(), null);
-
-                if (allowableActions.getAllowableActions() == null) {
-                    addResult(results,
-                            createResult(FAILURE, "getAllowableActions() didn't returned allowable actions!"));
-                } else {
-                    f = createResult(FAILURE,
-                            "Object allowable actions don't match the allowable actions returned by getAllowableActions()!");
-                    addResult(
-                            results,
-                            assertEqualSet(object.getAllowableActions().getAllowableActions(),
-                                    allowableActions.getAllowableActions(), null, f));
-                }
-            }
-
-            // check ACL
-            if (object.getAcl() != null && object.getAcl().getAces() != null) {
-                addResult(results, checkACL(session, object.getAcl(), true, "ACL"));
-            }
-
-            // check policies
-            if (hasPolicies(session)) {
-                try {
-                    List<ObjectData> appliedPolicies = session.getBinding().getPolicyService()
-                            .getAppliedPolicies(session.getRepositoryInfo().getId(), object.getId(), "*", null);
-
-                    if (appliedPolicies == null) {
-                        appliedPolicies = Collections.emptyList();
-                    }
-
-                    List<Policy> objectPolicies = object.getPolicies();
-                    if (objectPolicies == null) {
-                        objectPolicies = Collections.emptyList();
-                    }
-
-                    f = createResult(FAILURE,
-                            "The number of policies returned by getAppliedPolicies() and the number of object policies don't match!");
-                    addResult(results, assertEquals(appliedPolicies.size(), objectPolicies.size(), null, f));
-                } catch (CmisNotSupportedException e) {
-                    addResult(results,
-                            createResult(WARNING, "getAppliedPolicies() not supported for object: " + object.getId()));
-                }
-            }
-
-            // check relationships
-            checkRelationships(session, results, object);
-
-            // check document content
-            checkDocumentContent(session, results, object);
-
-            // check renditions
-            if (object.getRenditions() != null) {
-                addResult(results, checkRenditions(session, object, "Rendition check"));
-            }
-
-            // check allowed child object type ids
-            if (object instanceof Folder) {
-                List<String> otids = object.getPropertyValue(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
-                if (otids != null) {
-                    for (String otid : otids) {
-                        try {
-                            session.getTypeDefinition(otid);
-                        } catch (CmisBaseException e) {
-                            addResult(
-                                    results,
-                                    createResult(FAILURE,
-                                            "The cmis:allowedChildObjectTypeIds property contains the type id '" + otid
-                                                    + "' but the type doesn't exists. Folder id: " + object.getId()));
-                        }
-                    }
-                }
-            }
-
-            // check path
-            if (object instanceof FileableCmisObject) {
-                List<String> paths = ((FileableCmisObject) object).getPaths();
-                if (object instanceof Folder) {
-                    f = createResult(FAILURE, "Folder does not have excatly one path! This is an OpenCMIS bug!");
-                    addResult(results, assertEquals(1, paths.size(), null, f));
-                } else {
-                    if (Boolean.FALSE.equals(session.getRepositoryInfo().getCapabilities().isMultifilingSupported())) {
-                        f = createResult(FAILURE,
-                                "Repository does not support multi-filing, but the object has more than one parent!");
-                        addResult(results, assertIsTrue(paths.size() < 2, null, f));
-                    }
-                }
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult checkACL(Session session, Acl acl, boolean checkExact, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "ACL is null!");
-        addResult(results, assertNotNull(acl, null, f));
-
-        if (acl != null) {
-
-            f = createResult(FAILURE, "List of ACEs is null!");
-            addResult(results, assertNotNull(acl.getAces(), null, f));
-
-            if (acl.getAces() != null) {
-                for (Ace ace : acl.getAces()) {
-                    f = createResult(FAILURE, "ACE with empty principal ID!");
-                    addResult(results, assertStringNotEmpty(ace.getPrincipalId(), null, f));
-
-                    f = createResult(FAILURE, "ACE with empty permission list!");
-                    addResult(results, assertListNotEmpty(ace.getPermissions(), null, f));
-
-                    if (ace.getPermissions() != null) {
-                        for (String permission : ace.getPermissions()) {
-                            f = createResult(FAILURE, "ACE with empty permission entry!");
-                            addResult(results, assertStringNotEmpty(permission, null, f));
-                        }
-                    }
-                }
-            }
-
-            if (checkExact) {
-                f = createResult(FAILURE, "ACL is provided but the isExact flag is not set!");
-                addResult(results, assertNotNull(acl.isExact(), null, f));
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    private void checkRelationships(Session session, List<CmisTestResult> results, CmisObject object) {
-        if (object instanceof Relationship) {
-            if (isNotEmpty(object.getRelationships())) {
-                addResult(results, createResult(FAILURE, "A relationship has relationships!"));
-                return;
-            }
-        }
-
-        if (object.getRelationships() != null) {
-            for (Relationship relationship : object.getRelationships()) {
-                if (relationship == null) {
-                    addResult(results, createResult(FAILURE, "A relationship in the relationship list is null!"));
-                    continue;
-                }
-
-                CmisObject fullRelationshipObject = session.getObject(relationship, SELECT_ALL_NO_CACHE_OC);
-                addResult(
-                        results,
-                        checkObject(session, fullRelationshipObject, getAllProperties(fullRelationshipObject),
-                                "Relationship check: " + fullRelationshipObject.getId()));
-            }
-        }
-    }
-
-    private void checkDocumentContent(Session session, List<CmisTestResult> results, CmisObject object) {
-        if (!(object instanceof Document)) {
-            // only documents have content
-            return;
-        }
-
-        CmisTestResult f;
-
-        Document doc = (Document) object;
-        DocumentTypeDefinition type = (DocumentTypeDefinition) doc.getType();
-
-        // check ContentStreamAllowed flag
-        boolean hasContentProperties = (doc.getContentStreamFileName() != null) || (doc.getContentStreamId() != null)
-                || (doc.getContentStreamLength() > -1) || (doc.getContentStreamMimeType() != null);
-
-        if (hasContentProperties) {
-            if (type.getContentStreamAllowed() == ContentStreamAllowed.NOTALLOWED) {
-                addResult(
-                        results,
-                        createResult(FAILURE,
-                                "Content properties have values but the document type doesn't allow content!"));
-            }
-        } else {
-            if (type.getContentStreamAllowed() == ContentStreamAllowed.REQUIRED) {
-                addResult(results,
-                        createResult(FAILURE, "Content properties are not set but the document type demands content!"));
-            }
-        }
-
-        // get the content stream
-        ContentStream contentStream = doc.getContentStream();
-
-        if (contentStream == null) {
-            if (hasContentProperties && doc.getContentStreamLength() > 0) {
-                addResult(results,
-                        createResult(FAILURE, "Content properties have values but the document has no content!"));
-            }
-
-            if (type.getContentStreamAllowed() == ContentStreamAllowed.REQUIRED) {
-                addResult(results,
-                        createResult(FAILURE, "The document type demands content but the document has no content!"));
-            }
-
-            return;
-        }
-
-        if (type.getContentStreamAllowed() == ContentStreamAllowed.NOTALLOWED) {
-            addResult(results, createResult(FAILURE, "Document type doesn't allow content but document has content!"));
-        }
-
-        // file name check
-        f = createResult(FAILURE, "Content file names don't match!");
-        addResult(results, assertEquals(doc.getContentStreamFileName(), contentStream.getFileName(), null, f));
-
-        if (doc.getContentStreamLength() > -1 && contentStream.getLength() > -1) {
-            f = createResult(FAILURE, "Content lengths don't match!");
-            addResult(results, assertEquals(doc.getContentStreamLength(), contentStream.getLength(), null, f));
-        }
-
-        // MIME type check
-        String docMimeType = doc.getContentStreamMimeType();
-        if (docMimeType != null) {
-            int x = docMimeType.indexOf(';');
-            if (x > -1) {
-                docMimeType = docMimeType.substring(0, x);
-            }
-            docMimeType = docMimeType.trim();
-        }
-
-        String contentMimeType = contentStream.getMimeType();
-        if (contentMimeType != null) {
-            int x = contentMimeType.indexOf(';');
-            if (x > -1) {
-                contentMimeType = contentMimeType.substring(0, x);
-            }
-            contentMimeType = contentMimeType.trim();
-        }
-
-        f = createResult(FAILURE, "Content MIME types don't match!");
-        addResult(results, assertEquals(docMimeType, contentMimeType, null, f));
-
-        if (contentStream.getMimeType() != null) {
-            if (contentMimeType.equals(docMimeType)) {
-                f = createResult(WARNING, "Content MIME types don't match!");
-                addResult(results, assertEquals(doc.getContentStreamMimeType(), contentStream.getMimeType(), null, f));
-            }
-
-            f = createResult(FAILURE, "Content MIME types is invalid: " + contentStream.getMimeType());
-            addResult(
-                    results,
-                    assertIsTrue(contentStream.getMimeType().length() > 2
-                            && contentStream.getMimeType().indexOf('/') > 0, null, f));
-        }
-
-        // check stream
-        InputStream stream = contentStream.getStream();
-        if (stream == null) {
-            addResult(results, createResult(FAILURE, "Docuemnt has no content stream!"));
-            return;
-        }
-
-        try {
-            long bytes = 0;
-            byte[] buffer = new byte[64 * 1024];
-            int b = stream.read(buffer);
-            while (b > -1) {
-                bytes += b;
-                b = stream.read(buffer);
-            }
-            stream.close();
-
-            // check content length
-            if (doc.getContentStreamLength() > -1) {
-                f = createResult(FAILURE,
-                        "Content stream length property value doesn't match the actual content length!");
-                addResult(results, assertEquals(doc.getContentStreamLength(), bytes, null, f));
-            }
-
-            if (contentStream.getLength() > -1) {
-                f = createResult(FAILURE, "Content length value doesn't match the actual content length!");
-                addResult(results, assertEquals(contentStream.getLength(), bytes, null, f));
-            }
-        } catch (Exception e) {
-            addResult(results, createResult(FAILURE, "Reading content failed: " + e, e, false));
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    protected CmisTestResult checkRenditions(Session session, CmisObject object, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (object.getRenditions() != null) {
-
-            for (Rendition rend : object.getRenditions()) {
-                f = createResult(FAILURE, "A rendition in the list of renditions is null!");
-                addResult(results, assertNotNull(rend, null, f));
-
-                if (rend != null) {
-                    f = createResult(FAILURE, "A rendition has an empty stream id!");
-                    addResult(results, assertStringNotEmpty(rend.getStreamId(), null, f));
-
-                    f = createResult(FAILURE, "A rendition has an empty kind! Stream id: " + rend.getStreamId());
-                    addResult(results, assertStringNotEmpty(rend.getKind(), null, f));
-
-                    f = createResult(FAILURE, "A rendition has an empty MIME type! Stream id: " + rend.getStreamId());
-                    addResult(results, assertStringNotEmpty(rend.getMimeType(), null, f));
-
-                    if ("cmis:thumbnail".equals(rend.getKind())) {
-                        f = createResult(WARNING,
-                                "A rendition is of kind 'cmis:thumbnail' but the height is not set or has an invalid value! Stream id: "
-                                        + rend.getStreamId());
-                        addResult(results, assertIsTrue(rend.getHeight() > 0, null, f));
-
-                        f = createResult(WARNING,
-                                "A rendition is of kind 'cmis:thumbnail' but the width is not set or has an invalid value! Stream id: "
-                                        + rend.getStreamId());
-                        addResult(results, assertIsTrue(rend.getWidth() > 0, null, f));
-                    }
-
-                    // check the content
-                    ContentStream contentStream = rend.getContentStream();
-                    f = createResult(FAILURE, "A rendition has no content stream! Stream id: " + rend.getStreamId());
-                    addResult(results, assertNotNull(contentStream, null, f));
-
-                    if (contentStream != null) {
-                        InputStream stream = contentStream.getStream();
-
-                        f = createResult(FAILURE, "A rendition has no stream! Stream id: " + rend.getStreamId());
-                        addResult(results, assertNotNull(stream, null, f));
-
-                        if (stream != null) {
-                            try {
-                                long bytes = 0;
-                                byte[] buffer = new byte[64 * 1024];
-                                int b = stream.read(buffer);
-                                while (b > -1) {
-                                    bytes += b;
-                                    b = stream.read(buffer);
-                                }
-                                stream.close();
-
-                                // check content length
-                                if (rend.getLength() > -1) {
-                                    f = createResult(FAILURE,
-                                            "Rendition content stream length value doesn't match the actual content length!");
-                                    addResult(results, assertEquals(rend.getLength(), bytes, null, f));
-                                }
-                            } catch (Exception e) {
-                                addResult(results, createResult(FAILURE, "Reading content failed: " + e, e, false));
-                            } finally {
-                                IOUtils.closeQuietly(stream);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult checkVersionHistory(Session session, CmisObject object, String[] properties, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (object.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-            // skip non-document objects
-            return null;
-        }
-
-        if (!Boolean.TRUE.equals(((DocumentTypeDefinition) object.getType()).isVersionable())) {
-            // skip non-versionable types
-            return null;
-        }
-
-        Document doc = (Document) object;
-
-        // check version series id
-        String versionSeriesId = doc.getVersionSeriesId();
-
-        f = createResult(FAILURE, "Versionable document has no version series id property!");
-        addResult(results, assertStringNotEmpty(versionSeriesId, null, f));
-        if (versionSeriesId == null) {
-            CmisTestResultImpl result = createResult(getWorst(results), message);
-            result.getChildren().addAll(results);
-            return result;
-        }
-
-        // get version history
-        List<Document> versions = doc.getAllVersions(SELECT_ALL_NO_CACHE_OC);
-
-        f = createResult(FAILURE, "Version history is null!");
-        addResult(results, assertNotNull(versions, null, f));
-        if (versions == null) {
-            CmisTestResultImpl result = createResult(getWorst(results), message);
-            result.getChildren().addAll(results);
-            return result;
-        }
-
-        f = createResult(FAILURE, "Version history must have at least one version!");
-        addResult(results, assertListNotEmpty(versions, null, f));
-
-        if (!versions.isEmpty()) {
-            // get latest version
-            Document lastestVersion = doc.getObjectOfLatestVersion(false, SELECT_ALL_NO_CACHE_OC);
-            addResult(results,
-                    checkObject(session, lastestVersion, properties, "Latest version check: " + lastestVersion.getId()));
-
-            f = createResult(FAILURE, "Latest version is not flagged as latest version! Id: " + lastestVersion.getId());
-            addResult(results, assertIsTrue(lastestVersion.isLatestVersion(), null, f));
-
-            // get latest major version
-            Document lastestMajorVersion = null;
-            try {
-                lastestMajorVersion = doc.getObjectOfLatestVersion(true, SELECT_ALL_NO_CACHE_OC);
-
-                f = createResult(FAILURE, "getObjectOfLatestVersion returned an invalid object!");
-                addResult(results, assertNotNull(lastestMajorVersion, null, f));
-            } catch (CmisObjectNotFoundException e) {
-                // no latest major version
-            }
-            if (lastestMajorVersion != null) {
-                addResult(
-                        results,
-                        checkObject(session, lastestMajorVersion, properties, "Latest major version check: "
-                                + lastestMajorVersion.getId()));
-
-                f = createResult(FAILURE, "Latest major version is not flagged as latest major version! Id: "
-                        + lastestMajorVersion.getId());
-                addResult(results, assertIsTrue(lastestMajorVersion.isLatestMajorVersion(), null, f));
-            }
-
-            // iterate through the version history and test each version
-            // document
-            long creatationDate = Long.MAX_VALUE;
-            int latestVersion = 0;
-            int latestMajorVersion = 0;
-            long latestModificationDate = Long.MAX_VALUE;
-            int latestModifictaionIndex = Integer.MIN_VALUE;
-            Set<String> versionLabels = new HashSet<String>();
-            boolean found = false;
-            boolean foundLastestVersion = false;
-            boolean foundLastestMajorVersion = false;
-            for (int i = 0; i < versions.size(); i++) {
-                Document version = versions.get(i);
-
-                f = createResult(FAILURE, "Version " + i + " is null!");
-                addResult(results, assertNotNull(version, null, f));
-                if (version == null) {
-                    continue;
-                }
-
-                addResult(results, checkObject(session, version, properties, "Version check: " + version.getId()));
-
-                // check first entry
-                if (i == 0) {
-                    if (version.isVersionSeriesCheckedOut()) {
-                        f = createResult(
-                                WARNING,
-                                "Version series is checked-out and the PWC is not the latest version! Id: "
-                                        + version.getId()
-                                        + " (Note: The words of the CMIS specification define that the PWC is the latest version."
-                                        + " But that is not the intention of the spec and will be changed in CMIS 1.1."
-                                        + " Thus this a warning, not an error.)");
-                        addResult(results, assertIsTrue(version.isLatestVersion(), null, f));
-                    } else {
-                        f = createResult(FAILURE,
-                                "Version series is not checked-out and first version history entry is not the latest version! Id: "
-                                        + version.getId());
-                        addResult(results, assertIsTrue(version.isLatestVersion(), null, f));
-                    }
-                }
-
-                // check version id
-                f = createResult(FAILURE, "Version series id does not match! Id: " + version.getId());
-                addResult(results, assertEquals(versionSeriesId, version.getVersionSeriesId(), null, f));
-
-                // check creation date
-                if (creatationDate == version.getCreationDate().getTimeInMillis()) {
-                    addResult(results, createResult(WARNING, "Two or more versions have the same creation date!"));
-                } else {
-                    f = createResult(FAILURE, "Version history order incorrect! Must be sorted bei creation date!");
-                    addResult(results,
-                            assertIsTrue(version.getCreationDate().getTimeInMillis() <= creatationDate, null, f));
-                }
-
-                // count latest versions and latest major versions
-                if (version.isLatestVersion()) {
-                    latestVersion++;
-                }
-
-                if (version.isLatestMajorVersion()) {
-                    latestMajorVersion++;
-                }
-
-                // find latest modification date
-                if (latestModificationDate == version.getLastModificationDate().getTimeInMillis()) {
-                    addResult(results,
-                            createResult(WARNING, "Two or more versions have the same last modification date!"));
-                } else if (latestModificationDate < version.getLastModificationDate().getTimeInMillis()) {
-                    latestModificationDate = version.getLastModificationDate().getTimeInMillis();
-                    latestModifictaionIndex = i;
-                }
-
-                // check for version label duplicates
-                String versionLabel = version.getVersionLabel();
-                f = createResult(WARNING, "More than one version have this version label: " + versionLabel);
-                addResult(results, assertIsFalse(versionLabels.contains(versionLabel), null, f));
-
-                versionLabels.add(versionLabel);
-
-                // check PWC
-                if (version.getId().equals(version.getVersionSeriesCheckedOutId())) {
-                    f = createResult(FAILURE, "PWC must not be flagged as latest major version! Id: " + version.getId());
-                    addResult(results, assertIsFalse(version.isLatestMajorVersion(), null, f));
-                }
-
-                // check checked out
-                if (Boolean.TRUE.equals(doc.isVersionSeriesCheckedOut())) {
-                    f = createResult(WARNING,
-                            "Version series is marked as checked out but cmis:versionSeriesCheckedOutId is not set! Id: "
-                                    + version.getId());
-                    addResult(results, assertStringNotEmpty(doc.getVersionSeriesCheckedOutId(), null, f));
-
-                    f = createResult(WARNING,
-                            "Version series is marked as checked out but cmis:versionSeriesCheckedOutBy is not set! Id: "
-                                    + version.getId());
-                    addResult(results, assertStringNotEmpty(doc.getVersionSeriesCheckedOutBy(), null, f));
-                } else if (Boolean.FALSE.equals(doc.isVersionSeriesCheckedOut())) {
-                    f = createResult(FAILURE,
-                            "Version series is not marked as checked out but cmis:versionSeriesCheckedOutId is set! Id: "
-                                    + version.getId());
-                    addResult(results, assertNull(doc.getVersionSeriesCheckedOutId(), null, f));
-
-                    f = createResult(FAILURE,
-                            "Version series is not marked as checked out but cmis:versionSeriesCheckedOutIdBy is set! Id: "
-                                    + version.getId());
-                    addResult(results, assertNull(doc.getVersionSeriesCheckedOutBy(), null, f));
-                }
-
-                // found origin object?
-                if (version.getId().equals(object.getId())) {
-                    found = true;
-                }
-
-                // found latest version?
-                if (version.getId().equals(lastestVersion.getId())) {
-                    foundLastestVersion = true;
-                }
-
-                // found latest major version?
-                if (lastestMajorVersion != null && version.getId().equals(lastestMajorVersion.getId())) {
-                    foundLastestMajorVersion = true;
-                }
-            }
-
-            // check latest versions
-            f = createResult(FAILURE, "Version series id has " + latestVersion
-                    + " latest versions! There must be only one!");
-            addResult(results, assertEquals(1, latestVersion, null, f));
-
-            if (!foundLastestVersion) {
-                addResult(results, createResult(FAILURE, "Latest version not found in version history!"));
-            }
-
-            // check latest major versions
-            if (lastestMajorVersion == null) {
-                f = createResult(FAILURE, "Version series id has " + latestMajorVersion
-                        + " latest major version(s) but getObjectOfLatestVersion() didn't return a major version!");
-                addResult(results, assertEquals(0, latestMajorVersion, null, f));
-            } else {
-                f = createResult(FAILURE, "Version series id has " + latestMajorVersion
-                        + " latest major versions but there should be exactly one!");
-                addResult(results, assertEquals(1, latestMajorVersion, null, f));
-
-                if (!foundLastestMajorVersion) {
-                    addResult(results, createResult(FAILURE, "Latest major version not found in version history!"));
-                }
-            }
-
-            // check latest version
-            if (latestModifictaionIndex >= 0) {
-                f = createResult(
-                        FAILURE,
-                        "Version with the latest modification date is not flagged as latest version! Id: "
-                                + versions.get(latestModifictaionIndex));
-                addResult(results, assertIsTrue(versions.get(latestModifictaionIndex).isLatestVersion(), null, f));
-            }
-
-            // check if the origin object was found
-            if (!found) {
-                addResult(results, createResult(FAILURE, "Document not found in its version history!"));
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult assertAllowableAction(CmisObject object, Action action, CmisTestResult success,
-            CmisTestResult failure) {
-        AllowableActions allowableActions = object.getAllowableActions();
-        if (allowableActions != null && allowableActions.getAllowableActions() != null) {
-            if (allowableActions.getAllowableActions().contains(action)) {
-                return success;
-            }
-        }
-
-        return failure;
-    }
-
-    protected CmisTestResult assertNotAllowableAction(CmisObject object, Action action, CmisTestResult success,
-            CmisTestResult failure) {
-        AllowableActions allowableActions = object.getAllowableActions();
-        if (allowableActions != null && allowableActions.getAllowableActions() != null) {
-            if (!allowableActions.getAllowableActions().contains(action)) {
-                return success;
-            }
-        }
-
-        return failure;
-    }
-
-    protected CmisTestResult checkProperty(Property<?> property, String message, PropertyCheckEnum propertyCheck) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Property is not included in response!");
-        addResult(results, assertNotNull(property, null, f));
-
-        if (property != null) {
-            f = createResult(FAILURE, "Property id is not set or empty!");
-            addResult(results, assertStringNotEmpty(property.getId(), null, f));
-
-            f = createResult(WARNING, "Display name is not set!");
-            addResult(results, assertNotNull(property.getDisplayName(), null, f));
-
-            f = createResult(WARNING, "Query name is not set!");
-            addResult(results, assertNotNull(property.getQueryName(), null, f));
-
-            f = createResult(WARNING, "Local name is not set!");
-            addResult(results, assertNotNull(property.getLocalName(), null, f));
-
-            if ((propertyCheck == PropertyCheckEnum.MUST_BE_SET)
-                    || (propertyCheck == PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY)) {
-                f = createResult(FAILURE, "Property has no value!");
-                addResult(results, assertListNotEmpty(property.getValues(), null, f));
-            } else if (propertyCheck == PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY) {
-                f = createResult(WARNING, "Property has no value!");
-                addResult(results, assertListNotEmpty(property.getValues(), null, f));
-            } else if (propertyCheck == PropertyCheckEnum.MUST_NOT_BE_SET) {
-                f = createResult(FAILURE, "Property has a value!");
-                addResult(results, assertIsTrue(property.getValues().isEmpty(), null, f));
-            }
-
-            boolean isString = ((property.getDefinition().getPropertyType() == PropertyType.STRING)
-                    || (property.getDefinition().getPropertyType() == PropertyType.ID)
-                    || (property.getDefinition().getPropertyType() == PropertyType.URI) || (property.getDefinition()
-                    .getPropertyType() == PropertyType.HTML));
-            for (Object value : property.getValues()) {
-                if (value == null) {
-                    addResult(results, createResult(FAILURE, "Property values contain a null value!"));
-                    break;
-                } else if (isString) {
-                    if (propertyCheck == PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY) {
-                        f = createResult(FAILURE, "Property values contain an empty string!");
-                        addResult(results, assertStringNotEmpty(value.toString(), null, f));
-                    } else if (propertyCheck == PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY) {
-                        f = createResult(WARNING, "Property values contain an empty string!");
-                        addResult(results, assertStringNotEmpty(value.toString(), null, f));
-                    }
-                }
-            }
-
-            if (property.getDefinition().getCardinality() == Cardinality.SINGLE) {
-                f = createResult(FAILURE, "Property cardinality is SINGLE but property has more than one value!");
-                addResult(results, assertIsTrue(property.getValues().size() <= 1, null, f));
-            }
-
-            if (property.getDefinition().isRequired() == null) {
-                addResult(results, createResult(FAILURE, "Property definition doesn't contain the required flag!"));
-            } else {
-                if (property.getDefinition().isRequired().booleanValue()) {
-                    f = createResult(FAILURE, "Property is required but has no value!");
-                    addResult(results, assertListNotEmpty(property.getValues(), null, f));
-                }
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult checkChildren(Session session, Folder folder, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (folder == null) {
-            return createResult(FAILURE, "Folder is null!");
-        }
-
-        // getChildren
-
-        boolean supportsOrderByName = isOrderByNameSupported(session);
-        OperationContext orderContext = (supportsOrderByName ? SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME
-                : SELECT_ALL_NO_CACHE_OC);
-
-        long childrenCount = 0;
-        long childrenFolderCount = 0;
-        ItemIterable<CmisObject> children = folder.getChildren(orderContext);
-
-        int orderByNameIssues = 0;
-        String lastName = null;
-
-        for (CmisObject child : children) {
-            childrenCount++;
-            if (child instanceof Folder) {
-                childrenFolderCount++;
-            }
-
-            checkChild(session, results, folder, child);
-
-            if (lastName != null && child.getName() != null) {
-                if (child.getName().compareToIgnoreCase(lastName) < 0) {
-                    orderByNameIssues++;
-                }
-            }
-
-            lastName = child.getName();
-        }
-
-        if (children.getTotalNumItems() >= 0) {
-            f = createResult(WARNING, "Number of children doesn't match the reported total number of items!");
-            addResult(results, assertEquals(childrenCount, children.getTotalNumItems(), null, f));
-        } else {
-            addResult(results, createResult(WARNING, "getChildren did not report the total number of items!"));
-        }
-
-        if (supportsOrderByName) {
-            f = createResult(WARNING,
-                    "Children should be ordered by cmis:name, but they are not! (It might be a collation mismtach.)");
-            addResult(results, assertEquals(0, orderByNameIssues, null, f));
-        } else {
-            addResult(results, createResult(INFO, "Repository doesn't support Order By for getChildren()."));
-        }
-
-        // test path segments
-
-        ObjectInFolderList pathSegementChildren = session
-                .getBinding()
-                .getNavigationService()
-                .getChildren(session.getRepositoryInfo().getId(), folder.getId(), "cmis:objectId,cmis:name", null,
-                        null, null, null, Boolean.TRUE, BigInteger.valueOf(10), BigInteger.ZERO, null);
-
-        if (pathSegementChildren != null && pathSegementChildren.getObjects() != null) {
-            for (ObjectInFolderData objectInFolder : pathSegementChildren.getObjects()) {
-                String pathSegement = objectInFolder.getPathSegment();
-                String objectId = (String) objectInFolder.getObject().getProperties().getProperties()
-                        .get(PropertyIds.OBJECT_ID).getFirstValue();
-
-                if (pathSegement == null) {
-                    addResult(results, createResult(FAILURE, "getChildren omitted path segement! Id: " + objectId));
-                } else {
-                    CmisObject pathSegementChild = session.getObjectByPath(folder.getPath(), pathSegement);
-
-                    f = createResult(FAILURE,
-                            "Combining the path of the parent folder and the path segement of a child returns a different object! Id: "
-                                    + objectId);
-                    addResult(results, assertEquals(objectId, pathSegementChild.getId(), null, f));
-                }
-            }
-        }
-
-        // getDescendants
-
-        if (isGetDescendantsSupported(session)) {
-            long descendantsCount = 0;
-            List<Tree<FileableCmisObject>> descendants = folder.getDescendants(1, SELECT_ALL_NO_CACHE_OC);
-
-            for (Tree<FileableCmisObject> child : descendants) {
-                descendantsCount++;
-
-                if (child == null) {
-                    addResult(results, createResult(FAILURE, "Folder descendants contain a null tree!"));
-                } else {
-                    checkChild(session, results, folder, child.getItem());
-                }
-            }
-
-            f = createResult(FAILURE,
-                    "Number of descendants doesn't match the number of children returned by getChildren!");
-            addResult(results, assertEquals(childrenCount, descendantsCount, null, f));
-        } else {
-            addResult(results, createResult(SKIPPED, "getDescendants is not supported."));
-        }
-
-        // getFolderTree
-
-        if (isGetFolderTreeSupported(session)) {
-            long folderTreeCount = 0;
-            List<Tree<FileableCmisObject>> folderTree = folder.getFolderTree(1, SELECT_ALL_NO_CACHE_OC);
-
-            for (Tree<FileableCmisObject> child : folderTree) {
-                folderTreeCount++;
-
-                if (child == null) {
-                    addResult(results, createResult(FAILURE, "Folder tree contains a null tree!"));
-                } else {
-                    checkChild(session, results, folder, child.getItem());
-                }
-            }
-
-            f = createResult(FAILURE, "Number of folders doesn't match the number of folders returned by getChildren!");
-            addResult(results, assertEquals(childrenFolderCount, folderTreeCount, null, f));
-        } else {
-            addResult(results, createResult(SKIPPED, "getFolderTree is not supported."));
-        }
-
-        // --- wrap up ---
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    private void checkChild(Session session, List<CmisTestResult> results, Folder folder, CmisObject child) {
-        CmisTestResult f;
-
-        if (child == null) {
-            addResult(results, createResult(FAILURE, "Folder contains a null child!"));
-        } else {
-            String[] propertiesToCheck = new String[child.getType().getPropertyDefinitions().size()];
-
-            int i = 0;
-            for (String propId : child.getType().getPropertyDefinitions().keySet()) {
-                propertiesToCheck[i++] = propId;
-            }
-
-            addResult(results, checkObject(session, child, propertiesToCheck, "Child check: " + child.getId()));
-            addResult(
-                    results,
-                    checkVersionHistory(session, child, propertiesToCheck,
-                            "Child version history check: " + child.getId()));
-
-            f = createResult(FAILURE, "Child is not fileable! Id: " + child.getId() + " / Type: "
-                    + child.getType().getId());
-            addResult(results, assertIsTrue(child instanceof FileableCmisObject, null, f));
-
-            if (child instanceof FileableCmisObject) {
-                FileableCmisObject fileableChild = (FileableCmisObject) child;
-
-                Set<Action> actions = fileableChild.getAllowableActions().getAllowableActions();
-                boolean hasObjectParentsAction = actions.contains(Action.CAN_GET_OBJECT_PARENTS);
-                boolean hasFolderParentAction = actions.contains(Action.CAN_GET_FOLDER_PARENT);
-
-                if (hasObjectParentsAction || hasFolderParentAction) {
-                    List<Folder> parents = fileableChild.getParents();
-
-                    f = createResult(FAILURE, "Child has no parents! Id: " + child.getId());
-                    addResult(results, assertListNotEmpty(parents, null, f));
-
-                    if (child instanceof Folder) {
-                        f = createResult(FAILURE,
-                                "Child is a folder and has more than one parent! Id: " + child.getId());
-                        addResult(results, assertIsFalse(parents.size() > 1, null, f));
-
-                        Folder folderParent = ((Folder) child).getFolderParent();
-                        if (folderParent == null) {
-                            addResult(
-                                    results,
-                                    createResult(
-                                            FAILURE,
-                                            "getFolderParent() returns null for a non-root folder object! Id: "
-                                                    + child.getId()));
-                        } else {
-                            f = createResult(FAILURE,
-                                    "getFolderParent() returns wrong parent object! Id: " + child.getId());
-                            addResult(results, assertEquals(folder.getId(), folderParent.getId(), null, f));
-
-                            if (parents.size() > 0 && parents.get(0) != null) {
-                                f = createResult(FAILURE,
-                                        "getFolderParent() and getParents() return different parents for a folder object! Id: "
-                                                + child.getId());
-                                addResult(results, assertEquals(parents.get(0).getId(), folderParent.getId(), null, f));
-                            }
-                        }
-                    }
-
-                    boolean foundParent = false;
-                    for (Folder parent : parents) {
-                        if (parent == null) {
-                            f = createResult(FAILURE, "One of childs parents is null! Id: " + child.getId());
-                            addResult(results, assertListNotEmpty(parents, null, f));
-                        } else if (folder.getId().equals(parent.getId())) {
-                            foundParent = true;
-                            break;
-                        }
-                    }
-
-                    if (!foundParent) {
-                        addResult(
-                                results,
-                                createResult(FAILURE,
-                                        "Parent folder is not in parents of the child! Id: " + child.getId()));
-                    }
-                }
-
-                // get object by id and compare
-                CmisObject objectById = session.getObject(child.getId(), SELECT_ALL_NO_CACHE_OC);
-
-                f = createResult(FAILURE, "Child and object fetched by id don't match! Id: " + child.getId());
-                addResult(results, assertEquals(child, objectById, null, f, false, false));
-
-                // get object by path and compare
-                List<String> paths = ((FileableCmisObject) child).getPaths();
-
-                if (isNullOrEmpty(paths)) {
-                    addResult(results, createResult(FAILURE, "Child has no path! " + child.getId()));
-                } else {
-                    for (String path : paths) {
-                        CmisObject objectByPath = session.getObjectByPath(path, SELECT_ALL_NO_CACHE_OC);
-
-                        f = createResult(FAILURE, "Child and object fetched by path don't match! Id: " + child.getId()
-                                + " / Path: " + path);
-                        addResult(results, assertEquals(child, objectByPath, null, f, false, false));
-
-                        f = createResult(FAILURE, "Object fetched by id and object fetched by path don't match! Id: "
-                                + child.getId() + " / Path: " + path);
-                        addResult(results, assertEquals(objectById, objectByPath, null, f, true, true));
-                    }
-                }
-            }
-
-            f = createResult(WARNING, "Child has no CAN_GET_OBJECT_PARENTS allowable action! Id: " + child.getId());
-            addResult(results, assertAllowableAction(child, Action.CAN_GET_OBJECT_PARENTS, null, f));
-
-            if (child instanceof Folder) {
-                f = createResult(WARNING, "Child has no CAN_GET_FOLDER_PARENT allowable action! Id: " + child.getId());
-                addResult(results, assertAllowableAction(child, Action.CAN_GET_FOLDER_PARENT, null, f));
-            }
-        }
-    }
-
-    protected CmisTestResult assertShallowEquals(CmisObject expected, CmisObject actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected object is null, but actual object is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual object is null, but expected object is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Ids don't match!");
-        addResult(results, assertEquals(expected.getId(), actual.getId(), null, f));
-
-        f = createResult(FAILURE, "Base types don't match!");
-        addResult(results, assertEquals(expected.getBaseTypeId(), actual.getBaseTypeId(), null, f));
-
-        f = createResult(FAILURE, "Types don't match!");
-        addResult(results, assertEquals(expected.getType().getId(), actual.getType().getId(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    // --- type checks ---
-
-    protected CmisTestResult checkQueryName(String queryName, boolean isRequired, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (queryName == null || queryName.length() == 0) {
-            addResult(results, createResult(isRequired ? FAILURE : WARNING, "Query name is not set!"));
-        } else {
-            f = createResult(FAILURE, "Query name contains invalid character: ' '");
-            addResult(results, assertIsTrue(queryName.indexOf(' ') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: ','");
-            addResult(results, assertIsTrue(queryName.indexOf(',') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '\"'");
-            addResult(results, assertIsTrue(queryName.indexOf('"') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '''");
-            addResult(results, assertIsTrue(queryName.indexOf('\'') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '\\'");
-            addResult(results, assertIsTrue(queryName.indexOf('\\') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '.'");
-            addResult(results, assertIsTrue(queryName.indexOf('.') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '('");
-            addResult(results, assertIsTrue(queryName.indexOf('(') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: ')'");
-            addResult(results, assertIsTrue(queryName.indexOf(')') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '\\t'");
-            addResult(results, assertIsTrue(queryName.indexOf('\t') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '\\n'");
-            addResult(results, assertIsTrue(queryName.indexOf('\n') < 0, null, f));
-
-            f = createResult(FAILURE, "Query name contains invalid character: '\\r'");
-            addResult(results, assertIsTrue(queryName.indexOf('\r') < 0, null, f));
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult checkTypeDefinition(Session session, TypeDefinition type, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Type is null!");
-        addResult(results, assertNotNull(type, null, f));
-
-        if (type != null) {
-            f = createResult(FAILURE, "Type id is not set!");
-            addResult(results, assertStringNotEmpty(type.getId(), null, f));
-
-            f = createResult(FAILURE, "Base type id is not set!");
-            addResult(results, assertNotNull(type.getBaseTypeId(), null, f));
-
-            f = createResult(FAILURE, "Local name is not set!");
-            addResult(results, assertStringNotEmpty(type.getLocalName(), null, f));
-
-            // f = createResult(FAILURE, "Local namespace is not set!");
-            // addResult(results, assertStringNotEmpty(type.(), null, f));
-
-            boolean isQueryNameRequired = Boolean.TRUE.equals(type.isQueryable());
-            addResult(results,
-                    checkQueryName(type.getQueryName(), isQueryNameRequired, "Type Query Name: " + type.getQueryName()));
-
-            if ((type.getId() != null) && (type.getBaseTypeId() != null)) {
-                if (type.getBaseTypeId().value().equals(type.getId())) {
-                    f = createResult(FAILURE, "Base type has parent type!");
-                    addResult(results, assertStringNullOrEmpty(type.getParentTypeId(), null, f));
-                } else {
-                    f = createResult(FAILURE, "Parent type is not set!");
-                    addResult(results, assertStringNotEmpty(type.getParentTypeId(), null, f));
-                }
-            }
-
-            f = createResult(FAILURE, "Creatable flag is not set!");
-            addResult(results, assertNotNull(type.isCreatable(), null, f));
-
-            f = createResult(FAILURE, "Fileable flag is not set!");
-            addResult(results, assertNotNull(type.isFileable(), null, f));
-
-            f = createResult(FAILURE, "Controllable ACL flag is not set!");
-            addResult(results, assertNotNull(type.isControllableAcl(), null, f));
-
-            f = createResult(FAILURE, "Controllable Policy flag is not set!");
-            addResult(results, assertNotNull(type.isControllablePolicy(), null, f));
-
-            f = createResult(FAILURE, "Fulltext indexed flag is not set!");
-            addResult(results, assertNotNull(type.isFulltextIndexed(), null, f));
-
-            f = createResult(FAILURE, "Included in super type flag is not set!");
-            addResult(results, assertNotNull(type.isIncludedInSupertypeQuery(), null, f));
-
-            f = createResult(FAILURE, "Queryable flag is not set!");
-            addResult(results, assertNotNull(type.isQueryable(), null, f));
-
-            f = createResult(WARNING, "Type display name is not set!");
-            addResult(results, assertStringNotEmpty(type.getDisplayName(), null, f));
-
-            f = createResult(WARNING, "Type description is not set!");
-            addResult(results, assertStringNotEmpty(type.getDescription(), null, f));
-
-            if (BaseTypeId.CMIS_DOCUMENT.equals(type.getBaseTypeId())) {
-                DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-
-                f = createResult(FAILURE, "Versionable flag is not set!");
-                addResult(results, assertNotNull(docType.isVersionable(), null, f));
-
-                f = createResult(FAILURE, "Content stream allowed flag is not set!");
-                addResult(results, assertNotNull(docType.getContentStreamAllowed(), null, f));
-            } else if (BaseTypeId.CMIS_FOLDER.equals(type.getBaseTypeId())) {
-                if (type.isFileable() != null) {
-                    f = createResult(FAILURE, "Folder types must be fileable!");
-                    addResult(results, assertIsTrue(type.isFileable(), null, f));
-                }
-            } else if (BaseTypeId.CMIS_RELATIONSHIP.equals(type.getBaseTypeId())) {
-                RelationshipTypeDefinition relType = (RelationshipTypeDefinition) type;
-
-                f = createResult(FAILURE, "Allowed Source Type Ids are not set!");
-                addResult(results, assertNotNull(relType.getAllowedSourceTypeIds(), null, f));
-
-                if (relType.getAllowedSourceTypeIds() != null) {
-                    for (String typeId : relType.getAllowedSourceTypeIds()) {
-                        try {
-                            session.getTypeDefinition(typeId);
-                        } catch (CmisInvalidArgumentException e) {
-                            addResult(
-                                    results,
-                                    createResult(WARNING,
-                                            "Allowed Source Type Ids contain a type id that doesn't exist: " + typeId));
-                        } catch (CmisObjectNotFoundException e) {
-                            addResult(
-                                    results,
-                                    createResult(WARNING,
-                                            "Allowed Source Type Ids contain a type id that doesn't exist: " + typeId));
-                        }
-                    }
-                }
-
-                f = createResult(FAILURE, "Allowed Target Type Ids are not set!");
-                addResult(results, assertNotNull(relType.getAllowedTargetTypeIds(), null, f));
-
-                if (relType.getAllowedTargetTypeIds() != null) {
-                    for (String typeId : relType.getAllowedTargetTypeIds()) {
-                        try {
-                            session.getTypeDefinition(typeId);
-                        } catch (CmisInvalidArgumentException e) {
-                            addResult(
-                                    results,
-                                    createResult(WARNING,
-                                            "Allowed Target Type Ids contain a type id that doesn't exist: " + typeId));
-                        } catch (CmisObjectNotFoundException e) {
-                            addResult(
-                                    results,
-                                    createResult(WARNING,
-                                            "Allowed Target Type Ids contain a type id that doesn't exist: " + typeId));
-                        }
-                    }
-                }
-
-                if (type.isFileable() != null) {
-                    f = createResult(FAILURE, "Relationship types must not be fileable!");
-                    addResult(results, assertIsFalse(type.isFileable(), null, f));
-                }
-            } else if (BaseTypeId.CMIS_POLICY.equals(type.getBaseTypeId())) {
-                // nothing to do
-            }
-
-            // check properties
-            if (!BaseTypeId.CMIS_SECONDARY.equals(type.getBaseTypeId())) {
-
-                f = createResult(FAILURE, "Type has no property definitions!");
-                addResult(results, assertNotNull(type.getPropertyDefinitions(), null, f));
-
-                if (type.getPropertyDefinitions() != null) {
-                    for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-                        if (propDef == null) {
-                            addResult(results, createResult(FAILURE, "A property definition is null!"));
-                        } else if (propDef.getId() == null) {
-                            addResult(results, createResult(FAILURE, "A property definition id is null!"));
-                        } else {
-                            addResult(results,
-                                    checkPropertyDefinition(propDef, "Property definition: " + propDef.getId()));
-                        }
-                    }
-                }
-
-                CmisPropertyDefintion cpd;
-
-                // cmis:name
-                cpd = new CmisPropertyDefintion(PropertyIds.NAME, null, PropertyType.STRING, Cardinality.SINGLE, null,
-                        null, null);
-                addResult(results, cpd.check(type));
-
-                // cmis:objectId
-                cpd = new CmisPropertyDefintion(PropertyIds.OBJECT_ID, false, PropertyType.ID, Cardinality.SINGLE,
-                        Updatability.READONLY, null, null);
-                addResult(results, cpd.check(type));
-
-                // cmis:baseTypeId
-                cpd = new CmisPropertyDefintion(PropertyIds.BASE_TYPE_ID, false, PropertyType.ID, Cardinality.SINGLE,
-                        Updatability.READONLY, null, null);
-                addResult(results, cpd.check(type));
-
-                // cmis:objectTypeId
-                cpd = new CmisPropertyDefintion(PropertyIds.OBJECT_TYPE_ID, true, PropertyType.ID, Cardinality.SINGLE,
-                        Updatability.ONCREATE, null, null);
-                addResult(results, cpd.check(type));
-
-                // cmis:createdBy
-                cpd = new CmisPropertyDefintion(PropertyIds.CREATED_BY, false, PropertyType.STRING, Cardinality.SINGLE,
-                        Updatability.READONLY, true, true);
-                addResult(results, cpd.check(type));
-
-                // cmis:creationDate
-                cpd = new CmisPropertyDefintion(PropertyIds.CREATION_DATE, false, PropertyType.DATETIME,
-                        Cardinality.SINGLE, Updatability.READONLY, true, true);
-                addResult(results, cpd.check(type));
-
-                // cmis:lastModifiedBy
-                cpd = new CmisPropertyDefintion(PropertyIds.LAST_MODIFIED_BY, false, PropertyType.STRING,
-                        Cardinality.SINGLE, Updatability.READONLY, true, true);
-                addResult(results, cpd.check(type));
-
-                // cmis:lastModificationDate
-                cpd = new CmisPropertyDefintion(PropertyIds.LAST_MODIFICATION_DATE, false, PropertyType.DATETIME,
-                        Cardinality.SINGLE, Updatability.READONLY, true, true);
-                addResult(results, cpd.check(type));
-
-                // cmis:changeToken
-                cpd = new CmisPropertyDefintion(PropertyIds.CHANGE_TOKEN, false, PropertyType.STRING,
-                        Cardinality.SINGLE, Updatability.READONLY, null, null);
-                addResult(results, cpd.check(type));
-
-                // CMIS 1.1 properties
-                if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_1) {
-                    // cmis:description
-                    cpd = new CmisPropertyDefintion(PropertyIds.DESCRIPTION, null, PropertyType.STRING,
-                            Cardinality.SINGLE, null, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:secondaryObjectTypeIds
-                    cpd = new CmisPropertyDefintion(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, false, PropertyType.ID,
-                            Cardinality.MULTI, null, null, false);
-                    addResult(results, cpd.check(type));
-
-                    if (BaseTypeId.CMIS_DOCUMENT.equals(type.getBaseTypeId())) {
-                        // cmis:isPrivateWorkingCopy
-                        cpd = new CmisPropertyDefintion(PropertyIds.IS_PRIVATE_WORKING_COPY, null,
-                                PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, null, null);
-                        addResult(results, cpd.check(type));
-                    }
-                }
-
-                if (BaseTypeId.CMIS_DOCUMENT.equals(type.getBaseTypeId())) {
-                    // cmis:isImmutable
-                    cpd = new CmisPropertyDefintion(PropertyIds.IS_IMMUTABLE, false, PropertyType.BOOLEAN,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:isLatestVersion
-                    cpd = new CmisPropertyDefintion(PropertyIds.IS_LATEST_VERSION, false, PropertyType.BOOLEAN,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:isMajorVersion
-                    cpd = new CmisPropertyDefintion(PropertyIds.IS_MAJOR_VERSION, false, PropertyType.BOOLEAN,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:isLatestMajorVersion
-                    cpd = new CmisPropertyDefintion(PropertyIds.IS_LATEST_MAJOR_VERSION, false, PropertyType.BOOLEAN,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:versionLabel
-                    cpd = new CmisPropertyDefintion(PropertyIds.VERSION_LABEL, false, PropertyType.STRING,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:versionSeriesId
-                    cpd = new CmisPropertyDefintion(PropertyIds.VERSION_SERIES_ID, false, PropertyType.ID,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:isVersionSeriesCheckedOut
-                    cpd = new CmisPropertyDefintion(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, false,
-                            PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:versionSeriesCheckedOutBy
-                    cpd = new CmisPropertyDefintion(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, false,
-                            PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:versionSeriesCheckedOutId
-                    cpd = new CmisPropertyDefintion(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, false, PropertyType.ID,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:checkinComment
-                    cpd = new CmisPropertyDefintion(PropertyIds.CHECKIN_COMMENT, false, PropertyType.STRING,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:contentStreamLength
-                    cpd = new CmisPropertyDefintion(PropertyIds.CONTENT_STREAM_LENGTH, false, PropertyType.INTEGER,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:contentStreamMimeType
-                    cpd = new CmisPropertyDefintion(PropertyIds.CONTENT_STREAM_MIME_TYPE, false, PropertyType.STRING,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:contentStreamFileName
-                    cpd = new CmisPropertyDefintion(PropertyIds.CONTENT_STREAM_FILE_NAME, false, PropertyType.STRING,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:contentStreamId
-                    cpd = new CmisPropertyDefintion(PropertyIds.CONTENT_STREAM_ID, false, PropertyType.ID,
-                            Cardinality.SINGLE, Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-                } else if (BaseTypeId.CMIS_FOLDER.equals(type.getBaseTypeId())) {
-                    // cmis:parentId
-                    cpd = new CmisPropertyDefintion(PropertyIds.PARENT_ID, false, PropertyType.ID, Cardinality.SINGLE,
-                            Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:path
-                    cpd = new CmisPropertyDefintion(PropertyIds.PATH, false, PropertyType.STRING, Cardinality.SINGLE,
-                            Updatability.READONLY, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:allowedChildObjectTypeIds
-                    cpd = new CmisPropertyDefintion(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, false, PropertyType.ID,
-                            Cardinality.MULTI, Updatability.READONLY, null, false);
-                    addResult(results, cpd.check(type));
-                } else if (BaseTypeId.CMIS_RELATIONSHIP.equals(type.getBaseTypeId())) {
-                    // cmis:sourceId
-                    cpd = new CmisPropertyDefintion(PropertyIds.SOURCE_ID, true, PropertyType.ID, Cardinality.SINGLE,
-                            null, null, null);
-                    addResult(results, cpd.check(type));
-
-                    // cmis:targetId
-                    cpd = new CmisPropertyDefintion(PropertyIds.TARGET_ID, true, PropertyType.ID, Cardinality.SINGLE,
-                            null, null, null);
-                    addResult(results, cpd.check(type));
-                } else if (BaseTypeId.CMIS_POLICY.equals(type.getBaseTypeId())) {
-                    // cmis:policyText
-                    cpd = new CmisPropertyDefintion(PropertyIds.POLICY_TEXT, null, PropertyType.STRING,
-                            Cardinality.SINGLE, null, null, null);
-                    addResult(results, cpd.check(type));
-                }
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult checkPropertyDefinition(PropertyDefinition<?> propDef, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Property definition is null!");
-        addResult(results, assertNotNull(propDef, null, f));
-
-        if (propDef != null) {
-            f = createResult(FAILURE, "Property id is not set!");
-            addResult(results, assertStringNotEmpty(propDef.getId(), null, f));
-
-            f = createResult(WARNING, "Local name is not set!");
-            addResult(results, assertStringNotEmpty(propDef.getLocalName(), null, f));
-
-            // f = createResult(WARNING, "Local namespace is not set!");
-            // addResult(results,
-            // assertStringNotEmpty(propDef.getLocalNamespace(), null, f));
-
-            f = createResult(FAILURE, "Query name is not set!");
-            addResult(results, assertStringNotEmpty(propDef.getQueryName(), null, f));
-
-            f = createResult(WARNING, "Display name is not set!");
-            addResult(results, assertStringNotEmpty(propDef.getDisplayName(), null, f));
-
-            f = createResult(WARNING, "Description is not set!");
-            addResult(results, assertStringNotEmpty(propDef.getDescription(), null, f));
-
-            f = createResult(FAILURE, "Property type is not set!");
-            addResult(results, assertNotNull(propDef.getPropertyType(), null, f));
-
-            f = createResult(FAILURE, "Cardinality is not set!");
-            addResult(results, assertNotNull(propDef.getCardinality(), null, f));
-
-            f = createResult(FAILURE, "Updatability is not set!");
-            addResult(results, assertNotNull(propDef.getUpdatability(), null, f));
-
-            f = createResult(FAILURE, "Inherited flag is not set!");
-            addResult(results, assertNotNull(propDef.isInherited(), null, f));
-
-            f = createResult(FAILURE, "Required flag is not set!");
-            addResult(results, assertNotNull(propDef.isRequired(), null, f));
-
-            f = createResult(FAILURE, "Queryable flag is not set!");
-            addResult(results, assertNotNull(propDef.isQueryable(), null, f));
-
-            f = createResult(FAILURE, "Orderable flag is not set!");
-            addResult(results, assertNotNull(propDef.isOrderable(), null, f));
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-
-    protected CmisTestResult assertEquals(TypeDefinition expected, TypeDefinition actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected type defintion is null, but actual type defintion is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual type defintion is null, but expected type defintion is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Type ids don't match!");
-        addResult(results, assertEquals(expected.getId(), actual.getId(), null, f));
-
-        f = createResult(FAILURE, "Base type ids don't match!");
-        addResult(results, assertEquals(expected.getBaseTypeId(), actual.getBaseTypeId(), null, f));
-
-        f = createResult(FAILURE, "Parent type ids don't match!");
-        addResult(results, assertEquals(expected.getParentTypeId(), actual.getParentTypeId(), null, f));
-
-        f = createResult(FAILURE, "Query names don't match!");
-        addResult(results, assertEquals(expected.getQueryName(), actual.getQueryName(), null, f));
-
-        f = createResult(FAILURE, "Local names don't match!");
-        addResult(results, assertEquals(expected.getLocalName(), actual.getLocalName(), null, f));
-
-        f = createResult(FAILURE, "Local namespaces don't match!");
-        addResult(results, assertEquals(expected.getLocalNamespace(), actual.getLocalNamespace(), null, f));
-
-        f = createResult(FAILURE, "Display names don't match!");
-        addResult(results, assertEquals(expected.getDisplayName(), actual.getDisplayName(), null, f));
-
-        f = createResult(FAILURE, "Descriptions don't match!");
-        addResult(results, assertEquals(expected.getDescription(), actual.getDescription(), null, f));
-
-        f = createResult(FAILURE, "Controllable ACl flags don't match!");
-        addResult(results, assertEquals(expected.isControllableAcl(), actual.isControllableAcl(), null, f));
-
-        f = createResult(FAILURE, "Controllable Policy flags don't match!");
-        addResult(results, assertEquals(expected.isControllablePolicy(), actual.isControllablePolicy(), null, f));
-
-        f = createResult(FAILURE, "Creatable flags don't match!");
-        addResult(results, assertEquals(expected.isCreatable(), actual.isCreatable(), null, f));
-
-        f = createResult(FAILURE, "Fileable flags don't match!");
-        addResult(results, assertEquals(expected.isFileable(), actual.isFileable(), null, f));
-
-        f = createResult(FAILURE, "Fulltext indexed flags don't match!");
-        addResult(results, assertEquals(expected.isFulltextIndexed(), actual.isFulltextIndexed(), null, f));
-
-        f = createResult(FAILURE, "Queryable flags don't match!");
-        addResult(results, assertEquals(expected.isQueryable(), actual.isQueryable(), null, f));
-
-        f = createResult(FAILURE, "Included in supertype query flags don't match!");
-        addResult(results,
-                assertEquals(expected.isIncludedInSupertypeQuery(), actual.isIncludedInSupertypeQuery(), null, f));
-
-        if (expected.getTypeMutability() != null && actual.getTypeMutability() != null) {
-            f = createResult(FAILURE, "Type Mutability: Create flags don't match!");
-            addResult(
-                    results,
-                    assertEquals(expected.getTypeMutability().canCreate(), actual.getTypeMutability().canCreate(),
-                            null, f));
-
-            f = createResult(FAILURE, "Type Mutability: update flags don't match!");
-            addResult(
-                    results,
-                    assertEquals(expected.getTypeMutability().canUpdate(), actual.getTypeMutability().canUpdate(),
-                            null, f));
-
-            f = createResult(FAILURE, "Type Mutability: delete flags don't match!");
-            addResult(
-                    results,
-                    assertEquals(expected.getTypeMutability().canDelete(), actual.getTypeMutability().canDelete(),
-                            null, f));
-        } else {
-            f = createResult(FAILURE, "Type Mutability infos don't match!");
-            addResult(results, assertEquals(expected.getTypeMutability(), actual.getTypeMutability(), null, f));
-        }
-
-        if ((expected.getPropertyDefinitions() != null) && (actual.getPropertyDefinitions() != null)) {
-            Map<String, PropertyDefinition<?>> epd = expected.getPropertyDefinitions();
-            Map<String, PropertyDefinition<?>> apd = actual.getPropertyDefinitions();
-
-            f = createResult(FAILURE, "Different number of property defintions!");
-            addResult(results, assertEquals(epd.size(), apd.size(), null, f));
-
-            for (PropertyDefinition<?> pd : epd.values()) {
-                f = createResult(FAILURE, "Property definition mismatch: " + pd.getId());
-                addResult(results, assertEquals(pd, apd.get(pd.getId()), null, f));
-            }
-        }
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(PropertyDefinition<?> expected, PropertyDefinition<?> actual,
-            CmisTestResult success, CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected property defintion is null, but actual property defintion is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual property defintion is null, but expected property defintion is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Property ids don't match!");
-        addResult(results, assertEquals(expected.getId(), actual.getId(), null, f));
-
-        f = createResult(FAILURE, "Local names don't match!");
-        addResult(results, assertEquals(expected.getLocalName(), actual.getLocalName(), null, f));
-
-        f = createResult(FAILURE, "Local namespaces don't match!");
-        addResult(results, assertEquals(expected.getLocalNamespace(), actual.getLocalNamespace(), null, f));
-
-        f = createResult(FAILURE, "Display names don't match!");
-        addResult(results, assertEquals(expected.getDisplayName(), actual.getDisplayName(), null, f));
-
-        f = createResult(FAILURE, "Query names don't match!");
-        addResult(results, assertEquals(expected.getQueryName(), actual.getQueryName(), null, f));
-
-        f = createResult(FAILURE, "Property types don't match!");
-        addResult(results, assertEquals(expected.getPropertyType(), actual.getPropertyType(), null, f));
-
-        f = createResult(FAILURE, "Cardinalities don't match!");
-        addResult(results, assertEquals(expected.getCardinality(), actual.getCardinality(), null, f));
-
-        f = createResult(FAILURE, "Descriptions don't match!");
-        addResult(results, assertEquals(expected.getDescription(), actual.getDescription(), null, f));
-
-        f = createResult(FAILURE, "Updatability flags don't match!");
-        addResult(results, assertEquals(expected.getUpdatability(), actual.getUpdatability(), null, f));
-
-        f = createResult(FAILURE, "Default values don't match!");
-        addResult(results, assertEqualLists(expected.getDefaultValue(), actual.getDefaultValue(), null, f));
-
-        f = createResult(FAILURE, "Inherited flags don't match!");
-        addResult(results, assertEquals(expected.isInherited(), actual.isInherited(), null, f));
-
-        f = createResult(FAILURE, "Required flags don't match!");
-        addResult(results, assertEquals(expected.isRequired(), actual.isRequired(), null, f));
-
-        f = createResult(FAILURE, "Queryable flags don't match!");
-        addResult(results, assertEquals(expected.isQueryable(), actual.isQueryable(), null, f));
-
-        f = createResult(FAILURE, "Orderable flags don't match!");
-        addResult(results, assertEquals(expected.isOrderable(), actual.isOrderable(), null, f));
-
-        f = createResult(FAILURE, "Open choice flags don't match!");
-        addResult(results, assertEquals(expected.isOpenChoice(), actual.isOpenChoice(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(CmisObject expected, CmisObject actual, CmisTestResult success,
-            CmisTestResult failure, boolean checkAcls, boolean checkPolicies) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected object is null, but actual object is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual object is null, but expected object is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (expected.getProperties().size() != actual.getProperties().size()) {
-            f = createResult(FAILURE, "Number of properties don't match");
-            addResult(results, assertEquals(expected.getProperties().size(), actual.getProperties().size(), null, f));
-        } else {
-            for (Property<?> expectedProperty : expected.getProperties()) {
-                Property<?> actualProperty = actual.getProperty(expectedProperty.getId());
-
-                f = createResult(FAILURE, "Properties don't match! Property: " + expectedProperty.getId());
-                addResult(results, assertEquals(expectedProperty, actualProperty, null, f));
-            }
-        }
-
-        f = createResult(FAILURE, "Allowable actions don't match!");
-        addResult(results, assertEquals(expected.getAllowableActions(), actual.getAllowableActions(), null, f));
-
-        if (checkAcls) {
-            f = createResult(FAILURE, "ACLs don't match!");
-            addResult(results, assertEquals(expected.getAcl(), actual.getAcl(), null, f));
-        }
-
-        if (checkPolicies) {
-            f = createResult(FAILURE, "Policies don't match!");
-            addResult(results, assertEqualObjectList(expected.getPolicies(), actual.getPolicies(), null, f));
-        }
-
-        f = createResult(FAILURE, "Relationships don't match!");
-        addResult(results, assertEqualObjectList(expected.getRelationships(), actual.getRelationships(), null, f));
-
-        f = createResult(FAILURE, "Renditions don't match!");
-        addResult(results, assertEqualRenditionLists(expected.getRenditions(), actual.getRenditions(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEqualObjectList(List<? extends CmisObject> expected,
-            List<? extends CmisObject> actual, CmisTestResult success, CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected list of CMIS objects is null, but actual list of CMIS objects is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual list of CMIS objects is null, but expected list of CMIS objects is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (expected.size() != actual.size()) {
-            addResult(
-                    results,
-                    createResult(
-                            CmisTestResultStatus.INFO,
-                            "Object list sizes don't match! expected: " + expected.size() + " / actual: "
-                                    + actual.size()));
-        } else {
-            for (int i = 0; i < expected.size(); i++) {
-                f = createResult(FAILURE, "Objects at position " + i + "  dont't match!");
-                addResult(results, assertEquals(expected.get(i), actual.get(i), null, f, true, false));
-            }
-        }
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(Property<?> expected, Property<?> actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected property is null, but actual property is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual property is null, but expected property is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Property definitions don't match!");
-        addResult(results, assertEquals(expected.getDefinition(), actual.getDefinition(), null, f));
-
-        f = createResult(FAILURE, "Property values don't match!");
-        addResult(results, assertEqualLists(expected.getValues(), actual.getValues(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(AllowableActions expected, AllowableActions actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected allowable actions are null, but actual allowable actions are not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual allowable actions are null, but expected allowable actions are not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Allowable action sets don't match!");
-        addResult(results, assertEqualSet(expected.getAllowableActions(), actual.getAllowableActions(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(Acl expected, Acl actual, CmisTestResult success, CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected ACL is null, but actual ACL is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual ACL is null, but expected ACL is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "ACEs don't match!");
-        addResult(results, assertEqualAceLists(expected.getAces(), actual.getAces(), null, f));
-
-        f = createResult(FAILURE, "Exact flags dont't match!");
-        addResult(results, assertEquals(expected.isExact(), actual.isExact(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEqualAceLists(List<Ace> expected, List<Ace> actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (expected == null && actual == null) {
-            return success;
-        }
-
-        if (expected == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected ACE list is null!"));
-        }
-
-        if (actual == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual ACE list is null!"));
-        }
-
-        if (expected.size() != actual.size()) {
-            addResult(
-                    results,
-                    createResult(CmisTestResultStatus.INFO, "ACE list sizes don't match! expected: " + expected.size()
-                            + " / actual: " + actual.size()));
-        } else {
-            for (int i = 0; i < expected.size(); i++) {
-                f = createResult(FAILURE, "ACEs at position " + i + "  dont't match!");
-                addResult(results, assertEquals(expected.get(i), actual.get(i), null, f));
-            }
-        }
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(Ace expected, Ace actual, CmisTestResult success, CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected ACE is null, but actual ACE is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual ACE is null, but expected ACE is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Principal ids dont't match!");
-        addResult(results, assertEquals(expected.getPrincipalId(), actual.getPrincipalId(), null, f));
-
-        f = createResult(FAILURE, "Permissions dont't match!");
-        addResult(results, assertEqualLists(expected.getPermissions(), actual.getPermissions(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEqualRenditionLists(List<Rendition> expected, List<Rendition> actual,
-            CmisTestResult success, CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (expected == null && actual == null) {
-            return success;
-        }
-
-        if (expected == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected rendition list is null!"));
-        }
-
-        if (actual == null) {
-            return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual rendition list is null!"));
-        }
-
-        if (expected.size() != actual.size()) {
-            addResult(
-                    results,
-                    createResult(
-                            CmisTestResultStatus.INFO,
-                            "Rendition list sizes don't match! expected: " + expected.size() + " / actual: "
-                                    + actual.size()));
-        } else {
-            for (int i = 0; i < expected.size(); i++) {
-                f = createResult(FAILURE, "Renditions at position " + i + "  dont't match!");
-                addResult(results, assertEquals(expected.get(i), actual.get(i), null, f));
-            }
-        }
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(Rendition expected, Rendition actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected rendition is null, but actual rendition is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual rendition is null, but expected rendition is not!");
-            addResultChild(failure, f);
-
-            return failure;
-        }
-
-        f = createResult(FAILURE, "Stream ids dont't match!");
-        addResult(results, assertEquals(expected.getStreamId(), actual.getStreamId(), null, f));
-
-        f = createResult(FAILURE, "Kinds dont't match!");
-        addResult(results, assertEquals(expected.getKind(), actual.getKind(), null, f));
-
-        f = createResult(FAILURE, "MIME types dont't match!");
-        addResult(results, assertEquals(expected.getMimeType(), actual.getMimeType(), null, f));
-
-        f = createResult(FAILURE, "Titles dont't match!");
-        addResult(results, assertEquals(expected.getTitle(), actual.getTitle(), null, f));
-
-        f = createResult(FAILURE, "Lengths dont't match!");
-        addResult(results, assertEquals(expected.getLength(), actual.getLength(), null, f));
-
-        f = createResult(FAILURE, "Heights dont't match!");
-        addResult(results, assertEquals(expected.getBigHeight(), actual.getBigHeight(), null, f));
-
-        f = createResult(FAILURE, "Widths dont't match!");
-        addResult(results, assertEquals(expected.getBigWidth(), actual.getBigWidth(), null, f));
-
-        f = createResult(FAILURE, "Rendition document ids dont't match!");
-        addResult(results, assertEquals(expected.getRenditionDocumentId(), actual.getRenditionDocumentId(), null, f));
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    protected CmisTestResult assertEquals(ContentStream expected, ContentStream actual, CmisTestResult success,
-            CmisTestResult failure) {
-
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if ((expected == null) && (actual == null)) {
-            return success;
-        }
-
-        if (expected == null) {
-            f = createResult(FAILURE, "Expected stream is null, but actual stream is not!");
-            addResultChild(failure, f);
-
-            IOUtils.closeQuietly(actual);
-
-            return failure;
-        }
-
-        if (actual == null) {
-            f = createResult(FAILURE, "Actual object is null, but expected object is not!");
-            addResultChild(failure, f);
-
-            IOUtils.closeQuietly(expected);
-
-            return failure;
-        }
-
-        f = createResult(WARNING, "Filenames don't match!");
-        addResult(results, assertEquals(expected.getFileName(), actual.getFileName(), null, f));
-
-        f = createResult(FAILURE, "MIME types don't match!");
-        addResult(results, assertEquals(expected.getMimeType(), actual.getMimeType(), null, f));
-
-        f = createResult(WARNING, "Lengths don't match!");
-        addResult(results, assertEquals(expected.getBigLength(), actual.getBigLength(), null, f));
-
-        boolean match = true;
-
-        BufferedInputStream as = new BufferedInputStream(actual.getStream(), 64 * 1024);
-        BufferedInputStream es = new BufferedInputStream(expected.getStream(), 64 * 1024);
-
-        try {
-            int ab = 0;
-            int eb = 0;
-
-            while (true) {
-                if (ab > -1) {
-                    ab = as.read();
-                }
-
-                if (eb > -1) {
-                    eb = es.read();
-                }
-
-                if (ab == -1 && eb == -1) {
-                    break;
-                }
-
-                if (ab != eb) {
-                    match = false;
-                }
-            }
-        } catch (Exception e) {
-            f = createResult(UNEXPECTED_EXCEPTION, e.getMessage(), e, false);
-            addResultChild(failure, f);
-        }
-
-        if (!match) {
-            f = createResult(FAILURE, "Content streams don't match!");
-            addResultChild(failure, f);
-        }
-
-        IOUtils.closeQuietly(as);
-        IOUtils.closeQuietly(es);
-
-        if (getWorst(results).getLevel() <= OK.getLevel()) {
-            for (CmisTestResult result : results) {
-                addResultChild(success, result);
-            }
-
-            return success;
-        } else {
-            for (CmisTestResult result : results) {
-                addResultChild(failure, result);
-            }
-
-            return failure;
-        }
-    }
-
-    // --- helpers ---
-
-    protected void addResult(List<CmisTestResult> results, CmisTestResult result) {
-        if (result != null) {
-            if (result instanceof CmisTestResultImpl) {
-                ((CmisTestResultImpl) result).setStackTrace(getStackTrace());
-            }
-
-            results.add(result);
-            if (result.isFatal()) {
-                throw new FatalTestException(result.getMessage());
-            }
-        }
-    }
-
-    protected CmisTestResultStatus getWorst(List<CmisTestResult> results) {
-        if (isNullOrEmpty(results)) {
-            return CmisTestResultStatus.OK;
-        }
-
-        int max = 0;
-
-        for (CmisTestResult result : results) {
-            if (max < result.getStatus().getLevel()) {
-                max = result.getStatus().getLevel();
-            }
-        }
-
-        return CmisTestResultStatus.fromLevel(max);
-    }
-
-    // --- helper classes ---
-
-    public class CmisPropertyDefintion {
-        private final String id;
-        private final Boolean required;
-        private final PropertyType propertyType;
-        private final Cardinality cardinality;
-        private final Updatability updatability;
-        private final Boolean queryable;
-        private final Boolean orderable;
-
-        public CmisPropertyDefintion(String id, Boolean required, PropertyType propertyType, Cardinality cardinality,
-                Updatability updatability, Boolean queryable, Boolean orderable) {
-            this.id = id;
-            this.required = required;
-            this.propertyType = propertyType;
-            this.cardinality = cardinality;
-            this.updatability = updatability;
-            this.queryable = queryable;
-            this.orderable = (cardinality == Cardinality.MULTI ? Boolean.FALSE : orderable);
-        }
-
-        public CmisTestResult check(TypeDefinition type) {
-            List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-            CmisTestResult f;
-
-            Map<String, PropertyDefinition<?>> propDefs = type.getPropertyDefinitions();
-            if (propDefs == null) {
-                addResult(results, createResult(FAILURE, "Property definitions are missing!"));
-            } else {
-                PropertyDefinition<?> propDef = propDefs.get(id);
-                if (propDef == null) {
-                    addResult(results, createResult(FAILURE, "Property definition is missing!"));
-                } else {
-                    if ((required != null) && !required.equals(propDef.isRequired())) {
-                        f = createResult(FAILURE,
-                                "Required flag: expected: " + required + " / actual: " + propDef.isRequired());
-                        addResult(results, f);
-                    }
-
-                    if (!propertyType.equals(propDef.getPropertyType())) {
-                        f = createResult(FAILURE,
-                                "Property type: expected: " + propertyType + " / actual: " + propDef.getPropertyType());
-                        addResult(results, f);
-                    }
-
-                    if (!cardinality.equals(propDef.getCardinality())) {
-                        f = createResult(FAILURE,
-                                "Cardinality: expected: " + cardinality + " / actual: " + propDef.getCardinality());
-                        addResult(results, f);
-                    }
-
-                    if ((updatability != null) && !updatability.equals(propDef.getUpdatability())) {
-                        f = createResult(FAILURE,
-                                "Updatability: expected: " + updatability + " / actual: " + propDef.getUpdatability());
-                        addResult(results, f);
-                    }
-
-                    if ((queryable != null) && !queryable.equals(propDef.isQueryable())) {
-                        f = createResult(FAILURE,
-                                "Queryable: expected: " + queryable + " / actual: " + propDef.isQueryable());
-                        addResult(results, f);
-                    }
-
-                    boolean isPropertyQueryNameRequired = Boolean.TRUE.equals(queryable);
-                    checkQueryName(propDef.getQueryName(), isPropertyQueryNameRequired, "Property Query Name: "
-                            + propDef.getQueryName());
-
-                    if ((orderable != null) && !orderable.equals(propDef.isOrderable())) {
-                        f = createResult(FAILURE,
-                                "Orderable: expected: " + orderable + " / actual: " + propDef.isOrderable());
-                        addResult(results, f);
-                    }
-
-                    if (type.getBaseTypeId() != null) {
-                        Boolean inherited = !type.getBaseTypeId().value().equals(type.getId());
-                        if (!inherited.equals(propDef.isInherited())) {
-                            f = createResult(FAILURE,
-                                    "Inhertited: expected: " + inherited + " / actual: " + propDef.isInherited());
-                            addResult(results, f);
-                        }
-                    }
-
-                    // data type specific tests
-                    if (propDef instanceof PropertyStringDefinition) {
-                        PropertyStringDefinition stringPropDef = (PropertyStringDefinition) propDef;
-
-                        if (stringPropDef.getMaxLength() != null) {
-                            if (stringPropDef.getMaxLength().signum() == 0) {
-                                f = createResult(WARNING, "Max length is 0!");
-                                addResult(results, f);
-                            } else if (stringPropDef.getMaxLength().signum() == -1) {
-                                f = createResult(FAILURE, "Max length is negative!");
-                                addResult(results, f);
-                            }
-                        }
-                    } else if (propDef instanceof PropertyIntegerDefinition) {
-                        PropertyIntegerDefinition intPropDef = (PropertyIntegerDefinition) propDef;
-
-                        if (intPropDef.getMinValue() != null & intPropDef.getMaxValue() != null) {
-                            if (intPropDef.getMinValue().compareTo(intPropDef.getMaxValue()) == 0) {
-                                f = createResult(WARNING, "Min and max values are equal!");
-                                addResult(results, f);
-                            } else if (intPropDef.getMinValue().compareTo(intPropDef.getMaxValue()) == 1) {
-                                f = createResult(FAILURE, "Min value is greater than max value!");
-                                addResult(results, f);
-                            }
-                        }
-                    } else if (propDef instanceof PropertyDecimalDefinition) {
-                        PropertyDecimalDefinition decPropDef = (PropertyDecimalDefinition) propDef;
-
-                        if (decPropDef.getMinValue() != null & decPropDef.getMaxValue() != null) {
-                            if (decPropDef.getMinValue().compareTo(decPropDef.getMaxValue()) == 0) {
-                                f = createResult(WARNING, "Min and max values are equal!");
-                                addResult(results, f);
-                            } else if (decPropDef.getMinValue().compareTo(decPropDef.getMaxValue()) == 1) {
-                                f = createResult(FAILURE, "Min value is greater than max value!");
-                                addResult(results, f);
-                            }
-                        }
-                    }
-                }
-            }
-
-            CmisTestResultImpl result = createResult(getWorst(results), "Property definition: " + id);
-            result.getChildren().addAll(results);
-
-            return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTestGroup.java
deleted file mode 100644
index 74f1e45..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTestGroup.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-
-/**
- * Base class for test groups that require an OpenCMIS session.
- */
-public abstract class AbstractSessionTestGroup extends AbstractCmisTestGroup {
-    
-    private BindingType getBinding() {
-        if (getParameters() == null) {
-            return null;
-        }
-
-        try {
-            return BindingType.fromValue(getParameters().get(SessionParameter.BINDING_TYPE));
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + " (" + getBinding() + ")";
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/CmisTestResultImpl.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/CmisTestResultImpl.java
deleted file mode 100644
index 54d1327..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/CmisTestResultImpl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-
-/**
- * CmisTestResult implementation.
- */
-public class CmisTestResultImpl implements CmisTestResult {
-    private final String groupName;
-    private final String testName;
-    private final String message;
-    private final CmisTestResultStatus status;
-    private final Throwable exception;
-    private StackTraceElement[] stackTrace;
-    private String url;
-    private String request;
-    private String response;
-    private final List<CmisTestResult> children = new ArrayList<CmisTestResult>();
-    private final boolean isFatal;
-
-    public CmisTestResultImpl(String groupName, String testName, String message, CmisTestResultStatus status,
-            Throwable exception, boolean isFatal) {
-        this.groupName = groupName;
-        this.testName = testName;
-        this.message = message;
-        this.status = status;
-        this.exception = exception;
-        this.isFatal = isFatal;
-    }
-
-    public String getGroupName() {
-        return groupName;
-    }
-
-    public String getTestName() {
-        return testName;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public CmisTestResultStatus getStatus() {
-        return status;
-    }
-
-    public Throwable getException() {
-        return exception;
-    }
-
-    public StackTraceElement[] getStackTrace() {
-        return stackTrace;
-    }
-
-    @SuppressWarnings("PMD.ArrayIsStoredDirectly")
-    public void setStackTrace(StackTraceElement[] stackTrace) {
-        this.stackTrace = stackTrace;
-    }
-
-    public String getRequest() {
-        return request;
-    }
-
-    public void setRequest(String request) {
-        this.request = request;
-    }
-
-    public String getResponse() {
-        return response;
-    }
-
-    public void setResponse(String response) {
-        this.response = response;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public List<CmisTestResult> getChildren() {
-        return children;
-    }
-
-    public boolean isFatal() {
-        return isFatal;
-    }
-
-    @Override
-    public String toString() {
-        return status + ": " + groupName + "/" + testName + ": " + message;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java
deleted file mode 100644
index e388389..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-/**
- * This exception will be thrown if a result is fatal and the test has to be
- * stopped.
- */
-public class FatalTestException extends RuntimeException {
-    private static final long serialVersionUID = 1L;
-
-    public FatalTestException() {
-        super();
-    }
-
-    public FatalTestException(String msg) {
-        super(msg);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java
deleted file mode 100644
index 14fe5e1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import java.io.File;
-import java.io.PrintWriter;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.report.TextReport;
-import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
-import org.junit.Assert;
-
-public final class JUnitHelper {
-
-    public static final String JUNIT_PARAMETERS = "org.apache.chemistry.opencmis.tck.junit.parameters";
-
-    private JUnitHelper() {
-    }
-
-    public static void run(CmisTest test) throws Exception {
-        run(new WrapperCmisTestGroup(test));
-    }
-
-    public static void run(CmisTestGroup group) throws Exception {
-        JUnitRunner runner = new JUnitRunner();
-
-        String parametersFile = System.getProperty(JUNIT_PARAMETERS);
-        if (parametersFile == null) {
-            runner.setParameters(null);
-        } else {
-            runner.loadParameters(new File(parametersFile));
-        }
-
-        runner.addGroup(group);
-        runner.run(new JUnitProgressMonitor());
-
-        CmisTestReport report = new TextReport();
-        report.createReport(runner.getParameters(), runner.getGroups(), new PrintWriter(System.out));
-
-        checkForFailures(runner);
-    }
-
-    private static void checkForFailures(JUnitRunner runner) {
-        for (CmisTestGroup group : runner.getGroups()) {
-            for (CmisTest test : group.getTests()) {
-                for (CmisTestResult result : test.getResults()) {
-                    if (result.getStatus().getLevel() >= CmisTestResultStatus.FAILURE.getLevel()) {
-                        Assert.fail(result.getMessage());
-                    }
-                }
-            }
-        }
-    }
-
-    private static class JUnitRunner extends AbstractRunner {
-    }
-
-    private static class JUnitProgressMonitor implements CmisTestProgressMonitor {
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void startGroup(CmisTestGroup group) {
-            System.out.println(group.getName() + " (" + group.getTests().size() + " tests)");
-        }
-
-        public void endGroup(CmisTestGroup group) {
-        }
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void startTest(CmisTest test) {
-            System.out.println("  " + test.getName());
-        }
-
-        public void endTest(CmisTest test) {
-        }
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void message(String msg) {
-            System.out.println(msg);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java
deleted file mode 100644
index d8ff439..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-public enum PropertyCheckEnum {
-    NO_VALUE_CHECK, MUST_NOT_BE_SET, MUST_BE_SET, STRING_SHOULD_NOT_BE_EMPTY, STRING_MUST_NOT_BE_EMPTY
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/TestParameters.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/TestParameters.java
deleted file mode 100644
index a150778..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/TestParameters.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-public final class TestParameters {
-
-    public static final String DEFAULT_FOLDER_TYPE = "org.apache.chemistry.opencmis.tck.default.folderType";
-    public static final String DEFAULT_FOLDER_TYPE_VALUE = "cmis:folder";
-
-    public static final String DEFAULT_DOCUMENT_TYPE = "org.apache.chemistry.opencmis.tck.default.documentType";
-    public static final String DEFAULT_DOCUMENT_TYPE_VALUE = "cmis:document";
-
-    public static final String DEFAULT_RELATIONSHIP_TYPE = "org.apache.chemistry.opencmis.tck.default.relationshipType";
-    public static final String DEFAULT_RELATIONSHIP_TYPE_VALUE = "cmis:relationship";
-
-    public static final String DEFAULT_ITEM_TYPE = "org.apache.chemistry.opencmis.tck.default.itemType";
-    public static final String DEFAULT_ITEM_TYPE_VALUE = "cmis:item";
-
-    public static final String DEFAULT_SECONDARY_TYPE = "org.apache.chemistry.opencmis.tck.default.secondaryType";
-    public static final String DEFAULT_SECONDARY_TYPE_VALUE = "cmis:secondary";
-
-    public static final String DEFAULT_TEST_FOLDER_PARENT = "org.apache.chemistry.opencmis.tck.default.testFolderParent";
-    public static final String DEFAULT_TEST_FOLDER_PARENT_VALUE = "/";
-
-    public static final String DEFAULT_ACL_PRINCIPAL = "org.apache.chemistry.opencmis.tck.default.principal";
-    public static final String DEFAULT_ACL_PRINCIPAL_VALUE = "cmis:user";
-
-    private TestParameters() {
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/WrapperCmisTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/WrapperCmisTestGroup.java
deleted file mode 100644
index 77dc42d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/WrapperCmisTestGroup.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.impl;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-
-/**
- * Helper group implementation that just hold one test.
- */
-public class WrapperCmisTestGroup extends AbstractCmisTestGroup {
-    private final CmisTest test;
-
-    public WrapperCmisTestGroup(CmisTest test) {
-        if (test == null) {
-            throw new IllegalArgumentException("Test is null!");
-        }
-
-        this.test = test;
-    }
-
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        addTest(test);
-        setName("Wrapper Group: " + test.getName());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/AbstractCmisTestReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/AbstractCmisTestReport.java
deleted file mode 100644
index 5efdc70..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/AbstractCmisTestReport.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.report;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-
-/**
- * Base class for reports.
- */
-public abstract class AbstractCmisTestReport implements CmisTestReport {
-
-    public abstract void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
-            throws Exception;
-
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, File file) throws Exception {
-        Writer writer = new OutputStreamWriter(new FileOutputStream(file), IOUtils.UTF8);
-        try {
-            createReport(parameters, groups, writer);
-        } finally {
-            IOUtils.closeQuietly(writer);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java
deleted file mode 100644
index 29c8b2c..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.report;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
-
-/**
- * HTML Report without header and footer.
- */
-public class CoreHtmlReport extends AbstractCmisTestReport {
-
-    private int stackTraceCounter;
-    private String revision;
-
-    public CoreHtmlReport() {
-    }
-
-    @Override
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
-            throws IOException {
-        stackTraceCounter = 0;
-        if (parameters != null) {
-            revision = parameters.get(AbstractRunner.TCK_REVISION_PARAMETER);
-        }
-
-        writer.write("<h1>OpenCMIS TCK Report</h1>\n");
-        writer.write((new Date()) + "\n");
-
-        writer.write("\n<h2>Parameters</h2>\n");
-
-        if (parameters != null) {
-            writer.write("<table>\n");
-            for (Map.Entry<String, String> p : (new TreeMap<String, String>(parameters)).entrySet()) {
-                String value = p.getValue();
-                if (SessionParameter.PASSWORD.endsWith(p.getKey())) {
-                    value = "*****";
-                }
-
-                writer.write("<tr><td>" + escape(p.getKey()) + "</td><td>" + escape(value) + "</td></tr>\n");
-            }
-            writer.write("</table>\n");
-        }
-
-        writer.write("\n<h2>Groups</h2>\n");
-
-        if (groups != null) {
-            for (CmisTestGroup group : groups) {
-                printGroupResults(group, writer);
-            }
-        }
-
-        writer.flush();
-    }
-
-    public static void printStyle(Writer writer) throws IOException {
-        writer.write("<style type=\"text/css\">\n");
-        writer.write("body { font-family: sans-serif; }\n");
-        writer.write(".tckResultINFO { margin-left: 10px; margin-right: 10px; padding: 2px; }\n");
-        writer.write(".tckResultSKIPPED { margin-left: 10px; margin-right: 10px; padding: 2px; background-color: #FFFFFF; }\n");
-        writer.write(".tckResultOK { margin-left: 10px; margin-right: 5px; padding: 2px; background-color: #00FF00; }\n");
-        writer.write(".tckResultWARNING { margin-left: 10px; margin-right: 10px; padding: 2px; background-color: #FFFF00; }\n");
-        writer.write(".tckResultFAILURE { margin-left: 10px; margin-right: 10px; padding: 2px; background-color: #FF6000; }\n");
-        writer.write(".tckResultUNEXPECTED_EXCEPTION { margin-left: 10px; margin-right: 10px; padding: 2px; background-color: #FF0000; }\n");
-        writer.write(".tckTraceLink { cursor: pointer; text-decoration: underline; }\n");
-        writer.write(".tckTrace { margin-left: 10px; margin-right: 10px; padding: 2px; border:2px solid #777777; background-color: #DDDDDD; }\n");
-        writer.write("</style>\n");
-    }
-
-    public static void printJavaScript(Writer writer) throws IOException {
-        writer.write("<script type=\"text/javascript\">\n");
-        writer.write("function tckToggleDisplay(id) {\n");
-        writer.write("(function(style) { style.display = style.display === 'none' ? '' : 'none'; })(document.getElementById(id).style);\n");
-        writer.write("}\n");
-        writer.write("</script>\n");
-    }
-
-    private void printGroupResults(CmisTestGroup group, Writer writer) throws IOException {
-        if (!group.isEnabled()) {
-            return;
-        }
-
-        writer.write("\n<hr>\n<h3>" + escape(group.getName()) + "</h3>\n");
-
-        if (group.getDescription() != null) {
-            writer.write("\n<p><i>" + escape(group.getDescription()) + "</i></p>\n");
-        }
-
-        if (group.getTests() != null) {
-            for (CmisTest test : group.getTests()) {
-                printTestResults(test, writer);
-            }
-        }
-    }
-
-    private void printTestResults(CmisTest test, Writer writer) throws IOException {
-        if (!test.isEnabled()) {
-            return;
-        }
-
-        writer.write("\n<h4>" + escape(test.getName()) + " (" + test.getTime() + " ms)</h4>\n");
-
-        if (test.getDescription() != null) {
-            writer.write("\n<p><i>" + escape(test.getDescription()) + "</i></p>\n");
-        }
-
-        if (test.getResults() != null) {
-            for (CmisTestResult result : test.getResults()) {
-                writer.write("<div style=\"padding: 5px;\">\n");
-                printResult(result, writer);
-                writer.write("</div>\n");
-            }
-        }
-    }
-
-    private void printResult(CmisTestResult result, Writer writer) throws IOException {
-        stackTraceCounter++;
-        String stackTraceId = "tckTrace" + stackTraceCounter;
-        String exceptionId = "tckException" + stackTraceCounter;
-
-        boolean hasStackTrace = result.getStackTrace() != null && result.getStackTrace().length > 0;
-        boolean hasException = result.getStatus() == CmisTestResultStatus.UNEXPECTED_EXCEPTION
-                && result.getException() != null;
-
-        writer.write("<div class=\"tckResult" + result.getStatus().name() + "\">\n");
-
-        writer.write("<b>" + result.getStatus() + "</b>: " + escape(result.getMessage()));
-
-        if (hasStackTrace) {
-            writer.write(" (" + getSourceCodeLink(result.getStackTrace()[0], revision) + ")");
-            writer.write(" [<span class=\"tckTraceLink\" onClick=\"tckToggleDisplay('" + stackTraceId
-                    + "');\">stacktrace</span>]");
-        }
-
-        if (hasException) {
-            writer.write(" [<span class=\"tckTraceLink\" onClick=\"tckToggleDisplay('" + exceptionId
-                    + "');\">exception details</span>]");
-        }
-
-        writer.write("<br/>\n");
-
-        if (hasStackTrace) {
-            writer.write("<div class=\"tckTrace\" id=\"" + stackTraceId + "\" style=\"display:none\">\n");
-
-            for (StackTraceElement ste : result.getStackTrace()) {
-                if (AbstractRunner.class.getName().equals(ste.getClassName())) {
-                    break;
-                }
-                writer.write(ste.getClassName() + "." + ste.getMethodName() + "(" + getSourceCodeLink(ste, revision)
-                        + ")<br/>\n");
-            }
-
-            writer.write("</div>\n");
-        }
-
-        if (hasException) {
-            writer.write("<div class=\"tckTrace\" id=\"" + exceptionId + "\" style=\"display:none\">\n");
-            writer.write("<b>Exception stack trace:</b><br/><br/>\n");
-
-            for (StackTraceElement ste : result.getException().getStackTrace()) {
-                if (AbstractRunner.class.getName().equals(ste.getClassName())) {
-                    break;
-                }
-                writer.write(ste.getClassName() + "." + ste.getMethodName() + "(" + getSourceCodeLink(ste, revision)
-                        + ")<br/>\n");
-            }
-
-            if (result.getException() instanceof CmisBaseException) {
-                CmisBaseException cbe = (CmisBaseException) result.getException();
-                if (cbe.getErrorContent() != null) {
-                    writer.write("<br/>\n<b>Error content:</b><br/><br/><pre>\n");
-                    writer.write(escape(cbe.getErrorContent()) + "</pre>\n");
-                }
-            }
-
-            writer.write("</div>\n");
-        }
-
-        for (CmisTestResult child : result.getChildren()) {
-            printResult(child, writer);
-        }
-
-        writer.write("</div>\n");
-    }
-
-    protected String getSourceCodeLink(StackTraceElement ste, String revision) {
-        StringBuilder result = new StringBuilder();
-
-        if (!ste.getClassName().startsWith("org.apache.chemistry.opencmis.tck.")) {
-            result.append(escape(ste.getFileName()));
-            if (ste.getLineNumber() > 0) {
-                result.append(':');
-                result.append(ste.getLineNumber());
-            }
-        } else {
-            result.append("<a href=\"https://svn.apache.org/viewvc/chemistry/opencmis/trunk/"
-                    + "chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/");
-            result.append(ste.getClassName().replaceAll("\\.", "/"));
-            result.append(".java?view=markup");
-            if (revision != null) {
-                result.append("&revision=");
-                result.append(revision);
-            }
-            if (ste.getLineNumber() > 0) {
-                result.append("#l");
-                result.append(ste.getLineNumber());
-            }
-
-            result.append("\" target=\"_blank\">");
-
-            result.append(escape(ste.getFileName()));
-            if (ste.getLineNumber() > 0) {
-                result.append(':');
-                result.append(ste.getLineNumber());
-            }
-
-            result.append("</a>");
-        }
-        return result.toString();
-    }
-
-    protected String escape(String s) {
-        if (s == null) {
-            return "";
-        }
-
-        StringBuilder sb = new StringBuilder();
-
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            switch (c) {
-            case '\"':
-                sb.append("&quot;");
-                break;
-            case '&':
-                sb.append("&amp;");
-                break;
-            case '<':
-                sb.append("&lt;");
-                break;
-            case '>':
-                sb.append("&gt;");
-                break;
-            default:
-                sb.append(c);
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
deleted file mode 100644
index 29863c1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.report;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-
-/**
- * HTML Report.
- */
-public class HtmlReport extends CoreHtmlReport {
-    public HtmlReport() {
-    }
-
-    @Override
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
-            throws IOException {
-        writer.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n");
-        writer.write("<html><head>\n<title>OpenCMIS TCK Report</title>\n");
-        printStyle(writer);
-        printJavaScript(writer);
-        writer.write("</head><body>\n");
-
-        super.createReport(parameters, groups, writer);
-
-        writer.write("\n</body></html>\n");
-        writer.flush();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java
deleted file mode 100644
index 86a5f19..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.report;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-
-/**
- * Text Report.
- */
-public class TextReport extends AbstractCmisTestReport {
-    public static final String NL = System.getProperty("line.separator");
-
-    public TextReport() {
-
-    }
-
-    @Override
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
-            throws IOException {
-        writer.write("***************************************************************" + NL);
-        writer.write("Test Report: " + (new Date()) + NL);
-
-        writer.write("***************************************************************" + NL);
-        if (parameters != null) {
-            for (Map.Entry<String, String> p : (new TreeMap<String, String>(parameters)).entrySet()) {
-                writer.write(p.getKey() + " = " + p.getValue() + NL);
-            }
-        }
-        writer.write("***************************************************************" + NL);
-
-        if (groups != null) {
-            for (CmisTestGroup group : groups) {
-                printGroupResults(group, writer);
-            }
-        }
-
-        writer.flush();
-    }
-
-    private void printGroupResults(CmisTestGroup group, Writer writer) throws IOException {
-        if (!group.isEnabled()) {
-            return;
-        }
-
-        writer.write("===============================================================" + NL);
-        writer.write(group.getName() + NL);
-        writer.write("===============================================================" + NL);
-
-        if (group.getTests() != null) {
-            for (CmisTest test : group.getTests()) {
-                printTestResults(test, writer);
-            }
-        }
-    }
-
-    private void printTestResults(CmisTest test, Writer writer) throws IOException {
-        if (!test.isEnabled()) {
-            return;
-        }
-
-        writer.write("---------------------------------------------------------------" + NL);
-        writer.write(test.getName() + " (" + test.getTime() + " ms)" + NL);
-        writer.write("---------------------------------------------------------------" + NL + NL);
-
-        if (test.getResults() != null) {
-            for (CmisTestResult result : test.getResults()) {
-                printResult(1, result, writer);
-                writer.write(NL);
-            }
-        }
-
-        writer.write(NL);
-    }
-
-    private void printResult(int level, CmisTestResult result, Writer writer) throws IOException {
-        printIntend(level, writer);
-        writer.write(result.getStatus() + ": " + result.getMessage());
-
-        if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
-            writer.write(" (" + result.getStackTrace()[0].getFileName() + ":"
-                    + result.getStackTrace()[0].getLineNumber() + ")");
-        }
-
-        writer.write(NL);
-
-        if (result.getStatus() == CmisTestResultStatus.UNEXPECTED_EXCEPTION && result.getException() != null) {
-            writer.write(NL + "Stacktrace:" + NL + NL);
-            result.getException().printStackTrace(new PrintWriter(writer));
-
-            if (result.getException() instanceof CmisBaseException) {
-                CmisBaseException cbe = (CmisBaseException) result.getException();
-                if (cbe.getErrorContent() != null) {
-                    writer.write(NL + "Error Content:" + NL + NL);
-                    writer.write(cbe.getErrorContent());
-                }
-            }
-        }
-
-        if (result.getException() != null) {
-            printIntend(level, writer);
-            writer.write("Exception: " + result.getException().getMessage() + NL);
-        }
-
-        if (result.getRequest() != null) {
-            printIntend(level, writer);
-            writer.write("Request: " + result.getRequest() + NL);
-        }
-
-        if (result.getRequest() != null) {
-            printIntend(level, writer);
-            writer.write("Response: " + result.getRequest() + NL);
-        }
-
-        for (CmisTestResult child : result.getChildren()) {
-            printResult(level + 1, child, writer);
-        }
-    }
-
-    private void printIntend(int x, Writer writer) throws IOException {
-        for (int i = 0; i < x; i++) {
-            writer.write("  ");
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java
deleted file mode 100644
index 5abe250..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.report;
-
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-
-/**
- * XML Report.
- */
-public class XmlReport extends AbstractCmisTestReport {
-    private static final String TAG_REPORT = "report";
-    private static final String TAG_PARAMETERS = "parameters";
-    private static final String TAG_PARAMETER = "parameter";
-    private static final String TAG_GROUP = "group";
-    private static final String TAG_TEST = "test";
-    private static final String TAG_RESULT = "result";
-
-    private static final String ATTR_KEY = "key";
-    private static final String ATTR_VALUE = "value";
-    private static final String ATTR_NAME = "name";
-    private static final String ATTR_TIME = "time";
-    private static final String ATTR_STATUS = "status";
-    private static final String ATTR_MESSAGE = "message";
-
-    public XmlReport() {
-    }
-
-    @Override
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
-            throws Exception {
-        XMLOutputFactory factory = XMLOutputFactory.newInstance();
-        XMLStreamWriter xml = factory.createXMLStreamWriter(writer);
-
-        // start doc
-        xml.writeStartDocument();
-
-        xml.writeStartElement(TAG_REPORT);
-
-        if (parameters != null) {
-            xml.writeStartElement(TAG_PARAMETERS);
-
-            for (Map.Entry<String, String> p : (new TreeMap<String, String>(parameters)).entrySet()) {
-                xml.writeStartElement(TAG_PARAMETER);
-                xml.writeAttribute(ATTR_KEY, p.getKey());
-                if (p.getValue() != null) {
-                    xml.writeAttribute(ATTR_VALUE, p.getValue());
-                }
-                xml.writeEndElement();
-            }
-
-            xml.writeEndElement();
-        }
-
-        if (groups != null) {
-            for (CmisTestGroup group : groups) {
-                printGroupResults(group, xml);
-            }
-        }
-
-        xml.writeEndElement();
-
-        // end document
-        xml.writeEndDocument();
-        xml.flush();
-    }
-
-    private void printGroupResults(CmisTestGroup group, XMLStreamWriter xml) throws Exception {
-        if (!group.isEnabled()) {
-            return;
-        }
-
-        xml.writeStartElement(TAG_GROUP);
-        xml.writeAttribute(ATTR_NAME, group.getName());
-
-        if (group.getTests() != null) {
-            for (CmisTest test : group.getTests()) {
-                printTestResults(test, xml);
-            }
-        }
-
-        xml.writeEndElement();
-    }
-
-    private void printTestResults(CmisTest test, XMLStreamWriter xml) throws Exception {
-        if (!test.isEnabled()) {
-            return;
-        }
-
-        xml.writeStartElement(TAG_TEST);
-        xml.writeAttribute(ATTR_NAME, test.getName());
-        xml.writeAttribute(ATTR_TIME, "" + test.getTime());
-
-        if (test.getResults() != null) {
-            for (CmisTestResult result : test.getResults()) {
-                printResult(result, xml);
-            }
-        }
-
-        xml.writeEndElement();
-    }
-
-    private void printResult(CmisTestResult result, XMLStreamWriter xml) throws Exception {
-        xml.writeStartElement(TAG_RESULT);
-        xml.writeAttribute(ATTR_STATUS, result.getStatus().toString());
-        xml.writeAttribute(ATTR_MESSAGE, result.getMessage());
-
-        for (CmisTestResult child : result.getChildren()) {
-            printResult(child, xml);
-        }
-
-        xml.writeEndElement();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/AbstractRunner.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/AbstractRunner.java
deleted file mode 100644
index 52620e0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/AbstractRunner.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.runner;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.impl.WrapperCmisTestGroup;
-
-/**
- * Base class for runners.
- */
-public abstract class AbstractRunner {
-
-    public static final String OVERRIDE_KEY = "org.apache.chemistry";
-    public static final String DEFAULT_TCK_GROUPS = "/cmis-tck-groups.txt";
-    public static final String TCK_BUILD_TIMESTAMP = "/META-INF/build-timestamp.txt";
-    public static final String TCK_BUILD_TIMESTAMP_PARAMETER = "org.apache.chemistry.opencmis.tck.timestamp";
-    public static final String TCK_REVISION = "/META-INF/tck-revision.txt";
-    public static final String TCK_REVISION_PARAMETER = "org.apache.chemistry.opencmis.tck.revision";
-
-    private Map<String, String> parameters;
-    private final List<CmisTestGroup> groups = new ArrayList<CmisTestGroup>();
-    private boolean isCanceled = false;
-
-    // --- parameters ---
-
-    public void setParameters(Map<String, String> orgParameters) {
-        this.parameters = new HashMap<String, String>();
-        if (orgParameters != null) {
-            this.parameters.putAll(orgParameters);
-        }
-
-        // override with system properties
-        for (Object key : System.getProperties().keySet()) {
-            if (!key.toString().startsWith(OVERRIDE_KEY)) {
-                continue;
-            }
-
-            parameters.put(key.toString(), System.getProperties().getProperty(key.toString()));
-        }
-
-        // set TCK build timestamp and revision
-        parameters.put(TCK_BUILD_TIMESTAMP_PARAMETER, loadTCKTimestamp());
-        String revision = loadTCKRevision();
-        if (revision != null) {
-            parameters.put(TCK_REVISION_PARAMETER, revision);
-        }
-    }
-
-    public void loadParameters(File file) throws IOException {
-        if (file == null || !file.isFile()) {
-            throw new IllegalArgumentException("File not found!");
-        }
-
-        loadParameters(new FileInputStream(file));
-    }
-
-    public void loadParameters(InputStream stream) throws IOException {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream is null!");
-        }
-
-        setParameters(IOUtils.readAllLinesAsMap(stream));
-    }
-
-    public Map<String, String> getParameters() {
-        return parameters;
-    }
-
-    private String loadTCKTimestamp() {
-        InputStream stream = getClass().getResourceAsStream(TCK_BUILD_TIMESTAMP);
-
-        if (stream != null) {
-            try {
-                return IOUtils.readAllLines(stream);
-            } catch (IOException e) {
-                return "";
-            }
-        }
-
-        return "";
-    }
-
-    private String loadTCKRevision() {
-        InputStream stream = getClass().getResourceAsStream(TCK_REVISION);
-
-        if (stream != null) {
-            try {
-                String revStr = IOUtils.readFirstLine(stream);
-                return String.valueOf(Integer.parseInt(revStr.trim()));
-            } catch (NumberFormatException e) {
-                return null;
-            } catch (IOException e) {
-                return null;
-            }
-        }
-
-        return null;
-    }
-
-    // --- groups ---
-
-    public void loadDefaultTckGroups() throws Exception {
-        loadGroups(this.getClass().getResourceAsStream(DEFAULT_TCK_GROUPS));
-    }
-
-    public void loadGroups(File file) throws Exception {
-        if (file == null || !file.isFile()) {
-            throw new IllegalArgumentException("File not found!");
-        }
-
-        loadGroups(new FileInputStream(file));
-    }
-
-    public void loadGroups(InputStream stream) throws Exception {
-        if (stream == null) {
-            throw new IllegalArgumentException("Stream is null!");
-        }
-
-        for (String groupName : IOUtils.readAllLinesAsList(stream)) {
-            addGroup(groupName);
-        }
-    }
-
-    public void addGroups(String[] groupClasses) throws Exception {
-        if (groupClasses == null) {
-            return;
-        }
-
-        for (String groupClass : groupClasses) {
-            addGroup(groupClass);
-        }
-    }
-
-    public void addGroup(String groupClass) throws Exception {
-        if (groupClass == null) {
-            return;
-        }
-
-        groupClass = groupClass.trim();
-        if (groupClass.length() == 0) {
-            return;
-        }
-
-        Class<?> clazz = ClassLoaderUtil.loadClass(groupClass);
-        Object o = clazz.newInstance();
-        CmisTestGroup group = null;
-
-        if (o instanceof CmisTestGroup) {
-            group = (CmisTestGroup) o;
-        } else if (o instanceof CmisTest) {
-            group = new WrapperCmisTestGroup((CmisTest) o);
-        } else {
-            throw new InstantiationException("Not a CmisTestGroup or CmisTest class!");
-        }
-
-        addGroup(group);
-    }
-
-    public void addGroup(CmisTestGroup group) throws Exception {
-        if (group != null) {
-            group.init(parameters);
-            groups.add(group);
-        }
-    }
-
-    public List<CmisTestGroup> getGroups() {
-        return groups;
-    }
-
-    // --- run ---
-
-    /**
-     * Runs all configured groups.
-     */
-    public void run(CmisTestProgressMonitor monitor) throws Exception {
-        synchronized (this) {
-            isCanceled = false;
-        }
-
-        for (CmisTestGroup group : groups) {
-            synchronized (this) {
-                if (isCanceled) {
-                    break;
-                }
-            }
-
-            if (group == null || !group.isEnabled()) {
-                continue;
-            }
-
-            group.setProgressMonitor(monitor);
-            group.run();
-        }
-    }
-
-    public synchronized boolean isCanceled() {
-        return isCanceled;
-    }
-
-    public synchronized void cancel() {
-        isCanceled = true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/CmisTckAntTask.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/CmisTckAntTask.java
deleted file mode 100644
index 2af0f7c..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/CmisTckAntTask.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.runner;
-
-import java.io.File;
-import java.util.Locale;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-import org.apache.chemistry.opencmis.tck.report.HtmlReport;
-import org.apache.chemistry.opencmis.tck.report.TextReport;
-import org.apache.chemistry.opencmis.tck.report.XmlReport;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * CMIS TCK Ant Task.
- */
-public class CmisTckAntTask extends Task {
-
-    private static final String REPORT_TEXT = "text";
-    private static final String REPORT_XML = "xml";
-    private static final String REPORT_HTML = "html";
-
-    private static final String DEFAULT_REPORT_NAME = "cmis-tck-report";
-
-    private File parameters;
-    private File groups;
-    private File output;
-    private String format;
-
-    @Override
-    public void init() {
-        super.init();
-        parameters = null;
-        groups = null;
-        output = null;
-        format = REPORT_TEXT;
-    }
-
-    public void setParameters(File parameters) {
-        this.parameters = parameters;
-    }
-
-    public void setGroups(File groups) {
-        this.groups = groups;
-    }
-
-    public void setOutput(File output) {
-        this.output = output;
-    }
-
-    public void setFormat(String format) {
-        this.format = format;
-    }
-
-    @Override
-    public void execute() {
-        try {
-            AntRunner runner = new AntRunner();
-
-            if (parameters == null) {
-                runner.setParameters(null);
-            } else {
-                runner.loadParameters(parameters);
-            }
-
-            if (groups == null) {
-                runner.loadDefaultTckGroups();
-            } else {
-                runner.loadGroups(groups);
-            }
-
-            CmisTestReport report = null;
-
-            if (format == null) {
-                report = new TextReport();
-                if (output == null) {
-                    output = new File(DEFAULT_REPORT_NAME + ".txt");
-                }
-            } else {
-                format = format.trim().toLowerCase(Locale.ENGLISH);
-                if (REPORT_TEXT.equals(format)) {
-                    report = new TextReport();
-                    if (output == null) {
-                        output = new File(DEFAULT_REPORT_NAME + ".txt");
-                    }
-                } else if (REPORT_XML.equals(format)) {
-                    report = new XmlReport();
-                    if (output == null) {
-                        output = new File(DEFAULT_REPORT_NAME + ".xml");
-                    }
-                } else if (REPORT_HTML.equals(format)) {
-                    report = new HtmlReport();
-                    if (output == null) {
-                        output = new File(DEFAULT_REPORT_NAME + ".html");
-                    }
-                } else {
-                    throw new BuildException("Unknown format!");
-                }
-            }
-
-            runner.run(new AntProgressMonitor());
-
-            log("CMIS TCK Report: " + output.getAbsolutePath());
-            report.createReport(runner.getParameters(), runner.getGroups(), output);
-        } catch (Exception e) {
-            throw new BuildException("OpenCMIS TCK run failed!", e);
-        }
-    }
-
-    private static class AntRunner extends AbstractRunner {
-
-    }
-
-    private class AntProgressMonitor implements CmisTestProgressMonitor {
-        public void startGroup(CmisTestGroup group) {
-            log(group.getName() + " (" + group.getTests().size() + " tests)");
-        }
-
-        public void endGroup(CmisTestGroup group) {
-        }
-
-        public void startTest(CmisTest test) {
-            log("  " + test.getName());
-        }
-
-        public void endTest(CmisTest test) {
-        }
-
-        public void message(String msg) {
-            log(msg);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/ConsoleRunner.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/ConsoleRunner.java
deleted file mode 100644
index 6bb5228..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/ConsoleRunner.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.runner;
-
-import java.io.File;
-import java.io.PrintWriter;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-import org.apache.chemistry.opencmis.tck.report.TextReport;
-
-/**
- * Console Runner.
- * 
- * This runner can be started for a console and accepts two parameters: OpenCMIS
- * Session parameters file name and group list file name.
- */
-public class ConsoleRunner extends AbstractRunner {
-
-    public ConsoleRunner(String[] args) throws Exception {
-        if (args.length < 1) {
-            setParameters(null);
-        } else {
-            loadParameters(new File(args[0]));
-        }
-
-        if (args.length < 2) {
-            loadDefaultTckGroups();
-        } else {
-            loadGroups(new File(args[1]));
-        }
-
-        run(new ConsoleProgressMonitor());
-
-        CmisTestReport report = new TextReport();
-        report.createReport(getParameters(), getGroups(), new PrintWriter(System.out));
-    }
-
-    private static class ConsoleProgressMonitor implements CmisTestProgressMonitor {
-        
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void startGroup(CmisTestGroup group) {
-            System.out.println(group.getName() + " (" + group.getTests().size() + " tests)");
-        }
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void endGroup(CmisTestGroup group) {
-            System.out.println();
-        }
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void startTest(CmisTest test) {
-            System.out.print('.');
-        }
-
-        public void endTest(CmisTest test) {
-        }
-
-        @SuppressWarnings("PMD.SystemPrintln")
-        public void message(String msg) {
-            System.out.println(msg);
-        }
-    }
-
-    public static void main(String[] args) throws Exception {
-        new ConsoleRunner(args);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/WebRunnerServlet.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/WebRunnerServlet.java
deleted file mode 100644
index 585a872..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/runner/WebRunnerServlet.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.runner;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.report.CoreHtmlReport;
-
-/**
- * Web Runner.
- */
-public class WebRunnerServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-        resp.setContentType("text/html; charset=UTF-8");
-
-        PrintWriter pw = resp.getWriter();
-
-        printHeader(pw);
-
-        pw.println("<h1>OpenCMIS TCK</h1>");
-
-        pw.println("<form action=\"" + req.getRequestURI() + "\" method=\"POST\">");
-        pw.println("<table>");
-        pw.println("<tr><td>AtomPub URL:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.binding.atompub.url\" size=\"50\"></td></tr>");
-        pw.println("<tr><td>Username:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.user\" size=\"50\"></td></tr>");
-        pw.println("<tr><td>Password:</td><td><input type=\"password\" name=\"org.apache.chemistry.opencmis.password\" size=\"50\"></td></tr>");
-        pw.println("<tr><td>Repository Id:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.session.repository.id\" size=\"50\"></td></tr>");
-        pw.println("<tr><td></td><td><input type=\"submit\" value=\"Start TCK\"></td></tr>");
-        pw.println("<input type=\"hidden\" name=\"org.apache.chemistry.opencmis.binding.spi.type\" value=\"atompub\">");
-        pw.println("</form>");
-
-        printFooter(pw);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-        resp.setBufferSize(0);
-        resp.setContentType("text/html; charset=UTF-8");
-
-        PrintWriter pw = resp.getWriter();
-
-        printHeader(pw);
-
-        Map<String, String> parameters = new HashMap<String, String>();
-        for (Map.Entry<String, String[]> entry : ((Map<String, String[]>) req.getParameterMap()).entrySet()) {
-            if ((entry.getValue() == null) || (entry.getValue().length < 1)) {
-                continue;
-            }
-            parameters.put(entry.getKey(), entry.getValue()[0]);
-        }
-
-        try {
-            WebRunner runner = new WebRunner();
-            runner.setParameters(parameters);
-            runner.loadDefaultTckGroups();
-
-            pw.println("<div id=\"progress\">");
-            pw.println("<h1>Running OpenCMIS TCK</h1>");
-
-            runner.run(new WebProgressMonitor(pw));
-
-            pw.println("</div>");
-
-            // let progress div disappear
-            pw.println("<script language=\"javascript\">");
-            pw.println("document.getElementById(\"progress\").style.display = \"none\";");
-            pw.println("</script>");
-
-            (new CoreHtmlReport()).createReport(runner.getParameters(), runner.getGroups(), pw);
-        } catch (Exception e) {
-            pw.println("<h2>Exception</h2>");
-
-            pw.println("\n<pre>");
-            e.printStackTrace(pw);
-            pw.println("\n</pre>");
-        }
-
-        printFooter(pw);
-    }
-
-    protected void printHeader(PrintWriter pw) throws IOException {
-        pw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
-        pw.println("<html><head>\n<title>OpenCMIS TCK</title>");
-        CoreHtmlReport.printStyle(pw);
-        pw.println("</head><body>");
-    }
-
-    protected void printFooter(PrintWriter pw) throws IOException {
-        pw.println("\n</body></html>");
-        pw.flush();
-    }
-
-    private static class WebRunner extends AbstractRunner {
-    }
-
-    private static class WebProgressMonitor implements CmisTestProgressMonitor {
-        private final PrintWriter pw;
-
-        public WebProgressMonitor(PrintWriter pw) {
-            this.pw = pw;
-        }
-
-        public void startGroup(CmisTestGroup group) {
-            pw.println("<h3>" + group.getName() + " (" + group.getTests().size() + " tests)</h3>");
-            pw.flush();
-        }
-
-        public void endGroup(CmisTestGroup group) {
-            pw.println("<br>");
-            pw.flush();
-        }
-
-        public void startTest(CmisTest test) {
-            pw.print("&nbsp;&nbsp;&nbsp;" + test.getName() + " ... ");
-            pw.flush();
-        }
-
-        public void endTest(CmisTest test) {
-            pw.println("completed<br>");
-            pw.flush();
-        }
-
-        public void message(String msg) {
-            pw.println(msg);
-            pw.flush();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/BasicsTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/BasicsTestGroup.java
deleted file mode 100644
index 07112e2..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/BasicsTestGroup.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.basics;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains tests that check the CMIS basics such the repository
- * info or types.
- */
-public class BasicsTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Basics Test Group");
-        setDescription("Basic tests.");
-
-        addTest(new SecurityTest());
-        addTest(new RepositoryInfoTest());
-        addTest(new RootFolderTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RepositoryInfoTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RepositoryInfoTest.java
deleted file mode 100644
index c4b5c05..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RepositoryInfoTest.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.basics;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Repository info test.
- */
-public class RepositoryInfoTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Repository Info Test");
-        setDescription("Gets and checks the repository info.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult success;
-        CmisTestResult failure;
-
-        RepositoryInfo ri = getRepositoryInfo(session);
-
-        // ID
-        success = createResult(OK, "Repository ID: " + ri.getId());
-        failure = createResult(FAILURE, "Repository id is not set!", true);
-        addResult(assertStringNotEmpty(ri.getId(), success, failure));
-
-        // name
-        failure = createResult(FAILURE, "Repository name is not set!");
-        addResult(assertNotNull(ri.getName(), null, failure));
-
-        success = createResult(OK, "Repository name: " + ri.getName());
-        failure = createResult(WARNING, "Repository name is empty!");
-        addResult(assertStringNotEmpty(ri.getName(), success, failure));
-
-        // description
-        failure = createResult(FAILURE, "Repository description is not set!");
-        addResult(assertNotNull(ri.getDescription(), null, failure));
-
-        success = createResult(OK, "Repository description: " + ri.getDescription());
-        failure = createResult(WARNING, "Repository description is empty!");
-        addResult(assertStringNotEmpty(ri.getDescription(), success, failure));
-
-        // vendor
-        failure = createResult(FAILURE, "Vendor name is not set!");
-        addResult(assertStringNotEmpty(ri.getVendorName(), null, failure));
-
-        success = createResult(OK, "Vendor name: " + ri.getVendorName());
-        failure = createResult(WARNING, "Vendor name is empty!");
-        addResult(assertStringNotEmpty(ri.getVendorName(), success, failure));
-
-        // product name
-        failure = createResult(FAILURE, "Product name is not set!");
-        addResult(assertStringNotEmpty(ri.getProductName(), null, failure));
-
-        success = createResult(OK, "Product name: " + ri.getProductName());
-        failure = createResult(WARNING, "Product name is empty!");
-        addResult(assertStringNotEmpty(ri.getProductName(), success, failure));
-
-        // product version
-        failure = createResult(FAILURE, "Product version is not set!");
-        addResult(assertStringNotEmpty(ri.getProductVersion(), null, failure));
-
-        success = createResult(OK, "Product version: " + ri.getProductVersion());
-        failure = createResult(WARNING, "Product version is empty!");
-        addResult(assertStringNotEmpty(ri.getProductVersion(), success, failure));
-
-        // CMIS version supported
-        success = createResult(OK, "CMIS Version Supported: " + ri.getCmisVersionSupported());
-        failure = createResult(FAILURE, "CMIS Version Supported is not set!");
-        addResult(assertStringNotEmpty(ri.getCmisVersionSupported(), success, failure));
-
-        if (!"1.0".equals(ri.getCmisVersionSupported()) && !"1.1".equals(ri.getCmisVersionSupported())) {
-            addResult(createResult(FAILURE, "CMIS Version Supported is neither '1.0' nor '1.1'!"));
-        }
-
-        // root folder
-        success = createResult(OK, "Root folder ID: " + ri.getRootFolderId());
-        failure = createResult(FAILURE, "Root folder ID is not set!");
-        addResult(assertStringNotEmpty(ri.getRootFolderId(), success, failure));
-
-        // thin client URI
-        success = createResult(OK, "Thin client URI: " + ri.getThinClientUri());
-        failure = createResult(WARNING, "Thin client URI is not set!");
-        addResult(assertStringNotEmpty(ri.getThinClientUri(), success, failure));
-
-        if (ri.getThinClientUri() != null && ri.getThinClientUri().length() > 0) {
-            try {
-                HttpURLConnection conn = (HttpURLConnection) (new URL(ri.getThinClientUri())).openConnection();
-
-                conn.connect();
-
-                int responseCode = conn.getResponseCode();
-                failure = createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri()
-                        + "'. HTTP status code: " + responseCode);
-                addResult(assertIsTrue(responseCode >= 200 && responseCode < 400, null, failure));
-
-                conn.disconnect();
-            } catch (Exception e) {
-                addResult(createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri() + "': "
-                        + e.getMessage(), e, false));
-            }
-        }
-
-        // principal ID anonymous
-        success = createResult(OK, "Principal ID anonymous: " + ri.getPrincipalIdAnonymous());
-        failure = createResult(WARNING, "Principal ID anonymous is not set!");
-        addResult(assertStringNotEmpty(ri.getPrincipalIdAnonymous(), success, failure));
-
-        // principal ID anyone
-        success = createResult(OK, "Principal ID anyone: " + ri.getPrincipalIdAnyone());
-        failure = createResult(WARNING, "Principal Id anyone is not set!");
-        addResult(assertStringNotEmpty(ri.getPrincipalIdAnyone(), success, failure));
-
-        // latest change log token
-        success = createResult(OK, "Latest change log token: " + ri.getLatestChangeLogToken());
-        failure = createResult(WARNING, "Latest change log token is not set!");
-        addResult(assertStringNotEmpty(ri.getLatestChangeLogToken(), success, failure));
-
-        // changes incomplete
-        success = createResult(OK, "Changes Incomplete: " + ri.getChangesIncomplete());
-        failure = createResult(WARNING, "Changes Incomplete is not set!");
-        addResult(assertNotNull(ri.getChangesIncomplete(), success, failure));
-
-        // changes on type
-        success = createResult(OK, "Changes on type: " + ri.getChangesOnType());
-        failure = createResult(WARNING, "Changes on type is not set!");
-        addResult(assertNotNull(ri.getChangesOnType(), success, failure));
-
-        if (ri.getChangesOnType() != null) {
-            failure = createResult(WARNING, "Changes on type has more than 4 entries!");
-            addResult(assertIsTrue(ri.getChangesOnType().size() < 5, null, failure));
-        }
-
-        // features
-        if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) {
-            success = createResult(OK, "Repository features exposed.");
-            failure = createResult(OK, "No repository features exposed.");
-            addResult(assertNotNull(ri.getExtensionFeatures(), success, failure));
-
-            if (ri.getExtensionFeatures() != null) {
-                for (ExtensionFeature feature : ri.getExtensionFeatures()) {
-                    failure = createResult(FAILURE, "At least one repository features has no ID!");
-                    addResult(assertStringNotEmpty(feature.getId(), null, failure));
-                }
-            }
-        }
-
-        // capabilities
-        if (ri.getCapabilities() == null) {
-            addResult(createResult(FAILURE, "Capabilities are not set!"));
-        } else {
-            RepositoryCapabilities cap = ri.getCapabilities();
-
-            // ACL capability
-            success = createResult(OK, "ACL capability: " + cap.getAclCapability());
-            failure = createResult(FAILURE, "ACL capability is not set!");
-            addResult(assertNotNull(cap.getAclCapability(), success, failure));
-
-            // changes capability
-            success = createResult(OK, "Changes capability: " + cap.getChangesCapability());
-            failure = createResult(WARNING, "Changes capability is not set!");
-            addResult(assertNotNull(cap.getChangesCapability(), success, failure));
-
-            // content stream updates capability
-            success = createResult(OK, "Content stream updates capability: " + cap.getContentStreamUpdatesCapability());
-            failure = createResult(FAILURE, "Content stream updates is not set!");
-            addResult(assertNotNull(cap.getContentStreamUpdatesCapability(), success, failure));
-
-            // get descendants capability
-            success = createResult(OK, "Get descendants capability: " + cap.isGetDescendantsSupported());
-            failure = createResult(FAILURE, "Get descendants capability is not set!");
-            addResult(assertNotNull(cap.isGetDescendantsSupported(), success, failure));
-
-            // get folder tree capability
-            success = createResult(OK, "Get folder tree capability: " + cap.isGetFolderTreeSupported());
-            failure = createResult(FAILURE, "Get folder tree capability is not set!");
-            addResult(assertNotNull(cap.isGetFolderTreeSupported(), success, failure));
-
-            // multifiling capability
-            success = createResult(OK, "Multifiling capability: " + cap.isMultifilingSupported());
-            failure = createResult(FAILURE, "Multifiling capability is not set!");
-            addResult(assertNotNull(cap.isMultifilingSupported(), success, failure));
-
-            // unfiling capability
-            success = createResult(OK, "Unfiling capability: " + cap.isUnfilingSupported());
-            failure = createResult(FAILURE, "Unfiling capability is not set!");
-            addResult(assertNotNull(cap.isUnfilingSupported(), success, failure));
-
-            // version specific filing capability
-            success = createResult(OK, "Version specific filing capability: " + cap.isVersionSpecificFilingSupported());
-            failure = createResult(FAILURE, "Version specific filing capability is not set!");
-            addResult(assertNotNull(cap.isVersionSpecificFilingSupported(), success, failure));
-
-            // query capability
-            success = createResult(OK, "Query capability: " + cap.getQueryCapability());
-            failure = createResult(FAILURE, "Query capability is not set!");
-            addResult(assertNotNull(cap.getQueryCapability(), success, failure));
-
-            // JOIN capability
-            success = createResult(OK, "JOIN capability: " + cap.getJoinCapability());
-            failure = createResult(FAILURE, "JOIN capability is not set!");
-            addResult(assertNotNull(cap.getJoinCapability(), success, failure));
-
-            // all versions searchable capability
-            success = createResult(OK, "All versions searchable capability: " + cap.isAllVersionsSearchableSupported());
-            failure = createResult(FAILURE, "All versions searchable capability is not set!");
-            addResult(assertNotNull(cap.isAllVersionsSearchableSupported(), success, failure));
-
-            // PWC searchable capability
-            success = createResult(OK, "PWC searchable capability: " + cap.isPwcSearchableSupported());
-            failure = createResult(FAILURE, "PWC searchable capability is not set!");
-            addResult(assertNotNull(cap.isPwcSearchableSupported(), success, failure));
-
-            // PWC updatable capability
-            success = createResult(OK, "PWC updatable capability: " + cap.isPwcUpdatableSupported());
-            failure = createResult(FAILURE, "PWC updatable capability is not set!");
-            addResult(assertNotNull(cap.isPwcUpdatableSupported(), success, failure));
-
-            // renditions capability
-            success = createResult(OK, "Renditions capability: " + cap.getRenditionsCapability());
-            failure = createResult(FAILURE, "Renditions capability is not set!");
-            addResult(assertNotNull(cap.getRenditionsCapability(), success, failure));
-
-            if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) {
-                // new type settable attributes
-                success = createResult(OK, "'New type settable attributes' flags are set.");
-                failure = createResult(WARNING, "'New type settable attributes' flags are not set!");
-                addResult(assertNotNull(cap.getNewTypeSettableAttributes(), success, failure));
-
-                // creatable property types
-                success = createResult(OK, "'Creatable property types' flags are set.");
-                failure = createResult(WARNING, "'Creatable property types' flags are not set!");
-                addResult(assertNotNull(cap.getCreatablePropertyTypes(), success, failure));
-            }
-        }
-
-        // ACL capabilities
-        if (ri.getAclCapabilities() == null) {
-            addResult(createResult(WARNING, "ACL capabilities are not set!"));
-        } else {
-            AclCapabilities aclCap = ri.getAclCapabilities();
-
-            // supported permissions
-            success = createResult(OK, "Supported permissions: " + aclCap.getSupportedPermissions());
-            failure = createResult(WARNING, "Supported permissions are not set!");
-            addResult(assertNotNull(aclCap.getSupportedPermissions(), success, failure));
-
-            // ACL propagation
-            success = createResult(OK, "ACL propagation: " + aclCap.getAclPropagation());
-            failure = createResult(WARNING, "ACL propagation is not set!");
-            addResult(assertNotNull(aclCap.getAclPropagation(), success, failure));
-
-            // permissions
-            success = createResult(OK, "Permissions: "
-                    + (aclCap.getPermissions() == null ? "?" : aclCap.getPermissions().size()));
-            failure = createResult(FAILURE, "Permissions are not set!");
-            addResult(assertNotNull(aclCap.getPermissions(), success, failure));
-
-            if (aclCap.getPermissions() != null) {
-                int i = 0;
-                for (PermissionDefinition permDef : aclCap.getPermissions()) {
-                    failure = createResult(FAILURE, "Permission #" + i + " is not set!");
-                    addResult(assertNotNull(permDef, null, failure));
-
-                    if (permDef != null) {
-                        failure = createResult(FAILURE, "ID of permission #" + i + " is not set!");
-                        addResult(assertStringNotEmpty(permDef.getId(), null, failure));
-                    }
-
-                    i++;
-                }
-            }
-
-            // permission mapping
-            success = createResult(OK, "Permission mapping: "
-                    + (aclCap.getPermissionMapping() == null ? "?" : aclCap.getPermissionMapping().size()));
-            failure = createResult(WARNING, "Permission mapping is not set!");
-            addResult(assertNotNull(aclCap.getPermissionMapping(), success, failure));
-        }
-
-        if (ri.getExtensionFeatures() != null) {
-            for (ExtensionFeature ef : ri.getExtensionFeatures()) {
-                success = createResult(OK, "Extension Feature: " + ef.getId());
-                failure = createResult(FAILURE, "Extension Feature without ID!");
-                addResult(assertStringNotEmpty(ef.getId(), success, failure));
-
-                failure = createResult(WARNING, "Extension Feature without common name: " + ef.getId());
-                addResult(assertStringNotEmpty(ef.getCommonName(), null, failure));
-
-                failure = createResult(WARNING, "Extension Feature without version label: " + ef.getId());
-                addResult(assertStringNotEmpty(ef.getVersionLabel(), null, failure));
-
-                failure = createResult(WARNING, "Extension Feature without URL: " + ef.getId());
-                addResult(assertStringNotEmpty(ef.getUrl(), null, failure));
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java
deleted file mode 100644
index e347b5d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.basics;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Basic root folder tests.
- */
-public class RootFolderTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Root Folder Test");
-        setDescription("Checks the root folder and its children for specification compliance.");
-    }
-
-    @Override
-    public void run(Session session) throws Exception {
-        CmisTestResult success;
-        CmisTestResult failure;
-
-        // check root folder id
-        RepositoryInfo ri = getRepositoryInfo(session);
-
-        success = createResult(OK, "Root folder id: " + ri.getRootFolderId());
-        failure = createResult(FAILURE, "Root folder id is not set!");
-        addResult(assertStringNotEmpty(ri.getRootFolderId(), success, failure));
-
-        // get the root folder
-        Folder rootFolder = session.getRootFolder(SELECT_ALL_NO_CACHE_OC);
-
-        if (rootFolder == null) {
-            addResult(createResult(FAILURE, "Root folder is not available!"));
-            return;
-        }
-
-        addResult(checkObject(session, rootFolder, getAllProperties(rootFolder), "Root folder object spec compliance"));
-
-        // folder and path
-        failure = createResult(FAILURE,
-                "Root folder id in the repository info doesn't match the root folder object id!");
-        addResult(assertEquals(ri.getRootFolderId(), rootFolder.getId(), null, failure));
-
-        failure = createResult(FAILURE, "Root folder is not a cmis:folder!");
-        addResult(assertEquals(BaseTypeId.CMIS_FOLDER, rootFolder.getBaseTypeId(), null, failure));
-
-        failure = createResult(FAILURE, "Root folder path is not '/'!");
-        addResult(assertEquals("/", rootFolder.getPath(), null, failure));
-
-        failure = createResult(FAILURE, "Root folder has parents!");
-        addResult(assertEquals(0, rootFolder.getParents().size(), null, failure));
-
-        // allowable actions
-        failure = createResult(FAILURE, "Root folder has CAN_GET_FOLDER_PARENT allowable action!");
-        addResult(assertNotAllowableAction(rootFolder, Action.CAN_GET_FOLDER_PARENT, null, failure));
-
-        failure = createResult(WARNING, "Root folder has no CAN_GET_CHILDREN allowable action!");
-        addResult(assertAllowableAction(rootFolder, Action.CAN_GET_CHILDREN, null, failure));
-
-        // simple children test
-        addResult(checkChildren(session, rootFolder, "Root folder children check"));
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/SecurityTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/SecurityTest.java
deleted file mode 100644
index bdc81d9..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/SecurityTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.basics;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Tests wether HTTPS is used or not.
- */
-public class SecurityTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Security Test");
-        setDescription("Checks if HTTPS is used.");
-    }
-
-    @Override
-    public void run(Session session) throws Exception {
-        CmisTestResult f;
-
-        BindingType binding = getBinding();
-
-        addResult(createInfoResult("Binding: " + binding));
-
-        f = createResult(WARNING, "HTTPS is not used. Credentials might be transferred as plain text!");
-
-        switch (binding) {
-        case ATOMPUB:
-            if (!isHttpsUrl(getParameters().get(SessionParameter.ATOMPUB_URL))) {
-                addResult(f);
-            }
-            break;
-        case WEBSERVICES:
-            if (!isHttpsUrl(getParameters().get(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE))) {
-                addResult(f);
-            }
-            break;
-        case BROWSER:
-            if (!isHttpsUrl(getParameters().get(SessionParameter.BROWSER_URL))) {
-                addResult(f);
-            }
-            break;
-        default:
-            // nothing to do
-        }
-    }
-
-    private static boolean isHttpsUrl(String url) {
-        if (url == null) {
-            return false;
-        }
-
-        return url.trim().toLowerCase(Locale.ENGLISH).startsWith("https://");
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ACLSmokeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ACLSmokeTest.java
deleted file mode 100644
index 6c349fc..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ACLSmokeTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.control;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-import org.apache.chemistry.opencmis.tck.impl.TestParameters;
-
-/**
- * ACL smoke test.
- */
-public class ACLSmokeTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("ACL Test");
-        setDescription("Creates a document and checks its ACL.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        if (supportsACLs(session)) {
-            try {
-                // create folder and document
-                Folder testFolder = createTestFolder(session);
-                Document doc = createDocument(session, testFolder, "acltest.txt", "ACL test");
-
-                // check if there is an ACL
-                Acl acl = doc.getAcl();
-
-                f = createResult(FAILURE, "ACLs are supported but newly created document has no ACL!");
-                addResult(assertNotNull(acl, null, f));
-
-                // check basic permissions
-                Acl basicAcl = session.getAcl(doc, true);
-
-                f = createResult(FAILURE,
-                        "ACLs are supported but repository does not return a basic ACL for the newly created document!");
-                addResult(assertNotNull(basicAcl, null, f));
-
-                if (basicAcl != null) {
-                    addResult(checkACL(session, basicAcl, false, "Basic ACL"));
-
-                    if (basicAcl.getAces() != null) {
-                        for (Ace ace : basicAcl.getAces()) {
-                            if (ace.getPermissions() != null) {
-                                for (String permission : ace.getPermissions()) {
-                                    if (!"cmis:read".equals(permission) && !"cmis:write".equals(permission)
-                                            && !"cmis:all".equals(permission)) {
-                                        addResult(createResult(FAILURE, "ACE contains a non-basic permission: "
-                                                + permission));
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if (getAclCapability(session) == CapabilityAcl.MANAGE
-                        && !Boolean.FALSE.equals(doc.getType().isControllableAcl())) {
-                    String principal = getParameters().get(TestParameters.DEFAULT_ACL_PRINCIPAL);
-                    if (principal == null) {
-                        principal = TestParameters.DEFAULT_ACL_PRINCIPAL_VALUE;
-                    }
-
-                    // apply permission "cmis:write"
-                    List<Ace> aces = new ArrayList<Ace>();
-                    aces.add(session.getObjectFactory().createAce(principal, Collections.singletonList("cmis:write")));
-
-                    session.applyAcl(doc, aces, null, null);
-
-                    if (session.getRepositoryInfo().getAclCapabilities().getAclPropagation() != AclPropagation.REPOSITORYDETERMINED) {
-                        // set permission "cmis:all"
-                        aces = new ArrayList<Ace>();
-                        aces.add(session.getObjectFactory().createAce(principal, Collections.singletonList("cmis:all")));
-
-                        session.setAcl(doc, aces);
-                    }
-                } else {
-                    addResult(createResult(INFO, "The repository or the type '" + doc.getType().getId()
-                            + "' don't support managing ACLs."));
-                }
-
-                deleteObject(doc);
-            } finally {
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "ACLs are not supported. Test Skipped!"));
-        }
-    }
-
-    protected boolean supportsACLs(Session session) {
-        CapabilityAcl aclCap = getAclCapability(session);
-        return (aclCap != null) && (aclCap != CapabilityAcl.NONE);
-    }
-
-    protected CapabilityAcl getAclCapability(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().getAclCapability() == null) {
-            return null;
-        }
-
-        return repository.getCapabilities().getAclCapability();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ControlTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ControlTestGroup.java
deleted file mode 100644
index 28cfde0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/control/ControlTestGroup.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.control;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains ACL and policy tests.
- */
-public class ControlTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Control Test Group");
-        setDescription("ACL and Policy tests.");
-
-        addTest(new ACLSmokeTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/BulkUpdatePropertiesTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/BulkUpdatePropertiesTest.java
deleted file mode 100644
index d297cb0..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/BulkUpdatePropertiesTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class BulkUpdatePropertiesTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "Bluk update test content.";
-    private static final String NEW_NAME = "bunewname.txt";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Bulk Update Properties Test");
-        setDescription("Creates a few folders and documents, renames all documents at once, and deletes all created objects.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-            addResult(createResult(SKIPPED, "Bulk Update Properties is not supported by CMIS 1.0. Test skipped!"));
-            return;
-        }
-
-        CmisTestResult failure = null;
-        int numOfObjects = 20;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            Map<String, Folder> folders = new HashMap<String, Folder>();
-            Map<String, Document> documents = new HashMap<String, Document>();
-
-            // create folders and documents
-            for (int i = 0; i < numOfObjects; i++) {
-                Folder newFolder = createFolder(session, testFolder, "bufolder" + i);
-                folders.put(newFolder.getId(), newFolder);
-                Document newDocument = createDocument(session, newFolder, "budoc" + i + ".txt", CONTENT);
-                documents.put(newDocument.getId(), newDocument);
-            }
-
-            // update cmis:name of all the documents
-            List<CmisObject> objects = new ArrayList<CmisObject>(documents.values());
-            Map<String, Object> properties = new HashMap<String, Object>();
-            properties.put(PropertyIds.NAME, NEW_NAME);
-
-            List<BulkUpdateObjectIdAndChangeToken> updatedIds = session.bulkUpdateProperties(objects, properties, null,
-                    null);
-
-            // check the result
-            if (getBinding() == BindingType.WEBSERVICES) {
-                // TODO: review after TC clarification
-                addResult(createResult(INFO, "The Web Services binding does not return the updated ids."
-                        + " This issue has to be clarified by the CMIS TC and the test to adopted later."));
-            } else {
-                if (updatedIds == null || updatedIds.isEmpty()) {
-                    addResult(createResult(FAILURE, "Bulk Update Properties did not update any documents!"));
-                } else {
-                    failure = createResult(FAILURE, "Bulk Update Properties did not update all test documents!");
-                    addResult(assertEquals(documents.size(), updatedIds.size(), null, failure));
-                }
-            }
-
-            // check all documents
-            for (Folder folder : folders.values()) {
-                List<CmisObject> children = new ArrayList<CmisObject>();
-                for (CmisObject child : folder.getChildren(SELECT_ALL_NO_CACHE_OC)) {
-                    children.add(child);
-                }
-
-                if (children.size() != 1) {
-                    addResult(createResult(FAILURE,
-                            "Test folder should have exactly one child, but it has " + children.size() + "!"));
-                } else {
-                    failure = createResult(FAILURE, "Document does not have the new name! Id: "
-                            + children.get(0).getId());
-                    addResult(assertEquals(NEW_NAME, children.get(0).getName(), null, failure));
-                }
-            }
-
-            // delete folders and documents
-            for (Folder folder : folders.values()) {
-                folder.deleteTree(true, null, true);
-            }
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java
deleted file mode 100644
index 93dd1b6..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains simple Create, Read, Update and Delete tests.
- */
-public class CRUDTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("CRUD Test Group");
-        setDescription("Create, Read, Update, and Delete tests.");
-
-        addTest(new CreateAndDeleteFolderTest());
-        addTest(new CreateAndDeleteDocumentTest());
-        addTest(new CreateBigDocument());
-        addTest(new CreateDocumentWithoutContent());
-        addTest(new CreateInvalidTypeTest());
-        addTest(new NameCharsetTest());
-        addTest(new WhitespaceInNameTest());
-        addTest(new CreateAndDeleteRelationshipTest());
-        addTest(new CreateAndDeleteItemTest());
-        addTest(new PropertyFilterTest());
-        addTest(new UpdateSmokeTest());
-        addTest(new BulkUpdatePropertiesTest());
-        addTest(new SetAndDeleteContentTest());
-        addTest(new ChangeTokenTest());
-        addTest(new ContentRangesTest());
-        addTest(new CopyTest());
-        addTest(new MoveTest());
-        addTest(new DeleteTreeTest());
-        addTest(new OperationContextTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ChangeTokenTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ChangeTokenTest.java
deleted file mode 100644
index ab544df..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ChangeTokenTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class ChangeTokenTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Change Token Test");
-        setDescription("Creates a document and a folder and updates them with an outdated change token.");
-    }
-
-    @Override
-    public void run(Session session) {
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            // update document properties test
-            runUpdateDocumentTest(session, testFolder);
-
-            // content update test
-            runContentTest(session, testFolder);
-
-            // update folder properties test
-            runUpdateFolderTest(session, testFolder);
-
-            // add child and update folder properties test
-            runAddChildFolderTest(session, testFolder);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-
-    private void runUpdateDocumentTest(Session session, Folder testFolder) {
-        Document doc = createDocument(session, testFolder, "update1.txt", "Hello World!");
-
-        try {
-            if (doc.getChangeToken() == null) {
-                addResult(createResult(SKIPPED,
-                        "Repository does not provide change tokens for documents. Test skipped!"));
-                return;
-            }
-
-            DocumentTypeDefinition type = (DocumentTypeDefinition) doc.getType();
-            PropertyDefinition<?> namePropDef = type.getPropertyDefinitions().get(PropertyIds.NAME);
-            if (namePropDef.getUpdatability() == Updatability.WHENCHECKEDOUT
-                    || !doc.getAllowableActions().getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES)) {
-                addResult(createResult(SKIPPED, "Document name can't be changed. Test skipped!"));
-                return;
-            }
-
-            // the first update should succeed
-            Map<String, Object> properties2 = new HashMap<String, Object>();
-            properties2.put(PropertyIds.NAME, "update2.txt");
-            ObjectId newId = doc.updateProperties(properties2, false);
-
-            if (!doc.getId().equals(newId.getId())) {
-                // the repository created a new version
-                // -> a change token test does not make sense
-                addResult(createResult(INFO,
-                        "The repository created a new version. Change tokens are not relevant here."));
-            } else {
-                try {
-                    Map<String, Object> properties3 = new HashMap<String, Object>();
-                    properties3.put(PropertyIds.NAME, "update3.txt");
-                    doc.updateProperties(properties3, false);
-
-                    addResult(createResult(FAILURE, "Updating properties a second time with the same change token "
-                            + "should result in an UpdateConflict exception!"));
-                } catch (CmisUpdateConflictException e) {
-                    // expected exception
-                }
-            }
-        } finally {
-            deleteObject(doc);
-        }
-    }
-
-    private void runContentTest(Session session, Folder testFolder) {
-        if (session.getRepositoryInfo().getCapabilities().getContentStreamUpdatesCapability() != CapabilityContentStreamUpdates.ANYTIME) {
-            addResult(createResult(SKIPPED, "Repository doesn't allow to replace content. Test skipped!"));
-            return;
-        }
-
-        Document doc = createDocument(session, testFolder, "content1.txt", "Hello World!");
-
-        try {
-            if (doc.getChangeToken() == null) {
-                addResult(createResult(SKIPPED,
-                        "Repository does not provide change tokens for documents. Test skipped!"));
-                return;
-            }
-
-            if (!doc.getAllowableActions().getAllowableActions().contains(Action.CAN_SET_CONTENT_STREAM)) {
-                addResult(createResult(SKIPPED, "Document content can't be changed. Test skipped!"));
-                return;
-            }
-
-            byte[] contentBytes = IOUtils.toUTF8Bytes("New content");
-            ContentStream contentStream = new ContentStreamImpl("content2.txt",
-                    BigInteger.valueOf(contentBytes.length), "text/plain", new ByteArrayInputStream(contentBytes));
-
-            ObjectId newId = doc.setContentStream(contentStream, true, false);
-
-            if (newId == null) {
-                // the AtomPub binding does not return an id here
-                // -> get the latest id from the version series
-                if (Boolean.TRUE.equals(((DocumentTypeDefinition) doc.getType()).isVersionable())) {
-                    List<Document> versions = doc.getAllVersions();
-                    if (versions == null || versions.size() < 1) {
-                        addResult(createResult(FAILURE, "Repository returned an empty list of document versions!"));
-                    } else {
-                        // the latest document is at the top of the list
-                        newId = versions.get(0);
-                    }
-                } else {
-                    // the document type is not versionable
-                    // -> the repository couldn't create a new version
-                    newId = doc;
-                }
-            }
-
-            if (newId != null) {
-                if (!doc.getId().equals(newId.getId())) {
-                    // the repository created a new version
-                    // -> a change token test does not make sense
-                    addResult(createResult(INFO,
-                            "The repository created a new version. Change tokens are not relevant here."));
-                } else {
-                    try {
-                        doc.setContentStream(contentStream, true, false);
-
-                        addResult(createResult(FAILURE, "Updating content a second time with the same change token "
-                                + "should result in an UpdateConflict exception!"));
-                    } catch (CmisUpdateConflictException uce) {
-                        // expected exception
-                    }
-                }
-            }
-        } finally {
-            deleteObject(doc);
-        }
-    }
-
-    private void runUpdateFolderTest(Session session, Folder testFolder) {
-        Folder folder = createFolder(session, testFolder, "folder1");
-
-        try {
-            if (folder.getChangeToken() == null) {
-                addResult(createResult(SKIPPED, "Repository does not provide change tokens for folders. Test skipped!"));
-                return;
-            }
-
-            if (!folder.getAllowableActions().getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES)) {
-                addResult(createResult(SKIPPED, "Folder name can't be changed. Test skipped!"));
-                return;
-            }
-
-            // the first update should succeed
-            Map<String, Object> properties2 = new HashMap<String, Object>();
-            properties2.put(PropertyIds.NAME, "folder2");
-            folder.updateProperties(properties2, false);
-
-            try {
-                Map<String, Object> properties3 = new HashMap<String, Object>();
-                properties3.put(PropertyIds.NAME, "folder3");
-                folder.updateProperties(properties3, false);
-
-                addResult(createResult(FAILURE, "Updating properties a second time with the same change token "
-                        + "should result in an UpdateConflict exception!"));
-            } catch (CmisUpdateConflictException e) {
-                // expected exception
-            }
-
-        } finally {
-            deleteObject(folder);
-        }
-    }
-
-    private void runAddChildFolderTest(Session session, Folder testFolder) {
-        Folder folder = createFolder(session, testFolder, "folder1");
-
-        try {
-            if (folder.getChangeToken() == null) {
-                addResult(createResult(SKIPPED, "Repository does not provide change tokens for folders. Test skipped!"));
-                return;
-            }
-
-            if (!folder.getAllowableActions().getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES)) {
-                addResult(createResult(SKIPPED, "Folder name can't be changed. Test skipped!"));
-                return;
-            }
-
-            createDocument(session, folder, "doc1", "content");
-
-            try {
-                Map<String, Object> properties2 = new HashMap<String, Object>();
-                properties2.put(PropertyIds.NAME, "folder2");
-                folder.updateProperties(properties2, false);
-            } catch (CmisUpdateConflictException e) {
-                addResult(createResult(WARNING, "Adding a child to a folder changes the change token of the folder. "
-                        + "CMIS clients might not expect that."));
-            }
-
-        } finally {
-            deleteObject(folder);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ContentRangesTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ContentRangesTest.java
deleted file mode 100644
index d60b644..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/ContentRangesTest.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.PartialContentStream;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Content Range Test.
- */
-public class ContentRangesTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "0123456789012345678901234567890";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Content Ranges Test");
-        setDescription("Creates a document and reads different excerpts of the content.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-        Document doc = null;
-
-        try {
-            // create the document
-            doc = createDocument(session, testFolder, "testcontent.txt", CONTENT);
-
-            String excerpt;
-            ContentStream content;
-            long contentLength = doc.getContentStreamLength();
-
-            // no offset, no length -> full content
-            try {
-                content = doc.getContentStream(null, null);
-                excerpt = getStringFromContentStream(content);
-
-                if (contentLength > -1 && content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=null, length=null}!", false);
-                    addResult(assertEquals(contentLength, content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(FAILURE,
-                            "Retrieved stream is marked as partial stream "
-                                    + "although the full stream {offset=null, length=null} was expected!")));
-                } else {
-                    addResult(createResult(FAILURE, "Retrieved stream doesn't match the document content!"));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE,
-                        "Unexpected exception while retrieving full stream {offset=null, length=null}: " + e, e, false));
-            }
-
-            // offset = 0, no length -> full content
-            try {
-                content = doc.getContentStream(BigInteger.ZERO, null);
-                excerpt = getStringFromContentStream(content);
-
-                if (contentLength > -1 && content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=0, length=null}!", false);
-                    addResult(assertEquals(contentLength, content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is marked as partial stream "
-                                    + "although the full stream {offset=0, length=null} was expected!")));
-                } else {
-                    addResult(createResult(FAILURE, "Retrieved stream doesn't match the document content!"));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE,
-                        "Unexpected exception while retrieving full stream {offset=0, length=null}: " + e, e, false));
-            }
-
-            // offset, no length
-            try {
-                content = doc.getContentStream(BigInteger.valueOf(3), null);
-                excerpt = getStringFromContentStream(content);
-
-                if (contentLength > -1 && content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=3, length=null}!", false);
-                    addResult(assertEquals(contentLength - 3, content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(createResult(WARNING,
-                            "Retrieved full stream instead of an excerpt {offset=3, length=null}! Content ranges supported?"));
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is marked as partial stream, " + "although the full stream is returned!")));
-                } else {
-                    f = createResult(FAILURE, "Retrieved stream excerpt {offset=3, length=null} doesn't match!");
-                    addResult(assertEquals(CONTENT.substring(3), excerpt, null, f));
-                    addResult(assertIsTrue(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is not marked as partial stream. "
-                                    + "(AtomPub and Browser Binding should return the HTTP status code 206.)")));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE,
-                        "Unexpected exception while retrieving stream {offset=3, length=null}: " + e, e, false));
-            }
-
-            // no offset, length
-            try {
-                content = doc.getContentStream(null, BigInteger.valueOf(12));
-                excerpt = getStringFromContentStream(content);
-
-                if (content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=null, length=12}!", false);
-                    addResult(assertEquals(12L, content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(createResult(WARNING,
-                            "Retrieved full stream instead of an excerpt {offset=null, length=12}! Content ranges supported?"));
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is marked as partial stream, " + "although the full stream is returned!")));
-                } else {
-                    f = createResult(FAILURE, "Retrieved stream excerpt {offset=null, length=12} doesn't match!");
-                    addResult(assertEquals(CONTENT.substring(0, 12), excerpt, null, f));
-                    addResult(assertIsTrue(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is not marked as partial stream. "
-                                    + "(AtomPub and Browser Binding should return the HTTP status code 206.)")));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE,
-                        "Unexpected exception while retrieving stream {offset=null, length=12}: " + e, e, false));
-            }
-
-            // offset and length
-            try {
-                content = doc.getContentStream(BigInteger.valueOf(5), BigInteger.valueOf(17));
-                excerpt = getStringFromContentStream(content);
-
-                if (content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=5, length=17}!", false);
-                    addResult(assertEquals((long) (17 - 5), content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(createResult(WARNING,
-                            "Retrieved full stream instead of an excerpt {offset=5, length=17}! Content ranges supported?"));
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is marked as partial stream, " + "although the full stream is returned!")));
-                } else {
-                    f = createResult(FAILURE, "Retrieved stream excerpt {offset=5, length=17} doesn't match!");
-                    addResult(assertEquals(CONTENT.substring(5, 5 + 17), excerpt, null, f));
-                    addResult(assertIsTrue(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is not marked as partial stream. "
-                                    + "(AtomPub and Browser Binding should return the HTTP status code 206.)")));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE, "Unexpected exception while retrieving stream {offset=5, length=17}: "
-                        + e, e, false));
-            }
-
-            // offset and length > content size
-            try {
-                content = doc.getContentStream(BigInteger.valueOf(9), BigInteger.valueOf(123));
-                excerpt = getStringFromContentStream(content);
-
-                if (content.getLength() > -1) {
-                    f = createResult(WARNING, "Content length does not match {offset=9, length=123}!", false);
-                    addResult(assertEquals((long) (CONTENT.length() - 9), content.getLength(), null, f));
-                }
-
-                if (CONTENT.equals(excerpt)) {
-                    addResult(createResult(WARNING,
-                            "Retrieved full stream instead of an excerpt {offset=9, length=123}! Content ranges supported?"));
-                    addResult(assertIsFalse(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is marked as partial stream, " + "although the full stream is returned!")));
-                } else {
-                    f = createResult(FAILURE, "Retrieved stream excerpt {offset=9, length=123} doesn't match!");
-                    addResult(assertEquals(CONTENT.substring(9), excerpt, null, f));
-                    addResult(assertIsTrue(content instanceof PartialContentStream, null, createResult(WARNING,
-                            "Retrieved stream is not marked as partial stream. "
-                                    + "(AtomPub and Browser Binding should return the HTTP status code 206.)")));
-                }
-            } catch (Exception e) {
-                addResult(createResult(FAILURE, "Unexpected exception while retrieving stream {offset=9, length=123}: "
-                        + e, e, false));
-            }
-        } finally {
-            // clean up
-            deleteObject(doc);
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java
deleted file mode 100644
index 6ed1d50..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Copy test.
- */
-public class CopyTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Copy Test");
-        setDescription("Creates two folders and a document and copies the document from one folder to the other.");
-    }
-
-    @Override
-    public void run(Session session) {
-        // if (getBinding() == BindingType.ATOMPUB) {
-        // addResult(createResult(SKIPPED,
-        // "AtomPub binding does not support createDocumentFromSource(). Test Skipped!"));
-        // return;
-        // }
-
-        CmisTestResult f;
-
-        try {
-            // create folders
-            Folder testFolder = createTestFolder(session);
-            Folder folder1 = createFolder(session, testFolder, "copyfolder1");
-            Folder folder2 = createFolder(session, testFolder, "copyfolder2");
-
-            // create document
-            Document doc1 = createDocument(session, folder1, "copytestdoc.txt", "copy test");
-
-            VersioningState versioningState = VersioningState.MAJOR;
-            if (!((DocumentTypeDefinition) doc1.getType()).isVersionable()) {
-                versioningState = VersioningState.NONE;
-            }
-
-            // copy
-            Document doc2 = doc1.copy(folder2, null, versioningState, null, null, null, SELECT_ALL_NO_CACHE_OC);
-
-            if (doc2 == null) {
-                addResult(createResult(FAILURE, "Copied document is null!"));
-            } else {
-                addResult(checkObject(session, doc2, getAllProperties(doc2),
-                        "Copied document check. Id: + " + doc2.getName()));
-
-                f = createResult(FAILURE, "Content streams don't match!");
-                addResult(assertEquals(doc1.getContentStream(), doc2.getContentStream(), null, f));
-            }
-
-            int count1 = countFolderChildren(folder1);
-            f = createResult(FAILURE, "Source folder should have exactly one child but has " + count1 + " children!");
-            addResult(assertEquals(1, count1, null, f));
-
-            int count2 = countFolderChildren(folder2);
-            f = createResult(FAILURE, "Target folder should have exactly one child but has " + count2 + " children!");
-            addResult(assertEquals(1, count2, null, f));
-
-            deleteObject(doc2);
-            deleteObject(doc1);
-        } finally {
-            // clean up
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java
deleted file mode 100644
index 754a712..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.DocumentType;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Simple document test.
- */
-public class CreateAndDeleteDocumentTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "TCK test content.";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create and Delete Document Test");
-        setDescription("Creates a few documents, checks the newly created documents and their parent and finally deletes the created documents.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        int numOfDocuments = 20;
-
-        OperationContext orderContext = (isOrderByNameSupported(session) ? SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME
-                : SELECT_ALL_NO_CACHE_OC);
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            Map<String, Document> documents = new HashMap<String, Document>();
-            Set<String> versionSeriesIds = new HashSet<String>();
-
-            // create documents
-            for (int i = 0; i < numOfDocuments; i++) {
-                Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
-                documents.put(newDocument.getId(), newDocument);
-                versionSeriesIds.add(newDocument.getVersionSeriesId());
-            }
-
-            // simple children test
-            addResult(checkChildren(session, testFolder, "Test folder children check"));
-
-            // check if all documents are there
-            ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
-            List<String> childrenIds = new ArrayList<String>();
-            for (CmisObject child : children) {
-                if (child != null) {
-                    childrenIds.add(child.getId());
-                    Document document = documents.get(child.getId());
-
-                    f = createResult(FAILURE, "Document and test folder child don't match! Id: " + child.getId());
-                    addResult(assertShallowEquals(document, child, null, f));
-                }
-            }
-
-            f = createResult(FAILURE, "Number of created documents does not match the number of existing documents!");
-            addResult(assertEquals(numOfDocuments, childrenIds.size(), null, f));
-
-            for (Document document : documents.values()) {
-                if (!childrenIds.contains(document.getId())) {
-                    addResult(createResult(FAILURE, "Created document not found in test folder children! Id: "
-                            + document.getId()));
-                }
-            }
-
-            // check version series ids
-            if (Boolean.TRUE.equals(((DocumentType) documents.values().iterator().next().getType()).isVersionable())) {
-                f = createResult(FAILURE,
-                        "Although the created documents are independent, some documents share a Version Series Id!");
-            } else {
-                f = createResult(INFO, "Some documents share the same Version Series Id.");
-            }
-
-            addResult(assertEquals(numOfDocuments, versionSeriesIds.size(), null, f));
-
-            // check paging
-            int pageSize = 5;
-            CmisObject lastObject = null;
-
-            int count = 0;
-            ItemIterable<CmisObject> page1 = testFolder.getChildren(orderContext).getPage(pageSize);
-            for (CmisObject child : page1) {
-                count++;
-                lastObject = child;
-            }
-
-            f = createResult(FAILURE, "Returned number of children doesn't match the page size!");
-            addResult(assertEquals(pageSize, count, null, f));
-
-            if (page1.getTotalNumItems() == -1) {
-                addResult(createResult(WARNING, "Repository did not return numItems for the first test page."));
-            } else {
-                f = createResult(FAILURE, "Returned numItems doesn't match the number of documents!");
-                addResult(assertEquals((long) numOfDocuments, page1.getTotalNumItems(), null, f));
-            }
-
-            f = createResult(FAILURE, "hasMoreItems of the first test page must be TRUE!");
-            addResult(assertEquals(true, page1.getHasMoreItems(), null, f));
-
-            // check second page
-            count = 0;
-            ItemIterable<CmisObject> page2 = testFolder.getChildren(orderContext).skipTo(pageSize - 1)
-                    .getPage(pageSize);
-            for (CmisObject child : page2) {
-                count++;
-
-                if (count == 1) {
-                    f = createResult(FAILURE,
-                            "Last object of the first page doesn't match the first object of the second page.");
-                    addResult(assertEquals(lastObject.getId(), child.getId(), null, f));
-                }
-            }
-
-            f = createResult(FAILURE, "Returned number of children doesn't match the page size!");
-            addResult(assertEquals(pageSize, count, null, f));
-
-            if (page2.getTotalNumItems() == -1) {
-                addResult(createResult(WARNING, "Repository did not return numItems for the second test page."));
-            } else {
-                f = createResult(FAILURE, "Returned numItems doesn't match the number of documents!");
-                addResult(assertEquals((long) numOfDocuments, page2.getTotalNumItems(), null, f));
-            }
-
-            f = createResult(FAILURE, "hasMoreItems of the second test page must be TRUE!");
-            addResult(assertEquals(true, page2.getHasMoreItems(), null, f));
-
-            // check third page
-            count = 0;
-            ItemIterable<CmisObject> page3 = testFolder.getChildren(orderContext).skipTo(numOfDocuments - 5)
-                    .getPage(10);
-            for (@SuppressWarnings("unused")
-            CmisObject child : page3) {
-                count++;
-            }
-
-            f = createResult(FAILURE,
-                    "Returned number of children should be 5 because page startetd at (numOfDocuments - 5).");
-            addResult(assertEquals(5, count, null, f));
-
-            if (page3.getTotalNumItems() == -1) {
-                addResult(createResult(WARNING, "Repository did not return numItems for the third test page."));
-            } else {
-                f = createResult(FAILURE, "Returned numItems doesn't match the number of documents!");
-                addResult(assertEquals((long) numOfDocuments, page3.getTotalNumItems(), null, f));
-            }
-
-            f = createResult(FAILURE, "hasMoreItems of the third test page must be FALSE!");
-            addResult(assertEquals(false, page3.getHasMoreItems(), null, f));
-
-            // check non-existing page
-            count = 0;
-            ItemIterable<CmisObject> pageNotExisting = testFolder.getChildren(orderContext).skipTo(100000)
-                    .getPage(pageSize);
-            for (@SuppressWarnings("unused")
-            CmisObject child : pageNotExisting) {
-                count++;
-            }
-
-            f = createResult(FAILURE, "The page size of a non-existing page must be 0!");
-            addResult(assertEquals(0, count, null, f));
-
-            if (pageNotExisting.getTotalNumItems() == -1) {
-                addResult(createResult(WARNING, "Repository did not return numItems for a non-existing page."));
-            } else {
-                f = createResult(FAILURE, "Returned numItems doesn't match the number of documents!");
-                addResult(assertEquals((long) numOfDocuments, pageNotExisting.getTotalNumItems(), null, f));
-            }
-
-            f = createResult(FAILURE, "hasMoreItems of a non-existing page must be FALSE!");
-            addResult(assertEquals(false, pageNotExisting.getHasMoreItems(), null, f));
-
-            // check content
-            for (Document document : documents.values()) {
-                ContentStream contentStream = document.getContentStream();
-                if (contentStream == null || contentStream.getStream() == null) {
-                    addResult(createResult(FAILURE, "Document has no content! Id: " + document.getId()));
-                    continue;
-                } else {
-                    IOUtils.closeQuietly(contentStream);
-                }
-
-                // TODO: content checks
-            }
-
-            // delete all documents
-            for (Document document : documents.values()) {
-                document.delete(true);
-
-                f = createResult(FAILURE,
-                        "Document should not exist anymore but it is still there! Id: " + document.getId());
-                addResult(assertIsFalse(exists(document), null, f));
-            }
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-
-        addResult(createInfoResult("Tested the creation and deletion of " + numOfDocuments + " documents."));
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java
deleted file mode 100644
index 3a044dc..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Simple folder test.
- */
-public class CreateAndDeleteFolderTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create and Delete Folder Test");
-        setDescription("Creates a few folders, checks the newly created folders and their parent and finally deletes the created folders.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        int numOfFolders = 20;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            Map<String, Folder> folders = new HashMap<String, Folder>();
-
-            // create folders
-            for (int i = 0; i < numOfFolders; i++) {
-                Folder newFolder = createFolder(session, testFolder, "folder" + i);
-                folders.put(newFolder.getId(), newFolder);
-            }
-
-            // simple children test
-            addResult(checkChildren(session, testFolder, "Test folder children check"));
-
-            // check if all folders are there
-            ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
-            List<String> childrenIds = new ArrayList<String>();
-            for (CmisObject child : children) {
-                if (child != null) {
-                    childrenIds.add(child.getId());
-                    Folder folder = folders.get(child.getId());
-
-                    f = createResult(FAILURE, "Folder and test folder child don't match! Id: " + child.getId());
-                    addResult(assertShallowEquals(folder, child, null, f));
-                }
-            }
-
-            f = createResult(FAILURE, "Number of created folders does not match the number of existing folders!");
-            addResult(assertEquals(numOfFolders, childrenIds.size(), null, f));
-
-            for (Folder folder : folders.values()) {
-                if (!childrenIds.contains(folder.getId())) {
-                    addResult(createResult(FAILURE,
-                            "Created folder not found in test folder children! Id: " + folder.getId()));
-                }
-            }
-
-            // delete all folders
-            for (Folder folder : folders.values()) {
-                // empty folders should be deleteable like this
-                folder.delete(true);
-
-                f = createResult(FAILURE,
-                        "Folder should not exist anymore but it is still there! Id: " + folder.getId());
-                addResult(assertIsFalse(exists(folder), null, f));
-            }
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-
-        addResult(createInfoResult("Tested the creation and deletion of " + numOfFolders + " folders."));
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteItemTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteItemTest.java
deleted file mode 100644
index d0d6a4a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteItemTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Item;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Simple folder test.
- */
-public class CreateAndDeleteItemTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create and Delete Item Test");
-        setDescription("Creates a few items, checks the newly created itens and their parent and finally deletes the created item.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-            addResult(createResult(SKIPPED, "Items are not supported by CMIS 1.0. Test skipped!"));
-            return;
-        }
-
-        if (hasItems(session)) {
-            CmisTestResult f;
-
-            int numOfItems = 20;
-
-            // create a test folder
-            Folder testFolder = createTestFolder(session);
-
-            try {
-                Map<String, Item> items = new HashMap<String, Item>();
-
-                // create items
-                for (int i = 0; i < numOfItems; i++) {
-                    Item newItem = createItem(session, testFolder, "item" + i);
-                    items.put(newItem.getId(), newItem);
-                }
-
-                // check if all items are there
-                ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
-                List<String> childrenIds = new ArrayList<String>();
-                for (CmisObject child : children) {
-                    if (child != null) {
-                        childrenIds.add(child.getId());
-                        Item item = items.get(child.getId());
-
-                        f = createResult(FAILURE, "Item and test folder child don't match! Id: " + child.getId());
-                        addResult(assertShallowEquals(item, child, null, f));
-                    }
-                }
-
-                f = createResult(FAILURE, "Number of created items does not match the number of existing items!");
-                addResult(assertEquals(numOfItems, childrenIds.size(), null, f));
-
-                for (Item item : items.values()) {
-                    if (!childrenIds.contains(item.getId())) {
-                        addResult(createResult(FAILURE,
-                                "Created item not found in test folder children! Id: " + item.getId()));
-                    }
-                }
-
-                // delete all item
-                for (Item item : items.values()) {
-                    item.delete(true);
-
-                    f = createResult(FAILURE,
-                            "Item should not exist anymore but it is still there! Id: " + item.getId());
-                    addResult(assertIsFalse(exists(item), null, f));
-                }
-            } finally {
-                // delete the test folder
-                deleteTestFolder();
-            }
-
-            addResult(createInfoResult("Tested the creation and deletion of " + numOfItems + " items."));
-        } else {
-            addResult(createResult(SKIPPED, "Items not supported. Test skipped!"));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteRelationshipTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteRelationshipTest.java
deleted file mode 100644
index 4c381e2..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteRelationshipTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Simple relationship test.
- */
-public class CreateAndDeleteRelationshipTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create and Delete Relationship Test");
-        setDescription("Creates a relationship between two documents, checks the newly created relationship and finally deletes the created relationship.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-        boolean found;
-
-        if (hasRelationships(session)) {
-            // create a test folder
-            Folder testFolder = createTestFolder(session);
-
-            try {
-                // create documents
-                Document doc1 = createDocument(session, testFolder, "doc1.txt", "doc1");
-                Document doc2 = createDocument(session, testFolder, "doc2.txt", "doc2");
-
-                // create relationship
-                Relationship rel = createRelationship(session, "rel1", doc1, doc2);
-
-                f = createResult(FAILURE, "Source document id does not match relationship source id!");
-                addResult(assertEquals(doc1.getId(), rel.getSourceId().getId(), null, f));
-
-                f = createResult(FAILURE, "Target document id does not match relationship target id!");
-                addResult(assertEquals(doc2.getId(), rel.getTarget().getId(), null, f));
-
-                // check the source document
-                doc1.refresh();
-                List<Relationship> doc1rels = doc1.getRelationships();
-
-                f = createResult(FAILURE, "Source document has no relationships but must have at least one!");
-                addResult(assertListNotEmpty(doc1rels, null, f));
-
-                if (doc1rels != null) {
-                    found = false;
-                    for (Relationship r : doc1rels) {
-                        if (rel.getId().equals(r.getId())) {
-                            found = true;
-                            break;
-                        }
-                    }
-
-                    f = createResult(FAILURE,
-                            "Newly created relationship not found in the relationships of the source document!");
-                    addResult(assertIsTrue(found, null, f));
-                }
-
-                found = false;
-                for (Relationship r : session.getRelationships(doc1, true, RelationshipDirection.SOURCE, null,
-                        SELECT_ALL_NO_CACHE_OC)) {
-                    if (rel.getId().equals(r.getId())) {
-                        found = true;
-                        break;
-                    }
-                }
-
-                f = createResult(
-                        FAILURE,
-                        "Newly created relationship not found in the relationships returned by getObjectRelationships() for the source document!");
-                addResult(assertIsTrue(found, null, f));
-
-                // check the target document
-                doc2.refresh();
-                List<Relationship> doc2rels = doc2.getRelationships();
-
-                f = createResult(FAILURE, "Target document has no relationships but must have at least one!");
-                addResult(assertListNotEmpty(doc2rels, null, f));
-
-                if (doc2rels != null) {
-                    found = false;
-                    for (Relationship r : doc2rels) {
-                        if (rel.getId().equals(r.getId())) {
-                            found = true;
-                            break;
-                        }
-                    }
-
-                    f = createResult(FAILURE,
-                            "Newly created relationship not found in the relationships of the target document!");
-                    addResult(assertIsTrue(found, null, f));
-                }
-
-                found = false;
-                for (Relationship r : session.getRelationships(doc2, true, RelationshipDirection.TARGET, null,
-                        SELECT_ALL_NO_CACHE_OC)) {
-                    if (rel.getId().equals(r.getId())) {
-                        found = true;
-                        break;
-                    }
-                }
-
-                f = createResult(
-                        FAILURE,
-                        "Newly created relationship not found in the relationships returned by getObjectRelationships() for the target document!");
-                addResult(assertIsTrue(found, null, f));
-
-                // remove
-                deleteObject(rel);
-                deleteObject(doc2);
-                deleteObject(doc1);
-            } finally {
-                // delete the test folder
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Relationships not supported. Test skipped!"));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateBigDocument.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateBigDocument.java
deleted file mode 100644
index 00c86d1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateBigDocument.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Big document test.
- */
-public class CreateBigDocument extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create Big Document Test");
-        setDescription("Creates a 10 MiB document and deletes it.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            String name = "bigdoc";
-            String objectTypeId = getDocumentTestTypeId();
-            String mimetype = "application/octet-stream";
-
-            final long size = 10 * 1024 * 1024; // 10 MiB
-            InputStream in = new InputStream() {
-                private int counter = -1;
-
-                @Override
-                public int read() throws IOException {
-                    counter++;
-                    if (counter >= size) {
-                        return -1;
-                    }
-
-                    return '0' + (counter / 10);
-                }
-            };
-
-            // create stream and properties
-            ContentStream contentStream = session.getObjectFactory().createContentStream(name, size, mimetype, in);
-
-            Map<String, Object> properties = new HashMap<String, Object>();
-            properties.put(PropertyIds.NAME, name);
-            properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-
-            // check type
-            TypeDefinition type = session.getTypeDefinition(objectTypeId);
-            if (!(type instanceof DocumentTypeDefinition)) {
-                addResult(createResult(FAILURE, "Type is not a document type! Type: " + objectTypeId, true));
-                return;
-            }
-
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-            VersioningState versioningState = (Boolean.TRUE.equals(docType.isVersionable()) ? VersioningState.MAJOR
-                    : VersioningState.NONE);
-
-            // create and fetch the document
-            ObjectId id = session.createDocument(properties, testFolder, contentStream, versioningState);
-            Document doc = (Document) session.getObject(id, SELECT_ALL_NO_CACHE_OC);
-
-            // check the new document
-            addResult(checkObject(session, doc, getAllProperties(doc), "New document object spec compliance"));
-
-            // check the size
-            f = createResult(FAILURE, "Content stream length doesn't match the uploaded content!", true);
-            assertEquals(size, doc.getContentStreamLength(), null, f);
-
-            // delete it
-            doc.delete(true);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateDocumentWithoutContent.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateDocumentWithoutContent.java
deleted file mode 100644
index ce04810..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateDocumentWithoutContent.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Document without content test.
- */
-public class CreateDocumentWithoutContent extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create Document without Content Test");
-        setDescription("Creates a document without content and deletes it.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        String objectTypeId = getDocumentTestTypeId();
-
-        TypeDefinition type = session.getTypeDefinition(objectTypeId);
-        if (!(type instanceof DocumentTypeDefinition)) {
-            addResult(createResult(FAILURE, "Type is not a document type! Type: " + objectTypeId, true));
-            return;
-        }
-
-        DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-
-        if (docType.getContentStreamAllowed() == ContentStreamAllowed.REQUIRED) {
-            addResult(createResult(SKIPPED,
-                    "The test document type does not support documents without content. Test skipped!"));
-            return;
-        }
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            String name = "nocontent";
-
-            Map<String, Object> properties = new HashMap<String, Object>();
-            properties.put(PropertyIds.NAME, name);
-            properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
-
-            VersioningState versioningState = (Boolean.TRUE.equals(docType.isVersionable()) ? VersioningState.MAJOR
-                    : VersioningState.NONE);
-
-            // create and fetch the document
-            ObjectId id = session.createDocument(properties, testFolder, null, versioningState);
-            Document doc = (Document) session.getObject(id, SELECT_ALL_NO_CACHE_OC);
-
-            // check the new document
-            addResult(checkObject(session, doc, getAllProperties(doc), "New document object spec compliance"));
-
-            // check the MIME type
-            f = createResult(FAILURE, "The document has no content but a MIME type!", true);
-            assertNull(doc.getContentStreamMimeType(), null, f);
-
-            // check the content size
-            if (doc.getContentStreamLength() == 0) {
-                addResult(createResult(WARNING, "The document has no content but the content length is set to 0! "
-                        + "The content length shouldn't be set."));
-            } else if (doc.getContentStreamLength() > 0) {
-                addResult(createResult(FAILURE, "The document has no content but the content length is set and >0! "
-                        + "(content length: " + doc.getContentStreamLength() + ")"));
-            }
-
-            // delete it
-            doc.delete(true);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateInvalidTypeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateInvalidTypeTest.java
deleted file mode 100644
index db5d7b8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateInvalidTypeTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class CreateInvalidTypeTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create Object With Invalid Type Test");
-        setDescription("Tries to create document with a folder type and folder with a document type.");
-    }
-
-    @Override
-    public void run(Session session) {
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            // test document creation
-            try {
-                Map<String, Object> properties = new HashMap<String, Object>();
-                properties.put(PropertyIds.NAME, "never.txt");
-                properties.put(PropertyIds.OBJECT_TYPE_ID, getFolderTestTypeId());
-
-                byte[] contentBytes = IOUtils.toUTF8Bytes("nothing");
-                ContentStream contentStream = new ContentStreamImpl("never.txt",
-                        BigInteger.valueOf(contentBytes.length), "text/plain", new ByteArrayInputStream(contentBytes));
-
-                testFolder.createDocument(properties, contentStream, null);
-
-                addResult(createResult(FAILURE, "Creation of a document with a folder type shouldn't work!"));
-            } catch (Exception e) {
-                if (!(e instanceof CmisInvalidArgumentException) && !(e instanceof CmisConstraintException)) {
-                    addResult(createResult(WARNING,
-                            "Creation of a document with a folder type threw an unexcpeted exception: " + e.toString()));
-                }
-            }
-
-            // test folder creation
-            try {
-                Map<String, Object> properties = new HashMap<String, Object>();
-                properties.put(PropertyIds.NAME, "never");
-                properties.put(PropertyIds.OBJECT_TYPE_ID, getDocumentTestTypeId());
-
-                testFolder.createFolder(properties);
-
-                addResult(createResult(FAILURE, "Creation of a folder with a document type shouldn't work!"));
-            } catch (Exception e) {
-                if (!(e instanceof CmisInvalidArgumentException) && !(e instanceof CmisConstraintException)) {
-                    addResult(createResult(WARNING,
-                            "Creation of a folder with a document type threw an unexcpeted exception: " + e.toString()));
-                }
-            }
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java
deleted file mode 100644
index 93e4459..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Delete tree test.
- */
-public class DeleteTreeTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "TCK test content.";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Delete Tree Test");
-        setDescription("Creates a few documents in a folder, deletes the folder and checks if all documents are gone.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        int numOfDocuments = 20;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        Map<String, Document> documents = new HashMap<String, Document>();
-
-        // create documents
-        for (int i = 0; i < numOfDocuments; i++) {
-            Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
-            documents.put(newDocument.getId(), newDocument);
-        }
-
-        // delete tree
-        List<String> failedIds = testFolder.deleteTree(true, UnfileObject.DELETE, true);
-
-        // check failed ids
-        if (failedIds != null && !failedIds.isEmpty()) {
-            f = createResult(FAILURE, "deleteTree() could not delete " + failedIds.size() + " out of " + numOfDocuments
-                    + " objects in the folder!");
-            addResult(assertEquals(0, failedIds.size(), null, f));
-        }
-
-        // check documents
-        for (Document doc : documents.values()) {
-            f = createResult(FAILURE, "Document still exists but should have been deleted. Id: " + doc.getId());
-            addResult(assertIsFalse(exists(doc), null, f));
-        }
-
-        // check folder
-        f = createResult(FAILURE, "Folder still exists but should have been deleted. Id: " + testFolder.getId());
-        addResult(assertIsFalse(exists(testFolder), null, f));
-
-        if (exists(testFolder)) {
-            // try to clean up
-            deleteObject(testFolder);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java
deleted file mode 100644
index 5c007ba..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Move test.
- */
-public class MoveTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Move Test");
-        setDescription("Creates two folders and a document and moves the document from one folder to the other.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        try {
-            // create folders
-            Folder testFolder = createTestFolder(session);
-            Folder folder1 = createFolder(session, testFolder, "movefolder1");
-            Folder folder2 = createFolder(session, testFolder, "movefolder2");
-
-            // create document
-            Document doc1 = createDocument(session, folder1, "movetestdoc.txt", "move test");
-
-            // move
-            Document doc2 = (Document) doc1.move(folder1, folder2, SELECT_ALL_NO_CACHE_OC);
-
-            if (doc2 == null) {
-                addResult(createResult(FAILURE, "Moved document is null!"));
-            } else {
-                addResult(checkObject(session, doc2, getAllProperties(doc2),
-                        "Moved document check. Id: + " + doc2.getName()));
-            }
-
-            int count1 = countFolderChildren(folder1);
-            f = createResult(FAILURE, "Source folder should be empty after move but has " + count1 + " children!");
-            addResult(assertEquals(0, count1, null, f));
-
-            int count2 = countFolderChildren(folder2);
-            f = createResult(FAILURE, "Target folder should have exactly one child but has " + count2 + " children!");
-            addResult(assertEquals(1, count2, null, f));
-        } finally {
-            // clean up
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/NameCharsetTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/NameCharsetTest.java
deleted file mode 100644
index 584e93b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/NameCharsetTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Document names test.
- */
-public class NameCharsetTest extends AbstractSessionTest {
-
-    private static final String[] NAMES = new String[] { //
-    "\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074", //
-            "\u0053\u0063\u0068\u0072\u0069\u0066\u0074\u0073\u0074\u00fc\u0063\u006b", //
-            "\u0648\u062b\u064a\u0642\u0629", //
-            "\u0073\u0259\u006e\u0259\u0064", //
-            "\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", //
-            "\u6587\u4ef6", //
-            "\u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf", //
-            "\u0aa6\u0ab8\u0acd\u0aa4\u0abe\u0ab5\u0ac7\u0a9c", //
-            "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c", //
-            "\u0064\u006f\u0069\u0063\u0069\u006d\u00e9\u0061\u0064", //
-            "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8", //
-            "\u05d3\u05d0\u05b8\u05e7\u05d5\u05de\u05e2\u05e0\u05d8", //
-            "\u0ca6\u0cbe\u0c96\u0cb2\u0cc6", //
-            "\ubb38\uc11c", //
-            "\u0633\u0646\u062f", //
-            "\u0b86\u0bb5\u0ba3\u0bae\u0bcd", //
-            "\u0c2a\u0c24\u0c4d\u0c30\u0c02", //
-            "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23", //
-            "\u062f\u0633\u062a\u0627\u0648\u06cc\u0632", //
-            "\u0074\u00e0\u0069\u0020\u006c\u0069\u1ec7\u0075", //
-            "a&b", //
-            "abc%_Pxyz" };
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Name Charset Test");
-        setDescription("Creates and deletes documents with special characters in cmis:name.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            for (int i = 0; i < NAMES.length; i++) {
-                Document doc = null;
-                Document doc2 = null;
-                try {
-                    doc = null;
-                    doc = createDocument(session, testFolder, NAMES[i], NAMES[i]);
-
-                    // get the newly created object by path
-                    String path = doc.getPaths().get(0);
-                    doc2 = (Document) session.getObjectByPath(path, SELECT_ALL_NO_CACHE_OC);
-                    addResult(checkObject(session, doc2, getAllProperties(doc2), "New document object spec compliance"));
-
-                    f = createResult(FAILURE, "Names of the created and the fetched document don't match!");
-                    assertEquals(NAMES[i], doc2.getName(), null, f);
-
-                    ContentStream contentStream = doc.getContentStream();
-
-                    f = createResult(FAILURE, "Document has no content!");
-                    assertNotNull(contentStream, null, f);
-
-                    IOUtils.consumeAndClose(contentStream.getStream());
-                } catch (Exception e) {
-                    addResult(createResult(WARNING, "The name '" + NAMES[i] + "' raised this exception: " + e, e, false));
-                } finally {
-                    if (doc != null) {
-                        // delete it
-                        try {
-                            doc.delete(true);
-                        } catch (Exception e) {
-                            // ignore
-                        }
-                    }
-                }
-            }
-
-            addResult(createInfoResult("Tested " + NAMES.length + " different names."));
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/OperationContextTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/OperationContextTest.java
deleted file mode 100644
index e264edb..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/OperationContextTest.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import java.math.BigInteger;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class OperationContextTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "TCK test content.";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Operation Context");
-        setDescription("Creates a document, retrieves a minimal set of details, checks it, and finally deletes the document.");
-    }
-
-    @Override
-    public void run(Session session) {
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            // create a test document
-            Document document = createDocument(session, testFolder, "testdoc.txt", CONTENT);
-
-            // high-level API tests
-            runHighLevelApiTests(session, testFolder, document);
-
-            // low-level API tests
-            runLowLevelApiTests(session, testFolder, document);
-
-            // clean up
-            document.delete(true);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-
-    /**
-     * Checks for not requested properties, Allowable Actions, ACLs, renditions,
-     * relationships, and policies.
-     */
-    public void runHighLevelApiTests(Session session, Folder testFolder, Document testDocument) {
-        CmisTestResult f;
-
-        // only select some base properties
-        Set<String> properties = new HashSet<String>();
-        properties.add("cmis:objectId");
-        properties.add("cmis:baseTypeId");
-        properties.add("cmis:objectTypeId");
-
-        OperationContext context = session.createOperationContext();
-        context.setCacheEnabled(false);
-        context.setFilter(properties);
-        context.setIncludeAcls(false);
-        context.setIncludeAllowableActions(false);
-        context.setIncludePathSegments(false);
-        context.setIncludePolicies(false);
-        context.setIncludeRelationships(IncludeRelationships.NONE);
-        context.setLoadSecondaryTypeProperties(false);
-        context.setRenditionFilterString("cmis:none");
-
-        // get the object with the OperationContext
-        Document doc1 = (Document) session.getObject(testDocument, context);
-
-        // check properties
-        for (Property<?> prop : doc1.getProperties()) {
-            if (!properties.contains(prop.getDefinition().getQueryName())) {
-                addResult(createResult(CmisTestResultStatus.WARNING,
-                        "getObject() delivered the property '" + prop.getId()
-                                + "', although it has not been requested."));
-            }
-        }
-
-        // check other details
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered ACLs, although they have not been requested.");
-        addResult(assertNull(doc1.getAcl(), null, f));
-
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered Allowable Actions, although they have not been requested.");
-        addResult(assertNull(doc1.getAllowableActions(), null, f));
-
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered policies, although they have not been requested.");
-        addResult(assertListNullOrEmpty(doc1.getPolicies(), null, f));
-
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered relationships, although they have not been requested.");
-        addResult(assertListNullOrEmpty(doc1.getRelationships(), null, f));
-
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered renditions, although they have not been requested.");
-        addResult(assertListNullOrEmpty(doc1.getRenditions(), null, f));
-
-        // get the test folder children with the OperationContext
-        for (CmisObject child : testFolder.getChildren(context)) {
-            if (child.getId().equals(testDocument.getId())) {
-                // check properties
-                for (Property<?> prop : child.getProperties()) {
-                    if (!properties.contains(prop.getDefinition().getQueryName())) {
-                        addResult(createResult(CmisTestResultStatus.WARNING, "getChildren() delivered the property '"
-                                + prop.getId() + "', although it has not been requested."));
-                    }
-                }
-
-                // check other details
-                f = createResult(CmisTestResultStatus.INFO, "getChildren() delivered ACLs, which is not required.");
-                addResult(assertNull(child.getAcl(), null, f));
-
-                f = createResult(CmisTestResultStatus.WARNING,
-                        "getChildren() delivered Allowable Actions, although they have not been requested.");
-                addResult(assertNull(child.getAllowableActions(), null, f));
-
-                f = createResult(CmisTestResultStatus.INFO, "getChildren() delivered policies, which is not required.");
-                addResult(assertListNullOrEmpty(child.getPolicies(), null, f));
-
-                f = createResult(CmisTestResultStatus.WARNING,
-                        "getChildren() delivered relationships, although they have not been requested.");
-                addResult(assertListNullOrEmpty(child.getRelationships(), null, f));
-
-                f = createResult(CmisTestResultStatus.WARNING,
-                        "getChildren() delivered renditions, although they have not been requested.");
-                addResult(assertListNullOrEmpty(child.getRenditions(), null, f));
-
-                break;
-            }
-        }
-    }
-
-    /**
-     * Checks for change events and path segments.
-     */
-    public void runLowLevelApiTests(Session session, Folder testFolder, Document testDocument) {
-        CmisTestResult f;
-
-        String repositoryId = session.getRepositoryInfo().getId();
-        String filter = "cmis:objectId,cmis:baseTypeId,cmis:objectTypeId";
-
-        // get the object
-        ObjectData doc1 = session
-                .getBinding()
-                .getObjectService()
-                .getObject(repositoryId, testDocument.getId(), filter, Boolean.FALSE, IncludeRelationships.NONE,
-                        "cmis:none", Boolean.FALSE, Boolean.FALSE, null);
-
-        // check for change events
-        f = createResult(CmisTestResultStatus.WARNING,
-                "getObject() delivered a change event, which doesn't make sense.");
-        addResult(assertNull(doc1.getChangeEventInfo(), null, f));
-
-        // get the test folder children
-        ObjectInFolderList children = session
-                .getBinding()
-                .getNavigationService()
-                .getChildren(repositoryId, testFolder.getId(), filter, null, Boolean.FALSE, IncludeRelationships.NONE,
-                        "cmis:none", Boolean.FALSE, null, BigInteger.ZERO, null);
-
-        // check for path segments
-        for (ObjectInFolderData child : children.getObjects()) {
-            f = createResult(CmisTestResultStatus.WARNING,
-                    "getChildren() delivered a path segment, although it hasn't been requested.");
-            addResult(assertNull(child.getPathSegment(), null, f));
-        }
-
-        // get the document parent
-        List<ObjectParentData> parents = session
-                .getBinding()
-                .getNavigationService()
-                .getObjectParents(repositoryId, testDocument.getId(), filter, Boolean.FALSE, IncludeRelationships.NONE,
-                        "cmis:none", Boolean.FALSE, null);
-
-        // check for relative path segments
-        for (ObjectParentData parent : parents) {
-            f = createResult(CmisTestResultStatus.WARNING,
-                    "getObjectParents() delivered a relative path segment, although it hasn't been requested.");
-            addResult(assertNull(parent.getRelativePathSegment(), null, f));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/PropertyFilterTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/PropertyFilterTest.java
deleted file mode 100644
index db92b0b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/PropertyFilterTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.util.OperationContextUtils;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class PropertyFilterTest extends AbstractSessionTest {
-
-    private static final String CONTENT = "TCK test content.";
-    private static final String INVALID_PROPERTY = "cmis:tck:thisPropertyDoesNotExist";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Property Filter Test");
-        setDescription("Tests different property filter combinations for documents and folders.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        // filter with MIME type
-        OperationContext testContext1 = OperationContextUtils.createMinimumOperationContext();
-        Set<String> testfilter1 = new HashSet<String>(testContext1.getFilter());
-        testfilter1.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        testContext1.setFilter(testfilter1);
-
-        // filter with path
-        OperationContext testContext2 = OperationContextUtils.createMinimumOperationContext();
-        Set<String> testfilter2 = new HashSet<String>(testContext2.getFilter());
-        testfilter2.add(PropertyIds.PATH);
-        testContext2.setFilter(testfilter2);
-
-        // filter with invalid property
-        OperationContext testContext3 = OperationContextUtils.createMinimumOperationContext();
-        Set<String> testfilter3 = new HashSet<String>(testContext3.getFilter());
-        testfilter3.add(INVALID_PROPERTY);
-        testContext3.setFilter(testfilter3);
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            Document doc = createDocument(session, testFolder, "doc", CONTENT);
-
-            Document doc1 = (Document) session.getObject(doc, testContext1);
-
-            // check document
-            f = createResult(FAILURE, "Document should have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE + "!");
-            addResult(assertNotNull(doc1.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(FAILURE, "Document should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(doc1.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Document should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(doc1.getProperty(INVALID_PROPERTY), null, f));
-
-            Document doc2 = (Document) session.getObject(doc, testContext2);
-
-            f = createResult(WARNING, "Document should not have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(doc2.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(FAILURE, "Document should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(doc2.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Document should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(doc2.getProperty(INVALID_PROPERTY), null, f));
-
-            Document doc3 = (Document) session.getObject(doc, testContext3);
-
-            f = createResult(WARNING, "Document should not have the property" + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(doc3.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(FAILURE, "Document should not have the property" + PropertyIds.PATH + "!");
-            addResult(assertNull(doc3.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Document should not have the property" + INVALID_PROPERTY + "!");
-            addResult(assertNull(doc3.getProperty(INVALID_PROPERTY), null, f));
-
-            // check folder
-            Folder folder1 = (Folder) session.getObject(testFolder, testContext1);
-
-            f = createResult(FAILURE, "Folder should not have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(folder1.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(WARNING, "Folder should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(folder1.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Folder should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(folder1.getProperty(INVALID_PROPERTY), null, f));
-
-            Folder folder2 = (Folder) session.getObject(testFolder, testContext2);
-
-            f = createResult(FAILURE, "Folder should not have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(folder2.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(FAILURE, "Folder should have the property " + PropertyIds.PATH + "!");
-            addResult(assertNotNull(folder2.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Folder should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(folder2.getProperty(INVALID_PROPERTY), null, f));
-
-            Folder folder3 = (Folder) session.getObject(testFolder, testContext3);
-
-            f = createResult(FAILURE, "Folder should not have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(folder3.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(WARNING, "Folder should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(folder3.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Folder should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(folder3.getProperty(INVALID_PROPERTY), null, f));
-
-            // check children
-            CmisObject obj1 = testFolder.getChildren(testContext1).iterator().next();
-
-            f = createResult(WARNING, "Child should have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE + "!");
-            addResult(assertNotNull(obj1.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(WARNING, "Child should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(obj1.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Child should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(obj1.getProperty(INVALID_PROPERTY), null, f));
-
-            CmisObject obj2 = testFolder.getChildren(testContext2).iterator().next();
-
-            f = createResult(WARNING, "Child should not have the property " + PropertyIds.CONTENT_STREAM_MIME_TYPE
-                    + "!");
-            addResult(assertNull(obj2.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(WARNING, "Child should not have the property " + PropertyIds.PATH + "!");
-            addResult(assertNull(obj2.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Child should not have the property " + INVALID_PROPERTY + "!");
-            addResult(assertNull(obj2.getProperty(INVALID_PROPERTY), null, f));
-
-            CmisObject obj3 = testFolder.getChildren(testContext3).iterator().next();
-
-            f = createResult(WARNING, "Child should not have the property" + PropertyIds.CONTENT_STREAM_MIME_TYPE + "!");
-            addResult(assertNull(obj3.getProperty(PropertyIds.CONTENT_STREAM_MIME_TYPE), null, f));
-            f = createResult(WARNING, "Child should not have the property" + PropertyIds.PATH + "!");
-            addResult(assertNull(obj3.getProperty(PropertyIds.PATH), null, f));
-            f = createResult(FAILURE, "Child should not have the property" + INVALID_PROPERTY + "!");
-            addResult(assertNull(obj3.getProperty(INVALID_PROPERTY), null, f));
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java
deleted file mode 100644
index db0a1b6..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.UNEXPECTED_EXCEPTION;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Content test.
- */
-public class SetAndDeleteContentTest extends AbstractSessionTest {
-
-    private static final String CONTENT1 = "one";
-    private static final String CONTENT2 = "two";
-    private static final String CONTENT3 = "three";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Set, Append, and Delete Content Test");
-        setDescription("Creates a new document and tries to set, append, and delete its content.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        if (getContentStreamUpdatesCapbility(session) == CapabilityContentStreamUpdates.NONE) {
-            addResult(createResult(SKIPPED, "Stream updates are not supported. Test skipped!"));
-            return;
-        }
-
-        try {
-            // create folder and document
-            Folder testFolder = createTestFolder(session);
-            Document doc = createDocument(session, testFolder, "contenttest.txt", CONTENT1);
-            Document workDoc = doc;
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
-
-            // test if check out is required and possible
-            boolean checkedout = false;
-            if (!doc.getAllowableActions().getAllowableActions().contains(Action.CAN_SET_CONTENT_STREAM)) {
-                if (!docType.isVersionable()) {
-                    addResult(createResult(SKIPPED,
-                            "The test document does not accept a new content stream. Test skipped!"));
-                    doc.delete(true);
-                    return;
-                } else {
-                    workDoc = (Document) session.getObject(doc.checkOut(), SELECT_ALL_NO_CACHE_OC);
-                    checkedout = true;
-
-                    if (!workDoc.getAllowableActions().getAllowableActions().contains(Action.CAN_SET_CONTENT_STREAM)) {
-                        addResult(createResult(SKIPPED,
-                                "The test PWC does not accept a new content stream. Test skipped!"));
-                        workDoc.cancelCheckOut();
-                        doc.delete(true);
-                        return;
-                    }
-                }
-            }
-
-            // test if the content stream can be deleted
-            if (docType.getContentStreamAllowed() == ContentStreamAllowed.REQUIRED) {
-                addResult(createResult(SKIPPED,
-                        "A content stream is required for this document type. deleteContentStream() test skipped!"));
-            } else {
-                // delete content stream
-                try {
-                    ObjectId newObjectId = workDoc.deleteContentStream(true);
-
-                    // deleteContentStream may have created a new version
-                    Document contentDoc = getNewVersion(session, workDoc, checkedout, newObjectId,
-                            "deleteContentStream()");
-
-                    f = createResult(FAILURE, "Document still has content after deleteContentStream() has been called!");
-                    addResult(assertNull(contentDoc.getContentStream(), null, f));
-
-                    f = createResult(
-                            FAILURE,
-                            "Document still has a MIME type after deleteContentStream() has been called: "
-                                    + contentDoc.getContentStreamMimeType());
-                    addResult(assertNull(contentDoc.getContentStreamMimeType(), null, f));
-
-                    f = createResult(FAILURE,
-                            "Document still has a content length after deleteContentStream() has been called: "
-                                    + contentDoc.getContentStreamLength());
-                    addResult(assertEquals(-1L, contentDoc.getContentStreamLength(), null, f));
-
-                    f = createResult(
-                            FAILURE,
-                            "Document still has a file name after deleteContentStream() has been called: "
-                                    + contentDoc.getContentStreamFileName());
-                    addResult(assertNull(contentDoc.getContentStreamFileName(), null, f));
-
-                    workDoc = contentDoc;
-                } catch (CmisNotSupportedException e) {
-                    addResult(createResult(WARNING, "deleteContentStream() is not supported!"));
-                }
-            }
-
-            // set a new content stream
-            byte[] contentBytes = IOUtils.toUTF8Bytes(CONTENT2);
-
-            try {
-                ContentStream contentStream = session.getObjectFactory().createContentStream(workDoc.getName(),
-                        contentBytes.length, "text/plain", new ByteArrayInputStream(contentBytes));
-
-                ObjectId newObjectId = workDoc.setContentStream(contentStream, true, true);
-
-                IOUtils.closeQuietly(contentStream);
-
-                // setContentStream may have created a new version
-                Document contentDoc = getNewVersion(session, workDoc, checkedout, newObjectId, "setContentStream()");
-
-                // test new content
-                try {
-                    String content = getStringFromContentStream(contentDoc.getContentStream());
-                    f = createResult(FAILURE, "Document content doesn't match the content set by setContentStream()!");
-                    addResult(assertEquals(CONTENT2, content, null, f));
-                } catch (IOException e) {
-                    addResult(createResult(UNEXPECTED_EXCEPTION,
-                            "Document content couldn't be read! Exception: " + e.getMessage(), e, true));
-                }
-
-                workDoc = contentDoc;
-            } catch (CmisNotSupportedException e) {
-                addResult(createResult(WARNING, "setContentStream() is not supported!"));
-            }
-
-            // test appendContentStream
-            if (session.getRepositoryInfo().getCmisVersion() != CmisVersion.CMIS_1_0) {
-                contentBytes = IOUtils.toUTF8Bytes(CONTENT3);
-
-                try {
-                    ContentStream contentStream = session.getObjectFactory().createContentStream(workDoc.getName(),
-                            contentBytes.length, "text/plain", new ByteArrayInputStream(contentBytes));
-
-                    ObjectId newObjectId = workDoc.appendContentStream(contentStream, true);
-
-                    // appendContentStream may have created a new version
-                    Document contentDoc = getNewVersion(session, workDoc, checkedout, newObjectId,
-                            "appendContentStream()");
-
-                    // test new content
-                    try {
-                        String content = getStringFromContentStream(contentDoc.getContentStream());
-                        f = createResult(FAILURE,
-                                "Document content doesn't match the content set by setContentStream() followed by appendContentStream()!");
-                        addResult(assertEquals(CONTENT2 + CONTENT3, content, null, f));
-                    } catch (IOException e) {
-                        addResult(createResult(UNEXPECTED_EXCEPTION, "Document content couldn't be read! Exception: "
-                                + e.getMessage(), e, true));
-                    }
-                } catch (CmisNotSupportedException e) {
-                    addResult(createResult(WARNING, "appendContentStream() is not supported!"));
-                }
-            }
-
-            // cancel a possible check out
-            if (checkedout) {
-                workDoc.cancelCheckOut();
-            }
-
-            // remove the document
-            deleteObject(doc);
-        } finally {
-            deleteTestFolder();
-        }
-    }
-
-    private CapabilityContentStreamUpdates getContentStreamUpdatesCapbility(Session session) {
-        if (session.getRepositoryInfo().getCapabilities() == null) {
-            return null;
-        }
-
-        return session.getRepositoryInfo().getCapabilities().getContentStreamUpdatesCapability();
-    }
-
-    private Document getNewVersion(Session session, Document orgDoc, boolean checkedout, ObjectId newObjectId,
-            String operation) {
-        Document result = orgDoc;
-
-        if (newObjectId != null) {
-            // -> Non AtomPub binding
-            if (!orgDoc.getId().equals(newObjectId.getId())) {
-                if (checkedout) {
-                    addResult(createResult(FAILURE, operation + " created a new version from a PWC!"));
-                } else {
-                    result = (Document) session.getObject(newObjectId, SELECT_ALL_NO_CACHE_OC);
-                    addResult(checkObject(session, result, getAllProperties(result), "Version created by " + operation
-                            + "  compliance"));
-                }
-            }
-        } else {
-            if (getBinding() != BindingType.ATOMPUB) {
-                addResult(createResult(FAILURE, operation + " did not return an object id!"));
-            }
-
-            // -> AtomPub binding or incompliant other binding
-            if (checkedout) {
-                // we cannot check if the repository does the right thing,
-                // but if there is a problem the versioning tests should
-                // catch it
-            } else if (Boolean.TRUE.equals(((DocumentTypeDefinition) orgDoc.getType()).isVersionable())) {
-                List<Document> versions = orgDoc.getAllVersions();
-                if (versions == null || versions.isEmpty()) {
-                    addResult(createResult(FAILURE, operation
-                            + " created a new version but the version history is empty!"));
-                } else if (!orgDoc.getId().equals(versions.get(0).getId())) {
-                    result = (Document) session.getObject(versions.get(0), SELECT_ALL_NO_CACHE_OC);
-                    addResult(checkObject(session, result, getAllProperties(result), "Version created by " + operation
-                            + " compliance"));
-                }
-            }
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/UpdateSmokeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/UpdateSmokeTest.java
deleted file mode 100644
index aff86cd..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/UpdateSmokeTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Update smoke test.
- */
-public class UpdateSmokeTest extends AbstractSessionTest {
-
-    private static final String DOC_NAME1 = "updatetest1.txt";
-    private static final String DOC_NAME2 = "updatetest2.txt";
-    private static final String FOLDER_NAME1 = "updatetest1";
-    private static final String FOLDER_NAME2 = "updatetest2";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Update Smoke Test");
-        setDescription("Creates a document, updates its name and finally deletes it.");
-    }
-
-    @Override
-    public void run(Session session) {
-        try {
-            // create test folder
-            Folder testFolder = createTestFolder(session);
-
-            // document test
-            updateDocument(session, testFolder);
-
-            // folder test
-            updateFolder(session, testFolder);
-        } finally {
-            // clean up
-            deleteTestFolder();
-        }
-    }
-
-    private void updateDocument(Session session, Folder testFolder) {
-        CmisTestResult f;
-
-        // create document
-        Document doc1 = createDocument(session, testFolder, DOC_NAME1, "rename me!");
-        Document workDoc = doc1;
-
-        f = createResult(FAILURE, "Document name doesn't match the given name!");
-        addResult(assertEquals(DOC_NAME1, doc1.getName(), null, f));
-
-        // test if check out is required
-        boolean checkedout = false;
-        DocumentTypeDefinition type = (DocumentTypeDefinition) doc1.getType();
-        PropertyDefinition<?> namePropDef = type.getPropertyDefinitions().get(PropertyIds.NAME);
-        if (namePropDef.getUpdatability() == Updatability.WHENCHECKEDOUT
-                || (!doc1.getAllowableActions().getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES) && Boolean.TRUE
-                        .equals(type.isVersionable()))) {
-            workDoc = (Document) session.getObject(doc1.checkOut(), SELECT_ALL_NO_CACHE_OC);
-            checkedout = true;
-        }
-
-        // update
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, DOC_NAME2);
-
-        ObjectId newId = workDoc.updateProperties(properties, false);
-        Document doc2 = (Document) session.getObject(newId, SELECT_ALL_NO_CACHE_OC);
-
-        addResult(checkObject(session, doc2, getAllProperties(doc2), "Updated document compliance"));
-
-        f = createResult(FAILURE, "Document name doesn't match updated value!");
-        addResult(assertEquals(DOC_NAME2, doc2.getName(), null, f));
-
-        // delete
-        if (!workDoc.getId().equals(doc2.getId())) {
-            deleteObject(doc2);
-        }
-
-        // cancel a possible check out
-        if (checkedout) {
-            workDoc.cancelCheckOut();
-        }
-
-        if (!doc1.getId().equals(doc2.getId())) {
-            if (exists(doc1)) {
-                deleteObject(doc1);
-            }
-        }
-    }
-
-    private void updateFolder(Session session, Folder testFolder) {
-        CmisTestResult f;
-
-        Folder folder = createFolder(session, testFolder, FOLDER_NAME1);
-
-        f = createResult(FAILURE, "Folder name doesn't match the given name!");
-        addResult(assertEquals(FOLDER_NAME1, folder.getName(), null, f));
-
-        // update
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, FOLDER_NAME2);
-
-        ObjectId newId = folder.updateProperties(properties, false);
-
-        f = createResult(WARNING, "Folder id changed after name update! The folder id should never change!");
-        addResult(assertEquals(folder.getId(), newId.getId(), null, f));
-
-        // get the new folder object and check the new name
-        folder.refresh();
-
-        f = createResult(FAILURE, "Folder name doesn't match updated value!");
-        addResult(assertEquals(FOLDER_NAME2, folder.getName(), null, f));
-
-        // update again with the same name
-        folder.rename(FOLDER_NAME2, true);
-        
-        f = createResult(FAILURE, "Folder name doesn't match updated value!");
-        addResult(assertEquals(FOLDER_NAME2, folder.getName(), null, f));
-        
-        deleteObject(folder);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/WhitespaceInNameTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/WhitespaceInNameTest.java
deleted file mode 100644
index 0b02e48..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/WhitespaceInNameTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.crud;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class WhitespaceInNameTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Whitespace in Name Test");
-        setDescription("Creates documents with spaces in cmis:name.");
-    }
-
-    @Override
-    public void run(Session session) {
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            testCenterSpaceSpace(session, testFolder);
-            testMultipleCenterSpaceSpace(session, testFolder);
-            testLeadingSpace(session, testFolder);
-            testTrailingSpace(session, testFolder);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-
-    private void testLeadingSpace(Session session, Folder testFolder) {
-        String name = "leading.txt";
-
-        try {
-            Document doc = createDocument(session, testFolder, " " + name, "");
-
-            if (doc.getName().equals(" " + name)) {
-                addResult(createInfoResult("Repository does supports document names with a leading space."));
-            } else {
-                if (doc.getName().equals(name)) {
-                    addResult(createInfoResult("Repository removes leading space from document name."));
-                } else {
-                    addResult(createInfoResult("Repository renames documents with a leading space."));
-                }
-            }
-        } catch (CmisBaseException e) {
-            addResult(createInfoResult("Repository does not support document names with a leading space. Exception: "
-                    + e.toString()));
-        }
-    }
-
-    private void testTrailingSpace(Session session, Folder testFolder) {
-        String name = "trailing.txt";
-
-        try {
-            Document doc = createDocument(session, testFolder, name + " ", "");
-
-            if (doc.getName().equals(name + " ")) {
-                addResult(createInfoResult("Repository does supports document names with a trailing space."));
-            } else {
-                if (doc.getName().equals(name)) {
-                    addResult(createInfoResult("Repository removes trailing space from document name."));
-                } else {
-                    addResult(createInfoResult("Repository renames documents with a trailing space."));
-                }
-            }
-        } catch (CmisBaseException e) {
-            addResult(createInfoResult("Repository does not support document names with a trailing space. Exception: "
-                    + e.toString()));
-        }
-    }
-
-    private void testCenterSpaceSpace(Session session, Folder testFolder) {
-        String name = "center space.txt";
-
-        try {
-            Document doc = createDocument(session, testFolder, name, "");
-
-            if (doc.getName().equals(name)) {
-                addResult(createInfoResult("Repository does supports document names with a space."));
-            } else {
-                if (doc.getName().equals("centerspace.txt")) {
-                    addResult(createInfoResult("Repository removes spaces from document name."));
-                } else {
-                    addResult(createInfoResult("Repository renames documents with a space."));
-                }
-            }
-        } catch (CmisBaseException e) {
-            addResult(createInfoResult("Repository does not support document names with a space. Exception: "
-                    + e.toString()));
-        }
-    }
-
-    private void testMultipleCenterSpaceSpace(Session session, Folder testFolder) {
-        String name = "twocenter  spaces.txt";
-
-        try {
-            Document doc = createDocument(session, testFolder, name, "");
-
-            if (doc.getName().equals(name)) {
-                addResult(createInfoResult("Repository does supports document names with more than one successive spaces."));
-            } else {
-                if (doc.getName().equals("twocenterspaces.txt")) {
-                    addResult(createInfoResult("Repository removes spaces from document name."));
-                } else if (doc.getName().equals("twocenter spaces.txt")) {
-                    addResult(createInfoResult("Repository combines multiple spaces into one in document names."));
-                } else {
-                    addResult(createInfoResult("Repository renames documents with a space."));
-                }
-            }
-        } catch (CmisBaseException e) {
-            addResult(createInfoResult("Repository does not support document names with a space. Exception: "
-                    + e.toString()));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/FilingTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/FilingTestGroup.java
deleted file mode 100644
index e42e56e..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/FilingTestGroup.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.filing;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains multifiling and unfiling tests.
- */
-public class FilingTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Filing Test Group");
-        setDescription("Multifiling anf Unfiling tests.");
-
-        addTest(new MultifilingTest());
-        addTest(new UnfilingTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/MultifilingTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/MultifilingTest.java
deleted file mode 100644
index d158d13..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/MultifilingTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.filing;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Multifiling test.
- */
-public class MultifilingTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Multifiling Test");
-        setDescription("Creates two folders and a document in one of the folders, "
-                + "adds the document to the second folder and then removes it again for the second folder.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsMultifiling(session)) {
-            CmisTestResult f;
-
-            int count1;
-            int count2;
-            int parents;
-
-            try {
-                // create folders
-                Folder testFolder = createTestFolder(session);
-                Folder folder1 = createFolder(session, testFolder, "folder1");
-                Folder folder2 = createFolder(session, testFolder, "folder2");
-
-                // create document
-                Document doc1 = createDocument(session, folder1, "testdoc.txt", "multifiling test");
-
-                addResult(checkChildren(session, folder1, "Folder 1 after createDocument()"));
-                addResult(checkChildren(session, folder2, "Folder 2 after createDocument()"));
-
-                count1 = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder 1 should have exactly one child but has " + count1 + " children!");
-                addResult(assertEquals(1, count1, null, f));
-
-                count2 = countFolderChildren(folder2);
-                f = createResult(FAILURE, "Folder 2 should not have children but has " + count2 + " children!");
-                addResult(assertEquals(0, count2, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should have one parent but has " + parents + " parents!");
-                addResult(assertEquals(1, parents, null, f));
-
-                // add to other folder
-                doc1.addToFolder(folder2, true);
-
-                addResult(checkChildren(session, folder1, "Folder 1 after addToFolder()"));
-                addResult(checkChildren(session, folder2, "Folder 2 after addToFolder()"));
-
-                count1 = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder 1 should have exactly one child but has " + count1 + " children!");
-                addResult(assertEquals(1, count1, null, f));
-
-                count2 = countFolderChildren(folder2);
-                f = createResult(FAILURE, "Folder 2 should have exactly one child but has " + count2 + " children!");
-                addResult(assertEquals(1, count2, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should have two parents but has " + parents + " parents!");
-                addResult(assertEquals(2, parents, null, f));
-
-                // remove from first folder
-                doc1.removeFromFolder(folder2);
-
-                addResult(checkChildren(session, folder1, "Folder 1 after removeFromFolder()"));
-                addResult(checkChildren(session, folder2, "Folder 2 after removeFromFolder()"));
-
-                count1 = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder 1 should have exactly one child but has " + count1 + " children!");
-                addResult(assertEquals(1, count1, null, f));
-
-                count2 = countFolderChildren(folder2);
-                f = createResult(FAILURE, "Folder 2 should not have children but has " + count2 + " children!");
-                addResult(assertEquals(0, count2, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should have one parent but has " + parents + " parents!");
-                addResult(assertEquals(1, parents, null, f));
-
-                // delete everything
-                deleteObject(doc1);
-                deleteObject(folder2);
-                deleteObject(folder1);
-            } finally {
-                // clean up
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Multifling not supported. Test Skipped!"));
-        }
-    }
-
-    protected boolean supportsMultifiling(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().isMultifilingSupported() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().isMultifilingSupported().booleanValue();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/UnfilingTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/UnfilingTest.java
deleted file mode 100644
index 114a48c..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/filing/UnfilingTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.filing;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Unfiling test.
- */
-public class UnfilingTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Unfiling Test");
-        setDescription("Creates a folder and a document, removes the document from the folder and then adds it again.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsUnfiling(session)) {
-            CmisTestResult f;
-
-            int count;
-            int parents;
-
-            try {
-                // create folders
-                Folder testFolder = createTestFolder(session);
-                Folder folder1 = createFolder(session, testFolder, "folder1");
-
-                // create document
-                Document doc1 = createDocument(session, folder1, "testdoc.txt", "unfiling test");
-
-                addResult(checkChildren(session, folder1, "Folder after createDocument()"));
-
-                count = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder should have exactly one child but has " + count + " children!");
-                addResult(assertEquals(1, count, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should have one parent but has " + parents + " parents!");
-                addResult(assertEquals(1, parents, null, f));
-
-                // remove from folder
-                doc1.removeFromFolder(folder1);
-
-                addResult(checkChildren(session, folder1, "Folder after removeFromFolder()"));
-
-                count = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder should have no children but has " + count + " children!");
-                addResult(assertEquals(0, count, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should not have no parents but has " + parents + " parents!");
-                addResult(assertEquals(0, parents, null, f));
-
-                // add to folder again
-                doc1.addToFolder(folder1, true);
-
-                addResult(checkChildren(session, folder1, "Folder after addToFolder()"));
-
-                count = countFolderChildren(folder1);
-                f = createResult(FAILURE, "Folder should have exactly one child but has " + count + " children!");
-                addResult(assertEquals(1, count, null, f));
-
-                parents = doc1.getParents().size();
-                f = createResult(FAILURE, "Document should have one parent but has " + parents + " parents!");
-                addResult(assertEquals(1, parents, null, f));
-
-                // delete everything
-                deleteObject(doc1);
-                deleteObject(folder1);
-            } finally {
-                // clean up
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Unfiling not supported. Test Skipped!"));
-        }
-    }
-
-    protected boolean supportsUnfiling(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().isUnfilingSupported() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().isUnfilingSupported().booleanValue();
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/AbstractQueryTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/AbstractQueryTest.java
deleted file mode 100644
index b79fc37..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/AbstractQueryTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public abstract class AbstractQueryTest extends AbstractSessionTest {
-
-    protected boolean supportsQuery(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().getQueryCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getQueryCapability() != CapabilityQuery.NONE;
-    }
-
-    protected boolean isFulltextOnly(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().getQueryCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getQueryCapability() == CapabilityQuery.FULLTEXTONLY;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java
deleted file mode 100644
index 0196e0e..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.ChangeEvents;
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.ChangeType;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Content Changes smoke test.
- */
-public class ContentChangesSmokeTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Content Changes Smoke Test");
-        setDescription("Calls getContentChanges(). It does not check if the results are correct!");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        if (supportsContentChanges(session)) {
-            // get a page of 100 entries
-            ChangeEvents events = session.getContentChanges(null, true, 1000, SELECT_ALL_NO_CACHE_OC);
-
-            f = createResult(FAILURE, "Change events are null!");
-            addResult(assertNotNull(events, null, f));
-
-            if (events != null && events.getChangeEvents() != null) {
-
-                if (getBinding() != BindingType.ATOMPUB) {
-                    // the AtompPub binding does not return a change log token
-                    f = createResult(FAILURE, "Change log token is null!");
-                    addResult(assertNotNull(events.getLatestChangeLogToken(), null, f));
-                } else {
-                    // an OpenCMIS based server transports the change log token
-                    // in proprietary way.
-                    CmisTestResult ocs = createResult(INFO,
-                            "Change log token is null. The AtomPub binding does not return it.");
-                    CmisTestResult nocs = createResult(INFO,
-                            "Change log token is not null. Probably an OpenCMIS based server.");
-                    addResult(assertNull(events.getLatestChangeLogToken(), ocs, nocs));
-                }
-
-                for (ChangeEvent event : events.getChangeEvents()) {
-                    checkChangeEvent(session, event);
-                }
-            }
-
-            // get all entries
-            for (ChangeEvent event : session.getContentChanges(null, true, SELECT_ALL_NO_CACHE_OC)) {
-                checkChangeEvent(session, event);
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Content Changes not supported. Test Skipped!"));
-        }
-    }
-
-    protected boolean supportsContentChanges(Session session) {
-        RepositoryInfo repository = session.getRepositoryInfo();
-
-        if (repository.getCapabilities().getChangesCapability() == null) {
-            return false;
-        }
-
-        return repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE;
-    }
-
-    protected void checkChangeEvent(Session session, ChangeEvent event) {
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Object Id is not set!");
-        addResult(assertStringNotEmpty(event.getObjectId(), null, f));
-
-        f = createResult(FAILURE, "Change Type is not set! Id: " + event.getObjectId());
-        addResult(assertNotNull(event.getChangeType(), null, f));
-
-        f = createResult(FAILURE, "Change Time is not set! Id: " + event.getObjectId());
-        addResult(assertNotNull(event.getChangeTime(), null, f));
-
-        if (event.getObjectId() != null) {
-            if (event.getChangeType() == ChangeType.DELETED) {
-                try {
-                    session.getObject(event.getObjectId(), SELECT_ALL_NO_CACHE_OC);
-                    addResult(createResult(
-                            FAILURE,
-                            "Change event indicates that an object has been deleted but it still exists. Id: "
-                                    + event.getObjectId()));
-                } catch (CmisObjectNotFoundException e) {
-                    // expected
-                }
-            } else {
-                try {
-                    CmisObject object = session.getObject(event.getObjectId(), SELECT_ALL_NO_CACHE_OC);
-                    addResult(checkObject(session, object, getAllProperties(object),
-                            "Object check. Id: " + event.getObjectId()));
-                } catch (CmisObjectNotFoundException e) {
-                    // object might have been deleted later
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryForObject.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryForObject.java
deleted file mode 100644
index 9b7e6f7..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryForObject.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-
-public class QueryForObject extends AbstractQueryTest {
-
-    private static final String CONTENT = "TCK test content.";
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Query For Object Test");
-        setDescription("Creates a folder and a document, queries them by object id, and deletes both.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsQuery(session) && !isFulltextOnly(session)) {
-            // create a test folder
-            Folder testFolder = createTestFolder(session);
-
-            try {
-                // create a test document
-                Document document = createDocument(session, testFolder, "testdoc.txt", CONTENT);
-
-                // find the folder
-                runFolderQuery(session, testFolder);
-
-                // find the document
-                runDocumentQuery(session, document);
-
-                // clean up
-                document.delete(true);
-            } finally {
-                // delete the test folder
-                deleteTestFolder();
-            }
-
-        } else {
-            addResult(createResult(SKIPPED, "Metadata query not supported. Test Skipped!"));
-        }
-    }
-
-    public void runFolderQuery(Session session, Folder testFolder) {
-        if (!Boolean.TRUE.equals(testFolder.getType().isQueryable())) {
-            addResult(createResult(SKIPPED, "Folder type '" + testFolder.getType().getId()
-                    + "' is not queryable. Folder query test skipped!"));
-            return;
-        }
-
-        CmisTestResult f;
-
-        QueryStatement[] statements = new QueryStatement[] {
-                session.createQueryStatement("SELECT * FROM ? WHERE ? = ?"),
-                session.createQueryStatement("SELECT * FROM ? WHERE ? IN (?)") };
-
-        for (QueryStatement statement : statements) {
-            statement.setType(1, testFolder.getType());
-            statement.setProperty(2, testFolder.getType().getPropertyDefinitions().get(PropertyIds.OBJECT_ID));
-            statement.setString(3, testFolder.getId());
-
-            addResult(createInfoResult("Folder query: " + statement.toQueryString()));
-
-            int count = 0;
-            for (QueryResult qr : statement.query(false)) {
-                count++;
-
-                String objectId = qr.getPropertyValueByQueryName("cmis:objectId");
-
-                f = createResult(FAILURE, "Folder query returned unexpected object. Id: " + objectId);
-                addResult(assertEquals(testFolder.getId(), objectId, null, f));
-            }
-
-            f = createResult(FAILURE, "Folder query should return exactly one hit, but returned " + count + ".");
-            addResult(assertEquals(1, count, null, f));
-        }
-    }
-
-    public void runDocumentQuery(Session session, Document testDocument) {
-        if (!Boolean.TRUE.equals(testDocument.getType().isQueryable())) {
-            addResult(createResult(SKIPPED, "Document type '" + testDocument.getType().getId()
-                    + "' is not queryable. Document query test skipped!"));
-            return;
-        }
-
-        CmisTestResult f;
-
-        QueryStatement[] statements = new QueryStatement[] {
-                session.createQueryStatement("SELECT * FROM ? WHERE ? = ?"),
-                session.createQueryStatement("SELECT * FROM ? WHERE ? IN (?)") };
-
-        for (QueryStatement statement : statements) {
-            statement.setType(1, testDocument.getType());
-            statement.setProperty(2, testDocument.getType().getPropertyDefinitions().get(PropertyIds.OBJECT_ID));
-            statement.setString(3, testDocument.getId());
-
-            addResult(createInfoResult("Document query: " + statement.toQueryString()));
-
-            int count = 0;
-            for (QueryResult qr : statement.query(false)) {
-                count++;
-
-                String objectId = qr.getPropertyValueByQueryName("cmis:objectId");
-
-                f = createResult(FAILURE, "Document query returned unexpected object. Id: " + objectId);
-                addResult(assertEquals(testDocument.getId(), objectId, null, f));
-            }
-
-            f = createResult(FAILURE, "Document query should return exactly one hit, but returned " + count + ".");
-            addResult(assertEquals(1, count, null, f));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryInFolderTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryInFolderTest.java
deleted file mode 100644
index 21fa4b1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryInFolderTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-
-public class QueryInFolderTest extends AbstractQueryTest {
-
-    private static final String CONTENT = "TCK test content.";
-
-    private static final int LEVEL1_DOCS = 5;
-    private static final int LEVEL1_FOLDERS = 5;
-    private static final int LEVEL2_DOCS = 5;
-    private static final int LEVEL2_FOLDERS = 5;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Query IN_FOLDER and IN_TREE Test");
-        setDescription("Performs IN_FOLDER and IN_TREE queries.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsQuery(session) && !isFulltextOnly(session)) {
-            // create a test folder
-            Folder testFolder = createTestFolder(session);
-
-            try {
-                Set<String> topLevelDocs = new HashSet<String>();
-                Set<String> topLevelFolders = new HashSet<String>();
-
-                // create documents
-                for (int i = 0; i < LEVEL1_DOCS; i++) {
-                    Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
-                    topLevelDocs.add(newDocument.getId());
-                }
-
-                // create folders
-                for (int i = 0; i < LEVEL1_FOLDERS; i++) {
-                    Folder newFolder = createFolder(session, testFolder, "folder" + i);
-                    topLevelFolders.add(newFolder.getId());
-
-                    for (int j = 0; j < LEVEL2_DOCS; j++) {
-                        createDocument(session, newFolder, "doc" + j, CONTENT);
-                    }
-
-                    for (int j = 0; j < LEVEL2_FOLDERS; j++) {
-                        createFolder(session, newFolder, "folder" + j);
-                    }
-                }
-
-                doQuery(session, testFolder, "cmis:document", false, topLevelDocs, topLevelFolders);
-                doQuery(session, testFolder, "cmis:document", true, topLevelDocs, topLevelFolders);
-                doQuery(session, testFolder, "cmis:folder", false, topLevelDocs, topLevelFolders);
-                doQuery(session, testFolder, "cmis:folder", true, topLevelDocs, topLevelFolders);
-            } finally {
-                // delete the test folder
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Metadata query not supported. Test Skipped!"));
-        }
-    }
-
-    private void doQuery(Session session, ObjectId testFolder, String type, boolean deep, Set<String> topLevelDocs,
-            Set<String> topLevelFolders) {
-        CmisTestResult f;
-
-        String inWhat = (deep ? "IN_TREE" : "IN_FOLDER");
-
-        QueryStatement statement = session.createQueryStatement("SELECT ? FROM ? WHERE " + inWhat + "(?)");
-        statement.setProperty(1, type, PropertyIds.OBJECT_ID);
-        statement.setType(2, type);
-        statement.setString(3, testFolder.getId());
-
-        addResult(createInfoResult("Query: " + statement.toQueryString()));
-
-        try {
-            int count = 0;
-
-            for (QueryResult qr : statement.query(false).getPage(100)) {
-                count++;
-
-                String objectId = qr.getPropertyValueByQueryName("cmis:objectId");
-
-                f = createResult(FAILURE, inWhat + " query returned an invalid object ID!");
-                addResult(assertStringNotEmpty(objectId, null, f));
-
-                FileableCmisObject object = null;
-                try {
-                    object = (FileableCmisObject) session.getObject(objectId);
-                } catch (CmisObjectNotFoundException onf) {
-                    addResult(createResult(FAILURE, inWhat
-                            + " query returned an object ID of an object that doesn't exist!"));
-                }
-
-                if (!deep && object != null) {
-                    f = createResult(FAILURE, inWhat + " query returned an object that should not be there!");
-                    addResult(assertIsTrue(
-                            topLevelDocs.contains(object.getId()) || topLevelFolders.contains(object.getId()), null, f));
-
-                    boolean found = false;
-                    for (Folder parent : object.getParents()) {
-                        if (testFolder.getId().equals(parent.getId())) {
-                            found = true;
-                            break;
-                        }
-                    }
-
-                    if (!found) {
-                        addResult(createResult(FAILURE, inWhat
-                                + " query returned an object, which hasn't the test folder as a parent folder!"));
-                    }
-                }
-            }
-
-            addResult(createInfoResult("Hits: " + count));
-        } catch (CmisBaseException e) {
-            addResult(createResult(FAILURE,
-                    inWhat + " query failed: " + e.getClass().getSimpleName() + ": " + e.getMessage(), e, false));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryLikeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryLikeTest.java
deleted file mode 100644
index bb12fd6..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryLikeTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-
-/**
- * Query LIKE test.
- */
-public class QueryLikeTest extends AbstractQueryTest {
-
-    private static final String CONTENT = "TCK test content.";
-    private static final int PAGE_SIZE = 10;
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Query LIKE Test");
-        setDescription("Performs a LIKE query and checks if only matching objects are returned.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsQuery(session) && !isFulltextOnly(session)) {
-            // create a test folder
-            Folder testFolder = createTestFolder(session);
-
-            try {
-                for (char c = 'a'; c <= 'z'; c++) {
-                    createDocument(session, testFolder, c + "Document", CONTENT);
-                    createFolder(session, testFolder, c + "Folder");
-                }
-
-                OperationContext context = session.createOperationContext();
-                context.setFilterString("cmis:name,cmis:creationDate");
-                context.setCacheEnabled(false);
-                context.setIncludeAcls(false);
-                context.setIncludeAllowableActions(false);
-                context.setIncludePathSegments(false);
-                context.setIncludePolicies(false);
-                context.setIncludeRelationships(IncludeRelationships.NONE);
-                context.setRenditionFilterString("cmis:none");
-                context.setOrderBy("cmis:creationDate");
-
-                CmisTestResult f;
-
-                for (char c = 'a'; c <= 'z'; c++) {
-                    // query documents
-                    long timestamp = Long.MIN_VALUE;
-                    long count = 0;
-
-                    for (CmisObject o : session.queryObjects("cmis:document", "cmis:name LIKE '" + c + "%'", false,
-                            context).getPage(PAGE_SIZE)) {
-
-                        if (o.getName() == null || o.getName().length() == 0) {
-                            addResult(createResult(
-                                    FAILURE,
-                                    "Documents without name should not be returned by this query! Document ID: "
-                                            + o.getId()));
-                        } else {
-                            f = createResult(FAILURE, "Document name should start with '" + c + "' but the name is '"
-                                    + o.getName() + "'.");
-                            addResult(assertEquals(c, Character.toLowerCase(o.getName().charAt(0)), null, f));
-                        }
-
-                        if (o.getCreationDate() == null) {
-                            addResult(createResult(FAILURE,
-                                    "Found document without creation date! Document ID: " + o.getId()));
-                        } else {
-                            f = createResult(FAILURE,
-                                    "Query results should be ordered by cmis:creationDate but they are not!");
-                            addResult(assertIsTrue(timestamp <= o.getCreationDate().getTimeInMillis(), null, f));
-
-                            timestamp = o.getCreationDate().getTimeInMillis();
-                        }
-
-                        count++;
-                    }
-
-                    f = createResult(FAILURE, "No documents starting with '" + c
-                            + "' have been found, but there must be at least one!");
-                    addResult(assertIsTrue(count > 0, null, f));
-
-                    f = createResult(FAILURE, "A page of " + PAGE_SIZE
-                            + " query hits has been requested, but the repository returned " + count + ".");
-                    addResult(assertIsTrue(count <= PAGE_SIZE, null, f));
-
-                    // query folders
-                    timestamp = Long.MIN_VALUE;
-                    count = 0;
-
-                    for (CmisObject o : session.queryObjects("cmis:folder", "cmis:name LIKE '" + c + "%'", false,
-                            context).getPage(PAGE_SIZE)) {
-
-                        if (o.getName() == null || o.getName().length() == 0) {
-                            addResult(createResult(FAILURE,
-                                    "Folder without name should not be returned by this query! Folder ID: " + o.getId()));
-                        } else {
-                            f = createResult(FAILURE,
-                                    "Folder name should start with '" + c + "' but the name is '" + o.getName() + "'.");
-                            addResult(assertEquals(c, Character.toLowerCase(o.getName().charAt(0)), null, f));
-                        }
-
-                        if (o.getCreationDate() == null) {
-                            addResult(createResult(FAILURE,
-                                    "Found folder without creation date! Folder ID: " + o.getId()));
-                        } else {
-                            f = createResult(FAILURE,
-                                    "Query results should be ordered by cmis:creationDate but they are not!");
-                            addResult(assertIsTrue(timestamp <= o.getCreationDate().getTimeInMillis(), null, f));
-
-                            timestamp = o.getCreationDate().getTimeInMillis();
-                        }
-
-                        count++;
-                    }
-
-                    f = createResult(FAILURE, "No folders starting with '" + c
-                            + "' have been found, but there must be at least one!");
-                    addResult(assertIsTrue(count > 0, null, f));
-
-                    f = createResult(FAILURE, "A page of " + PAGE_SIZE
-                            + " query hits has been requested, but the repository returned " + count + ".");
-                    addResult(assertIsTrue(count <= PAGE_SIZE, null, f));
-                }
-            } finally {
-                // delete the test folder
-                deleteTestFolder();
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Metadata query not supported. Test Skipped!"));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryRootFolderTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryRootFolderTest.java
deleted file mode 100644
index 68e46dd..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryRootFolderTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.GregorianCalendar;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.QueryStatement;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-
-/**
- * Root folder query test.
- */
-public class QueryRootFolderTest extends AbstractQueryTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Query Root Folder Test");
-        setDescription("Performs a query that should return the root folder name and id.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (supportsQuery(session) && !isFulltextOnly(session)) {
-            if (Boolean.TRUE.equals(session.getRootFolder().getType().isQueryable())) {
-                queryById(session);
-                queryByDate(session);
-            } else {
-                addResult(createResult(SKIPPED, "Root folder type (" + session.getRootFolder().getType().getId()
-                        + ") is not queryable. Test Skipped!"));
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Metadata query not supported. Test Skipped!"));
-        }
-    }
-
-    protected void queryById(Session session) {
-        CmisTestResult f;
-
-        String testType = "cmis:folder";
-
-        Folder rootFolder = session.getRootFolder();
-
-        QueryStatement statement = session
-                .createQueryStatement("SELECT ? AS folderName, ? AS folderId FROM ? WHERE ? = ?");
-
-        statement.setProperty(1, testType, PropertyIds.NAME);
-        statement.setProperty(2, testType, PropertyIds.OBJECT_ID);
-        statement.setType(3, testType);
-        statement.setProperty(4, testType, PropertyIds.OBJECT_ID);
-        statement.setString(5, rootFolder.getId());
-
-        addResult(createInfoResult("Query: " + statement.toQueryString()));
-
-        int count = 0;
-        ItemIterable<QueryResult> results = statement.query(false);
-        for (QueryResult qr : results) {
-            count++;
-
-            String folderName = qr.getPropertyValueByQueryName("folderName");
-            String folderId = qr.getPropertyValueByQueryName("folderId");
-
-            f = createResult(FAILURE, "Query result does not match root folder name!");
-            addResult(assertEquals(rootFolder.getName(), folderName, null, f));
-
-            f = createResult(FAILURE, "Query result does not match root folder id!");
-            addResult(assertEquals(rootFolder.getId(), folderId, null, f));
-        }
-
-        f = createResult(FAILURE, "The query should return exactly one result but returned " + count + "!");
-        addResult(assertEquals(1, count, null, f));
-
-        if (results.getTotalNumItems() >= 0) {
-            f = createResult(FAILURE,
-                    "The query returned a total number of items != 1, but there can be only exactly one hit!");
-            addResult(assertEquals(1L, results.getTotalNumItems(), null, f));
-        }
-    }
-
-    protected void queryByDate(Session session) {
-        CmisTestResult f;
-
-        String testType = "cmis:folder";
-
-        Folder rootFolder = session.getRootFolder();
-
-        GregorianCalendar before = new GregorianCalendar();
-        before.setTimeInMillis(rootFolder.getCreationDate().getTimeInMillis() - (60 * 60 * 1000));
-
-        GregorianCalendar after = new GregorianCalendar();
-        after.setTimeInMillis(rootFolder.getCreationDate().getTimeInMillis() + (60 * 60 * 1000));
-
-        QueryStatement statement = session
-                .createQueryStatement("SELECT ? AS folderName, ? AS folderId FROM ? WHERE ? > TIMESTAMP ? AND ? < TIMESTAMP ?");
-
-        statement.setProperty(1, testType, PropertyIds.NAME);
-        statement.setProperty(2, testType, PropertyIds.OBJECT_ID);
-        statement.setType(3, testType);
-        statement.setProperty(4, testType, PropertyIds.CREATION_DATE);
-        statement.setDateTime(5, before);
-        statement.setProperty(6, testType, PropertyIds.CREATION_DATE);
-        statement.setDateTime(7, after);
-
-        addResult(createInfoResult("Query: " + statement.toQueryString()));
-
-        boolean found = false;
-        ItemIterable<QueryResult> results = statement.query(false);
-        for (QueryResult qr : results) {
-            String folderId = qr.getPropertyValueByQueryName("folderId");
-
-            if (rootFolder.getId().equals(folderId)) {
-                found = true;
-
-                String folderName = qr.getPropertyValueByQueryName("folderName");
-
-                f = createResult(FAILURE, "Query result does not match root folder name!");
-                addResult(assertEquals(rootFolder.getName(), folderName, null, f));
-                break;
-            }
-        }
-
-        f = createResult(FAILURE, "The query should return the root folder but does not!");
-        addResult(assertIsTrue(found, null, f));
-
-        if (results.getTotalNumItems() >= 0) {
-            f = createResult(FAILURE,
-                    "The query returned a total number of items < 1, but there must be at least one hit!");
-            addResult(assertIsTrue(results.getTotalNumItems() >= 1L, null, f));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java
deleted file mode 100644
index 7fa3459..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.CmisTestResultImpl;
-
-/**
- * Query smoke test.
- */
-public class QuerySmokeTest extends AbstractQueryTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Query Smoke Test");
-        setDescription("Performs a simple query and checks if the format of the results is correct. It does not check if the results are complete!");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        if (supportsQuery(session)) {
-            String testType = "cmis:document";
-            String statement = "SELECT * FROM " + testType;
-
-            addResult(createInfoResult("Query: " + statement));
-
-            ObjectType type = session.getTypeDefinition(testType);
-
-            f = createResult(FAILURE, "Test type definition '" + testType + "'not found!");
-            addResult(assertNotNull(type, null, f));
-            if (type == null) {
-                return;
-            }
-
-            PropertyDefinition<?> objectIdPropDef = type.getPropertyDefinitions().get(PropertyIds.OBJECT_ID);
-
-            f = createResult(FAILURE, "Object Id property definition does not exist!");
-            addResult(assertNotNull(objectIdPropDef, null, f));
-
-            String objectIdQueryName = null;
-            if (objectIdPropDef != null) {
-                objectIdQueryName = objectIdPropDef.getQueryName();
-            }
-
-            int pageSize = 100;
-
-            ItemIterable<QueryResult> resultSet = session.query(statement, false);
-
-            if (resultSet == null) {
-                addResult(createResult(FAILURE, "Query result set is null! (OpenCMIS issue???)"));
-            } else {
-                int i = 0;
-                // testing 100 results should be sufficient for this test
-                ItemIterable<QueryResult> queryIterable = resultSet.getPage(pageSize);
-                for (QueryResult qr : queryIterable) {
-                    if (qr == null) {
-                        addResult(createResult(FAILURE, "Query result is null! (OpenCMIS issue???)"));
-                    } else {
-                        addResult(checkQueryResult(session, qr, type, "Query result: " + i));
-
-                        if (objectIdQueryName != null) {
-                            String objectId = (String) qr.getPropertyByQueryName(objectIdQueryName).getFirstValue();
-
-                            try {
-                                CmisObject object = session.getObject(objectId, SELECT_ALL_NO_CACHE_OC);
-                                addResult(checkObject(session, object, getAllProperties(object),
-                                        "Query hit check. Id: " + objectId));
-                            } catch (CmisObjectNotFoundException e) {
-                                addResult(createResult(FAILURE,
-                                        "Query hit references an object that doesn't exist. Id: " + objectId, e, false));
-                            }
-                        }
-                        // TODO: check more
-                    }
-                    i++;
-                }
-
-                f = createResult(FAILURE, "More query results (" + i + ") than expected (page size = " + pageSize
-                        + ")!");
-                addResult(assertIsFalse((i > pageSize), null, f));
-
-                if (queryIterable.getTotalNumItems() == -1) {
-                    addResult(createResult(WARNING, "Repository did not return numItems."));
-                }
-
-                addResult(createInfoResult(i + " query results for \"" + statement + "\" (page size = " + pageSize
-                        + ")"));
-            }
-        } else {
-            addResult(createResult(SKIPPED, "Query not supported. Test Skipped!"));
-        }
-    }
-
-    protected CmisTestResult checkQueryResult(Session session, QueryResult qr, ObjectType type, String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-
-        CmisTestResult f;
-
-        if (qr.getProperties().isEmpty()) {
-            addResult(results, createResult(FAILURE, "Query result is empty!"));
-        } else {
-            for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-                if (propDef.getQueryName() == null) {
-                    continue;
-                }
-
-                PropertyData<?> pd = qr.getPropertyByQueryName(propDef.getQueryName());
-
-                if (pd == null) {
-                    addResult(results,
-                            createResult(FAILURE, "Query property not in result set: " + propDef.getQueryName()));
-                } else {
-                    if (PropertyIds.OBJECT_ID.equals(propDef.getId())
-                            || PropertyIds.OBJECT_TYPE_ID.equals(propDef.getId())
-                            || PropertyIds.BASE_TYPE_ID.equals(propDef.getId())) {
-                        f = createResult(FAILURE, "Query property must not be empty: " + propDef.getQueryName());
-                        addResult(results, assertStringNotEmpty((String) pd.getFirstValue(), null, f));
-                    }
-                }
-            }
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java
deleted file mode 100644
index 6109706..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.query;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains query tests.
- */
-public class QueryTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Query Test Group");
-        setDescription("Query and content changes tests.");
-
-        addTest(new QuerySmokeTest());
-        addTest(new QueryRootFolderTest());
-        addTest(new QueryForObject());
-        addTest(new QueryLikeTest());
-        addTest(new QueryInFolderTest());
-        addTest(new ContentChangesSmokeTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/BaseTypesTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/BaseTypesTest.java
deleted file mode 100644
index 166cae3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/BaseTypesTest.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.types;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class BaseTypesTest extends AbstractSessionTest {
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Types Test");
-        setDescription("Checks all types exposed by the repository for specification compliance.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult failure;
-
-        // check base types
-        Set<String> cmisTypes = new HashSet<String>();
-        cmisTypes.add(BaseTypeId.CMIS_DOCUMENT.value());
-        cmisTypes.add(BaseTypeId.CMIS_FOLDER.value());
-        cmisTypes.add(BaseTypeId.CMIS_RELATIONSHIP.value());
-        cmisTypes.add(BaseTypeId.CMIS_POLICY.value());
-
-        if (session.getRepositoryInfo().getCmisVersion() != CmisVersion.CMIS_1_0) {
-            cmisTypes.add(BaseTypeId.CMIS_ITEM.value());
-            cmisTypes.add(BaseTypeId.CMIS_SECONDARY.value());
-        }
-
-        for (TypeDefinition typeDef : session.getTypeChildren(null, false)) {
-            String typeId = typeDef.getId();
-
-            if (typeId == null || !cmisTypes.contains(typeId)) {
-                addResult(createResult(FAILURE, "Base type has an invalid id: " + typeId));
-            }
-
-            if (typeDef.getPropertyDefinitions() != null && !typeDef.getPropertyDefinitions().isEmpty()) {
-                addResult(createResult(WARNING, "Property type definitions were not requested but delivered. Type id: "
-                        + typeId));
-            }
-        }
-
-        // document
-        try {
-            TypeDefinition documentType = session.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value());
-            addResult(checkTypeDefinition(session, documentType, "Document type spec compliance."));
-
-            failure = createResult(FAILURE, "Document type has the wrong base type: " + documentType.getBaseTypeId());
-            addResult(assertEquals(BaseTypeId.CMIS_DOCUMENT, documentType.getBaseTypeId(), null, failure));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(FAILURE, "Document type not available!", e, false));
-        }
-
-        // folder
-        try {
-            TypeDefinition folderType = session.getTypeDefinition(BaseTypeId.CMIS_FOLDER.value());
-
-            addResult(checkTypeDefinition(session, folderType, "Folder type spec compliance."));
-
-            failure = createResult(FAILURE, "Folder type has the wrong base type: " + folderType.getBaseTypeId());
-            addResult(assertEquals(BaseTypeId.CMIS_FOLDER, folderType.getBaseTypeId(), null, failure));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(FAILURE, "Folder type not available!", e, false));
-        }
-
-        // relationship
-        try {
-            TypeDefinition relationshipType = session.getTypeDefinition(BaseTypeId.CMIS_RELATIONSHIP.value());
-            addResult(checkTypeDefinition(session, relationshipType, "Relationship type spec compliance."));
-
-            failure = createResult(FAILURE,
-                    "Relationship type has the wrong base type: " + relationshipType.getBaseTypeId());
-            addResult(assertEquals(BaseTypeId.CMIS_RELATIONSHIP, relationshipType.getBaseTypeId(), null, failure));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(WARNING, "Relationship type not available!", e, false));
-        }
-
-        // policy
-        try {
-            TypeDefinition policyType = session.getTypeDefinition(BaseTypeId.CMIS_POLICY.value());
-            addResult(checkTypeDefinition(session, policyType, "Policy type spec compliance."));
-
-            failure = createResult(FAILURE, "Policy type has the wrong base type: " + policyType.getBaseTypeId());
-            addResult(assertEquals(BaseTypeId.CMIS_POLICY, policyType.getBaseTypeId(), null, failure));
-        } catch (CmisInvalidArgumentException e) {
-            addResult(createResult(WARNING, "Policy type not available!", e, false));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(WARNING, "Policy type not available!", e, false));
-        }
-
-        // CMIS 1.1 types
-        if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_1) {
-            // item
-            try {
-                TypeDefinition itemType = session.getTypeDefinition(BaseTypeId.CMIS_ITEM.value());
-                addResult(checkTypeDefinition(session, itemType, "Item type spec compliance."));
-
-                failure = createResult(FAILURE, "Item type has the wrong base type: " + itemType.getBaseTypeId());
-                addResult(assertEquals(BaseTypeId.CMIS_ITEM, itemType.getBaseTypeId(), null, failure));
-            } catch (CmisInvalidArgumentException e) {
-                addResult(createResult(WARNING, "Item type not available!", e, false));
-            } catch (CmisObjectNotFoundException e) {
-                addResult(createResult(WARNING, "Item type not available!", e, false));
-            }
-
-            // secondary type
-            try {
-                TypeDefinition secondaryType = session.getTypeDefinition(BaseTypeId.CMIS_SECONDARY.value());
-                addResult(checkTypeDefinition(session, secondaryType, "Secondary type spec compliance."));
-
-                failure = createResult(FAILURE,
-                        "Secondary type has the wrong base type: " + secondaryType.getBaseTypeId());
-                addResult(assertEquals(BaseTypeId.CMIS_SECONDARY, secondaryType.getBaseTypeId(), null, failure));
-            } catch (CmisInvalidArgumentException e) {
-                addResult(createResult(WARNING, "Secondary type not available!", e, false));
-            } catch (CmisObjectNotFoundException e) {
-                addResult(createResult(WARNING, "Secondary type not available!", e, false));
-            }
-        } else {
-            try {
-                session.getTypeDefinition(BaseTypeId.CMIS_ITEM.value());
-                addResult(createResult(FAILURE, "CMIS 1.0 repository returns cmis:item type definition!"));
-            } catch (CmisBaseException e) {
-                // expected
-            }
-
-            try {
-                session.getTypeDefinition(BaseTypeId.CMIS_SECONDARY.value());
-                addResult(createResult(FAILURE, "CMIS 1.0 repository returns cmis:secondary type definition!"));
-            } catch (CmisBaseException e) {
-                // expected
-            }
-        }
-
-        int numOfTypes = runTypeChecks(session, session.getTypeDescendants(null, -1, true));
-
-        addResult(createInfoResult("Checked " + numOfTypes + " type definitions."));
-    }
-
-    private int runTypeChecks(Session session, List<Tree<ObjectType>> types) {
-        if (types == null) {
-            return 0;
-        }
-
-        int numOfTypes = 0;
-        CmisTestResult failure;
-
-        for (Tree<ObjectType> tree : types) {
-            failure = createResult(FAILURE, "Types tree contains null leaf!");
-            addResult(assertNotNull(tree, null, failure));
-
-            if (tree != null) {
-                numOfTypes++;
-
-                addResult(checkTypeDefinition(session, tree.getItem(), "Type spec compliance: "
-                        + tree.getItem().getId()));
-
-                // clear the cache to ensure that the type definition is
-                // reloaded from the repository
-                session.clear();
-
-                try {
-                    TypeDefinition reloadedType = session.getTypeDefinition(tree.getItem().getId());
-
-                    addResult(checkTypeDefinition(session, reloadedType, "Type spec compliance: "
-                            + (reloadedType == null ? "?" : reloadedType.getId())));
-
-                    failure = createResult(FAILURE,
-                            "Type fetched via getTypeDescendants() is does not macth type fetched via getTypeDefinition(): "
-                                    + tree.getItem().getId());
-                    addResult(assertEquals(tree.getItem(), reloadedType, null, failure));
-                } catch (CmisObjectNotFoundException e) {
-                    addResult(createResult(FAILURE,
-                            "Type fetched via getTypeDescendants() is not available via getTypeDefinition(): "
-                                    + tree.getItem().getId(), e, false));
-                }
-
-                // clear the cache again to ensure that the type definition
-                // children are reloaded from the repository
-                session.clear();
-
-                try {
-                    ItemIterable<ObjectType> reloadedTypeChildren = session.getTypeChildren(tree.getItem().getId(),
-                            true);
-
-                    // check type children
-                    Map<String, ObjectType> typeChilden = new HashMap<String, ObjectType>();
-                    for (ObjectType childType : reloadedTypeChildren) {
-                        if (childType == null) {
-                            addResult(createResult(FAILURE, "The list of types contains a null entry!"));
-                            continue;
-                        }
-
-                        addResult(checkTypeDefinition(session, childType, "Type spec compliance: " + childType.getId()));
-
-                        typeChilden.put(childType.getId(), childType);
-                    }
-
-                    // compare type children and type descendants
-                    if (tree.getChildren() == null) {
-                        failure = createResult(FAILURE,
-                                "Type children fetched via getTypeDescendants() don't match type children fetched via getTypeChildren(): "
-                                        + tree.getItem().getId());
-                        addResult(assertEquals(0, typeChilden.size(), null, failure));
-                    } else {
-                        // collect the children
-                        Map<String, ObjectType> typeDescendants = new HashMap<String, ObjectType>();
-                        for (Tree<ObjectType> childType : tree.getChildren()) {
-                            if ((childType != null) && (childType.getItem() != null)) {
-                                typeDescendants.put(childType.getItem().getId(), childType.getItem());
-                            }
-                        }
-
-                        failure = createResult(FAILURE,
-                                "Type children fetched via getTypeDescendants() don't match type children fetched via getTypeChildren(): "
-                                        + tree.getItem().getId());
-                        addResult(assertEquals(typeDescendants.size(), typeChilden.size(), null, failure));
-
-                        for (ObjectType compareType : typeDescendants.values()) {
-                            failure = createResult(FAILURE,
-                                    "Type fetched via getTypeDescendants() doesn't match type fetched via getTypeChildren(): "
-                                            + tree.getItem().getId());
-                            addResult(assertEquals(compareType, typeChilden.get(compareType.getId()), null, failure));
-                        }
-                    }
-                } catch (CmisObjectNotFoundException e) {
-                    addResult(createResult(FAILURE,
-                            "Type children fetched via getTypeDescendants() is not available via getTypeChildren(): "
-                                    + tree.getItem().getId(), e, false));
-                }
-
-                numOfTypes += runTypeChecks(session, tree.getChildren());
-            }
-        }
-
-        return numOfTypes;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/CreateAndDeleteTypeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/CreateAndDeleteTypeTest.java
deleted file mode 100644
index ae44e13..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/CreateAndDeleteTypeTest.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.types;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.CreatablePropertyTypes;
-import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class CreateAndDeleteTypeTest extends AbstractSessionTest {
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Create and Delete Type Test");
-        setDescription("Creates a document type and deletes it again.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-            addResult(createResult(SKIPPED, "Type mutability is not supported by CMIS 1.0. Test skipped!"));
-            return;
-        }
-
-        ObjectType parentType = session.getTypeDefinition(getDocumentTestTypeId());
-        if (parentType.getTypeMutability() == null || !Boolean.TRUE.equals(parentType.getTypeMutability().canCreate())) {
-            addResult(createResult(SKIPPED, "Test document type doesn't allow creating a sub-type. Test skipped!"));
-            return;
-        }
-
-        createTypeWithoutProperties(session, parentType);
-        createTypeWithProperties(session, parentType);
-    }
-
-    private void createTypeWithoutProperties(Session session, ObjectType parentType) {
-        CmisTestResult failure = null;
-
-        // define the type
-        DocumentTypeDefinitionImpl newTypeDef = createDocumentTypeDefinition(session, "tck:testid_without_properties",
-                parentType);
-
-        // create the type
-        ObjectType newType = createType(session, newTypeDef);
-        if (newType == null) {
-            return;
-        }
-
-        // get the type
-        ObjectType newType2 = null;
-        try {
-            newType2 = session.getTypeDefinition(newType.getId());
-
-            // assert type definitions
-            failure = createResult(FAILURE,
-                    "The type definition returned by createType() doesn't match the type definition returned by getTypeDefinition()!");
-            addResult(assertEquals(newType, newType2, null, failure));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(FAILURE, "Newly created type can not be fetched. Id: " + newType.getId(), e, false));
-        }
-
-        // delete the type
-        deleteType(session, newType.getId());
-    }
-
-    private void createTypeWithProperties(Session session, ObjectType parentType) {
-        CmisTestResult failure = null;
-
-        CreatablePropertyTypes cpt = session.getRepositoryInfo().getCapabilities().getCreatablePropertyTypes();
-        if (cpt == null || cpt.canCreate() == null || cpt.canCreate().isEmpty()) {
-            addResult(createResult(FAILURE, "Repository Info does not indicate, which property types can be created!"));
-            return;
-        }
-
-        // define the type
-        DocumentTypeDefinitionImpl newTypeDef = createDocumentTypeDefinition(session, "tck:testid_with_properties",
-                parentType);
-
-        // add a property for each creatable property type
-        for (PropertyType propType : PropertyType.values()) {
-            if (!cpt.canCreate().contains(propType)) {
-                continue;
-            }
-
-            newTypeDef.addPropertyDefinition(createPropertyDefinition(propType));
-        }
-
-        // create the type
-        ObjectType newType = createType(session, newTypeDef);
-        if (newType == null) {
-            return;
-        }
-
-        // get the type
-        ObjectType newType2 = null;
-        try {
-            newType2 = session.getTypeDefinition(newType.getId());
-
-            // assert type definitions
-            failure = createResult(FAILURE,
-                    "The type definition returned by createType() doesn't match the type definition returned by getTypeDefinition()!");
-            addResult(assertEquals(newType, newType2, null, failure));
-        } catch (CmisObjectNotFoundException e) {
-            addResult(createResult(FAILURE, "Newly created type can not be fetched. Id: " + newType.getId(), e, false));
-        }
-
-        // check properties
-        List<PropertyDefinition<?>> newPropDefs = new ArrayList<PropertyDefinition<?>>();
-        for (Map.Entry<String, PropertyDefinition<?>> propDef : newType.getPropertyDefinitions().entrySet()) {
-            if (Boolean.FALSE.equals(propDef.getValue().isInherited())) {
-                newPropDefs.add(propDef.getValue());
-            }
-        }
-
-        failure = createResult(FAILURE,
-                "The number of defined properties and the number of non-inherited properties don't match!");
-        addResult(assertEquals(newTypeDef.getPropertyDefinitions().size(), newPropDefs.size(), null, failure));
-
-        // check the order of the properties, which must match the order of the
-        // original type definition
-        // (OpenCMIS keeps the order of the property definitions.)
-        int i = 0;
-        for (Map.Entry<String, PropertyDefinition<?>> propDef : newTypeDef.getPropertyDefinitions().entrySet()) {
-            PropertyDefinition<?> newPropDef = newPropDefs.get(i);
-
-            failure = createResult(FAILURE, "Property " + (i + 1) + " must be of type "
-                    + propDef.getValue().getPropertyType() + " but is of type " + newPropDef.getPropertyType() + "!");
-            addResult(assertEquals(propDef.getValue().getPropertyType(), newPropDef.getPropertyType(), null, failure));
-
-            addResult(createInfoResult("Repository assigned the property '" + propDef.getValue().getId()
-                    + "' the following property id: " + newPropDef.getId()));
-
-            i++;
-        }
-
-        // delete the type
-        deleteType(session, newType.getId());
-    }
-
-    private DocumentTypeDefinitionImpl createDocumentTypeDefinition(Session session, String typeId,
-            ObjectType parentType) {
-        CmisTestResult failure = null;
-
-        NewTypeSettableAttributes settableAttributes = session.getRepositoryInfo().getCapabilities()
-                .getNewTypeSettableAttributes();
-        if (settableAttributes == null) {
-            addResult(createResult(WARNING, "Capability NewTypeSettableAttributes is not set!"));
-        }
-
-        DocumentTypeDefinitionImpl result = new DocumentTypeDefinitionImpl();
-
-        result.setBaseTypeId(parentType.getBaseTypeId());
-        result.setParentTypeId(parentType.getId());
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetId())) {
-            result.setId(typeId);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'id' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetId(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetLocalName())) {
-            result.setLocalName("tck:testlocal");
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'localName' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetLocalName(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetLocalNamespace())) {
-            result.setLocalNamespace("http://tck/testlocalnamespace");
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'localNamespace' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetLocalNamespace(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetDisplayName())) {
-            result.setDisplayName("TCK Document Type");
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'displayName' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetDisplayName(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetDescription())) {
-            result.setDescription("This is the TCK document type");
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'description' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetDescription(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetQueryName())) {
-            result.setQueryName("tck:testqueryname");
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'queryName' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetQueryName(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetQueryable())) {
-            result.setIsQueryable(false);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'queryable' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetQueryable(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetFulltextIndexed())) {
-            result.setIsFulltextIndexed(false);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING,
-                    "Flag 'fulltextIndexed' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetFulltextIndexed(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetIncludedInSupertypeQuery())) {
-            result.setIsIncludedInSupertypeQuery(false);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING,
-                    "Flag 'includedInSupertypeQuery' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetIncludedInSupertypeQuery(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetControllableAcl())) {
-            result.setIsControllableAcl(false);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING,
-                    "Flag 'controllableACL' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetControllableAcl(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetControllablePolicy())) {
-            result.setIsControllablePolicy(false);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING,
-                    "Flag 'controllablePolicy' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetControllablePolicy(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetCreatable())) {
-            result.setIsCreatable(true);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'creatable' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetCreatable(), null, failure));
-        }
-
-        if (settableAttributes == null || Boolean.TRUE.equals(settableAttributes.canSetFileable())) {
-            result.setIsFileable(true);
-        } else if (settableAttributes != null) {
-            failure = createResult(WARNING, "Flag 'fileable' in capability NewTypeSettableAttributes is not set!");
-            addResult(assertNotNull(settableAttributes.canSetFileable(), null, failure));
-        }
-
-        result.setIsVersionable(false);
-        result.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
-
-        return result;
-    }
-
-    private AbstractPropertyDefinition<?> createPropertyDefinition(PropertyType propertyType) {
-        AbstractPropertyDefinition<?> result = null;
-
-        switch (propertyType) {
-        case BOOLEAN:
-            result = new PropertyBooleanDefinitionImpl();
-            break;
-        case ID:
-            result = new PropertyIdDefinitionImpl();
-            break;
-        case INTEGER:
-            result = new PropertyIntegerDefinitionImpl();
-            break;
-        case DATETIME:
-            result = new PropertyDateTimeDefinitionImpl();
-            break;
-        case DECIMAL:
-            result = new PropertyDecimalDefinitionImpl();
-            break;
-        case HTML:
-            result = new PropertyHtmlDefinitionImpl();
-            break;
-        case URI:
-            result = new PropertyUriDefinitionImpl();
-            break;
-        default:
-            result = new PropertyStringDefinitionImpl();
-        }
-
-        result.setPropertyType(propertyType);
-        result.setId("tck:" + propertyType.value());
-        result.setLocalName("tck:local_" + propertyType.value());
-        result.setLocalNamespace("tck:testlocalnamespace");
-        result.setDisplayName("TCK " + propertyType.value() + " propertry");
-        result.setQueryName("tck:" + propertyType.value());
-        result.setDescription("TCK " + propertyType.value() + " propertry");
-        result.setCardinality(Cardinality.SINGLE);
-        result.setUpdatability(Updatability.READWRITE);
-        result.setIsInherited(false);
-        result.setIsQueryable(false);
-        result.setIsOrderable(false);
-        result.setIsRequired(false);
-        result.setIsOpenChoice(true);
-
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/SecondaryTypesTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/SecondaryTypesTest.java
deleted file mode 100644
index 389341d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/SecondaryTypesTest.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.types;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class SecondaryTypesTest extends AbstractSessionTest {
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Secondary Types Test");
-        setDescription("Creates documents, attaches and detaches secondary types, checks the properties, and finally deletes the test documents.");
-    }
-
-    @Override
-    public void run(Session session) {
-        if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-            addResult(createResult(SKIPPED, "Secondary types are not supported by CMIS 1.0. Test skipped!"));
-            return;
-        }
-
-        if (!hasSecondaries(session)) {
-            addResult(createResult(SKIPPED, "Repository doesn't support secondary types. Test skipped!"));
-            return;
-        }
-
-        // check cmis:secondaryObjectTypeIds property definition
-        ObjectType docType = session.getTypeDefinition(getDocumentTestTypeId());
-        PropertyDefinition<?> secTypesPropDef = docType.getPropertyDefinitions().get(
-                PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-        if (secTypesPropDef == null) {
-            addResult(createResult(FAILURE, "Test document type has no " + PropertyIds.SECONDARY_OBJECT_TYPE_IDS
-                    + " property!"));
-            return;
-        } else if (secTypesPropDef.getUpdatability() != Updatability.READWRITE) {
-            addResult(createResult(SKIPPED,
-                    "Test document type does not allow attaching secondary types. Test skipped!"));
-            return;
-        }
-
-        // create a test folder
-        Folder testFolder = createTestFolder(session);
-
-        try {
-            String secondaryTestTypeId = getSecondaryTestTypeId();
-            ObjectType secondaryTestType = session.getTypeDefinition(secondaryTestTypeId);
-
-            createDocumentAndAttachSecondaryType(session, testFolder, secondaryTestType);
-            createDocumentWithSecondaryType(session, testFolder, secondaryTestType);
-        } finally {
-            // delete the test folder
-            deleteTestFolder();
-        }
-    }
-
-    private void createDocumentAndAttachSecondaryType(Session session, Folder testFolder, ObjectType secondaryTestType) {
-        Document doc = createDocument(session, testFolder, "createandattach.txt", "Secondary Type Test");
-        Document workDoc = doc;
-
-        try {
-            // test if check out is required
-            boolean checkedout = false;
-            if (needsCheckOut(doc)) {
-                workDoc = (Document) session.getObject(doc.checkOut(), SELECT_ALL_NO_CACHE_OC);
-                checkedout = true;
-            }
-
-            // -- attach secondary type
-            List<String> secondaryTypes = new ArrayList<String>();
-
-            // copy already attached secondary types, if there are any
-            if (workDoc.getSecondaryTypes() != null) {
-                for (SecondaryType secType : workDoc.getSecondaryTypes()) {
-                    secondaryTypes.add(secType.getId());
-                }
-            }
-
-            // add the new secondary type
-            secondaryTypes.add(secondaryTestType.getId());
-
-            Map<String, Object> properties = new HashMap<String, Object>();
-            properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypes);
-
-            // attach secondary type
-            ObjectId newId = workDoc.updateProperties(properties);
-            Document newDoc = (Document) session.getObject(newId, SELECT_ALL_NO_CACHE_OC);
-
-            // check if the secondary type is there
-            boolean found = checkSecondaryType(newDoc, secondaryTestType);
-
-            // -- detach secondary type
-            if (found) {
-                detachSecondaryType(session, newDoc, secondaryTestType);
-            }
-
-            // cancel a possible check out
-            if (checkedout) {
-                workDoc.cancelCheckOut();
-            }
-        } finally {
-            deleteObject(doc);
-        }
-    }
-
-    private void createDocumentWithSecondaryType(Session session, Folder testFolder, ObjectType secondaryTestType) {
-        Document doc = createDocument(session, testFolder, "createwithsecondarytype.txt", getDocumentTestTypeId(),
-                new String[] { secondaryTestType.getId() }, "Secondary Type Test");
-
-        try {
-            // check if the secondary type is there
-            boolean found = checkSecondaryType(doc, secondaryTestType);
-
-            // detach secondary type
-            if (found && !needsCheckOut(doc)) {
-                detachSecondaryType(session, doc, secondaryTestType);
-            }
-        } finally {
-            deleteObject(doc);
-        }
-    }
-
-    private boolean needsCheckOut(Document doc) {
-        DocumentTypeDefinition type = (DocumentTypeDefinition) doc.getType();
-        PropertyDefinition<?> secTypeIdsPropDef = type.getPropertyDefinitions().get(
-                PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-
-        return secTypeIdsPropDef.getUpdatability() == Updatability.WHENCHECKEDOUT
-                || (!doc.getAllowableActions().getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES) && Boolean.TRUE
-                        .equals(type.isVersionable()));
-    }
-
-    private boolean checkSecondaryType(Document doc, ObjectType secondaryTestType) {
-        CmisTestResult f;
-
-        // check if the secondary type is there
-        boolean found = false;
-        if (doc.getSecondaryTypes() == null) {
-            addResult(createResult(FAILURE, "Document does not have the attached secondary type!"));
-        } else {
-            for (SecondaryType secType : doc.getSecondaryTypes()) {
-                if (secondaryTestType.getId().equals(secType.getId())) {
-                    found = true;
-                    break;
-                }
-            }
-
-            f = createResult(FAILURE, "Document does not have the attached secondary type!");
-            addResult(assertIsTrue(found, null, f));
-        }
-
-        // check properties of secondary type
-        if (found) {
-            Set<String> secondaryTypeProperties = new HashSet<String>();
-
-            if (secondaryTestType.getPropertyDefinitions() != null) {
-                for (PropertyDefinition<?> propDef : secondaryTestType.getPropertyDefinitions().values()) {
-                    secondaryTypeProperties.add(propDef.getId());
-                }
-            }
-
-            for (Property<?> prop : doc.getProperties()) {
-                secondaryTypeProperties.remove(prop.getId());
-            }
-
-            f = createResult(FAILURE, "Documents lacks the following secondary type properties: "
-                    + secondaryTypeProperties);
-            addResult(assertIsTrue(secondaryTypeProperties.isEmpty(), null, f));
-        }
-
-        return found;
-    }
-
-    private void detachSecondaryType(Session session, Document doc, ObjectType secondaryTestType) {
-        CmisTestResult f;
-
-        List<String> secondaryTypesId = new ArrayList<String>();
-
-        for (SecondaryType secType : doc.getSecondaryTypes()) {
-            if (!secondaryTestType.getId().equals(secType.getId())) {
-                secondaryTypesId.add(secType.getId());
-            }
-        }
-
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypesId);
-
-        // detach secondary type
-        ObjectId newId = doc.updateProperties(properties);
-        Document newDoc = (Document) session.getObject(newId, SELECT_ALL_NO_CACHE_OC);
-
-        boolean found = false;
-        if (newDoc.getSecondaryTypes() != null) {
-            for (SecondaryType secType : newDoc.getSecondaryTypes()) {
-                if (secondaryTestType.getId().equals(secType.getId())) {
-                    found = true;
-                    break;
-                }
-            }
-        }
-
-        f = createResult(FAILURE, "Document still has the detached secondary type!");
-        addResult(assertIsFalse(found, null, f));
-
-        // check properties
-        ObjectType primaryType = newDoc.getType();
-        List<SecondaryType> secondaryTypes = newDoc.getSecondaryTypes();
-
-        for (Property<?> prop : doc.getProperties()) {
-            if (!primaryType.getPropertyDefinitions().containsKey(prop.getId())) {
-                f = createResult(FAILURE, "Property '" + prop.getId()
-                        + "' is neither defined by the primary type nor by a secondary type!");
-
-                if (secondaryTypes == null) {
-                    addResult(f);
-                } else {
-                    boolean foundProperty = false;
-                    for (SecondaryType secondaryType : secondaryTypes) {
-                        if (secondaryType.getPropertyDefinitions() != null
-                                && secondaryType.getPropertyDefinitions().containsKey(prop.getId())) {
-                            foundProperty = true;
-                            break;
-                        }
-                    }
-                    addResult(assertIsTrue(foundProperty, null, f));
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/TypesTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/TypesTestGroup.java
deleted file mode 100644
index 98675bf..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/types/TypesTestGroup.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.types;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains tests that check type operations.
- */
-public class TypesTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Types Test Group");
-        setDescription("Types tests.");
-
-        addTest(new BaseTypesTest());
-        addTest(new CreateAndDeleteTypeTest());
-        addTest(new SecondaryTypesTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/CheckedOutTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/CheckedOutTest.java
deleted file mode 100644
index ca3d530..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/CheckedOutTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.versioning;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * Checked out test.
- */
-public class CheckedOutTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Checked out Test");
-        setDescription("Calls getCheckedOutDocs() and checks the returned objects.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        boolean supportsOrderByName = isOrderByNameSupported(session);
-        OperationContext orderContext = (supportsOrderByName ? SELECT_ALL_NO_CACHE_OC_ORDER_BY_NAME
-                : SELECT_ALL_NO_CACHE_OC);
-
-        Document pwc = null;
-        try {
-            // create folder and a checked-out document
-            Folder testFolder = createTestFolder(session);
-            Document doc = createDocument(session, testFolder, "checkedouttest.txt", "checked out");
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
-
-            if (!docType.isVersionable()) {
-                addResult(createResult(WARNING, "Test type is not versionable. Check out skipped!"));
-            } else {
-                ObjectId pwcId = doc.checkOut();
-                pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-            }
-
-            // test all checked-out documents
-            int sessionCheckedOut = checkPWCs(session, session.getCheckedOutDocs(orderContext), supportsOrderByName);
-            addResult(createInfoResult(sessionCheckedOut + " checked out document(s) overall."));
-
-            if (pwc != null) {
-                f = createResult(FAILURE, "There should be at least one checked out document in the repository!");
-                addResult(assertIsTrue(sessionCheckedOut >= 1, null, f));
-            }
-
-            // test checked-out documents in the test folder
-            int testFolderCheckedOut = checkPWCs(session, testFolder.getCheckedOutDocs(orderContext),
-                    supportsOrderByName);
-            addResult(createInfoResult(testFolderCheckedOut + " checked out document(s) in the test folder."));
-
-            if (pwc != null) {
-                f = createResult(FAILURE, "There should be at least one checked out document in the test folder!");
-                addResult(assertIsTrue(testFolderCheckedOut >= 1, null, f));
-            }
-
-            // remove the PWC and document
-            if (pwc != null) {
-                pwc.cancelCheckOut();
-                pwc = null;
-            }
-            deleteObject(doc);
-        } finally {
-            if (pwc != null) {
-                pwc.cancelCheckOut();
-            }
-            deleteTestFolder();
-        }
-    }
-
-    private int checkPWCs(Session session, ItemIterable<Document> pwcs, boolean checkOrder) {
-        if (pwcs == null) {
-            return 0;
-        }
-
-        CmisTestResult f;
-
-        int i = 0;
-        int orderByNameIssues = 0;
-        String lastName = null;
-
-        for (Document pwc : pwcs) {
-            if (pwc == null) {
-                addResult(createResult(FAILURE, "The list of checked out documents contains a null entry!"));
-                continue;
-            }
-
-            String[] propertiesToCheck = getAllProperties(pwc);
-            addResult(checkObject(session, pwc, propertiesToCheck, "PWC check: " + pwc.getId()));
-
-            if (session.getRepositoryInfo().getCmisVersion() == CmisVersion.CMIS_1_0) {
-                f = createResult(WARNING, "PWC is not the latest version! Id: " + pwc.getId()
-                        + " (Note: The words of the CMIS specification define that the PWC is the latest version."
-                        + " But that is not the intention of the spec and will be changed in CMIS 1.1."
-                        + " Thus this a warning, not an error.)");
-                addResult(assertIsTrue(pwc.isLatestVersion(), null, f));
-            } else {
-                f = createResult(FAILURE,
-                        "The property value of 'cmis:isLatestVersion' is TRUE for a PWC! Id: " + pwc.getId());
-                addResult(assertIsFalse(pwc.isLatestVersion(), null, f));
-                f = createResult(FAILURE, "The property value of 'cmis:isLatestMajorVersion' is TRUE for a PWC! Id: "
-                        + pwc.getId());
-                addResult(assertIsFalse(pwc.isLatestMajorVersion(), null, f));
-            }
-
-            if (lastName != null && pwc.getName() != null) {
-                if (pwc.getName().compareToIgnoreCase(lastName) < 0) {
-                    orderByNameIssues++;
-                }
-            }
-
-            lastName = pwc.getName();
-
-            i++;
-        }
-
-        if (checkOrder) {
-            f = createResult(WARNING,
-                    "Checked-out documents should be ordered by cmis:name, but they are not! (It might be a collation mismatch.)");
-            addResult(assertEquals(0, orderByNameIssues, null, f));
-        } else {
-            addResult(createResult(INFO, "Repository doesn't support Order By for getCheckedOutDocs()."));
-        }
-
-        return i;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersionDeleteTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersionDeleteTest.java
deleted file mode 100644
index 46fa2db..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersionDeleteTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.versioning;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class VersionDeleteTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Versioning Delete Test");
-        setDescription("Creates a document, adds three versions and deletes the current version until the document is gone.");
-    }
-
-    @Override
-    public void run(Session session) {
-        try {
-            // create folder and document
-            Folder testFolder = createTestFolder(session);
-            Document doc = createDocument(session, testFolder, "versiondeletetest.txt", "v1");
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
-
-            if (!docType.isVersionable()) {
-                addResult(createResult(SKIPPED, "Test type is not versionable. Test skipped!"));
-                doc.delete(true);
-                return;
-            }
-
-            // add versions
-            Document doc2 = createVersion(session, doc, "v2", 2);
-            Document doc3 = createVersion(session, doc2, "v3", 3);
-            Document doc4 = createVersion(session, doc3, "v4", 4);
-
-            // delete versions
-            deleteVersion(doc4, doc3, 4);
-            deleteVersion(doc3, doc2, 3);
-            deleteVersion(doc2, doc, 2);
-            deleteVersion(doc, null, 1);
-
-        } finally {
-            deleteTestFolder();
-        }
-    }
-
-    private Document createVersion(Session session, Document doc, String content, int version) {
-        CmisTestResult f;
-
-        // check out
-        ObjectId pwcId = doc.checkOut();
-        Document pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-        addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC " + version + " compliance"));
-
-        // check in
-        byte[] contentBytes = IOUtils.toUTF8Bytes(content);
-
-        ContentStream contentStream = new ContentStreamImpl(doc.getName(), BigInteger.valueOf(contentBytes.length),
-                "text/plain", new ByteArrayInputStream(contentBytes));
-
-        ObjectId newVersionId = pwc.checkIn(true, null, contentStream, "test version " + version);
-
-        IOUtils.closeQuietly(contentStream);
-
-        Document newVersion = (Document) session.getObject(newVersionId, SELECT_ALL_NO_CACHE_OC);
-
-        addResult(checkObject(session, newVersion, getAllProperties(newVersion), "Version " + version + " compliance"));
-
-        // check version history
-        List<Document> versions = doc.getAllVersions();
-
-        f = createResult(FAILURE, "Version series should have " + version + " versions but has " + versions.size()
-                + "!");
-        addResult(assertEquals(version, versions.size(), null, f));
-
-        if (!versions.isEmpty()) {
-            f = createResult(FAILURE, "Newly created version " + version + " is not the latest version!");
-            addResult(assertEquals(newVersion.getId(), versions.get(0).getId(), null, f));
-
-            if (versions.size() > 1) {
-                f = createResult(FAILURE, "The previous version of version " + version
-                        + " is not the document it has been created from!");
-                addResult(assertEquals(doc.getId(), versions.get(1).getId(), null, f));
-            }
-        }
-
-        return newVersion;
-    }
-
-    private void deleteVersion(Document versionDoc, Document previousDoc, int version) {
-        CmisTestResult f;
-
-        // get version history before delete
-        List<Document> versionsBefore = versionDoc.getAllVersions();
-
-        // delete and check
-        versionDoc.delete(false);
-
-        f = createResult(FAILURE, "Deleted version " + version + " still exists!");
-        addResult(assertIsFalse(exists(versionDoc), null, f));
-
-        // check version history after delete
-        if (previousDoc != null) {
-            List<Document> versionsAfter = previousDoc.getAllVersions();
-
-            f = createResult(FAILURE, "After version " + version
-                    + " has been deleted, the version history should consist of " + (versionsBefore.size() - 1)
-                    + "  documents but is has " + versionsAfter.size() + " !");
-            addResult(assertEquals(versionsBefore.size() - 1, versionsAfter.size(), null, f));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningSmokeTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningSmokeTest.java
deleted file mode 100644
index 0750025..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningSmokeTest.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.versioning;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-import org.apache.chemistry.opencmis.tck.impl.CmisTestResultImpl;
-
-/**
- * Checked out test.
- */
-public class VersioningSmokeTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Versioning Smoke Test");
-        setDescription("Creates a document, checks it out, cancels the check out, checks it out again and finally checks it in.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        try {
-            // create folder and document
-            Folder testFolder = createTestFolder(session);
-            Document doc = createDocument(session, testFolder, "versioningtest.txt", "versioning");
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
-
-            if (!docType.isVersionable()) {
-                addResult(createResult(SKIPPED, "Test type is not versionable. Test skipped!"));
-                doc.delete(true);
-                return;
-            }
-
-            // gather properties for later
-            String[] propertiesToCheck = new String[doc.getType().getPropertyDefinitions().size()];
-
-            int i = 0;
-            for (String propId : doc.getType().getPropertyDefinitions().keySet()) {
-                propertiesToCheck[i++] = propId;
-            }
-
-            Map<String, Object> writableProperties = new HashMap<String, Object>();
-            for (Property<?> property : doc.getProperties()) {
-                if (property.getDefinition().getUpdatability() == Updatability.READWRITE) {
-                    writableProperties.put(property.getId(), property.getValue());
-                }
-            }
-
-            // check out
-            ObjectId pwcId = doc.checkOut();
-            Document pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 1"));
-
-            checkCheckedOut(pwc);
-
-            // check version series
-            addResult(checkVersionSeries(session, pwc.getAllVersions(SELECT_ALL_NO_CACHE_OC), propertiesToCheck,
-                    "Test version series after check out"));
-
-            // cancel checkout
-            pwc.cancelCheckOut();
-
-            doc.refresh();
-            checkCheckedIn(doc);
-
-            // check out again
-            pwcId = doc.checkOut();
-            pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 2"));
-
-            checkCheckedOut(pwc);
-
-            // check in
-            ObjectId newVersionId = pwc.checkIn(true, null, null, "Test Version 2");
-            Document newVersion = (Document) session.getObject(newVersionId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, newVersion, getAllProperties(newVersion), "New version compliance"));
-
-            checkCheckedIn(newVersion);
-
-            // check version history
-            List<Document> versions = newVersion.getAllVersions(SELECT_ALL_NO_CACHE_OC);
-            f = createResult(FAILURE, "Version series should have 2 versions but has " + versions.size() + "!");
-            addResult(assertEquals(2, versions.size(), null, f));
-
-            if (!versions.isEmpty()) {
-                f = createResult(FAILURE,
-                        "Version history order is incorrect! The first version should be the new version.");
-                addResult(assertEquals(newVersion.getId(), versions.get(0).getId(), null, f));
-
-                f = createResult(FAILURE,
-                        "The new version should be the latest version, but cmis:isLatestVersion is not TRUE.");
-                addResult(assertEquals(true, versions.get(0).isLatestVersion(), null, f));
-
-                f = createResult(FAILURE,
-                        "The new version should be the latest major version, but cmis:isLatestMajorVersion is not TRUE.");
-                addResult(assertEquals(true, versions.get(0).isLatestMajorVersion(), null, f));
-            }
-
-            if (versions.size() > 1) {
-                f = createResult(FAILURE,
-                        "Version history order is incorrect! The second version should be the origin document.");
-                addResult(assertEquals(doc.getId(), versions.get(1).getId(), null, f));
-            }
-
-            // check version series
-            addResult(checkVersionSeries(session, versions, propertiesToCheck, "Test version series after check in"));
-
-            // check out again
-            pwcId = doc.checkOut();
-            pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 3"));
-
-            checkCheckedOut(pwc);
-
-            // check in giving back all updateable properties
-            ObjectId thirdVersionId = pwc.checkIn(true, writableProperties, null, "Test Version 3");
-            Document thirdVersion = (Document) session.getObject(thirdVersionId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, thirdVersion, getAllProperties(thirdVersion), "New version compliance"));
-
-            // check out again
-            pwcId = doc.checkOut();
-            pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 4"));
-
-            checkCheckedOut(pwc);
-
-            // check in giving a new content stream
-            String fourthContent = "new content";
-            byte[] fourthContentBytes = IOUtils.toUTF8Bytes(fourthContent);
-            ContentStream fourthContentStream = new ContentStreamImpl("version4",
-                    BigInteger.valueOf(fourthContentBytes.length), "text/plain", new ByteArrayInputStream(
-                            fourthContentBytes));
-
-            ObjectId fourthVersionId = pwc.checkIn(true, null, fourthContentStream, "Test Version 5");
-            Document fourthVersion = (Document) session.getObject(fourthVersionId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, fourthVersion, getAllProperties(fourthVersion), "New version compliance"));
-
-            checkCheckedIn(fourthVersion);
-
-            // check out again
-            pwcId = doc.checkOut();
-            pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 5"));
-
-            checkCheckedOut(pwc);
-            
-            // check in giving properties and a new content stream
-            String fifthContent = "brand-new content";
-            byte[] fifthContentBytes = IOUtils.toUTF8Bytes(fifthContent);
-            ContentStream fifthContentStream = new ContentStreamImpl("version5",
-                    BigInteger.valueOf(fifthContentBytes.length), "text/plain", new ByteArrayInputStream(
-                            fifthContentBytes));
-
-            ObjectId fifthVersionId = pwc.checkIn(true, writableProperties, fifthContentStream, "Test Version 5");
-            Document fifthVersion = (Document) session.getObject(fifthVersionId, SELECT_ALL_NO_CACHE_OC);
-
-            addResult(checkObject(session, fifthVersion, getAllProperties(fifthVersion), "New version compliance"));
-
-            checkCheckedIn(fifthVersion);
-
-            // remove the document
-            deleteObject(doc);
-        } finally {
-            deleteTestFolder();
-        }
-    }
-
-    private void checkCheckedOut(Document pwc) {
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Version series has a PWC but cmis:isVersionSeriesCheckedOut is not TRUE!");
-        addResult(assertIsTrue(pwc.isVersionSeriesCheckedOut(), null, f));
-
-        if (pwc.getVersionSeriesCheckedOutId() == null) {
-            addResult(createResult(WARNING, "cmis:versionSeriesCheckedOutId is not set!"));
-        } else {
-            f = createResult(FAILURE, "PWC id and cmis:versionSeriesCheckedOutId don't match!");
-            addResult(assertEquals(pwc.getId(), pwc.getVersionSeriesCheckedOutId(), null, f));
-        }
-
-        f = createResult(WARNING, "PWC does not have a value for cmis:versionSeriesCheckedOutBy!");
-        addResult(assertStringNotEmpty(pwc.getVersionSeriesCheckedOutBy(), null, f));
-    }
-
-    private void checkCheckedIn(Document doc) {
-        CmisTestResult f;
-
-        f = createResult(FAILURE, "Version series is not checked out but cmis:isVersionSeriesCheckedOut is not FALSE!");
-        addResult(assertIsFalse(doc.isVersionSeriesCheckedOut(), null, f));
-
-        f = createResult(FAILURE, "Version series is not checked out but cmis:versionSeriesCheckedOutId has a value!");
-        addResult(assertNull(doc.getVersionSeriesCheckedOutId(), null, f));
-
-        f = createResult(FAILURE, "Version series is not checked out but cmis:versionSeriesCheckedOutBy has a value!");
-        addResult(assertNull(doc.getVersionSeriesCheckedOutBy(), null, f));
-    }
-
-    private CmisTestResult checkVersionSeries(Session session, List<Document> versions, String[] properties,
-            String message) {
-        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
-        CmisTestResult f;
-
-        // make sure there is only one latest version
-        // and zero or one latest major version
-        int countLatest = 0;
-        int countLatestMajor = 0;
-        String latestId = null;
-        for (Document version : versions) {
-            addResult(results, checkObject(session, version, properties, "Version object check: " + version.getId()));
-
-            if (Boolean.TRUE.equals(version.isLatestVersion())) {
-                countLatest++;
-                latestId = version.getId();
-            }
-
-            if (Boolean.TRUE.equals(version.isLatestMajorVersion())) {
-                countLatestMajor++;
-            }
-        }
-
-        f = createResult(FAILURE, "The version series must have exactly one latest version, but it has " + countLatest
-                + "!");
-        addResult(results, assertEquals(1, countLatest, null, f));
-
-        f = createResult(FAILURE, "The version series must have zero or one latest major version, but it has "
-                + countLatestMajor + "!");
-        addResult(results, assertIsTrue(countLatestMajor < 2, null, f));
-
-        // check getObjectOfLatestVersion()
-        if (countLatest == 1) {
-            Document latestVersion = versions.get(0).getObjectOfLatestVersion(false, SELECT_ALL_NO_CACHE_OC);
-            addResult(
-                    results,
-                    checkObject(session, latestVersion, properties,
-                            "Latest version object check: " + latestVersion.getId()));
-
-            f = createResult(FAILURE,
-                    "The version that is flagged as latest version is not returned by getObjectOfLatestVersion()!");
-            addResult(results, assertEquals(latestId, latestVersion.getId(), null, f));
-
-            // check with session.getLatestDocumentVersion()
-            Document latestVersion2 = session.getLatestDocumentVersion(versions.get(versions.size() - 1).getId(),
-                    SELECT_ALL_NO_CACHE_OC);
-
-            addResult(
-                    results,
-                    checkObject(session, latestVersion2, properties, "Latest version object check (2): "
-                            + latestVersion2.getId()));
-
-            f = createResult(FAILURE,
-                    "The version that is flagged as latest version is not returned by getObjectOfLatestVersion()!");
-            addResult(results, assertEquals(latestId, latestVersion2.getId(), null, f));
-        }
-
-        CmisTestResultImpl result = createResult(getWorst(results), message);
-        result.getChildren().addAll(results);
-
-        return (result.getStatus().getLevel() <= OK.getLevel() ? null : result);
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningStateCreateTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningStateCreateTest.java
deleted file mode 100644
index 441fa1a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningStateCreateTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.versioning;
-
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
-import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-public class VersioningStateCreateTest extends AbstractSessionTest {
-
-    @Override
-    public void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Versioning State Create Test");
-        setDescription("Creates documents in different versioning states.");
-    }
-
-    @Override
-    public void run(Session session) {
-        CmisTestResult f;
-
-        try {
-            // create folder and document
-            Folder testFolder = createTestFolder(session);
-
-            DocumentTypeDefinition docType = (DocumentTypeDefinition) session
-                    .getTypeDefinition(getDocumentTestTypeId());
-
-            if (!docType.isVersionable()) {
-                addResult(createResult(SKIPPED, "Test type is not versionable. Test skipped!"));
-                return;
-            }
-
-            // major version
-            Document docMajor = testFolder.createDocument(getProperties("major.txt"), getContentStream(),
-                    VersioningState.MAJOR, null, null, null, SELECT_ALL_NO_CACHE_OC);
-            addResult(checkObject(session, docMajor, getAllProperties(docMajor), "Major version compliance"));
-
-            f = createResult(FAILURE, "Document should be major version.");
-            addResult(assertIsTrue(docMajor.isMajorVersion(), null, f));
-
-            List<Document> versions = docMajor.getAllVersions();
-
-            f = createResult(FAILURE, "Version series should have one version but has " + versions.size() + ".");
-            addResult(assertEquals(1, versions.size(), null, f));
-
-            deleteObject(docMajor);
-
-            // minor version
-            try {
-                Document docMinor = testFolder.createDocument(getProperties("minor.txt"), getContentStream(),
-                        VersioningState.MINOR, null, null, null, SELECT_ALL_NO_CACHE_OC);
-                addResult(checkObject(session, docMinor, getAllProperties(docMinor), "Minor version compliance"));
-
-                f = createResult(FAILURE, "Document should be minor version.");
-                addResult(assertIsFalse(docMinor.isMajorVersion(), null, f));
-
-                versions = docMinor.getAllVersions();
-
-                f = createResult(FAILURE, "Version series should have one version but has " + versions.size() + ".");
-                addResult(assertEquals(1, versions.size(), null, f));
-
-                deleteObject(docMinor);
-            } catch (CmisConstraintException ce) {
-                addResult(createResult(WARNING, "Creating a minor version failed! "
-                        + "The repository might not support minor versions. Exception: " + ce, ce, false));
-            } catch (CmisInvalidArgumentException iae) {
-                addResult(createResult(WARNING, "Creating a minor version failed! "
-                        + "The repository might not support minor versions.  Exception: " + iae, iae, false));
-            }
-
-            // checked out version
-            try {
-                Document docCheckedOut = testFolder.createDocument(getProperties("checkout.txt"), getContentStream(),
-                        VersioningState.CHECKEDOUT, null, null, null, SELECT_ALL_NO_CACHE_OC);
-                addResult(checkObject(session, docCheckedOut, getAllProperties(docCheckedOut),
-                        "Checked out version compliance"));
-
-                f = createResult(FAILURE, "Version series should be checked out.");
-                addResult(assertIsTrue(docCheckedOut.isVersionSeriesCheckedOut(), null, f));
-
-                versions = docCheckedOut.getAllVersions();
-
-                f = createResult(FAILURE, "Version series should have one version but has " + versions.size() + ".");
-                addResult(assertEquals(1, versions.size(), null, f));
-
-                docCheckedOut.cancelCheckOut();
-            } catch (CmisConstraintException ce) {
-                addResult(createResult(WARNING, "Creating a checked out version failed! "
-                        + "The repository might not support creating checked out versions. Exception: " + ce, ce, false));
-            } catch (CmisInvalidArgumentException iae) {
-                addResult(createResult(WARNING, "Creating a checked out version failed! "
-                        + "The repository might not  support creating checked out versions.  Exception: " + iae, iae,
-                        false));
-            }
-
-        } finally {
-            deleteTestFolder();
-        }
-    }
-
-    private Map<String, Object> getProperties(String name) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, getDocumentTestTypeId());
-
-        return properties;
-    }
-
-    private ContentStream getContentStream() {
-        byte[] contentBytes = IOUtils.toUTF8Bytes("some content");
-
-        return new ContentStreamImpl("content.txt", BigInteger.valueOf(contentBytes.length), "text/plain",
-                new ByteArrayInputStream(contentBytes));
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningTestGroup.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningTestGroup.java
deleted file mode 100644
index 9cbf40d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/versioning/VersioningTestGroup.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tck.tests.versioning;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTestGroup;
-
-/**
- * This test group contains versioning tests.
- */
-public class VersioningTestGroup extends AbstractSessionTestGroup {
-    @Override
-    public void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Versioning Test Group");
-        setDescription("Versioning tests.");
-
-        addTest(new VersioningSmokeTest());
-        addTest(new VersionDeleteTest());
-        addTest(new VersioningStateCreateTest());
-        addTest(new CheckedOutTest());
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/cmis-tck-groups.txt b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/cmis-tck-groups.txt
deleted file mode 100644
index 46263ff..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/cmis-tck-groups.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-###############################################################
-# TCK group class list. 
-###############################################################
-
-org.apache.chemistry.opencmis.tck.tests.basics.BasicsTestGroup
-org.apache.chemistry.opencmis.tck.tests.types.TypesTestGroup
-org.apache.chemistry.opencmis.tck.tests.crud.CRUDTestGroup
-org.apache.chemistry.opencmis.tck.tests.versioning.VersioningTestGroup
-org.apache.chemistry.opencmis.tck.tests.filing.FilingTestGroup
-org.apache.chemistry.opencmis.tck.tests.control.ControlTestGroup
-org.apache.chemistry.opencmis.tck.tests.query.QueryTestGroup
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-build.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-build.xml
deleted file mode 100644
index 2798907..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-build.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
-        specific language governing permissions and limitations under the License.
-    -->
-
-    <!--
-        CMIS TCK ant task example.
-    -->
-
-<project name="CMISTCKExample" default="main" basedir=".">
-
-    <target name="main">
-        <path id="opencmistck">
-            <fileset dir="/path/to/opencmis/jars">
-                <include name="**/*.jar"/>
-            </fileset>
-        </path>
-    
-        <taskdef name="cmistck" classname="org.apache.chemistry.opencmis.tck.runner.CmisTckAntTask">
-            <classpath refid="opencmistck"/>
-        </taskdef>
-        
-        <!--
-            parameters: OpenCMIS session parameters file (see sample-parameters.properties)
-            output:     report file
-            format:     text, xml, or html
-        -->
-
-        <cmistck parameters="/path/to/opencmis-parameters.properties" output="/path/to/output.txt" format="text" />
-    	
-     </target>
-
-</project>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-parameters.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-parameters.properties
deleted file mode 100644
index e67fdca..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/resources/sample-parameters.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://localhost:8080/opencmis/atom
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/pom.xml
deleted file mode 100644
index c62f34b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-test-tools</artifactId>
-    <name>OpenCMIS Tools</name>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-    
-	<build>
-		<plugins>
-			<plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <addMavenDescriptor>false</addMavenDescriptor>
-                        <manifest>
-                            <mainClass>org.apache.chemistry.opencmis.tools.main.ObjGenApp</mainClass>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix />
-                        </manifest>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-		</plugins>
-	</build>
-	
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-test-util</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-		<dependency>
-            <groupId>org.apache.tika</groupId>
-            <artifactId>tika-parsers</artifactId>
-            <version>1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>net.sf.jopt-simple</groupId>
-            <artifactId>jopt-simple</artifactId>
-            <version>3.2</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.0.1</version>
-        </dependency>     
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>          
-        </dependency>        
-    </dependencies>
-
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/PropertyDefinitions.txt b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/PropertyDefinitions.txt
deleted file mode 100644
index 2b3ef6d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/PropertyDefinitions.txt
+++ /dev/null
@@ -1,630 +0,0 @@
-#property definitions

-string

-Artist

-artist;artist;apache

-Artist

-single, readwrite, optional, true, true

-

-string

-Album

-album;album;apache

-title

-single, readwrite, optional, true, true

-

-string

-Title

-title;title;apache

-Title

-single, readwrite, optional, true, true

-

-string

-Comment

-comment;comment;apache

-Comment

-single, readwrite, optional, false, false

-

-string

-Genre

-genre;genre;apache

-Genre

-single, readwrite, optional, true, true

-

-integer

-Length

-length;length;apache

-Length in seconds

-single, readwrite, optional, false, false

-

-integer

-Track

-track;track;apache

-Track in album

-single, readwrite, optional, true, true

-

-string

-Year

-year;year;apache

-release date of albun

-single, readwrite, optional, true, true

-

-string

-Composer

-composer;composer;apache

-Composer

-single, readwrite, optional, true, true

-

-string

-Disc Number

-discNo;discNo;apache

-number of disc / total discs

-single, readwrite, optional, false, false

-

-string

-Audio Format

-audioFormat;audioFormat;apache

-Audio Format / compression scheme

-single, readwrite, optional, false, false

-

-integer

-Sample Rate

-sampleRate;sampleRate;apache

-Sample Rate

-single, readwrite, optional, false, false

-

-string enum: Mono=Mono;Stereo=Stereo;5.1=5.1;7.1=7.1

-Audio Channel Type

-audioChannelType;audioChannelType;apache

-audio channel type

-single, readwrite, optional, false, false

-

-integer

-Number Channels

-noChannels;noChannels;apache

-number of audio channels

-single, readwrite, optional, false, false

-

-string

-Compressor Version

-compressorVersion;compressorVersion;apache

-version description of compressor

-single, readwrite, optional, false, false

-

-string

-Message Recipient Address

-messageRecipientAddress;messageRecipientAddress;apache

-Message Recipient Address

-single, readwrite, optional, true, true

-

-string

-From

-from;from;apache

-sender of message

-single, readwrite, optional, true, true

-

-string

-To

-to;to;apache

-recipients of message

-multi, readwrite, optional, true, true

-

-string

-Cc

-cc;cc;apache

-carbon copy recipients of message

-multi, readwrite, optional, true, true

-

-string

-Bcc

-bcc;bcc;apache

-blind carbon copy recipients of message

-multi, readwrite, optional, false, false

-

-string

-Subject

-subject;subject;apache

-subjet of message

-single, readwrite, optional, true, true

-

-datetime

-Creation Date

-creationDate;creationDate;apache

-Creation Date

-single, readwrite, optional, false, false

-

-datetime

-Last Save Date

-lastSaveDate;lastSaveDate;apache

-Last Save Date

-single, readwrite, optional, false, false

-

-integer

-Image Width

-imageWidth;0x0100;apache;

-Image Width

-single, oncreate, optional, false, false

-

-integer

-Image Height

-imageHeight;0x0101;apache

-Image Height

-single, oncreate, optional, false, false

-

-integer

-Bits Per Sample

-bitsPerSample;0x0102;apache

-Bits Per Sample

-single, oncreate, optional, false, false

-

-integer enum: 1=Uncompressed;2=CCITT 1D;3=T4/Group 3 Fax;4=T6/Group 4 Fax;5=LZW;6=JPEG (old-style);7=JPEG;8=Adobe Deflate;9=JBIG BW;10=JBIG Color;99=JPEG;262=Kodak 262;32766=Next;32767=Sony ARW Compressed;32769=Packed RAW;32770=Samsung SRW Compressed;32771=CCIRLEW;32773=PackBits;32809=Thunderscan;32867=Kodak KDC Compressed;32895=IT8CTPAD;32896=IT8LW;32897=IT8MP;32898=IT8BL;32908=PixarFilm;32909=PixarLog;32946=Deflate;32947=DCS;34661=JBIG;34676=SGILog;34677=SGILog24;34712=JPEG 2000;34713=Nikon NEF Compressed;34715=JBIG2 TIFF FX;34718=Microsoft Document Imaging (MDI) Binary Level Codec;34719=Microsoft Document Imaging (MDI) Progressive Transform Codec;34720=Microsoft Document Imaging (MDI) Vector;65000=Kodak DCR Compressed;65535=Pentax PEF Compressed

-Compression

-compression;0x0103;apache

-Compression Format

-single, oncreate, optional, false, false

-

-integer enum: 0=WhiteIsZero;1=BlackIsZero;2=RGB;3=RGB Palette;4=Transparency Mask;5=CMYK;6=YCbCr;8=CIELab;9=ICCLab;10=ITULab;32803=Color Filter Array;32844=Pixar LogL;32845=Pixar LogLuv;34892=Linear Raw

-Photometric Interpretation

-photometricInterpretation;0x0106

-Color Format

-single, oncreate, optional, false, false

-

-string

-Image Description

-imageDescription;0x010e;apache

-Description

-single, readwrite, optional, true, true

-	 

-string

-Make

-make;0x010f;apache

-Camera Make

-single, readwrite, optional, true, true

-

-string

-Model

-model;0x0110;apache

-Camera Model

-single, readwrite, optional, true, true

-

-integer enum: 1=Horizontal (normal);2=Mirror horizontal;3=Rotate 180;4=Mirror vertical;5=Mirror horizontal and rotate 270 CW;6=Rotate 90 CW;7=Mirror horizontal and rotate 90 CW;8=Rotate 270 CW

-Orientation

-orientation;0x0112;apache

-Orientation

-single, readwrite, optional, false, false

-

-decimal

-X Resolution

-xResolution;0x011a;apache

-xresolution

-single, readwrite, optional, false, false

-

-decimal

-Y Resolution

-yResolution;0x011b;apache

-yresolution

-single, readwrite, optional, false, false

-

-integer enum: 1=None;2=inches;3=cm

-Resolution Unit

-resolutionUnit;0x0128;apache

-Resolution Unit

-single, readwrite, optional, false, false

-

-string

-Software

-software;0x0131;apache

-Software

-single, readwrite, optional, false, false

-

-datetime

-Modify Date

-modifyDate;0x0132;apache

-Modify Date

-single, readwrite, optional, false, false

-

-string

-Artist

-artist;0x013b;apache

-Artist

-single, readwrite, optional, true, true

-

-integer enum: 1=Centered;2=Co-sited

-YCbCrPositioning

-yCbCrPositioning;0x0213;apache

-YCbCr Positioning

-single, readwrite, optional, false, false

-

-string

-Copyright

-copyright;0x8298;apache

-Copyright Notice

-single, readwrite, optional, false, false

-

-decimal

-Exposure Time

-exposureTime;0x829a;apache

-Exposure Time

-single, oncreate, optional, false, false

-

-decimal

-F Number

-fNumber;0x829d;apache

-F-Stop Number

-single, oncreate, optional, false, false

-

-integer enum: 0=Not Defined;1=Manual;2=Program AE;3=Aperture-priority AE;4=Shutter speed priority AE;5=Creative (Slow speed);6=Action (High speed);7=Portrait;8=Landscape;9=Bulb

-Exposure Program

-exposureProgram;0x8822;apache

-Exposure Program

-single, oncreate, optional, false, false

-

-integer

-ISO Speed

-isoSpeed;0x8827;apache

-ISO Speed Setting

-single, oncreate, optional, true, true

-

-decimal

-GPS Latitude

-gpsLatitude;0x8825-0x0002;apache

-GPS Latitude

-single, readwrite, optional, true, true

-

-string	enum: N=North;S=South

-GPS Latitude Ref

-gpsLatitudeRef;0x8825-0x0001;apache

-GPS Latitude Reference (N/S)

-single, readwrite, optional, true, true

-

-decimal

-GPS Longitude

-gpsLongitude;0x8825-0x0004;apache

-GPS Longitude

-single, readwrite, optional, true, true

-

-string enum: E=East;W=West

-GPS Longitude Ref

-gpsLongitudeRef;0x8825-0x0003;apache

-GPS Longitude Reference (W/E)

-single, readwrite, optional, true, true

-

-decimal

-GPS Altitude

-gpsAltitude;0x8825-0x0006;apache

-GPS Altitude

-single, readwrite, optional, true, true

-

-string enum: 0=Above Sea Level;1=Below Sea Level

-GPS Altitude Ref

-gpsAltitudeRef;0x8825-0x0005;apache

-GPS Altitude Reference

-single, readwrite, optional, true, true

-

-integer

-Self Timer Mode

-selfTimerMode;0x882b;apache

-Self Timer Mode

-single, readwrite, optional, false, false

-

-integer

-Time Zone Offset

-timeZoneOffset;0x882a;apache

-Time Zone Offset (GMT offset in hours)

-multi, readwrite, optional, false, false

-	

-datetime

-Date Time Original

-dateTimeOriginal;0x9003;apache

-date/time when original image was taken

-single, readwrite, optional, false, false

-

-datetime

-Create Date

-createDate;0x9004;apache

-date/time digitized

-single, readwrite, optional, true, true

-

-decimal

-Shutter Speed Value

-shutterSpeedValue;0x9201;apache

-shutter speed value

-single, readwrite, optional, false, false

-

-decimal

-Aperture Value

-apertureValue;0x9202;apache

-Aperture Value

-single, readwrite, optional, false, false

-

-decimal

-Brightness Value

-brightnessValue;0x9203;apache

-Brightness Value

-single, readwrite, optional, false, false

-

-decimal

-Exposure Compensation

-exposureCompensation;0x9204;apache

-Exposure Compensation

-single, readwrite, optional, false, false

-

-decimal

-Max Aperture Value 	

-maxApertureValue;0x9205;apache

-Max Aperture Value 	

-single, readwrite, optional, false, false

-

-integer enum:0=Unknown;1=Average;2=Center-weighted average;3=Spot;4=Multi-spot;5=Multi-segment;6=Partial;255=Other

-Metering Mode

-meteringMode;0x9207;apache

-metering mode

-single, readwrite, optional, false, false

-

-decimal

-Subject Distance

-subjectDistance;0x9206;apache

-subject distance

-single, readwrite, optional, false, false

-

-integer

-Light Source

-lightSource;0x9208;apache

-light source value

-single, readwrite, optional, false, false

-

-integer

-Flash

-flash;0x9209;apache

-Flash Setting

-single, readwrite, optional, false, false

-

-decimal

-Focal Length

-focalLength;0x920a;apache

-focal length

-single, readwrite, optional, true, true

-

-string 

-User Comment

-userComment;0x9286;apache

-user comment

-single, readwrite, optional, true, true

-

-integer enum: 1=sRGB;2=Adobe RGB;65533=Wide Gamut RGB;65534=ICC Profile;65535=Uncalibrated

-Color Space

-colorSpace;0xa001;apache

-color space

-single, readwrite, optional, false, false

-

-integer

-PixelXDimension

-pixelXDimension;0xa002;apache

-dimension in pixel x

-single, readwrite, optional, false, false

-

-integer

-PixelYDimension

-pixelYDimension;0xa003;apache

-dimension in pixel y

-single, readwrite, optional, false, false

-

-integer enum: 0=Auto;1=Manual;2=Auto bracket

-Exposure Mode

-exposureMode;0xa402;apache

-Exposure Mode

-single, readwrite, optional, false, false

-

-integer enum: 0=Auto;1=Manual

-White Balance

-whiteBalance;0xa403;apache

-white balance

-single, readwrite, optional, false, false

-

-integer enum: 0=Standard;1=Landscape;2=Portrait;3=Night

-Scene Capture Type

-sceneCaptureType;0xa406;apache

-Scene Capture Type

-single, readwrite, optional, false, false

-

-id

-Image Unique Id

-imageUniqueId;0xa420;apache

-Image Unique Id

-single, readwrite, optional, false, false

-

-string

-Owner Name

-ownerName;0xa430;apache

-Owner Name

-single, readwrite, optional, true, true

-

-string

-Serial Number

-serialNumber;0xa431;apache

-serial number

-single, readwrite, optional, true, true

-

-integer

-Rating

-rating;0x4746;apache

-rating value

-single, readwrite, optional, false, false

-

-integer

-Rating Percent

-ratingPercent;0x4749;apache

-rating percent

-single, readwrite, optional, false, false

-

-integer

-Data Precision

-dataPrecision;0x0000;apache

-JPEG Data Precision

-single, readwrite, optional, false, false

-

-string

-Application Name

-applicationName;applicationName;apache

-Application Name

-single, readwrite, optional, true, true

-

-string

-Application Version

-applicationVersion;applicationVersion;apache

-Application Version

-single, readwrite, optional, false, false

-

-string

-Author

-author;author;apache

-Author

-single, readwrite, optional, true, true

-

-string

-Category

-category;category;apache

-Category

-single, readwrite, optional, true, true

-

-string

-Content Status

-contentStatus;contentStatus;apache

-Content Status

-single, readwrite, optional, false, false

-

-string

-Comments

-comments;comments;apache

-Comments

-single, readwrite, optional, true, true

-

-string

-Company

-company;company;apache

-Company

-single, readwrite, optional, true, true

-

-string

-Keywords

-keywords;keywords;apache

-Keywords

-multiple, readwrite, optional, true, true

-

-string

-Last Author

-lastAuthor;lastAuthor;apache

-Last Author

-single, readwrite, optional, false, false

-

-string

-Manager

-manager;manager;apache

-Manager

-single, readwrite, optional, false, false

-

-string

-Notes

-notes;notes;apache

-Notes

-single, readwrite, optional, false, false

-

-string

-Presentation Format

-presentationFormat;presentationFormat;apache

-Presentation Format

-single, readwrite, optional, false, false

-

-string

-Revision Number

-revisionNumber;revisionNumber;apache

-Revision Number

-single, readwrite, optional, false, false

-

-string

-Template

-template;template;apache

-Template

-single, readwrite, optional, false, false

-

-string

-Version

-version;version;apache

-Version

-single, readwrite, optional, false, false

-

-integer

-Character Count

-characterCount;characterCount;apache

-Character Count

-single, readwrite, optional, false, false

-

-integer

-Character Count With Spaces

-characterCountWithSpaces;characterCountWithSpaces;apache

-Character Count With Spaces

-single, readwrite, optional, false, false

-

-integer

-Word Count

-wordCount;wordCount;apache

-Word Count

-single, readwrite, optional, false, false

-

-integer

-Line Count

-lineCount;lineCount;apache

-Line Count

-single, readwrite, optional, false, false

-

-integer

-Page Count

-pageCount;pageCount;apache

-Page Count

-single, readwrite, optional, true, true

-

-integer

-Slide Count

-slideCount;slideCount;apache

-Slide Count

-single, readwrite, optional, true, true

-

-integer

-Paragraph Count

-paragraphCount;paragraphCount;apache

-Paragraph Count

-single, readwrite, optional, false, false

-

-string

-Total Time

-totalTime;totalTime;apache

-Total Time

-single, readwrite, optional, false, false

-

-string

-Edit Time

-editTime;editTime;apache

-Edit Time

-single, readwrite, optional, false, false

-

-datetime

-Last Save Date

-lastSaveDate;lastSaveDate;apache

-Last Save Date

-single, readwrite, optional, false, false

-

-string

-Last Printed

-lastPrinted;lastPrinted;apache

-Last Printed

-single, readwrite, optional, false, false

-

-string

-Creator

-creator;creator;apache

-creator of document

-single, readwrite, optional, true, true

-

-string

-Trapped

-trapped;trapped;apache

-trapped

-single, readwrite, optional, false, false

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypeDefinitions.txt b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypeDefinitions.txt
deleted file mode 100644
index 6b70bf7..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypeDefinitions.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-#EXIF type definition http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html

-document

-audioFile;audioFile;apache

-Audio File

-Audio Content (compressed or uncompressed)

-    Artist

-    Album

-    Title

-    Comment

-    Genre

-    Length

-    Track

-    Year

-    Composer

-    Disc Number

-    Audio Format

-    Sample Rate

-    Audio Channel Type

-    Number Channels

-    Compressor Version

-

-document

-emailDocument;emailDocument;apache

-Email Document

-Document of type Email

-    From

-    To

-    Cc

-    Bcc

-    Subject

-    Message Recipient Address

-    Creation Date

-    Last Save Date

-

-document

-exifImage;exifImage;apache

-EXIF Image

-Image with EXIF tags

-    Image Width

-    Image Height

-    Bits Per Sample

-    Compression

-    Photometric Interpretation

-    Image Description

-    Make

-    Model

-    Orientation

-    X Resolution

-    Y Resolution

-    Resolution Unit

-    Software

-    Modify Date

-    Artist

-    YCbCrPositioning

-    Copyright

-    Exposure Time

-    F Number

-    Exposure Program

-    ISO Speed

-    GPS Latitude

-    GPS Latitude Ref

-    GPS Longitude

-    GPS Longitude Ref

-    GPS Altitude

-    GPS Altitude Ref

-    Self Timer Mode

-    Time Zone Offset

-    Date Time Original

-    Create Date

-    Shutter Speed Value

-    Aperture Value

-    Brightness Value

-    Exposure Compensation

-    Max Aperture Value 	

-    Metering Mode

-    Subject Distance

-    Light Source

-    Flash

-    Focal Length

-    User Comment

-    Color Space

-    PixelXDimension

-    PixelYDimension

-    Exposure Mode

-    White Balance

-    Scene Capture Type

-    Image Unique Id

-    Owner Name

-    Serial Number

-    Rating

-    Rating Percent

-    Data Precision

-

-document

-officeDocument;officeDocument;apache

-Office Document

-Document of type Office

-    Application Name

-    Application Version

-    Author

-    Category

-    Content Status

-    Comments

-    Company

-    Keywords

-    Last Author

-    Manager

-    Notes

-    Presentation Format

-    Revision Number

-    Template

-    Version

-    Character Count

-    Character Count With Spaces

-    Word Count

-    Line Count

-    Page Count

-    Slide Count

-    Paragraph Count

-    Total Time

-    Edit Time

-    Creation Date

-    Last Save Date

-    Last Printed

-

-document

-pdfDocument;pdfDocument;apache:officeDocument

-PDF Document

-Document of type PDF

-    Creator

-    Title

-    Subject

-    Trapped

-

-document

-videoFile;videoFile;apache

-Video File

-Video Movies

-    Artist

-    Album

-    Title

-    Comment

-    Genre

-    Length

-    Track

-    Year

-    Disc Number

-    Image Width

-    Image Height

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypesXmlGenerator.groovy b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypesXmlGenerator.groovy
deleted file mode 100644
index 7d5bb2b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/TypesXmlGenerator.groovy
+++ /dev/null
@@ -1,383 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-

-////////////////////////////////////////////////////////////////////////

-// 

-// Groovy script to generate a types.xml file from a text file in 

-// a simplified syntax

-// This script expects two files names TypeDefinitions.txt and 

-// PropertyDefinitions.txt in the same directory and generates

-// file types.xml that can be imported into the InMemoryServer

-// 

-////////////////////////////////////////////////////////////////////////

-

-def genCommons1(name, id, descr) {

-    def id1 = id

-    def localName = name

-    def ns = ""

-    

-    // allow syntax name;localName;namespace in property name line

-    if (id.contains(";")) {

-        names = id.tokenize(";")

-        if (names.size() > 0)

-            id1 = names[0];

-        if (names.size() > 1)

-            localName = names[1];

-        if (names.size() > 2)

-            ns = names[2];

-    }

-	outFile.println("        <id>" + id1 + "</id>")

-	outFile.println("        <localName>" + localName + "</localName>")

-	outFile.println("        <displayName>" + name + "</displayName>")

-	outFile.println("        <queryName>" + name.replaceAll(" ", "_").toUpperCase() + "</queryName>")

-	outFile.println("        <description>" + descr + "</description>")

-	outFile.println("        <localNamespace>" + ns + "</localNamespace>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genCommons2(choices, cardinality, updatability, required, queryable, orderable) {

-    def cardinalityStr 

-    def updatabilityStr

-    def requiredStr

-    def queryableStr

-    def orderableStr

-    

-    if (updatability.toLowerCase().startsWith("readonly"))  

-        updatabilityStr = "readonly"

-    else if (updatability.toLowerCase().startsWith("oncreate"))  

-        updatabilityStr = "oncreate"

-    else if (updatability.toLowerCase().startsWith("whencheckedout"))  

-        updatabilityStr = "whencheckedout"

-    else

-        updatabilityStr = "readwrite"

-    

-    if (required.toLowerCase().startsWith("true"))

-        requiredStr = "true"

-    else

-        requiredStr = "false"

-

-        if (cardinality.toLowerCase().startsWith("multi"))

-        cardinalityStr = "multi"

-    else

-        cardinalityStr = "single"

-    

-    if (queryable.toLowerCase().startsWith("true"))

-        queryableStr = "true"

-    else

-        queryableStr = "false"

-

-    if (orderable.toLowerCase().startsWith("true"))

-        orderableStr = "true"

-    else

-        orderableStr = "false"

-

-	outFile.println("        <cardinality>" +  cardinalityStr + "</cardinality>")

-	outFile.println("        <updatability>" + updatabilityStr + "</updatability>")

-	outFile.println("        <inherited>false</inherited>")

-	outFile.println("        <required>" + requiredStr + "</required>")

-	outFile.println("        <queryable>" + queryableStr + "</queryable>")

-	outFile.println("        <orderable>" + orderableStr + "</orderable>")

-    outFile.println("        <openChoice>false</openChoice>")

-	if (null != choices) 

-	    genChoices(choices)

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genBoolean (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyBooleanDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>boolean</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyBooleanDefinition>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genDate (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyDateTimeDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>datetime</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyDateTimeDefinition>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genId (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyIdDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>id</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyIdDefinition>")

-}

- 

-45//////////////////////////////////////////////////////////////////

-

-def genInteger (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyIntegerDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>integer</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyIntegerDefinition>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genString (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyStringDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>string</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyStringDefinition>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genDecimal (name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-	outFile.println("    <propertyDecimalDefinition>")

-	genCommons1(name, uuid, descr)

-	outFile.println("        <propertyType>decimal</propertyType>")

-	genCommons2(choices, cardinality, updatability, required, queryable, orderable)

-	outFile.println("    </propertyDecimalDefinition>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genChoices (choices) {

-	   choices.each {

-	     keyValue = it.tokenize("=")

-		 String key = keyValue.get(0).trim()

-		 String value = keyValue.get(1).trim()

-		 // println("Found enum with key: " + key + " value: " + value)

-         outFile.println("        <choice displayName=\"" + value + "\">")

-         outFile.println("            <value>" + key + "</value>")

-         outFile.println("        </choice>")

-	   }

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genTypeDef (name, id, descr, typeKind, parentType, props) {

-

-    String xsiType

-    String baseId

-    

-    switch (typeKind) {

-        case "document":

-          xsiType = "cmisTypeDocumentDefinitionType"

-          baseId = "cmis:document"

-          break;

-        case "folder":

-          xsiType = "cmisTypeFolderDefinitionType"

-          baseId = "cmis:folder"

-          break;

-        default:

-           println("Error illegal type: " + typeKind)

-    }

-    if (parentType == null)

-      parentType = baseId

-      

-    def id1 = id

-    def localName = name

-    def ns = ""

-    

-    // allow syntax name;localName;namespace in property name line

-    if (id.contains(";")) {

-        names = id.tokenize(";")

-        if (names.size() > 0)

-            id1 = names[0];

-        if (names.size() > 1)

-            localName = names[1];

-            ns = names[2];

-    }

-

-	outFile.println("<cmisra:type xsi:type=\"" + xsiType + "\">")

-    outFile.println("    <id>" + id1 + "</id>")

-	outFile.println("    <localName>" + localName + "</localName>")

-	outFile.println("    <localNamespace>" + ns + "</localNamespace>")

-	outFile.println("    <parentId>" + parentType + "</parentId>")

-	outFile.println("    <displayName>" + name + "</displayName>")

-	outFile.println("    <queryName>" +  name.replaceAll(" ", "_").toUpperCase() + "</queryName>")

-	outFile.println("    <description>" + descr + "</description>")

-	outFile.println("    <baseId>" + baseId + "</baseId>")

-	outFile.println("    <creatable>true</creatable>")

-	outFile.println("    <fileable>true</fileable>")

-	outFile.println("    <queryable>true</queryable>")

-	outFile.println("    <fulltextIndexed>true</fulltextIndexed>")

-	outFile.println("    <includedInSupertypeQuery>true</includedInSupertypeQuery>")

-	outFile.println("    <controllablePolicy>false</controllablePolicy>")

-	outFile.println("    <controllableACL>true</controllableACL>")

-    if (typeKind == "document") {

-        outFile.println("    <versionable>false</versionable>")

-        outFile.println("    <contentStreamAllowed>allowed</contentStreamAllowed>")

-    }

-    if (props != null)

-        props.each { 

-            def propDef = propDefsMap.get(it)

-            if (propDef != null)

-                genPropertyDef (propDef.type, propDef.name, propDef.id, propDef.descr, propDef.choices, 

-                   propDef.cardinality, propDef.updatability, propDef.required, propDef.queryable, propDef.orderable)

-             else

-                println ("Error: unknown property definition " + it + " in type definition " + name)

-        }

-	outFile.println("</cmisra:type>")

-    outFile.println()

-    outFile.flush()    

-}

-

-//////////////////////////////////////////////////////////////////

-

-def genPropertyDef(type, name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable) {

-        

-    switch (type) {

-     case "boolean":

-       genBoolean(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     case "datetime":

-       genDate(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     case "id":

-       genId(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     case "integer":

-       genInteger(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     case "string":

-       genString(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     case "decimal":

-       genDecimal(name, uuid, descr, choices, cardinality, updatability, required, queryable, orderable)

-       break

-     default:

-       println("!!!Error: unknown property type " + type);

-    }

-    

-}

-

-//////////////////////////////////////////////////////////////////

-

-def readPropertiesFile(inputFile) {    

-    def propDefMap = [:]

-    def inFile = new File(inputFile).newReader() 

-    

-    while (inFile.readLine() != null) {   

-       def typeLine = inFile.readLine()

-       def name = inFile.readLine().trim()

-       println("   processing property: " + name + " type: " + typeLine)

-       def id = inFile.readLine().trim()

-       def descr = inFile.readLine().trim()

-       def attrs = inFile.readLine().trim()

-       def choices = null;

-       def cardinality, updatability, required, queryable, orderable

-       

-

-       type = typeLine.tokenize().get(0)

-       def arr = attrs.split(",")

-       cardinality = arr.length > 0 ? arr[0].trim() : null

-       updatability = arr.length > 1 ? arr[1].trim() : null

-       required = arr.length > 2 ? arr[2].trim() : null

-       queryable = arr.length > 2 ? arr[3].trim() : "false"

-       orderable = arr.length > 2 ? arr[4].trim() : "false"

-       

-       if (typeLine.contains("enum:")) {

-           choices = typeLine[typeLine.indexOf("enum:")+ 5..typeLine.length()-1].tokenize(";")

-       }

-       propDefMap.put(name, [name:name, id:id, descr:descr, type:type, choices:choices, cardinality:cardinality,

-               updatability:updatability, required:required, queryable:queryable, orderable:orderable])

-    }

-    

-    return propDefMap;  

-}

-

-//////////////////////////////////////////////////////////////////

-

-def readTypeDefinitions(inputFile) {

-    def typeDefMap = [:]

-    def inReader = new File(inputFile).newReader() 

-    // def inReader = new StringReader(typeDefInput)

-    def line = inReader.readLine()

-    while (line != null) {   

-       def kind = inReader.readLine().trim()

-       def idLine = inReader.readLine().trim()

-       def name = inReader.readLine().trim()

-       def descr = inReader.readLine().trim()

-       def arr = idLine.split(":")

-       def id = arr.length>0 ? arr[0].trim() : null

-       def superType = arr.length>1 ? arr[1].trim() : null

-

-       def propDefs = []

-       def readProperties = true;

-       while (readProperties) {

-           line = inReader.readLine()

-           if (line != null && line.size() > 0) 

-               propDefs.push(line.trim())

-           else

-              readProperties = false;

-       }

-       println("Reading type def " + name)

-       typeDefMap.put(name, [name: name, id: id, kind: kind, super: superType, descr: descr, props: propDefs])

-    }

-    return typeDefMap

-}

-

-//////////////////////////////////////////////////////////////////

-

-def writeTypes(typeDefsMap) {

-    outFile.println("<chem:typeDefinitions xmlns=\"http://docs.oasis-open.org/ns/cmis/core/200908/\"")

-    outFile.println("     xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\"")

-    outFile.println("     xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"")

-    outFile.println("     xmlns:chem=\"http://chemistry.apache.org/schemas/TypeDefnitions\">")

-    for ( e in typeDefsMap   ) {

-        println("generating type" +  e.value.name)  

-        genTypeDef (e.value.name, e.value.id, e.value.descr, e.value.kind, e.value.super, e.value.props) 

-    }

-    outFile.println("</chem:typeDefinitions>")

-}

-

-//////////////////////////////////////////////////////////////////

-

-def writePropDefs(propDefsMap) {

-    for ( e in propDefsMap   ) {

-        println("generating property" +  e.value.name)  

-        

-        genPropertyDef (e.value.type, e.value.name, e.value.id, e.value.descr, e.value.choices,

-            e.value.cardinality, e.value.updatability, e.value.required) 

-    }

-}

-

-//////////////////////////////////////////////////////////////////

-//  Main program

-

-println("Starting...")

-def propsFile = "PropertyDefinitions.txt";

-def typesFile = "TypeDefinitions.txt";

-def outFileName = "types.xml";

-outFile = new File(outFileName).newPrintWriter()

-

-println("Reading type definitions from file " + typesFile);

-typeDefsMap = readTypeDefinitions(typesFile)

-println("Reading property definitions from file " + propsFile);

-propDefsMap = readPropertiesFile(propsFile)

-println("Writing out to " + outFileName);      

-outFile.println("<!-- Generated Output file with type definitions. Do not edit! -->")

-writeTypes(typeDefsMap)

-outFile.close()

-println("...Done.")

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-atompub-example.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-atompub-example.properties
deleted file mode 100644
index 2c53763..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-atompub-example.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
-
-org.apache.chemistry.opencmis.binding.atompub.url=http://localhost/cmis/atom
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-webservices-example.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-webservices-example.properties
deleted file mode 100644
index ba6eb86..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/commander-webservices-example.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
-
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://localhost/cmis/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://localhost/cmis/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://localhost/cmis/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://localhost/cmis/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://localhost/cmis/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://localhost/cmis/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://localhost/cmis/MultiFiligService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://localhost/cmis/PolicyService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://localhost/cmis/ACLService?wsdl
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/types.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/types.xml
deleted file mode 100644
index d0b8280..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/resources/types.xml
+++ /dev/null
@@ -1,2354 +0,0 @@
-<!-- Generated Output file with type definitions. Do not edit! -->
-<chem:typeDefinitions xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"
-     xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
-     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-     xmlns:chem="http://chemistry.apache.org/schemas/TypeDefnitions">
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>audioFile</id>
-    <localName>audioFile</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Audio File</displayName>
-    <queryName>AUDIO_FILE</queryName>
-    <description>Audio Content (compressed or uncompressed)</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>album</id>
-        <localName>album</localName>
-        <displayName>Album</displayName>
-        <queryName>ALBUM</queryName>
-        <description>title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comment</id>
-        <localName>comment</localName>
-        <displayName>Comment</displayName>
-        <queryName>COMMENT</queryName>
-        <description>Comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>genre</id>
-        <localName>genre</localName>
-        <displayName>Genre</displayName>
-        <queryName>GENRE</queryName>
-        <description>Genre</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>length</id>
-        <localName>length</localName>
-        <displayName>Length</displayName>
-        <queryName>LENGTH</queryName>
-        <description>Length in seconds</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>track</id>
-        <localName>track</localName>
-        <displayName>Track</displayName>
-        <queryName>TRACK</queryName>
-        <description>Track in album</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>year</id>
-        <localName>year</localName>
-        <displayName>Year</displayName>
-        <queryName>YEAR</queryName>
-        <description>release date of albun</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>composer</id>
-        <localName>composer</localName>
-        <displayName>Composer</displayName>
-        <queryName>COMPOSER</queryName>
-        <description>Composer</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>discNo</id>
-        <localName>discNo</localName>
-        <displayName>Disc Number</displayName>
-        <queryName>DISC_NUMBER</queryName>
-        <description>number of disc / total discs</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>audioFormat</id>
-        <localName>audioFormat</localName>
-        <displayName>Audio Format</displayName>
-        <queryName>AUDIO_FORMAT</queryName>
-        <description>Audio Format / compression scheme</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>sampleRate</id>
-        <localName>sampleRate</localName>
-        <displayName>Sample Rate</displayName>
-        <queryName>SAMPLE_RATE</queryName>
-        <description>Sample Rate</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>audioChannelType</id>
-        <localName>audioChannelType</localName>
-        <displayName>Audio Channel Type</displayName>
-        <queryName>AUDIO_CHANNEL_TYPE</queryName>
-        <description>audio channel type</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Mono">
-            <value>Mono</value>
-        </choice>
-        <choice displayName="Stereo">
-            <value>Stereo</value>
-        </choice>
-        <choice displayName="5.1">
-            <value>5.1</value>
-        </choice>
-        <choice displayName="7.1">
-            <value>7.1</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>noChannels</id>
-        <localName>noChannels</localName>
-        <displayName>Number Channels</displayName>
-        <queryName>NUMBER_CHANNELS</queryName>
-        <description>number of audio channels</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>compressorVersion</id>
-        <localName>compressorVersion</localName>
-        <displayName>Compressor Version</displayName>
-        <queryName>COMPRESSOR_VERSION</queryName>
-        <description>version description of compressor</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>emailDocument</id>
-    <localName>emailDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Email Document</displayName>
-    <queryName>EMAIL_DOCUMENT</queryName>
-    <description>Document of type Email</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>from</id>
-        <localName>from</localName>
-        <displayName>From</displayName>
-        <queryName>FROM</queryName>
-        <description>sender of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>to</id>
-        <localName>to</localName>
-        <displayName>To</displayName>
-        <queryName>TO</queryName>
-        <description>recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>cc</id>
-        <localName>cc</localName>
-        <displayName>Cc</displayName>
-        <queryName>CC</queryName>
-        <description>carbon copy recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>bcc</id>
-        <localName>bcc</localName>
-        <displayName>Bcc</displayName>
-        <queryName>BCC</queryName>
-        <description>blind carbon copy recipients of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>subject</id>
-        <localName>subject</localName>
-        <displayName>Subject</displayName>
-        <queryName>SUBJECT</queryName>
-        <description>subjet of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>messageRecipientAddress</id>
-        <localName>messageRecipientAddress</localName>
-        <displayName>Message Recipient Address</displayName>
-        <queryName>MESSAGE_RECIPIENT_ADDRESS</queryName>
-        <description>Message Recipient Address</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>creationDate</id>
-        <localName>creationDate</localName>
-        <displayName>Creation Date</displayName>
-        <queryName>CREATION_DATE</queryName>
-        <description>Creation Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>lastSaveDate</id>
-        <localName>lastSaveDate</localName>
-        <displayName>Last Save Date</displayName>
-        <queryName>LAST_SAVE_DATE</queryName>
-        <description>Last Save Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>exifImage</id>
-    <localName>exifImage</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>EXIF Image</displayName>
-    <queryName>EXIF_IMAGE</queryName>
-    <description>Image with EXIF tags</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyIntegerDefinition>
-        <id>imageWidth</id>
-        <localName>0x0100</localName>
-        <displayName>Image Width</displayName>
-        <queryName>IMAGE_WIDTH</queryName>
-        <description>Image Width</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>imageHeight</id>
-        <localName>0x0101</localName>
-        <displayName>Image Height</displayName>
-        <queryName>IMAGE_HEIGHT</queryName>
-        <description>Image Height</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>bitsPerSample</id>
-        <localName>0x0102</localName>
-        <displayName>Bits Per Sample</displayName>
-        <queryName>BITS_PER_SAMPLE</queryName>
-        <description>Bits Per Sample</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>compression</id>
-        <localName>0x0103</localName>
-        <displayName>Compression</displayName>
-        <queryName>COMPRESSION</queryName>
-        <description>Compression Format</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Uncompressed">
-            <value>1</value>
-        </choice>
-        <choice displayName="CCITT 1D">
-            <value>2</value>
-        </choice>
-        <choice displayName="T4/Group 3 Fax">
-            <value>3</value>
-        </choice>
-        <choice displayName="T6/Group 4 Fax">
-            <value>4</value>
-        </choice>
-        <choice displayName="LZW">
-            <value>5</value>
-        </choice>
-        <choice displayName="JPEG (old-style)">
-            <value>6</value>
-        </choice>
-        <choice displayName="JPEG">
-            <value>7</value>
-        </choice>
-        <choice displayName="Adobe Deflate">
-            <value>8</value>
-        </choice>
-        <choice displayName="JBIG BW">
-            <value>9</value>
-        </choice>
-        <choice displayName="JBIG Color">
-            <value>10</value>
-        </choice>
-        <choice displayName="JPEG">
-            <value>99</value>
-        </choice>
-        <choice displayName="Kodak 262">
-            <value>262</value>
-        </choice>
-        <choice displayName="Next">
-            <value>32766</value>
-        </choice>
-        <choice displayName="Sony ARW Compressed">
-            <value>32767</value>
-        </choice>
-        <choice displayName="Packed RAW">
-            <value>32769</value>
-        </choice>
-        <choice displayName="Samsung SRW Compressed">
-            <value>32770</value>
-        </choice>
-        <choice displayName="CCIRLEW">
-            <value>32771</value>
-        </choice>
-        <choice displayName="PackBits">
-            <value>32773</value>
-        </choice>
-        <choice displayName="Thunderscan">
-            <value>32809</value>
-        </choice>
-        <choice displayName="Kodak KDC Compressed">
-            <value>32867</value>
-        </choice>
-        <choice displayName="IT8CTPAD">
-            <value>32895</value>
-        </choice>
-        <choice displayName="IT8LW">
-            <value>32896</value>
-        </choice>
-        <choice displayName="IT8MP">
-            <value>32897</value>
-        </choice>
-        <choice displayName="IT8BL">
-            <value>32898</value>
-        </choice>
-        <choice displayName="PixarFilm">
-            <value>32908</value>
-        </choice>
-        <choice displayName="PixarLog">
-            <value>32909</value>
-        </choice>
-        <choice displayName="Deflate">
-            <value>32946</value>
-        </choice>
-        <choice displayName="DCS">
-            <value>32947</value>
-        </choice>
-        <choice displayName="JBIG">
-            <value>34661</value>
-        </choice>
-        <choice displayName="SGILog">
-            <value>34676</value>
-        </choice>
-        <choice displayName="SGILog24">
-            <value>34677</value>
-        </choice>
-        <choice displayName="JPEG 2000">
-            <value>34712</value>
-        </choice>
-        <choice displayName="Nikon NEF Compressed">
-            <value>34713</value>
-        </choice>
-        <choice displayName="JBIG2 TIFF FX">
-            <value>34715</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Binary Level Codec">
-            <value>34718</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Progressive Transform Codec">
-            <value>34719</value>
-        </choice>
-        <choice displayName="Microsoft Document Imaging (MDI) Vector">
-            <value>34720</value>
-        </choice>
-        <choice displayName="Kodak DCR Compressed">
-            <value>65000</value>
-        </choice>
-        <choice displayName="Pentax PEF Compressed">
-            <value>65535</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>photometricInterpretation</id>
-        <localName>0x0106</localName>
-        <displayName>Photometric Interpretation</displayName>
-        <queryName>PHOTOMETRIC_INTERPRETATION</queryName>
-        <description>Color Format</description>
-        <localNamespace></localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="WhiteIsZero">
-            <value>0</value>
-        </choice>
-        <choice displayName="BlackIsZero">
-            <value>1</value>
-        </choice>
-        <choice displayName="RGB">
-            <value>2</value>
-        </choice>
-        <choice displayName="RGB Palette">
-            <value>3</value>
-        </choice>
-        <choice displayName="Transparency Mask">
-            <value>4</value>
-        </choice>
-        <choice displayName="CMYK">
-            <value>5</value>
-        </choice>
-        <choice displayName="YCbCr">
-            <value>6</value>
-        </choice>
-        <choice displayName="CIELab">
-            <value>8</value>
-        </choice>
-        <choice displayName="ICCLab">
-            <value>9</value>
-        </choice>
-        <choice displayName="ITULab">
-            <value>10</value>
-        </choice>
-        <choice displayName="Color Filter Array">
-            <value>32803</value>
-        </choice>
-        <choice displayName="Pixar LogL">
-            <value>32844</value>
-        </choice>
-        <choice displayName="Pixar LogLuv">
-            <value>32845</value>
-        </choice>
-        <choice displayName="Linear Raw">
-            <value>34892</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>imageDescription</id>
-        <localName>0x010e</localName>
-        <displayName>Image Description</displayName>
-        <queryName>IMAGE_DESCRIPTION</queryName>
-        <description>Description</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>make</id>
-        <localName>0x010f</localName>
-        <displayName>Make</displayName>
-        <queryName>MAKE</queryName>
-        <description>Camera Make</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>model</id>
-        <localName>0x0110</localName>
-        <displayName>Model</displayName>
-        <queryName>MODEL</queryName>
-        <description>Camera Model</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>orientation</id>
-        <localName>0x0112</localName>
-        <displayName>Orientation</displayName>
-        <queryName>ORIENTATION</queryName>
-        <description>Orientation</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Horizontal (normal)">
-            <value>1</value>
-        </choice>
-        <choice displayName="Mirror horizontal">
-            <value>2</value>
-        </choice>
-        <choice displayName="Rotate 180">
-            <value>3</value>
-        </choice>
-        <choice displayName="Mirror vertical">
-            <value>4</value>
-        </choice>
-        <choice displayName="Mirror horizontal and rotate 270 CW">
-            <value>5</value>
-        </choice>
-        <choice displayName="Rotate 90 CW">
-            <value>6</value>
-        </choice>
-        <choice displayName="Mirror horizontal and rotate 90 CW">
-            <value>7</value>
-        </choice>
-        <choice displayName="Rotate 270 CW">
-            <value>8</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>xResolution</id>
-        <localName>0x011a</localName>
-        <displayName>X Resolution</displayName>
-        <queryName>X_RESOLUTION</queryName>
-        <description>xresolution</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>yResolution</id>
-        <localName>0x011b</localName>
-        <displayName>Y Resolution</displayName>
-        <queryName>Y_RESOLUTION</queryName>
-        <description>yresolution</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>resolutionUnit</id>
-        <localName>0x0128</localName>
-        <displayName>Resolution Unit</displayName>
-        <queryName>RESOLUTION_UNIT</queryName>
-        <description>Resolution Unit</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="None">
-            <value>1</value>
-        </choice>
-        <choice displayName="inches">
-            <value>2</value>
-        </choice>
-        <choice displayName="cm">
-            <value>3</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>software</id>
-        <localName>0x0131</localName>
-        <displayName>Software</displayName>
-        <queryName>SOFTWARE</queryName>
-        <description>Software</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>modifyDate</id>
-        <localName>0x0132</localName>
-        <displayName>Modify Date</displayName>
-        <queryName>MODIFY_DATE</queryName>
-        <description>Modify Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>yCbCrPositioning</id>
-        <localName>0x0213</localName>
-        <displayName>YCbCrPositioning</displayName>
-        <queryName>YCBCRPOSITIONING</queryName>
-        <description>YCbCr Positioning</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Centered">
-            <value>1</value>
-        </choice>
-        <choice displayName="Co-sited">
-            <value>2</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>copyright</id>
-        <localName>0x8298</localName>
-        <displayName>Copyright</displayName>
-        <queryName>COPYRIGHT</queryName>
-        <description>Copyright Notice</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>exposureTime</id>
-        <localName>0x829a</localName>
-        <displayName>Exposure Time</displayName>
-        <queryName>EXPOSURE_TIME</queryName>
-        <description>Exposure Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>fNumber</id>
-        <localName>0x829d</localName>
-        <displayName>F Number</displayName>
-        <queryName>F_NUMBER</queryName>
-        <description>F-Stop Number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>exposureProgram</id>
-        <localName>0x8822</localName>
-        <displayName>Exposure Program</displayName>
-        <queryName>EXPOSURE_PROGRAM</queryName>
-        <description>Exposure Program</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Not Defined">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-        <choice displayName="Program AE">
-            <value>2</value>
-        </choice>
-        <choice displayName="Aperture-priority AE">
-            <value>3</value>
-        </choice>
-        <choice displayName="Shutter speed priority AE">
-            <value>4</value>
-        </choice>
-        <choice displayName="Creative (Slow speed)">
-            <value>5</value>
-        </choice>
-        <choice displayName="Action (High speed)">
-            <value>6</value>
-        </choice>
-        <choice displayName="Portrait">
-            <value>7</value>
-        </choice>
-        <choice displayName="Landscape">
-            <value>8</value>
-        </choice>
-        <choice displayName="Bulb">
-            <value>9</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>isoSpeed</id>
-        <localName>0x8827</localName>
-        <displayName>ISO Speed</displayName>
-        <queryName>ISO_SPEED</queryName>
-        <description>ISO Speed Setting</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsLatitude</id>
-        <localName>0x8825-0x0002</localName>
-        <displayName>GPS Latitude</displayName>
-        <queryName>GPS_LATITUDE</queryName>
-        <description>GPS Latitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsLatitudeRef</id>
-        <localName>0x8825-0x0001</localName>
-        <displayName>GPS Latitude Ref</displayName>
-        <queryName>GPS_LATITUDE_REF</queryName>
-        <description>GPS Latitude Reference (N/S)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="North">
-            <value>N</value>
-        </choice>
-        <choice displayName="South">
-            <value>S</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsLongitude</id>
-        <localName>0x8825-0x0004</localName>
-        <displayName>GPS Longitude</displayName>
-        <queryName>GPS_LONGITUDE</queryName>
-        <description>GPS Longitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsLongitudeRef</id>
-        <localName>0x8825-0x0003</localName>
-        <displayName>GPS Longitude Ref</displayName>
-        <queryName>GPS_LONGITUDE_REF</queryName>
-        <description>GPS Longitude Reference (W/E)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="East">
-            <value>E</value>
-        </choice>
-        <choice displayName="West">
-            <value>W</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyDecimalDefinition>
-        <id>gpsAltitude</id>
-        <localName>0x8825-0x0006</localName>
-        <displayName>GPS Altitude</displayName>
-        <queryName>GPS_ALTITUDE</queryName>
-        <description>GPS Altitude</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>gpsAltitudeRef</id>
-        <localName>0x8825-0x0005</localName>
-        <displayName>GPS Altitude Ref</displayName>
-        <queryName>GPS_ALTITUDE_REF</queryName>
-        <description>GPS Altitude Reference</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Above Sea Level">
-            <value>0</value>
-        </choice>
-        <choice displayName="Below Sea Level">
-            <value>1</value>
-        </choice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>selfTimerMode</id>
-        <localName>0x882b</localName>
-        <displayName>Self Timer Mode</displayName>
-        <queryName>SELF_TIMER_MODE</queryName>
-        <description>Self Timer Mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>timeZoneOffset</id>
-        <localName>0x882a</localName>
-        <displayName>Time Zone Offset</displayName>
-        <queryName>TIME_ZONE_OFFSET</queryName>
-        <description>Time Zone Offset (GMT offset in hours)</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDateTimeDefinition>
-        <id>dateTimeOriginal</id>
-        <localName>0x9003</localName>
-        <displayName>Date Time Original</displayName>
-        <queryName>DATE_TIME_ORIGINAL</queryName>
-        <description>date/time when original image was taken</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>createDate</id>
-        <localName>0x9004</localName>
-        <displayName>Create Date</displayName>
-        <queryName>CREATE_DATE</queryName>
-        <description>date/time digitized</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDecimalDefinition>
-        <id>shutterSpeedValue</id>
-        <localName>0x9201</localName>
-        <displayName>Shutter Speed Value</displayName>
-        <queryName>SHUTTER_SPEED_VALUE</queryName>
-        <description>shutter speed value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>apertureValue</id>
-        <localName>0x9202</localName>
-        <displayName>Aperture Value</displayName>
-        <queryName>APERTURE_VALUE</queryName>
-        <description>Aperture Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>brightnessValue</id>
-        <localName>0x9203</localName>
-        <displayName>Brightness Value</displayName>
-        <queryName>BRIGHTNESS_VALUE</queryName>
-        <description>Brightness Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>exposureCompensation</id>
-        <localName>0x9204</localName>
-        <displayName>Exposure Compensation</displayName>
-        <queryName>EXPOSURE_COMPENSATION</queryName>
-        <description>Exposure Compensation</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyDecimalDefinition>
-        <id>maxApertureValue</id>
-        <localName>0x9205</localName>
-        <displayName>Max Aperture Value</displayName>
-        <queryName>MAX_APERTURE_VALUE</queryName>
-        <description>Max Aperture Value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>meteringMode</id>
-        <localName>0x9207</localName>
-        <displayName>Metering Mode</displayName>
-        <queryName>METERING_MODE</queryName>
-        <description>metering mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Unknown">
-            <value>0</value>
-        </choice>
-        <choice displayName="Average">
-            <value>1</value>
-        </choice>
-        <choice displayName="Center-weighted average">
-            <value>2</value>
-        </choice>
-        <choice displayName="Spot">
-            <value>3</value>
-        </choice>
-        <choice displayName="Multi-spot">
-            <value>4</value>
-        </choice>
-        <choice displayName="Multi-segment">
-            <value>5</value>
-        </choice>
-        <choice displayName="Partial">
-            <value>6</value>
-        </choice>
-        <choice displayName="Other">
-            <value>255</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>subjectDistance</id>
-        <localName>0x9206</localName>
-        <displayName>Subject Distance</displayName>
-        <queryName>SUBJECT_DISTANCE</queryName>
-        <description>subject distance</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyIntegerDefinition>
-        <id>lightSource</id>
-        <localName>0x9208</localName>
-        <displayName>Light Source</displayName>
-        <queryName>LIGHT_SOURCE</queryName>
-        <description>light source value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>flash</id>
-        <localName>0x9209</localName>
-        <displayName>Flash</displayName>
-        <queryName>FLASH</queryName>
-        <description>Flash Setting</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyDecimalDefinition>
-        <id>focalLength</id>
-        <localName>0x920a</localName>
-        <displayName>Focal Length</displayName>
-        <queryName>FOCAL_LENGTH</queryName>
-        <description>focal length</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>decimal</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyDecimalDefinition>
-    <propertyStringDefinition>
-        <id>userComment</id>
-        <localName>0x9286</localName>
-        <displayName>User Comment</displayName>
-        <queryName>USER_COMMENT</queryName>
-        <description>user comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>colorSpace</id>
-        <localName>0xa001</localName>
-        <displayName>Color Space</displayName>
-        <queryName>COLOR_SPACE</queryName>
-        <description>color space</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="sRGB">
-            <value>1</value>
-        </choice>
-        <choice displayName="Adobe RGB">
-            <value>2</value>
-        </choice>
-        <choice displayName="Wide Gamut RGB">
-            <value>65533</value>
-        </choice>
-        <choice displayName="ICC Profile">
-            <value>65534</value>
-        </choice>
-        <choice displayName="Uncalibrated">
-            <value>65535</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pixelXDimension</id>
-        <localName>0xa002</localName>
-        <displayName>PixelXDimension</displayName>
-        <queryName>PIXELXDIMENSION</queryName>
-        <description>dimension in pixel x</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pixelYDimension</id>
-        <localName>0xa003</localName>
-        <displayName>PixelYDimension</displayName>
-        <queryName>PIXELYDIMENSION</queryName>
-        <description>dimension in pixel y</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>exposureMode</id>
-        <localName>0xa402</localName>
-        <displayName>Exposure Mode</displayName>
-        <queryName>EXPOSURE_MODE</queryName>
-        <description>Exposure Mode</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Auto">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-        <choice displayName="Auto bracket">
-            <value>2</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>whiteBalance</id>
-        <localName>0xa403</localName>
-        <displayName>White Balance</displayName>
-        <queryName>WHITE_BALANCE</queryName>
-        <description>white balance</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Auto">
-            <value>0</value>
-        </choice>
-        <choice displayName="Manual">
-            <value>1</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>sceneCaptureType</id>
-        <localName>0xa406</localName>
-        <displayName>Scene Capture Type</displayName>
-        <queryName>SCENE_CAPTURE_TYPE</queryName>
-        <description>Scene Capture Type</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-        <choice displayName="Standard">
-            <value>0</value>
-        </choice>
-        <choice displayName="Landscape">
-            <value>1</value>
-        </choice>
-        <choice displayName="Portrait">
-            <value>2</value>
-        </choice>
-        <choice displayName="Night">
-            <value>3</value>
-        </choice>
-    </propertyIntegerDefinition>
-    <propertyIdDefinition>
-        <id>imageUniqueId</id>
-        <localName>0xa420</localName>
-        <displayName>Image Unique Id</displayName>
-        <queryName>IMAGE_UNIQUE_ID</queryName>
-        <description>Image Unique Id</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>id</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIdDefinition>
-    <propertyStringDefinition>
-        <id>ownerName</id>
-        <localName>0xa430</localName>
-        <displayName>Owner Name</displayName>
-        <queryName>OWNER_NAME</queryName>
-        <description>Owner Name</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>serialNumber</id>
-        <localName>0xa431</localName>
-        <displayName>Serial Number</displayName>
-        <queryName>SERIAL_NUMBER</queryName>
-        <description>serial number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>rating</id>
-        <localName>0x4746</localName>
-        <displayName>Rating</displayName>
-        <queryName>RATING</queryName>
-        <description>rating value</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>ratingPercent</id>
-        <localName>0x4749</localName>
-        <displayName>Rating Percent</displayName>
-        <queryName>RATING_PERCENT</queryName>
-        <description>rating percent</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>dataPrecision</id>
-        <localName>0x0000</localName>
-        <displayName>Data Precision</displayName>
-        <queryName>DATA_PRECISION</queryName>
-        <description>JPEG Data Precision</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>officeDocument</id>
-    <localName>officeDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Office Document</displayName>
-    <queryName>OFFICE_DOCUMENT</queryName>
-    <description>Document of type Office</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>applicationName</id>
-        <localName>applicationName</localName>
-        <displayName>Application Name</displayName>
-        <queryName>APPLICATION_NAME</queryName>
-        <description>Application Name</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>applicationVersion</id>
-        <localName>applicationVersion</localName>
-        <displayName>Application Version</displayName>
-        <queryName>APPLICATION_VERSION</queryName>
-        <description>Application Version</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>author</id>
-        <localName>author</localName>
-        <displayName>Author</displayName>
-        <queryName>AUTHOR</queryName>
-        <description>Author</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>category</id>
-        <localName>category</localName>
-        <displayName>Category</displayName>
-        <queryName>CATEGORY</queryName>
-        <description>Category</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>contentStatus</id>
-        <localName>contentStatus</localName>
-        <displayName>Content Status</displayName>
-        <queryName>CONTENT_STATUS</queryName>
-        <description>Content Status</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comments</id>
-        <localName>comments</localName>
-        <displayName>Comments</displayName>
-        <queryName>COMMENTS</queryName>
-        <description>Comments</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>company</id>
-        <localName>company</localName>
-        <displayName>Company</displayName>
-        <queryName>COMPANY</queryName>
-        <description>Company</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>keywords</id>
-        <localName>keywords</localName>
-        <displayName>Keywords</displayName>
-        <queryName>KEYWORDS</queryName>
-        <description>Keywords</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>multi</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>lastAuthor</id>
-        <localName>lastAuthor</localName>
-        <displayName>Last Author</displayName>
-        <queryName>LAST_AUTHOR</queryName>
-        <description>Last Author</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>manager</id>
-        <localName>manager</localName>
-        <displayName>Manager</displayName>
-        <queryName>MANAGER</queryName>
-        <description>Manager</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>notes</id>
-        <localName>notes</localName>
-        <displayName>Notes</displayName>
-        <queryName>NOTES</queryName>
-        <description>Notes</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>presentationFormat</id>
-        <localName>presentationFormat</localName>
-        <displayName>Presentation Format</displayName>
-        <queryName>PRESENTATION_FORMAT</queryName>
-        <description>Presentation Format</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>revisionNumber</id>
-        <localName>revisionNumber</localName>
-        <displayName>Revision Number</displayName>
-        <queryName>REVISION_NUMBER</queryName>
-        <description>Revision Number</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>template</id>
-        <localName>template</localName>
-        <displayName>Template</displayName>
-        <queryName>TEMPLATE</queryName>
-        <description>Template</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>version</id>
-        <localName>version</localName>
-        <displayName>Version</displayName>
-        <queryName>VERSION</queryName>
-        <description>Version</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>characterCount</id>
-        <localName>characterCount</localName>
-        <displayName>Character Count</displayName>
-        <queryName>CHARACTER_COUNT</queryName>
-        <description>Character Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>characterCountWithSpaces</id>
-        <localName>characterCountWithSpaces</localName>
-        <displayName>Character Count With Spaces</displayName>
-        <queryName>CHARACTER_COUNT_WITH_SPACES</queryName>
-        <description>Character Count With Spaces</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>wordCount</id>
-        <localName>wordCount</localName>
-        <displayName>Word Count</displayName>
-        <queryName>WORD_COUNT</queryName>
-        <description>Word Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>lineCount</id>
-        <localName>lineCount</localName>
-        <displayName>Line Count</displayName>
-        <queryName>LINE_COUNT</queryName>
-        <description>Line Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>pageCount</id>
-        <localName>pageCount</localName>
-        <displayName>Page Count</displayName>
-        <queryName>PAGE_COUNT</queryName>
-        <description>Page Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>slideCount</id>
-        <localName>slideCount</localName>
-        <displayName>Slide Count</displayName>
-        <queryName>SLIDE_COUNT</queryName>
-        <description>Slide Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>paragraphCount</id>
-        <localName>paragraphCount</localName>
-        <displayName>Paragraph Count</displayName>
-        <queryName>PARAGRAPH_COUNT</queryName>
-        <description>Paragraph Count</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>totalTime</id>
-        <localName>totalTime</localName>
-        <displayName>Total Time</displayName>
-        <queryName>TOTAL_TIME</queryName>
-        <description>Total Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>editTime</id>
-        <localName>editTime</localName>
-        <displayName>Edit Time</displayName>
-        <queryName>EDIT_TIME</queryName>
-        <description>Edit Time</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyDateTimeDefinition>
-        <id>creationDate</id>
-        <localName>creationDate</localName>
-        <displayName>Creation Date</displayName>
-        <queryName>CREATION_DATE</queryName>
-        <description>Creation Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyDateTimeDefinition>
-        <id>lastSaveDate</id>
-        <localName>lastSaveDate</localName>
-        <displayName>Last Save Date</displayName>
-        <queryName>LAST_SAVE_DATE</queryName>
-        <description>Last Save Date</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>datetime</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyDateTimeDefinition>
-    <propertyStringDefinition>
-        <id>lastPrinted</id>
-        <localName>lastPrinted</localName>
-        <displayName>Last Printed</displayName>
-        <queryName>LAST_PRINTED</queryName>
-        <description>Last Printed</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>pdfDocument</id>
-    <localName>pdfDocument</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>officeDocument</parentId>
-    <displayName>PDF Document</displayName>
-    <queryName>PDF_DOCUMENT</queryName>
-    <description>Document of type PDF</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>creator</id>
-        <localName>creator</localName>
-        <displayName>Creator</displayName>
-        <queryName>CREATOR</queryName>
-        <description>creator of document</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>subject</id>
-        <localName>subject</localName>
-        <displayName>Subject</displayName>
-        <queryName>SUBJECT</queryName>
-        <description>subjet of message</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>trapped</id>
-        <localName>trapped</localName>
-        <displayName>Trapped</displayName>
-        <queryName>TRAPPED</queryName>
-        <description>trapped</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-</cmisra:type>
-
-<cmisra:type xsi:type="cmisTypeDocumentDefinitionType">
-    <id>videoFile</id>
-    <localName>videoFile</localName>
-    <localNamespace>apache</localNamespace>
-    <parentId>cmis:document</parentId>
-    <displayName>Video File</displayName>
-    <queryName>VIDEO_FILE</queryName>
-    <description>Video Movies</description>
-    <baseId>cmis:document</baseId>
-    <creatable>true</creatable>
-    <fileable>true</fileable>
-    <queryable>true</queryable>
-    <fulltextIndexed>true</fulltextIndexed>
-    <includedInSupertypeQuery>true</includedInSupertypeQuery>
-    <controllablePolicy>false</controllablePolicy>
-    <controllableACL>true</controllableACL>
-    <versionable>false</versionable>
-    <contentStreamAllowed>allowed</contentStreamAllowed>
-    <propertyStringDefinition>
-        <id>artist</id>
-        <localName>0x013b</localName>
-        <displayName>Artist</displayName>
-        <queryName>ARTIST</queryName>
-        <description>Artist</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>album</id>
-        <localName>album</localName>
-        <displayName>Album</displayName>
-        <queryName>ALBUM</queryName>
-        <description>title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>title</id>
-        <localName>title</localName>
-        <displayName>Title</displayName>
-        <queryName>TITLE</queryName>
-        <description>Title</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>comment</id>
-        <localName>comment</localName>
-        <displayName>Comment</displayName>
-        <queryName>COMMENT</queryName>
-        <description>Comment</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>genre</id>
-        <localName>genre</localName>
-        <displayName>Genre</displayName>
-        <queryName>GENRE</queryName>
-        <description>Genre</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>length</id>
-        <localName>length</localName>
-        <displayName>Length</displayName>
-        <queryName>LENGTH</queryName>
-        <description>Length in seconds</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>track</id>
-        <localName>track</localName>
-        <displayName>Track</displayName>
-        <queryName>TRACK</queryName>
-        <description>Track in album</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyStringDefinition>
-        <id>year</id>
-        <localName>year</localName>
-        <displayName>Year</displayName>
-        <queryName>YEAR</queryName>
-        <description>release date of albun</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>true</queryable>
-        <orderable>true</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyStringDefinition>
-        <id>discNo</id>
-        <localName>discNo</localName>
-        <displayName>Disc Number</displayName>
-        <queryName>DISC_NUMBER</queryName>
-        <description>number of disc / total discs</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>string</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>readwrite</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyStringDefinition>
-    <propertyIntegerDefinition>
-        <id>imageWidth</id>
-        <localName>0x0100</localName>
-        <displayName>Image Width</displayName>
-        <queryName>IMAGE_WIDTH</queryName>
-        <description>Image Width</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-    <propertyIntegerDefinition>
-        <id>imageHeight</id>
-        <localName>0x0101</localName>
-        <displayName>Image Height</displayName>
-        <queryName>IMAGE_HEIGHT</queryName>
-        <description>Image Height</description>
-        <localNamespace>apache</localNamespace>
-        <propertyType>integer</propertyType>
-        <cardinality>single</cardinality>
-        <updatability>oncreate</updatability>
-        <inherited>false</inherited>
-        <required>false</required>
-        <queryable>false</queryable>
-        <orderable>false</orderable>
-        <openChoice>false</openChoice>
-    </propertyIntegerDefinition>
-</cmisra:type>
-
-</chem:typeDefinitions>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/GenSpecExamples.bat b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/GenSpecExamples.bat
deleted file mode 100644
index 305d53f..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/GenSpecExamples.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo OFF

-set JAVA_HOME=D:\Java\jdk1.6.0_22-x64

-set PATH=%JAVA_HOME%\bin;%PATH%

-call cp.bat

-java -cp %CP% org.apache.chemistry.opencmis.tools.specexamples.Main

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/cp.bat b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/cp.bat
deleted file mode 100644
index 429636d..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/cp.bat
+++ /dev/null
@@ -1,62 +0,0 @@
-set VER=0.8.0-SNAPSHOT

-set M2_REPO=d:\java\maven-repository

-set CP=target\classes;^

-%M2_REPO%/javax/activation/activation/1.1/activation-1.1.jar;^ 

-%M2_REPO%/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar;^ 

-%M2_REPO%/javax/xml/ws/jaxws-api/2.1/jaxws-api-2.1.jar;^ 

-%M2_REPO%/javax/xml/soap/saaj-api/1.3/saaj-api-1.3.jar;^ 

-%M2_REPO%/javax/xml/stream/stax-api/1.0/stax-api-1.0.jar;^ 

-%M2_REPO%/org/apache/james/apache-mime4j-core/0.7/apache-mime4j-core-0.7.jar;^ 

-%M2_REPO%/org/apache/james/apache-mime4j-dom/0.7/apache-mime4j-dom-0.7.jar;^ 

-%M2_REPO%/asm/asm/3.1/asm-3.1.jar;^ 

-%M2_REPO%/org/bouncycastle/bcmail-jdk15/1.45/bcmail-jdk15-1.45.jar;^ 

-%M2_REPO%/org/bouncycastle/bcprov-jdk15/1.45/bcprov-jdk15-1.45.jar;^ 

-%M2_REPO%/de/l3s/boilerpipe/boilerpipe/1.1.0/boilerpipe-1.1.0.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-client-api/%VER%/chemistry-opencmis-client-api-%VER%.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-client-bindings/%VER%/chemistry-opencmis-client-bindings-%VER%.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-client-impl/%VER%/chemistry-opencmis-client-impl-%VER%.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-commons-api/%VER%/chemistry-opencmis-commons-api-%VER%.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-commons-impl/%VER%/chemistry-opencmis-commons-impl-%VER%.jar;^ 

-%M2_REPO%/org/apache/chemistry/opencmis/chemistry-opencmis-test-util/%VER%/chemistry-opencmis-test-util-%VER%.jar;^ 

-%M2_REPO%/commons-codec/commons-codec/1.5/commons-codec-1.5.jar;^ 

-%M2_REPO%/org/apache/commons/commons-compress/1.3/commons-compress-1.3.jar;^ 

-%M2_REPO%/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar;^

-%M2_REPO%/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar;^ 

-%M2_REPO%/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar;^ 

-%M2_REPO%/org/apache/pdfbox/fontbox/1.6.0/fontbox-1.6.0.jar;^ 

-%M2_REPO%/org/apache/geronimo/specs/geronimo-stax-api_1.0_spec/1.0.1/geronimo-stax-api_1.0_spec-1.0.1.jar;^ 

-%M2_REPO%/com/googlecode/mp4parser/isoparser/1.0-beta-5/isoparser-1.0-beta-5.jar;^ 

-%M2_REPO%/javassist/javassist/3.6.0.GA/javassist-3.6.0.GA.jar;^

-%M2_REPO%/com/sun/xml/bind/jaxb-impl/2.1.11/jaxb-impl-2.1.11.jar;^ 

-%M2_REPO%/com/sun/xml/ws/jaxws-rt/2.1.7/jaxws-rt-2.1.7.jar;^ 

-%M2_REPO%/jdom/jdom/1.0/jdom-1.0.jar;^ 

-%M2_REPO%/org/apache/pdfbox/jempbox/1.6.0/jempbox-1.6.0.jar;^ 

-%M2_REPO%/net/sf/jopt-simple/jopt-simple/3.2/jopt-simple-3.2.jar;^ 

-%M2_REPO%/junit/junit/4.7/junit-4.7.jar;^ 

-%M2_REPO%/log4j/log4j/1.2.16/log4j-1.2.16.jar;^

-%M2_REPO%/com/drewnoakes/metadata-extractor/2.4.0-beta-1/metadata-extractor-2.4.0-beta-1.jar;^ 

-%M2_REPO%/org/jvnet/mimepull/1.3/mimepull-1.3.jar;^ 

-%M2_REPO%/edu/ucar/netcdf/4.2-min/netcdf-4.2-min.jar;^ 

-%M2_REPO%/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.jar;^

-%M2_REPO%/org/apache/pdfbox/pdfbox/1.6.0/pdfbox-1.6.0.jar;^ 

-%M2_REPO%/org/apache/poi/poi/3.8-beta5/poi-3.8-beta5.jar;^ 

-%M2_REPO%/org/apache/poi/poi-ooxml/3.8-beta5/poi-ooxml-3.8-beta5.jar;^ 

-%M2_REPO%/org/apache/poi/poi-ooxml-schemas/3.8-beta5/poi-ooxml-schemas-3.8-beta5.jar;^

-%M2_REPO%/org/apache/poi/poi-scratchpad/3.8-beta5/poi-scratchpad-3.8-beta5.jar;^ 

-%M2_REPO%/com/sun/org/apache/xml/internal/resolver/20050927/resolver-20050927.jar;^ 

-%M2_REPO%/rome/rome/0.9/rome-0.9.jar;^ 

-%M2_REPO%/com/sun/xml/messaging/saaj/saaj-impl/1.3.3/saaj-impl-1.3.3.jar;^ 

-%M2_REPO%/net/sf/scannotation/scannotation/1.0.2/scannotation-1.0.2.jar;^ 

-%M2_REPO%/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar;^ 

-%M2_REPO%/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar;^

-%M2_REPO%/stax/stax-api/1.0.1/stax-api-1.0.1.jar;^

-%M2_REPO%/org/jvnet/staxex/stax-ex/1.2/stax-ex-1.2.jar;^ 

-%M2_REPO%/com/sun/xml/stream/buffer/streambuffer/0.9/streambuffer-0.9.jar;^ 

-%M2_REPO%/org/ccil/cowan/tagsoup/tagsoup/1.2.1/tagsoup-1.2.1.jar;^ 

-%M2_REPO%/org/apache/tika/tika-core/1.1/tika-core-1.1.jar;^ 

-%M2_REPO%/org/apache/tika/tika-parsers/1.1/tika-parsers-1.1.jar;^ 

-%M2_REPO%/org/gagravarr/vorbis-java-core/0.1/vorbis-java-core-0.1-tests.jar;^

-%M2_REPO%/org/gagravarr/vorbis-java-core/0.1/vorbis-java-core-0.1.jar;^ 

-%M2_REPO%/org/gagravarr/vorbis-java-tika/0.1/vorbis-java-tika-0.1.jar;^ 

-%M2_REPO%/org/codehaus/woodstox/wstx-asl/3.2.3/wstx-asl-3.2.3.jar;^ 

-%M2_REPO%/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runCreate.bat b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runCreate.bat
deleted file mode 100644
index 3934fa3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runCreate.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-rem

-rem

-rem Licensed to the Apache Software Foundation (ASF) under one

-rem or more contributor license agreements.  See the NOTICE file

-rem distributed with this work for additional information

-rem regarding copyright ownership.  The ASF licenses this file

-rem to you under the Apache License, Version 2.0 (the

-rem "License"); you may not use this file except in compliance

-rem with the License.  You may obtain a copy of the License at

-rem

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

-rem

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

-rem software distributed under the License is distributed on an

-rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-rem KIND, either express or implied.  See the License for the

-rem specific language governing permissions and limitations

-rem under the License.

-rem

-rem

-call runcmd.bat --Command=CreateDocument --RepositoryId=A1 --ContentSizeInKB=25

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.bat b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.bat
deleted file mode 100644
index d7a3c26..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.bat
+++ /dev/null
@@ -1,29 +0,0 @@
-rem

-rem

-rem Licensed to the Apache Software Foundation (ASF) under one

-rem or more contributor license agreements.  See the NOTICE file

-rem distributed with this work for additional information

-rem regarding copyright ownership.  The ASF licenses this file

-rem to you under the Apache License, Version 2.0 (the

-rem "License"); you may not use this file except in compliance

-rem with the License.  You may obtain a copy of the License at

-rem

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

-rem

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

-rem software distributed under the License is distributed on an

-rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-rem KIND, either express or implied.  See the License for the

-rem specific language governing permissions and limitations

-rem under the License.

-rem

-rem

-set M2_REPO=d:\java\maven-repository

-set JAVA_HOME=d:\Java\jdk1.6.0_22-x64

-set PATH=%JAVA_HOME%\bin

-call cp.bat

-java -Dorg.apache.chemistry.opencmis.binding.atompub.url=http://localhost:8080/inmemory/atom ^

--Dorg.apache.chemistry.opencmis.binding.spi.type=atompub ^

--Dorg.apache.chemistry.opencmis.user=jens ^

--Dorg.apache.chemistry.opencmis.password=dummy ^

--cp %CP% org.apache.chemistry.opencmis.tools.main.ObjGenApp %*

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.sh b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.sh
deleted file mode 100644
index 4927746..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runcmd.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-
-if [ -z "$JAVA_HOME" ]; then
-  j=$(which java 2>/dev/null)
-  if [ -z "$j" ]; then
- 	echo "Unable to locate Java!"
-    exit 1
-  else
-    JAVA="$j"
-  fi
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-
-. testtool.classpath.sh
-
-JAVA_OPTS="-Dorg.apache.chemistry.opencmis.binding.atompub.url=http://localhost:8080/inmemory/atom \
--Dorg.apache.chemistry.opencmis.binding.spi.type=atompub \
--Dorg.apache.chemistry.opencmis.user=jens \
--Dorg.apache.chemistry.opencmis.password=dummy"
-
-JAVA_OPTS="$JAVA_OPTS -Djava.net.useSystemProxies=true"
-
-
-if [ -n "$http_proxy" ]; then
-  HTTP_PROXY_HOST=$(echo $http_proxy | sed 's/http:\/\/\(.*\):.*/\1/')
-  HTTP_PROXY_PORT=$(echo $http_proxy | sed 's/http:\/\/.*:\(.*\)/\1/')
-  JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=$HTTP_PROXY_HOST -Dhttp.proxyPort=$HTTP_PROXY_PORT"
-fi
-
-if [ -n "$https_proxy" ]; then
-  HTTPS_PROXY_HOST=$(echo $https_proxy | sed 's/http:\/\/\(.*\):.*/\1/')
-  HTTPS_PROXY_PORT=$(echo $https_proxy | sed 's/http:\/\/.*:\(.*\)/\1/')
-  JAVA_OPTS="$JAVA_OPTS -Dhttps.proxyHost=$HTTPS_PROXY_HOST -Dhttps.proxyPort=$HTTPS_PROXY_PORT"
-fi
-
-echo $CP
-exec $JAVA $JAVA_OPTS -classpath $CP org.apache.chemistry.opencmis.tools.main.ObjGenApp $*
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runfill.bat b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runfill.bat
deleted file mode 100644
index ca78aaf..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/runfill.bat
+++ /dev/null
@@ -1,22 +0,0 @@
-rem

-rem

-rem Licensed to the Apache Software Foundation (ASF) under one

-rem or more contributor license agreements.  See the NOTICE file

-rem distributed with this work for additional information

-rem regarding copyright ownership.  The ASF licenses this file

-rem to you under the Apache License, Version 2.0 (the

-rem "License"); you may not use this file except in compliance

-rem with the License.  You may obtain a copy of the License at

-rem

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

-rem

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

-rem software distributed under the License is distributed on an

-rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-rem KIND, either express or implied.  See the License for the

-rem specific language governing permissions and limitations

-rem under the License.

-rem

-rem

-call runcmd.bat --Command=FillRepository --RepositoryId=A1 --Depth=1 --DocsPerFolder=1 ^

---FoldersPerFolder=0  --ContentSizeInKB=25

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/testtool.classpath.sh b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/testtool.classpath.sh
deleted file mode 100644
index 66273c3..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/testtool.classpath.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-VER=0.8.0-SNAPSHOT
-M2_REPO=~/.m2/repository
-CP="target/classes:\
-$M2_REPO/javax/activation/activation/1.1/activation-1.1.jar:\
-$M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar:\
-$M2_REPO/javax/xml/ws/jaxws-api/2.1/jaxws-api-2.1.jar:\
-$M2_REPO/javax/xml/soap/saaj-api/1.3/saaj-api-1.3.jar:\
-$M2_REPO/javax/xml/stream/stax-api/1.0/stax-api-1.0.jar:\
-$M2_REPO/org/apache/james/apache-mime4j-core/0.7/apache-mime4j-core-0.7.jar:\
-$M2_REPO/org/apache/james/apache-mime4j-dom/0.7/apache-mime4j-dom-0.7.jar:\
-$M2_REPO/asm/asm/3.1/asm-3.1.jar:\
-$M2_REPO/org/bouncycastle/bcmail-jdk15/1.45/bcmail-jdk15-1.45.jar:\
-$M2_REPO/org/bouncycastle/bcprov-jdk15/1.45/bcprov-jdk15-1.45.jar:\
-$M2_REPO/de/l3s/boilerpipe/boilerpipe/1.1.0/boilerpipe-1.1.0.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-client-api/$VER/chemistry-opencmis-client-api-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-client-bindings/$VER/chemistry-opencmis-client-bindings-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-client-impl/$VER/chemistry-opencmis-client-impl-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-commons-api/$VER/chemistry-opencmis-commons-api-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-commons-impl/$VER/chemistry-opencmis-commons-impl-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-test-util/$VER/chemistry-opencmis-test-util-$VER.jar:\
-$M2_REPO/org/apache/chemistry/opencmis/chemistry-opencmis-test-tools/$VER/chemistry-opencmis-test-tools-$VER.jar:\
-$M2_REPO/commons-codec/commons-codec/1.5/commons-codec-1.5.jar:\
-$M2_REPO/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1.jar:\
-$M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar:\
-$M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:\
-$M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar:\
-$M2_REPO/org/apache/pdfbox/fontbox/1.7.0/fontbox-1.7.0.jar:\
-$M2_REPO/org/apache/geronimo/specs/geronimo-stax-api_1.0_spec/1.0.1/geronimo-stax-api_1.0_spec-1.0.1.jar:\
-$M2_REPO/com/googlecode/mp4parser/isoparser/1.0-RC-1/isoparser-1.0-RC-1.jar:\
-$M2_REPO/javassist/javassist/3.6.0.GA/javassist-3.6.0.GA.jar:\
-$M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.11/jaxb-impl-2.1.11.jar:\
-$M2_REPO/com/sun/xml/ws/jaxws-rt/2.1.7/jaxws-rt-2.1.7.jar:\
-$M2_REPO/jdom/jdom/1.0/jdom-1.0.jar:\
-$M2_REPO/org/apache/pdfbox/jempbox/1.7.0/jempbox-1.7.0.jar:\
-$M2_REPO/net/sf/jopt-simple/jopt-simple/3.2/jopt-simple-3.2.jar:\
-$M2_REPO/junit/junit/4.7/junit-4.7.jar:\
-$M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar:\
-$M2_REPO/com/drewnoakes/metadata-extractor/2.4.0-beta-1/metadata-extractor-2.4.0-beta-1.jar:\
-$M2_REPO/org/jvnet/mimepull/1.3/mimepull-1.3.jar:\
-$M2_REPO/edu/ucar/netcdf/4.2-min/netcdf-4.2-min.jar:\
-$M2_REPO/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.jar:\
-$M2_REPO/org/apache/pdfbox/pdfbox/1.7.0/pdfbox-1.7.0.jar:\
-$M2_REPO/org/apache/poi/poi/3.8/poi-3.8.jar:\
-$M2_REPO/org/apache/poi/poi-ooxml/3.8/poi-ooxml-3.8.jar:\
-$M2_REPO/org/apache/poi/poi-ooxml-schemas/3.8/poi-ooxml-schemas-3.8.jar:\
-$M2_REPO/org/apache/poi/poi-scratchpad/3.8/poi-scratchpad-3.8.jar:\
-$M2_REPO/com/sun/org/apache/xml/internal/resolver/20050927/resolver-20050927.jar:\
-$M2_REPO/rome/rome/0.9/rome-0.9.jar:\
-$M2_REPO/com/sun/xml/messaging/saaj/saaj-impl/1.3.3/saaj-impl-1.3.3.jar:\
-$M2_REPO/net/sf/scannotation/scannotation/1.0.2/scannotation-1.0.2.jar:\
-$M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar:\
-$M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar:\
-$M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar:\
-$M2_REPO/org/jvnet/staxex/stax-ex/1.2/stax-ex-1.2.jar:\
-$M2_REPO/com/sun/xml/stream/buffer/streambuffer/0.9/streambuffer-0.9.jar:\
-$M2_REPO/org/ccil/cowan/tagsoup/tagsoup/1.2.1/tagsoup-1.2.1.jar:\
-$M2_REPO/org/apache/tika/tika-core/1.2/tika-core-1.2.jar:\
-$M2_REPO/org/apache/tika/tika-parsers/1.2/tika-parsers-1.2.jar:\
-$M2_REPO/org/gagravarr/vorbis-java-core/0.1/vorbis-java-core-0.1-tests.jar:\
-$M2_REPO/org/aspectj/aspectjrt/1.6.11/aspectjrt-1.6.11.jar:\
-$M2_REPO/org/gagravarr/vorbis-java-core/0.1/vorbis-java-core-0.1.jar:\
-$M2_REPO/org/gagravarr/vorbis-java-tika/0.1/vorbis-java-tika-0.1.jar:\
-$M2_REPO/org/codehaus/woodstox/wstx-asl/3.2.3/wstx-asl-3.2.3.jar:\
-$M2_REPO/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar:\
-$M2_REPO/org/tukaani/xz/1.0/xz-1.0.jar"
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/uploadmedia.sh b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/uploadmedia.sh
deleted file mode 100755
index c57e866..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/scripts/uploadmedia.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-. runcmd.sh --Command=CopyFiles --RepositoryId=A1 --Dir ~/mymedia
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/filecopy/FileCopier.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/filecopy/FileCopier.java
deleted file mode 100644
index 759f5f9..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/filecopy/FileCopier.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.filecopy;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.tools.mapper.Configurator;
-import org.apache.chemistry.opencmis.tools.mapper.MapperException;
-import org.apache.chemistry.opencmis.tools.mapper.PropertyMapper;
-import org.apache.chemistry.opencmis.tools.parser.MetadataParser;
-import org.apache.chemistry.opencmis.tools.parser.MetadataParserTika;
-import org.apache.tika.Tika;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FileCopier {
-
-    private static final Logger LOG = LoggerFactory.getLogger(FileCopier.class.getName());
-    // initialize configurator to get parsers and property mappings
-    private static final Configurator CFG = Configurator.getInstance();
-    private static int totalNum = 0;
-
-    private Session session;
-
-    public FileCopier() {
-    }
-
-    public void connect(Map<String, String> parameters) {
-        System.out.println("Connecting to a repository ...");
-
-        // Create a SessionFactory and set up the SessionParameter map
-        SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
-
-        session = sessionFactory.createSession(parameters);
-
-        LOG.debug("Got a connection to repository.");
-    }
-
-    public void copyRecursive(String folderName, String folderId) {
-
-        try {
-            File fileOrDir = new File(folderName);
-            if (fileOrDir.isDirectory()) {
-                String newFolderId = createFolderInRepository(fileOrDir.getAbsolutePath(), folderId);
-                File[] children = fileOrDir.listFiles();
-                for (File file : children) {
-                    if (!file.getName().equals(".") && !file.getName().equals("..")) {
-                        copyRecursive(file.getAbsolutePath(), newFolderId);
-                    }
-                }
-            } else {
-                copyFileToRepository(fileOrDir.getAbsolutePath(), folderId);
-            }
-        } catch (Exception e) {
-            LOG.error(e.toString(), e);
-        }
-    }
-
-    private String copyFileToRepository(String fileName, String folderId) {
-        LOG.debug("uploading file " + fileName);
-        FileInputStream is = null;
-        Map<String, Object> properties = new HashMap<String, Object>();
-        Folder parentFolder;
-        String id = null;
-
-        if (null == folderId) {
-            parentFolder = session.getRootFolder();
-        } else {
-            parentFolder = (Folder) session.getObject(folderId);
-        }
-
-        try {
-            File f = new File(fileName);
-            Tika tika = new Tika();
-            String mimeType = tika.detect(f);
-            LOG.info("Detected MIME type: " + mimeType);
-
-            // extract metadata: first get a parser
-            MetadataParser parser = CFG.getParser(mimeType);
-            if (null == parser) {
-                properties.put(PropertyIds.NAME, f.getName().replaceAll(" ", "_"));
-                properties.put(PropertyIds.OBJECT_TYPE_ID, CFG.getDefaultDocumentType());
-            } else {
-                parser.reset();
-                PropertyMapper mapper = CFG.getPropertyMapper(mimeType);
-                if (null == mapper) {
-                    throw new MapperException("Unknown mime type (no configuration): " + mimeType);
-                }
-                String typeId = mapper.getMappedTypeId();
-                if (null == typeId) {
-                    throw new MapperException("No CMIS type configured for mime type" + mimeType);
-                }
-                TypeDefinition td = session.getTypeDefinition(typeId);
-                if (null == td) {
-                    throw new MapperException("CMIS type " + typeId + " does not exist on server.");
-                }
-
-                LOG.info("Detected MIME type: " + mimeType + " is mapped to CMIS type id: " + td.getId());
-                parser.extractMetadata(f, td, session);
-                properties = parser.getCmisProperties();
-            }
-
-            // check if there is an overridden content type configured
-            int posLastDot = f.getName().indexOf('.');
-            String ext = posLastDot < 0 ? null : f.getName().substring(posLastDot + 1, f.getName().length());
-            String overridden = null;
-            if (null != ext && (overridden = CFG.getContentType(ext)) != null) {
-                mimeType = overridden;
-            }
-            long length = f.length();
-
-            is = new FileInputStream(fileName);
-
-            ContentStream contentStream = session.getObjectFactory()
-                    .createContentStream(fileName, length, mimeType, is);
-            if (!properties.containsKey(PropertyIds.NAME)) {
-                properties.put(PropertyIds.NAME, f.getName().replaceAll(" ", "_"));
-            }
-            LOG.debug("uploading document with content lenth: " + contentStream.getLength());
-            Document doc = parentFolder.createDocument(properties, contentStream, VersioningState.NONE);
-            is.close();
-
-            id = doc.getId();
-            LOG.info("New document created with id: " + id + ", name: " + properties.get(PropertyIds.NAME)
-                    + " in folder: " + parentFolder.getId());
-            LOG.debug("total number of creations : " + ++totalNum);
-        } catch (IOException e) {
-            LOG.error("Failed to create CMIS document.", e);
-        } catch (CmisBaseException e) {
-            LOG.error("Failed to create CMIS document.", e);
-        } finally {
-            if (null != is) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    LOG.error(e.toString(), e);
-                }
-            }
-            LOG.debug("Conversion and transfer done.");
-        }
-        return id;
-    }
-
-    private String createFolderInRepository(String fileName, String parentFolderId) {
-        Folder parentFolder;
-        String id = null;
-        if (null == parentFolderId) {
-            parentFolder = session.getRootFolder();
-        } else {
-            parentFolder = (Folder) session.getObject(parentFolderId);
-        }
-        Map<String, Object> properties = new HashMap<String, Object>();
-        File f = new File(fileName);
-        properties.put(PropertyIds.NAME, f.getName().replaceAll(" ", "_"));
-        properties.put(PropertyIds.OBJECT_TYPE_ID, CFG.getDefaultFolderType());
-        try {
-            Folder folder = parentFolder.createFolder(properties);
-            id = folder.getId();
-            LOG.debug("New folder created with id: " + folder.getId() + ", path: " + folder.getPaths().get(0));
-        } catch (Exception e) {
-            LOG.error("Failed to create CMIS document.", e);
-        }
-        LOG.info("New folder created with id: " + id + ", name: " + properties.get(PropertyIds.NAME)
-                + " in parent folder: " + parentFolder.getId());
-        return id;
-    }
-
-    public void listMetadata(String fileName) {
-        try {
-            File f = new File(fileName);
-            Tika tika = new Tika();
-            String mimeType = tika.detect(f);
-            LOG.info("Detected MIME type: " + mimeType);
-
-            // extract metadata: first get a parser
-            MetadataParser parser = CFG.getParser(mimeType);
-            if (null == parser) {
-                LOG.warn("Unknown content type " + mimeType + " no metadata found, listing all tags found in file.");
-                MetadataParserTika mpt = new MetadataParserTika();
-                mpt.listMetadata(f);
-            } else {
-                PropertyMapper mapper = CFG.getPropertyMapper(mimeType);
-                if (null == mapper) {
-                    throw new MapperException("Unknown mime type (no configuration): " + mimeType);
-                }
-                String typeId = mapper.getMappedTypeId();
-                if (null == typeId) {
-                    throw new MapperException("No CMIS type configured for mime type" + mimeType);
-                }
-
-                // Session available? if yes do conversion
-                TypeDefinition td = null;
-                if (null != session) {
-                    td = session.getTypeDefinition(typeId);
-                    if (null == td) {
-                        throw new MapperException("CMIS type " + typeId + " does not exist on server.");
-                    } else {
-                        LOG.info("Detected MIME type: " + mimeType + " is mapped to CMIS type id: " + td.getId());
-                    }
-                }
-
-                parser.extractMetadata(f, td, session);
-                Map<String, Object> properties = parser.getCmisProperties();
-                for (Map.Entry<String, Object> entry : properties.entrySet()) {
-                    LOG.info("Found metadata tag " + entry.getKey() + "mapped to " + entry.getValue());
-                }
-            }
-        } catch (IOException e) {
-            LOG.error("Failed to list metadata", e);
-        }
-        LOG.debug("Conversion and transfer done.");
-    }
-
-    public static void main(String[] args) {
-        String fileName = args[0];
-        LOG.debug("extracting CMIS properties for file " + fileName);
-        try {
-            new FileCopier().listMetadata(fileName);
-        } catch (Exception e) {
-            LOG.error(e.toString(), e);
-        }
-        LOG.debug("Extraction done.");
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/main/ObjGenApp.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/main/ObjGenApp.java
deleted file mode 100644
index 0cfcd2c..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/main/ObjGenApp.java
+++ /dev/null
@@ -1,746 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.tools.main;

-

-import java.io.FileOutputStream;

-import java.io.IOException;

-import java.io.InputStream;

-import java.util.HashMap;

-import java.util.Map;

-

-import joptsimple.OptionParser;

-import joptsimple.OptionSet;

-import joptsimple.OptionSpec;

-

-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;

-import org.apache.chemistry.opencmis.commons.SessionParameter;

-import org.apache.chemistry.opencmis.commons.data.ContentStream;

-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;

-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;

-import org.apache.chemistry.opencmis.commons.enums.BindingType;

-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;

-import org.apache.chemistry.opencmis.commons.impl.IOUtils;

-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;

-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;

-import org.apache.chemistry.opencmis.tools.filecopy.FileCopier;

-import org.apache.chemistry.opencmis.util.repository.MultiThreadedObjectGenerator;

-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;

-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator.ContentKind;

-import org.apache.chemistry.opencmis.util.repository.TimeLogger;

-

-public class ObjGenApp {

-

-    private static final int BUFSIZE = 64 * 1024;

-    private static final String PROP_USER = SessionParameter.USER;

-    private static final String PROP_PASSWORD = SessionParameter.PASSWORD;

-    private static final String DEFAULT_USER = "user";

-    private static final String DEFAULT_PASSWORD = "dummy";

-    private static final String PROP_ATOMPUB_URL = SessionParameter.ATOMPUB_URL;

-    private static final String PROP_WS_URL = "org.apache.chemistry.opencmis.binding.webservices.url";

-    private static final String PROP_BROWSER_URL = SessionParameter.BROWSER_URL;

-    private static final String PROP_BINDING = SessionParameter.BINDING_TYPE;

-    private static final String PROP_CUSTOM = "org.apache.chemistry.opencmis.binding.header.";

-    private static final String DEFAULT_ATOMPUB_URL = "http://localhost:8080/inmemory/atom";

-    private static final String DEFAULT_WS_URL = "http://localhost:8080/inmemory/services/";

-    private static final String DEFAULT_BROWSER_BINDING_URL = "http://localhost:8080/inmemory/browser/";

-    private static final String DEFAULT_BINDING = "atompub";

-    private static final String CMD = "Command";

-    private static final String REPOSITORY_ID = "RepositoryId";

-    private static final String FILLER_DOCUMENT_TYPE_ID = "DocumentTypeId";

-    private static final String FILLER_FOLDER_TYPE_ID = "FolderTypeId";

-    private static final String FILLER_DOCS_PER_FOLDER = "DocsPerFolder";

-    private static final String FILLER_FOLDERS_PER_FOLDER = "FoldersPerFolder";

-    private static final String FILLER_DEPTH = "Depth";

-    private static final String FILLER_CONTENT_SIZE = "ContentSizeInKB";

-    private static final String COUNT = "Count";

-    private static final String CLEANUP = "Cleanup";

-    private static final String ROOTFOLDER = "RootFolder";

-    private static final String THREADS = "Threads";

-    private static final String CONTENT_KIND = "ContentKind";

-    private static final String FILE_NAME_PATTERN = "FileName";

-    private static final String LOCAL_FILE = "File";

-    private static final String LOCAL_DIR = "Dir";

-    private static final String BINDING_ATOM = "atompub";

-    private static final String BINDING_WS = "webservices";

-    private static final String BINDING_BROWSER = "browser";

-

-    private BindingType bindingType;

-    private ContentKind contentKind;

-    private CmisBinding binding;

-

-    private String cmd;

-    private Integer depth;

-    private Integer contentSize;

-    private Integer folderPerFolder;

-    private Integer docsPerFolder;

-    private String folderType;

-    private String docType;

-    private String repositoryId;

-    private Integer count;

-    private Boolean cleanup;

-    private String rootFolder;

-    private Integer threads;

-    private String contentKindStr;

-    private String fileNamePattern;

-    private String localDir;

-    private String localFile;   

-

-    public static void main(String[] args) {

-

-        ObjGenApp app = new ObjGenApp();

-        try {

-            app.processCmdLine(args);

-        } catch (CmisBaseException ce) {

-            System.out.println("Error: Could not process command. " + ce);

-            System.out.println("Extended error: " + ce.getErrorContent());

-            ce.printStackTrace();

-        } catch (Exception e) {

-            System.out.println("Could not fill repository " + e);

-            e.printStackTrace();

-        }

-    }

-

-    private void processCmdLine(String[] args) {

-

-        OptionSpec<String> optCmd;

-        OptionSpec<Integer> optDepth;

-        OptionSpec<Integer> optContentSize;

-        OptionSpec<Integer> optFolderPerFolder;

-        OptionSpec<Integer> optDocsPerFolder;

-        OptionSpec<String> optFolderType;

-        OptionSpec<String> optDocType;

-        OptionSpec<String> optRepoId;

-        OptionSpec<Integer> optCount;

-        OptionSpec<Boolean> optCleanup;

-        OptionSpec<String> optRootFolder;

-        OptionSpec<Integer> optThreads;

-        OptionSpec<String> optContentKindStr;

-        OptionSpec<String> optFileNamePattern;

-        OptionSpec<String> optLocalDir;

-        OptionSpec<String> optLocalFile;

-

-        OptionParser parser = new OptionParser();

-        optCmd = parser.accepts(CMD).withRequiredArg().describedAs("Command to perform (see below)");

-        optRepoId = parser.accepts(REPOSITORY_ID).withOptionalArg().describedAs("Repository used");

-        optDocType = parser.accepts(FILLER_DOCUMENT_TYPE_ID).withOptionalArg()

-                .defaultsTo(BaseTypeId.CMIS_DOCUMENT.value()).describedAs("Document type created");

-        optFolderType = parser.accepts(FILLER_FOLDER_TYPE_ID).withOptionalArg()

-                .defaultsTo(BaseTypeId.CMIS_FOLDER.value()).describedAs("Folder type created");

-        optDocsPerFolder = parser.accepts(FILLER_DOCS_PER_FOLDER).withOptionalArg().ofType(Integer.class)

-                .describedAs("Documents on each level").defaultsTo(1);

-        optFolderPerFolder = parser.accepts(FILLER_FOLDERS_PER_FOLDER).withOptionalArg().ofType(Integer.class)

-                .describedAs(" Folders on each level").defaultsTo(0);

-        optDepth = parser.accepts(FILLER_DEPTH).withOptionalArg().ofType(Integer.class).describedAs("Levels of folders")

-                .defaultsTo(1);

-        optContentSize = parser.accepts(FILLER_CONTENT_SIZE).withOptionalArg().ofType(Integer.class)

-                .describedAs("Content size of each doc").defaultsTo(0);

-        optCount = parser.accepts(COUNT).withOptionalArg().ofType(Integer.class).defaultsTo(1)

-                .describedAs("Repeat a command n times (partially implemented)");

-        optCleanup = parser.accepts(CLEANUP).withOptionalArg().ofType(Boolean.class).defaultsTo(false)

-                .describedAs("Clean all created objects at the end");

-        optRootFolder = parser.accepts(ROOTFOLDER).withOptionalArg().ofType(String.class)

-                .describedAs("folder id used as root to create objects (default repository root folder)");

-        optThreads = parser.accepts(THREADS).withOptionalArg().ofType(Integer.class).defaultsTo(1)

-                .describedAs("Number of threads to start in parallel");

-        optContentKindStr = parser.accepts(CONTENT_KIND).withOptionalArg().ofType(String.class).defaultsTo("lorem/text")

-                .describedAs("kind of content: static/text, lorem/text, lorem/html, fractal/jpeg");

-        optFileNamePattern = parser.accepts(FILE_NAME_PATTERN).withOptionalArg().ofType(String.class)

-                .defaultsTo("ContentData-%03d.bin").describedAs("file name pattern to be used with CreateFiles action");

-        optLocalDir = parser.accepts(LOCAL_DIR).withOptionalArg().ofType(String.class).defaultsTo(".")

-                .describedAs("name of a directory to be recursively copied to the repository");

-        optLocalFile = parser.accepts(LOCAL_FILE).withOptionalArg().ofType(String.class)

-                .describedAs("file name of a file to be copied to the repository");

-        OptionSet options = parser.parse(args);

-

-        if (cmd == null || options.has("?")) {

-            usage(parser);

-        }

-

-        String bindingStr = getBindingProperty();

-

-        if (bindingStr.equals(BINDING_WS)) {

-            bindingType = BindingType.WEBSERVICES;

-        } else if (bindingStr.equals(BINDING_ATOM)) {

-            bindingType = BindingType.ATOMPUB;

-        } else if (bindingStr.equals(BINDING_BROWSER)) {

-            bindingType = BindingType.BROWSER;

-        } else {

-            System.out.println("Error: Unknown binding: " + bindingStr + " allowed values: " + BINDING_WS + " or "

-                    + BINDING_ATOM + " or " + BINDING_BROWSER);

-            return;

-        }

-

-        String kind = options.valueOf(optContentKindStr);

-        if (null == kind) {

-            if (options.valueOf(optContentSize) > 0) {

-                contentKind = ObjectGenerator.ContentKind.STATIC_TEXT;

-            } else {

-                contentKind = null;

-            }

-        } else if (kind.equals("static/text")) {

-            contentKind = ObjectGenerator.ContentKind.STATIC_TEXT;

-        } else if (kind.equals("lorem/text")) {

-            contentKind = ObjectGenerator.ContentKind.LOREM_IPSUM_TEXT;

-        } else if (kind.equals("lorem/html")) {

-            contentKind = ObjectGenerator.ContentKind.LOREM_IPSUM_HTML;

-        } else if (kind.equals("fractal/jpeg")) {

-            contentKind = ObjectGenerator.ContentKind.IMAGE_FRACTAL_JPEG;

-        } else {

-            System.out.println("Unknown content kind: " + options.valueOf(optContentKindStr));

-            System.out.println("  must be one of static/text, lorem/text, lorem/html, fractal/jpeg");

-            usage(parser);

-        }

-

-        repositoryId = options.valueOf(optRepoId);

-        cmd = options.valueOf(optCmd);

-        depth = options.valueOf(optDepth);

-        contentSize = options.valueOf(optContentSize);

-        folderPerFolder = options.valueOf(optFolderPerFolder);

-        docsPerFolder = options.valueOf(optDocsPerFolder);

-        folderType = options.valueOf(optFolderType);

-        docType = options.valueOf(optDocType);

-        count = options.valueOf(optCount);

-        cleanup = options.valueOf(optCleanup);

-        rootFolder = options.valueOf(optRootFolder);

-        threads = options.valueOf(optThreads);

-        contentKindStr = options.valueOf(optContentKindStr);

-        fileNamePattern = options.valueOf(optFileNamePattern);

-        localDir = options.valueOf(optLocalDir);

-        localFile = options.valueOf(optLocalFile);

-

-        initClientBindings();

-

-        if (null == cmd) {

-            System.out.println("No command given.");

-            usage(parser);

-        } else if (cmd.equals("FillRepository")) {

-            fillRepository(options);

-        } else if (cmd.equals("CreateDocument")) {

-            createSingleDocument(options);

-        } else if (cmd.equals("CreateFolder")) {

-            createFolders(options);

-        } else if (cmd.equals("RepositoryInfo")) {

-            repositoryInfo(options);

-        } else if (cmd.equals("CreateFiles")) {

-            createFiles(options);

-        } else if (cmd.equals("CopyFiles")) {

-            transferFiles(options);

-        } else if (cmd.equals("CopyFilesTest")) { // undocumented

-            transferFilesTest(options);

-        } else {

-            System.out.println("Unknown cmd: " + cmd);

-            usage(parser);

-        }

-    }

-

-    private static void usage(OptionParser parser) {

-        try {

-            System.out.println();

-            System.out.println("ObjGenApp is a command line tool for testing a CMIS repository.");

-            System.out.println("Usage:");

-            parser.printHelpOn(System.out);

-            System.out.println();

-            System.out

-                    .println("Command is one of [CreateDocument, CreateFolder, FillRepository, RepositoryInfo, CreateFiles, "

-                            + "CopyFiles, CopyFilesTest]");

-            System.out.println("JVM system properties: " + PROP_ATOMPUB_URL + ", " + PROP_WS_URL + ", "

-                    + PROP_BROWSER_URL);

-            System.out.println("                       " + PROP_USER + ", " + PROP_PASSWORD);

-            System.out.println();

-            System.out.println("Example: ");

-            System.out

-                    .println("java -D"

-                            + PROP_ATOMPUB_URL

-                            + "=http://localhost:8080/inmemory/atom -cp ... "

-                            + "org.apache.chemistry.opencmis.util.repository.ObjGenApp --Binding=AtomPub --Command=CreateDocument "

-                            + "--RepositoryId=A1 --ContentSizeInKB=25 --ContentKind=lorem/text");

-            return;

-        } catch (IOException e) {

-            e.printStackTrace();

-        }

-    }

-

-    private void fillRepository(String repoId, int docsPerFolder, int foldersPerFolders, int depth,

-            String documentType, String folderType, int contentSizeInKB, String rootFolderId, boolean doCleanup) {

-

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator.prepareForCreateTree(

-                binding, repoId, docsPerFolder, foldersPerFolders, depth, documentType, folderType, contentSizeInKB,

-                rootFolderId, contentKind, doCleanup);

-        ObjectGenerator gen = runner.getObjectGenerator();

-        runner.doCreateTree();

-

-        System.out.println();

-        System.out.println("Result:");

-        System.out.println("Filling repository succeeded.");

-        System.out.println("Folder used as root for creation (null=rootFolderId): " + rootFolderId);

-        System.out.println("Number of documents created: " + gen.getDocumentsInTotal());

-        System.out.println("Number of folders created: " + gen.getFoldersInTotal());

-        gen.printTimings();

-    }

-

-    private void fillRepositoryMT(int noThreads, String repoId, int docsPerFolder, int foldersPerFolders, int depth,

-            String documentType, String folderType, int contentSizeInKB, String rootFolderId, boolean doCleanup) {

-

-        // Step 1: create a root folder for each thread

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator

-                .prepareForCreateFolder(binding, repoId, folderType, rootFolderId, noThreads, doCleanup);

-        String[] folderIds = runner.doCreateFolder();

-

-        // Step 2: fill each root folder with an object tree

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner[] runners = MultiThreadedObjectGenerator

-                .prepareForCreateTreeMT(binding, repoId, docsPerFolder, foldersPerFolders, depth, documentType,

-                        folderType, contentSizeInKB, folderIds, contentKind, doCleanup);

-

-        MultiThreadedObjectGenerator.runMultiThreaded(runners);

-        System.out.println("Filling repository succeeded.");

-    }

-

-    private void printParameters(OptionSet options) {

-        if (bindingType == BindingType.ATOMPUB) {

-            System.out.println("Using AtomPub, connecting to  " + getAtomPubUrl());

-        } else if (bindingType == BindingType.WEBSERVICES) {

-            System.out.println("Using WebService, connecting to  " + getWsUrl());

-        } else if (bindingType == BindingType.BROWSER) {

-            System.out.println("Using Browser binding, connecting to  " + getBrowserUrl());

-        } else {

-            System.out.println("Unknown binding type.");

-        }

-

-        System.out.println("Repository id is: " + repositoryId);

-        System.out.println("Content size: " + contentSize);

-        System.out.println("Document Type: " + docType);

-        System.out.println("Folder id used as root: " + rootFolder);

-        System.out.println("Delete all objects after creation: " + cleanup);

-        System.out.println("Number of actions to perform: " + count);

-        System.out.println("Number of threads to start: " + threads);

-        System.out.println("Kind of created content: " + contentKindStr);

-    }

-

-    private void createSingleDocument(OptionSet options) {

-        System.out.println();

-        System.out.println("Creating document with parameters:");

-        printParameters(options);

-        int noThreads = threads;

-        if (noThreads <= 1) {

-            createSingleDocument(repositoryId, docType, contentSize,

-                    rootFolder, count, cleanup);

-        } else {

-            createSingleDocumentMT(noThreads, repositoryId, docType,

-                    contentSize, rootFolder, count,

-                    cleanup);

-        }

-    }

-

-    private void fillRepository(OptionSet options) {

-        System.out.println();

-        printParameters(options);

-        System.out.println("Creating object tree with folowing parameters: ");

-        System.out.println("Documents per folder: " + docsPerFolder);

-        System.out.println("Folder per folder: " + folderPerFolder);

-        System.out.println("Depth: " + depth);

-        System.out.println("Folder Type: " + folderType);

-

-        int noThreads = threads;

-        if (noThreads <= 1) {

-            fillRepository(repositoryId, docsPerFolder,

-                    folderPerFolder, depth, docType,

-                    folderType, contentSize, rootFolder,

-                    cleanup);

-        } else {

-            fillRepositoryMT(noThreads, repositoryId, docsPerFolder,

-                    folderPerFolder, depth, docType,

-                    folderType, contentSize, rootFolder,

-                    cleanup);

-        }

-

-    }

-

-    private void createFolders(OptionSet options) {

-        System.out.println();

-        System.out.println("Creating folder with parameters:");

-        printParameters(options);

-        System.out.println("Folder Type: " + folderType);

-        int noThreads = threads;

-        if (noThreads <= 1) {

-            createFolders(repositoryId, folderType, rootFolder,

-                    count, cleanup);

-        } else {

-            createFoldersMT(noThreads, repositoryId, folderType,

-                    rootFolder, count, cleanup);

-        }

-    }

-

-    private void createSingleDocument(String repoId, String documentType, int contentSizeInKB, String rootFolderId,

-            int docCount, boolean doCleanup) {

-

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator

-                .prepareForCreateDocument(binding, repoId, documentType, contentSizeInKB, rootFolderId, docCount,

-                        contentKind, doCleanup);

-        ObjectGenerator gen = runner.getObjectGenerator();

-        String[] ids = runner.doCreateDocument();

-        System.out.println();

-        System.out.println("Result:");

-        System.out.println("Document creation succeeded.");

-        System.out.println("Folder used as root for creation: " + rootFolderId);

-        System.out.println("Ids of created documents: ");

-        if (null == ids) {

-            System.out.println("<none>");

-        } else {

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

-                System.out.println(ids[i]);

-            }

-        }

-        gen.printTimings();

-        gen.resetCounters();

-    }

-

-    private void createSingleDocumentMT(int noThreads, String repoId, String documentType, int contentSizeInKB,

-            String rootFolderId, int docCount, boolean doCleanup) {

-

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner[] runners = MultiThreadedObjectGenerator

-                .prepareForCreateDocumentMT(noThreads, binding, repoId, documentType, contentSizeInKB, rootFolderId,

-                        docCount, contentKind, doCleanup);

-

-        MultiThreadedObjectGenerator.runMultiThreaded(runners);

-        System.out.println("Document creation succeeded. All threads terminated.");

-    }

-

-    private void createFolders(String repoId, String folderType, String rootFolderId, int noFolders, boolean doCleanup) {

-

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator

-                .prepareForCreateFolder(binding, repoId, folderType, rootFolderId, noFolders, doCleanup);

-        ObjectGenerator gen = runner.getObjectGenerator();

-        String[] ids = runner.doCreateFolder();

-        System.out.println();

-        System.out.println("Result:");

-        System.out.println("Folder creation succeeded.");

-        System.out.println("Ids of created folders: ");

-        if (null == ids) {

-            System.out.println("<none>");

-        } else {

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

-                System.out.println(ids[i]);

-            }

-        }

-        gen.printTimings();

-        gen.resetCounters();

-    }

-

-    private void createFoldersMT(int noThreads, String repoId, String folderType, String rootFolderId, int noFolders,

-            boolean doCleanup) {

-

-        MultiThreadedObjectGenerator.ObjectGeneratorRunner[] runners = MultiThreadedObjectGenerator

-                .prepareForCreateFolderMT(noThreads, binding, repoId, folderType, rootFolderId, noFolders, doCleanup);

-        MultiThreadedObjectGenerator.runMultiThreaded(runners);

-        System.out.println("Folder creation succeeded.");

-    }

-

-    private void callRepoInfo(String repositoryId, int count) {

-        RepositoryService repSvc = binding.getRepositoryService();

-        TimeLogger timeLogger = new TimeLogger("RepoInfoTest");

-        RepositoryInfo repoInfo = null;

-        for (int i = 0; i < count; i++) {

-            binding.clearRepositoryCache(repositoryId);

-            timeLogger.start();

-            repoInfo = repSvc.getRepositoryInfo(repositoryId, null);

-            timeLogger.stop();

-        }

-        System.out.println("Root Folder id is: " + (repoInfo == null ? "<unknown>" : repoInfo.getRootFolderId()));

-        timeLogger.printTimes();

-    }

-

-    private void repositoryInfo(OptionSet options) {

-        callRepoInfo(repositoryId, count);

-    }

-

-    private void createFiles(OptionSet options) {

-        ContentStream contentStream = null;

-

-        System.out.println("Creating local files with content: ");

-        System.out.println("Kind: " + docsPerFolder);

-        System.out.println("Number of files: " + count);

-        System.out.println("File name pattern: " + fileNamePattern);

-        System.out.println("Kind of content: " + contentKindStr);

-        System.out.println("Size of content (text only): " + contentSize);

-

-        ObjectGenerator objGen = new ObjectGenerator(null, null, null, null, null, contentKind);

-        objGen.setContentSizeInKB(contentSize);

-

-        InputStream is = null;

-        FileOutputStream os = null;

-

-        try {

-            for (int i = 0; i < count; i++) {

-                String fileName = String.format(fileNamePattern, i);

-                System.out.println("Generating file: " + fileName);

-                if (contentSize > 0) {

-                    switch (contentKind) {

-                    case STATIC_TEXT:

-                        contentStream = objGen.createContentStaticText();

-                        break;

-                    case LOREM_IPSUM_TEXT:

-                        contentStream = objGen.createContentLoremIpsumText();

-                        break;

-                    case LOREM_IPSUM_HTML:

-                        contentStream = objGen.createContentLoremIpsumHtml();

-                        break;

-                    case IMAGE_FRACTAL_JPEG:

-                        contentStream = objGen.createContentFractalimageJpeg();

-                        break;

-                    }

-                }

-

-                // write to a file:

-                is = contentStream.getStream();

-                os = new FileOutputStream(fileName);

-

-                IOUtils.copy(is, os, BUFSIZE);

-

-                is.close();

-                is = null;

-                os.close();

-                os = null;

-            }

-        } catch (Exception e) {

-            System.err.println("Error generating file: " + e);

-            e.printStackTrace();

-        } finally {

-            IOUtils.closeQuietly(is);

-            IOUtils.closeQuietly(os);

-        }

-    }

-

-    private void transferFiles(OptionSet options) {

-        String fileName = localFile;

-        String dirName = localDir;

-        String folderId = rootFolder;

-        String name = fileName;

-

-        if ((null == fileName || fileName.length() == 0) && (null == dirName || dirName.length() == 0)) {

-            System.out.println("Error: You either have to provide a --file or a --dir option to copy file(s).");

-            return;

-        }

-

-        // if no file name is provided there must be a directory

-        if (null == name || name.length() == 0) {

-            name = dirName;

-        }

-

-        System.out.println("Copying files to a repository: ");

-        System.out.println("Repository id is: " + (repositoryId == null ? "not set!" : repositoryId));

-        System.out.println("Folder id used as root: " + rootFolder);

-

-        Map<String, String> parameters = getConnectionParameters(getBindingProperty(), repositoryId);

-        FileCopier fc = new FileCopier();

-        fc.connect(parameters);

-        fc.copyRecursive(name, folderId);

-    }

-

-    private void transferFilesTest(OptionSet options) {

-        String fileName = localFile;

-

-        if ((null == fileName || fileName.length() == 0)) {

-            System.out.println("Error: You have to provide a --file option to test metadata extraction.");

-            return;

-        }

-

-        System.out.println("Testing metadata extraction: ");

-

-        FileCopier fc = new FileCopier();

-        fc.listMetadata(fileName);

-    }

-

-    private Map<String, String> getConnectionParameters(String binding, String repoId) {

-        Map<String, String> parameters = new HashMap<String, String>();

-        parameters.put(SessionParameter.REPOSITORY_ID, repoId);

-        parameters.put(SessionParameter.BINDING_TYPE, binding);

-

-        if (binding.equals(BindingType.ATOMPUB.value())) {

-            parameters.put(SessionParameter.ATOMPUB_URL, getAtomPubUrl());

-            filLoginParams(parameters, getUser(), getPassword());

-        } else if (binding.equals(BindingType.WEBSERVICES.value())) {

-            fillWSParameters(parameters, getWsUrl(), isPrefix(getWsUrl()), getUser(), getPassword());

-        } else if (binding.equals(BindingType.BROWSER.value())) {

-            parameters.put(SessionParameter.BROWSER_URL, getBrowserUrl());

-            filLoginParams(parameters, getUser(), getPassword());

-        } else {

-            System.out.println("Error unknown binding: " + binding);

-        }

-        fillCustomHeaders(parameters);

-

-        return parameters;

-    }

-

-    private void initClientBindings() {

-        if (binding == null) {

-            if (bindingType == BindingType.ATOMPUB) {

-                binding = createAtomBinding(getAtomPubUrl(), getUser(), getPassword());

-            }

-            if (bindingType == BindingType.WEBSERVICES) {

-                String url = getWsUrl();

-                binding = createWSBinding(url, isPrefix(url), getUser(), getPassword());

-            } else if (bindingType == BindingType.BROWSER) {

-                binding = createBrowserBinding(getBrowserUrl(), getUser(), getPassword());

-            }

-            

-            RepositoryInfo repoInfo = binding.getRepositoryService().getRepositoryInfo(null, null);

-            if (null == repositoryId) {

-                repositoryId = repoInfo.getId();

-            }

-        }

-    }

-

-    private static void filLoginParams(Map<String, String> parameters, String user, String password) {

-        if (user != null && user.length() > 0) {

-            parameters.put(SessionParameter.USER, user);

-        }

-        if (user != null && user.length() > 0) {

-            parameters.put(SessionParameter.PASSWORD, password);

-        }

-    }

-

-    private static void fillCustomHeaders(Map<String, String> parameters) {

-        Map<String, String> customHeaders = getCustomHeaders();

-        for (Map.Entry<String, String> entry : customHeaders.entrySet()) {

-            parameters.put(entry.getKey(), entry.getValue());

-        }

-    }

-

-    private static CmisBinding createAtomBinding(String url, String user, String password) {

-

-        // gather parameters

-        Map<String, String> parameters = new HashMap<String, String>();

-        filLoginParams(parameters, user, password);

-        fillCustomHeaders(parameters);

-

-        // get factory and create binding

-        CmisBindingFactory factory = CmisBindingFactory.newInstance();

-        parameters.put(SessionParameter.ATOMPUB_URL, url);

-        CmisBinding binding = factory.createCmisAtomPubBinding(parameters);

-        return binding;

-    }

-

-    private static CmisBinding createBrowserBinding(String url, String user, String password) {

-

-        // gather parameters

-        Map<String, String> parameters = new HashMap<String, String>();

-        filLoginParams(parameters, user, password);

-        fillCustomHeaders(parameters);

-

-        // get factory and create binding

-        CmisBindingFactory factory = CmisBindingFactory.newInstance();

-        parameters.put(SessionParameter.BROWSER_URL, url);

-        CmisBinding binding = factory.createCmisBrowserBinding(parameters);

-        return binding;

-    }

-

-    private static boolean isPrefix(String url) {

-        boolean isPrefix = true;

-        String urlLower = url.toLowerCase();

-

-        if (urlLower.endsWith("?wsdl")) {

-            isPrefix = false;

-        } else if (urlLower.endsWith(".wsdl")) {

-            isPrefix = false;

-        } else if (urlLower.endsWith(".xml")) {

-            isPrefix = false;

-        }

-        return isPrefix;

-    }

-

-    public static CmisBinding createWSBinding(String url, boolean isPrefix, String username, String password) {

-        Map<String, String> parameters = new HashMap<String, String>();

-        fillWSParameters(parameters, url, isPrefix, username, password);

-        fillCustomHeaders(parameters);

-

-        // get factory and create provider

-        CmisBindingFactory factory = CmisBindingFactory.newInstance();

-        CmisBinding binding = factory.createCmisWebServicesBinding(parameters);

-

-        return binding;

-    }

-

-    public static void fillWSParameters(Map<String, String> parameters, String url, boolean isPrefix, String username,

-            String password) {

-        // gather parameters

-        parameters.put(SessionParameter.USER, username);

-        parameters.put(SessionParameter.PASSWORD, password);

-

-        if (!isPrefix) {

-            parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url);

-            parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url);

-        } else {

-            parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url + "RepositoryService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url + "NavigationService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url + "ObjectService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url + "VersioningService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url + "DiscoveryService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url + "RelationshipService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url + "MultiFilingService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url + "PolicyService?wsdl");

-            parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url + "ACLService?wsdl");

-        }

-    }

-

-    private static String getBindingProperty() {

-        return System.getProperty(PROP_BINDING, DEFAULT_BINDING);

-    }

-

-    private static String getAtomPubUrl() {

-        return System.getProperty(PROP_ATOMPUB_URL, DEFAULT_ATOMPUB_URL);

-    }

-

-    private static String getWsUrl() {

-        return System.getProperty(PROP_WS_URL, DEFAULT_WS_URL);

-    }

-

-    private static String getBrowserUrl() {

-        return System.getProperty(PROP_BROWSER_URL, DEFAULT_BROWSER_BINDING_URL);

-    }

-

-    private static String getUser() {

-        return System.getProperty(PROP_USER, DEFAULT_USER);

-    }

-

-    private static String getPassword() {

-        return System.getProperty(PROP_PASSWORD, DEFAULT_PASSWORD);

-    }

-

-    private static Map<String, String> getCustomHeaders() {

-        int i = 0;

-        Map<String, String> customHeaders = new HashMap<String, String>();

-        while (true) {

-            String val = System.getProperty(PROP_CUSTOM + i, null);

-            if (null == val) {

-                break;

-            } else {

-                customHeaders.put(PROP_CUSTOM + i++, val);

-            }

-        }

-        return customHeaders;

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/AbstractPropertyMapper.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/AbstractPropertyMapper.java
deleted file mode 100644
index 86b2035..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/AbstractPropertyMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.tools.mapper;

-

-import java.util.Properties;

-

-public abstract class AbstractPropertyMapper implements PropertyMapper {

-

-    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";

-

-    protected String[] contentTypes;

-    protected String cmisTypeId;

-    protected String propPrefix;

-    protected String dateFormat = DEFAULT_DATE_FORMAT;

-

-    public boolean initialize(String cfgPrefix, String typeKey, Properties properties) {

-        propPrefix = cfgPrefix + "." + typeKey;

-        cmisTypeId = properties.getProperty(propPrefix + ".typeId");

-        String contentTypeEntry = properties.getProperty(propPrefix);

-

-        contentTypes = contentTypeEntry.split("\\:");

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

-            contentTypes[i] = contentTypes[i].trim();

-        }

-

-        String df = properties.getProperty(propPrefix + ".dateFormat");

-        if (null != df) {

-            dateFormat = df;

-        }

-

-        if (null == cmisTypeId) {

-            throw new MapperException("Missingt type id in properties: " + propPrefix + ".typeId");

-        }

-

-        return true;

-    }

-

-    public String getMappedTypeId() {

-        return cmisTypeId;

-    }

-

-    public String[] getContentTypes() {

-        return contentTypes;

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/Configurator.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/Configurator.java
deleted file mode 100644
index 5831ec9..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/Configurator.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.mapper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.chemistry.opencmis.tools.parser.MetadataParser;
-import org.apache.chemistry.opencmis.tools.parser.MetadataParserTika;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Configurator {
-
-    private static final Logger LOG = LoggerFactory.getLogger(Configurator.class.getName());
-
-    private static Configurator instance;
-    private static final String PREFIX = "mapping.contentType";
-
-    public static Configurator getInstance() {
-        if (null == instance) {
-            instance = new Configurator();
-        }
-
-        return instance;
-    }
-
-    private Properties properties;
-    private Map<String, PropertyMapper> contentTypeMapperMap = new HashMap<String, PropertyMapper>();
-    private Map<String, MetadataParser> parserMap = new HashMap<String, MetadataParser>();
-    private String defaultDocumentType;
-    private String defaultFolderType;
-
-    private Configurator() {
-        loadProperties();
-        loadDefaults();
-        buildMapperMap();
-        createParsers();
-    }
-
-    // just for unit tests
-    Configurator(Properties props) {
-        this.properties = props;
-    }
-
-    public PropertyMapper getPropertyMapper(String contentType) {
-        MetadataParser parser = getParser(contentType);
-        return parser.getMapper();
-    }
-
-    public MetadataParser getParser(String contentType) {
-        MetadataParser parser = parserMap.get(contentType);
-        if (null == parser) {
-            // if not found try a more generic one
-            String genericContentType = contentType.substring(0, contentType.indexOf('/')) + "/*";
-            for (String key : parserMap.keySet()) {
-                if (key.equals(genericContentType)) {
-                    return parserMap.get(key);
-                }
-            }
-        }
-        return parser;
-    }
-
-    private void loadProperties() {
-        // Returns null on lookup failures:
-        InputStream in = Configurator.class.getResourceAsStream("/mapping.properties");
-        if (in != null) {
-            properties = new Properties();
-            try {
-                properties.load(in);
-            } catch (IOException e) {
-                LOG.error(e.toString(), e);
-                e.printStackTrace();
-                throw new MapperException("Could not load file mapping.properties as resource", e);
-            }
-        }
-    }
-
-    private void loadDefaults() {
-        defaultDocumentType = properties.getProperty(PREFIX + ".default.document");
-        if (null == defaultDocumentType) {
-            defaultDocumentType = "cmis:document";
-        }
-
-        defaultFolderType = properties.getProperty(PREFIX + ".default.folder");
-        if (null == defaultFolderType) {
-            defaultFolderType = "cmis:folder";
-        }
-    }
-
-    public String getDefaultDocumentType() {
-        return defaultDocumentType;
-    }
-
-    public String getDefaultFolderType() {
-        return defaultFolderType;
-    }
-
-    public final Properties getProperties() {
-        return properties;
-    }
-
-    /**
-     * return an overridden MIME type from a file extension
-     * 
-     * @param fileExtension
-     *            enforced or content-type or null if none is set
-     */
-    public String getContentType(String fileExtension) {
-        return properties.getProperty(PREFIX + ".forceContentType." + fileExtension, null);
-    }
-
-    String[] getTypeKeys() {
-        String s = properties.getProperty(PREFIX + "s");
-
-        if (null == s) {
-            return null;
-        }
-
-        String[] keys = s.split(",");
-
-        for (int i = 0; i < keys.length; i++) {
-            keys[i] = keys[i].trim();
-        }
-
-        return keys;
-    }
-
-    void buildMapperMap() {
-
-        String[] typeKeys = getTypeKeys();
-        for (String typeKey : typeKeys) {
-            PropertyMapper mapper = loadMapperClass(typeKey);
-            String contentType = properties.getProperty(PREFIX + "." + typeKey);
-            if (null == contentType) {
-                throw new MapperException("Missingt content type in properties: " + PREFIX + "." + typeKey);
-            }
-            boolean ok = mapper.initialize(PREFIX, typeKey, properties);
-
-            if (ok) {
-                contentTypeMapperMap.put(typeKey, mapper);
-            }
-        }
-    }
-
-    void createParsers() {
-        String[] typeKeys = getTypeKeys();
-        for (String typeKey : typeKeys) {
-            MetadataParser parser = loadParserClass(typeKey);
-            String contentType = properties.getProperty(PREFIX + "." + typeKey);
-            if (null == contentType) {
-                throw new MapperException("Missing content type in properties: " + PREFIX + "." + typeKey);
-            }
-
-            PropertyMapper mapper = contentTypeMapperMap.get(typeKey);
-
-            parser.initialize(mapper, contentType);
-            String[] contentTypes = parser.getContentTypes();
-            for (String ct : contentTypes) {
-                parserMap.put(ct, parser);
-            }
-        }
-    }
-
-    MetadataParser loadParserClass(String typeKey) {
-        String className = properties.getProperty(PREFIX + "." + typeKey + ".parserClass");
-        if (null == className) {// use Tika as default parser if none is
-                                // configured
-            className = MetadataParserTika.class.getName();
-        }
-
-        Object obj = null;
-
-        try {
-            obj = Class.forName(className).newInstance();
-        } catch (InstantiationException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load metadata parser, cannot instantiate " + className, e);
-        } catch (IllegalAccessException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load metadata parser, cannot access " + className, e);
-        } catch (ClassNotFoundException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load metadata parser, class not found: " + className, e);
-        }
-
-        if (obj instanceof MetadataParser) {
-            return (MetadataParser) obj;
-        } else {
-            throw new MapperException("Illegal class to create metadata parser: " + className
-                    + ", must implement MetadataParser interface.");
-        }
-    }
-
-    PropertyMapper loadMapperClass(String typeKey) {
-        String className = properties.getProperty(PREFIX + "." + typeKey + ".mapperClass");
-        if (null == className) {
-            className = PropertyMapperTika.class.getName();
-        }
-
-        Object obj = null;
-
-        try {
-            obj = Class.forName(className).newInstance();
-        } catch (InstantiationException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load mapping configuration, cannot instantiate " + className, e);
-        } catch (IllegalAccessException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load mapping configuration, cannot access " + className, e);
-        } catch (ClassNotFoundException e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Illegal class to load mapping configuration, class not found: " + className, e);
-        }
-
-        if (obj instanceof PropertyMapper) {
-            return (PropertyMapper) obj;
-        } else {
-            throw new MapperException("Illegal class to create property mapper: " + className
-                    + ", must implement PropertyMapper interface.");
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/MapperException.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/MapperException.java
deleted file mode 100644
index 82596ba..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/MapperException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.tools.mapper;

-

-

-

-public class MapperException extends RuntimeException {

-    

-    private static final long serialVersionUID = 1L;

-

-    public MapperException(String message, Throwable cause) {

-        super(message, cause);

-    }

-

-    public MapperException(String message) {

-        super(message);

-    }

-

-

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapper.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapper.java
deleted file mode 100644
index 3564851..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapper.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.tools.mapper;

-

-import java.util.Properties;

-

-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;

-

-/**

- * A property mapper is a class being responsible to map a Content-Type (e.g. image/jpeg)

- * to a CMIS type id and to map and convert properties. Extracted tags are mapped to 

- * CMIS property ids and sometimes type conversion is required (e.g. a string to a date).

- * Classes implementing this interface are not responsible for extracting the metadata 

- * (see MetadataParser). It only reads a configuration and maps properties. The 

- * Configurator will read the configuration properties and instantiate implementations 

- * of this interface (one instance per CMIS type)

- */

-public interface PropertyMapper {

-    

-    /**

-     * initialize a property mapper

-     * @param cfgPrefix

-     *      prefix for all configuration entries in properties file

-     * @param typeKey

-     *      type key in configuration used to identify this type

-     * @param properties

-     *      all properties read from resource mapping.properties

-     * @return

-     *      true, if processing should continue, false if not 

-     */

-    boolean initialize(String cfgPrefix, String typeKey, Properties properties);

-    

-    /**

-     * Reset all internal data to get ready for a new parsing process 

-     */

-    void reset();

-    

-    /**

-     * return the CMIS type id used for this mapper

-     * @return

-     *      CMIS type id to map this content type to or null if not mappable

-     */

-    String getMappedTypeId();

-    

-    /**

-     * return the CMIS property id for a found tag in a file

-     * @param key

-     *      tag (usually parsed from Tika) found in file

-     * @return

-     *      CMIS property this tag gets mapped to, null if not mapped

-     */

-    String getMappedPropertyId(String key);

-    

-    /**

-     * Convert a value parsed from the file to the type the corresponding property expects

-     * @param id

-     *      CMIS property id

-     * @param propertyType

-     *      property type from type definition

-     * @param strValue

-     *      value read from file (Tika always gives a string)

-     * @return

-     *      converted value conforming to the mapped property

-     */

-    Object convertValue(String id, PropertyDefinition<?> propDef, String strValue);

-

-    /**

-     * get all content types handled by this parser

-     * @return

-     *      array with content types

-     */

-    String[] getContentTypes();

-

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperExif.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperExif.java
deleted file mode 100644
index 5272dac..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperExif.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.mapper;
-
-import java.lang.reflect.Array;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.drew.imaging.PhotographicConversions;
-import com.drew.lang.Rational;
-import com.drew.metadata.Directory;
-import com.drew.metadata.Tag;
-import com.drew.metadata.exif.ExifDirectory;
-import com.drew.metadata.exif.GpsDirectory;
-import com.drew.metadata.jpeg.JpegDirectory;
-
-public class PropertyMapperExif extends AbstractPropertyMapper {
-
-    private static final int SECS_PER_HOUR = 3600;
-    private static final int SECS_PER_MINUTE = 60;
-    private static final Logger LOG = LoggerFactory.getLogger(PropertyMapperExif.class.getName());
-    private static final String EXIF_DATE_FORMAT = "yyyy:MM:dd HH:mm:ss";
-
-    /* tag to property id */
-    private Map<String, String> propMapExif = new HashMap<String, String>();
-    /* tag to property id */
-    private Map<String, String> propMapGps = new HashMap<String, String>();
-    /* tag to property id */
-    private Map<String, String> propMapJpeg = new HashMap<String, String>();
-
-    protected Map<String, Object> propMap;
-
-    @Override
-    public boolean initialize(String cfgPrefix, String typeKey, Properties properties) {
-        super.initialize(cfgPrefix, typeKey, properties);
-        reset();
-        dateFormat = EXIF_DATE_FORMAT;
-        buildIdMap("exif", propMapExif, properties);
-        buildIdMap("gps", propMapGps, properties);
-        buildIdMap("jpeg", propMapJpeg, properties);
-
-        return true;
-    }
-
-    public void reset() {
-        propMap = new HashMap<String, Object>();
-    }
-
-    public Map<String, Object> getMappedProperties() {
-        return propMap;
-    }
-
-    private void buildIdMap(String dirKey, Map<String, String> propMap, Properties properties) {
-        Set<String> keys = properties.stringPropertyNames();
-        String prefix = propPrefix + "." + dirKey + ".id.";
-        for (String key : keys) {
-            if (key.startsWith(prefix)) {
-                String id = key.substring(prefix.length());
-                String cmisPropId = properties.getProperty(key);
-                if (null == cmisPropId) {
-                    throw new MapperException("Configuration key " + key + " must have a value assigned");
-                }
-                cmisPropId = cmisPropId.trim();
-                LOG.debug("Found mapping for type " + dirKey + " with " + id + " to " + cmisPropId);
-                propMap.put(id, cmisPropId);
-            }
-        }
-    }
-
-    public String getMappedTypeId(String mimeType) {
-        return cmisTypeId;
-    }
-
-    public String getMappedPropertyId(String key) {
-        return null;
-    }
-
-    public Object convertValue(String id, PropertyDefinition<?> propDef, String strValue) {
-        return null;
-    }
-
-    private String getHexString(int tagType) {
-        StringBuffer hexStr = new StringBuffer();
-        hexStr.append(Integer.toHexString(tagType));
-        while (hexStr.length() < 4) {
-            hexStr.insert(0, "0");
-        }
-        hexStr.insert(0, "0x");
-        return hexStr.toString();
-    }
-
-    /**
-     * store the property id mapped to this tag in a JPEG file in a local map
-     * 
-     * @param dir
-     *            directory of tag
-     * @param tag
-     *            tag
-     */
-
-    public void mapTagAndConvert(Directory dir, Tag tag, TypeDefinition td) {
-        String propId = null;
-        String hexStr = getHexString(tag.getTagType());
-
-        if (GpsDirectory.class.equals(dir.getClass())) {
-            propId = propMapGps.get(hexStr);
-        } else if (ExifDirectory.class.equals(dir.getClass())) {
-            propId = propMapExif.get(hexStr);
-        } else if (JpegDirectory.class.equals(dir.getClass())) {
-            propId = propMapJpeg.get(hexStr);
-        } else {
-            propId = null;
-        }
-
-        if (null != propId) {
-            if (null != td) {
-                PropertyDefinition<?> pd = td.getPropertyDefinitions().get(propId);
-                if (null == pd) {
-                    throw new MapperException("Unknown property id " + propId + " in type definition " + td.getId());
-                }
-                PropertyType pt = pd.getPropertyType();
-                Object convValue = convertValue(dir, tag, pt);
-                propMap.put(propId, convValue);
-            } else {
-                // omit conversion if no type definition is available
-                propMap.put(propId, dir.getObject(tag.getTagType()));
-            }
-        }
-    }
-
-    public Object convertValue(Directory dir, Tag tag, PropertyType propType) {
-
-        Object res = null;
-        String hexStr = getHexString(tag.getTagType());
-
-        // Handle all tags corresponding to their directory specifics
-        if (GpsDirectory.class.equals(dir.getClass())) {
-            // first check for those tags that need special consideration:
-            if (GpsDirectory.TAG_GPS_LONGITUDE == tag.getTagType()) {
-                Object ref = dir.getObject(GpsDirectory.TAG_GPS_LONGITUDE_REF);
-                boolean mustInv = ref != null && ref.equals("W");
-                return convertGps(tag, dir, mustInv);
-            } else if (GpsDirectory.TAG_GPS_LATITUDE == tag.getTagType()) {
-                Object ref = dir.getObject(GpsDirectory.TAG_GPS_LONGITUDE_REF);
-                boolean mustInv = ref != null && ref.equals("S");
-                return convertGps(tag, dir, mustInv);
-            } else {
-                String propId = propMapGps.get(hexStr);
-                LOG.debug("Found GPS tag '" + tag + "\', property mapped is: " + propId);
-                if (null == propId) {
-                    LOG.info("Ignoring EXIF tag '" + tag + "\' no property mapped to this tag.");
-                } else if (propType == null) {
-                    // should not happen and is a configuration error: we have a
-                    // property id but no type
-                    LOG.error("Ignoring EXIF tag '" + tag + "\' no property type mapped to this tag.");
-                }
-                Object src = dir.getObject(tag.getTagType());
-                Class<?> clazz = src.getClass();
-                if (clazz.equals(Rational.class)) {
-                    // expect a CMIS decimal property
-                    if (propType != PropertyType.DECIMAL) {
-                        throw new MapperException("Tag value has type Rational and expected CMIS Decimal, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    double d = ((Rational) src).doubleValue();
-                    res = d;
-                } else if (clazz.equals(String.class)) {
-                    if (propType != PropertyType.STRING && propType != PropertyType.ID && propType != PropertyType.URI
-                            && propType != PropertyType.HTML && propType != PropertyType.DATETIME) {
-                        throw new MapperException("Tag value has type String and expected CMIS String, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    String s = ((String) src);
-                    res = s;
-                } else {
-                    res = null;
-                }
-            }
-        } else if (ExifDirectory.class.equals(dir.getClass())) {
-            // is there a property mapped to this tag?
-            String propId = propMapExif.get(hexStr);
-            LOG.debug("Found EXIF tag '" + tag + "\', property mapped is: " + propId);
-
-            if (null == propId) {
-                LOG.debug("Ignoring EXIF tag '" + tag + "\' no property mapped to this tag.");
-            } else if (propType == null) {
-                // should not happen and is a configuration error: we have a
-                // property id but no type
-                LOG.error("Ignoring EXIF tag '" + tag + "\' no property type mapped to this tag.");
-            } else {
-                Object src = dir.getObject(tag.getTagType());
-                Class<?> clazz = src.getClass();
-                // handle arrays and map them to multi-value properties
-                if (clazz.isArray()) {
-                    LOG.error("Found a multi-value tag " + tag + ": multi value not implemented");
-                    return null;
-                }
-                if (clazz.equals(Rational.class)) {
-                    // expect a CMIS decimal property
-                    if (propType != PropertyType.DECIMAL) {
-                        throw new MapperException("Tag value has type Rational and expected CMIS Decimal, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-
-                    if (tag.getTagType() == ExifDirectory.TAG_SHUTTER_SPEED) {
-                        // requires special handling, see Tika impl.
-                        double apexValue = ((Rational) src).doubleValue();
-                        res = PhotographicConversions.shutterSpeedToExposureTime(apexValue);
-                    } else if (tag.getTagType() == (ExifDirectory.TAG_APERTURE)) {
-                        double aperture = ((Rational) src).doubleValue();
-                        double fStop = PhotographicConversions.apertureToFStop(aperture);
-                        res = fStop;
-                    } else {
-                        // convert to a double
-                        double d = ((Rational) src).doubleValue();
-                        res = d;
-                    }
-                } else if (clazz.equals(Integer.class)) {
-                    if (propType != PropertyType.INTEGER) {
-                        throw new MapperException("Tag value has type Integer and expected CMIS Integer, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    // convert to a long
-                    long l = ((Integer) src).longValue();
-                    res = l;
-                } else if (clazz.equals(String.class)) {
-                    if (propType != PropertyType.STRING && propType != PropertyType.ID && propType != PropertyType.URI
-                            && propType != PropertyType.HTML && propType != PropertyType.DATETIME) {
-                        throw new MapperException("Tag value has type String and expected CMIS String, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-
-                    // convert to a String
-                    if (propType == PropertyType.DATETIME) {
-                        // parse format: 2012:02:25 16:23:16
-                        DateFormat formatter = new SimpleDateFormat(dateFormat);
-                        GregorianCalendar cal;
-                        try {
-                            Date date = formatter.parse((String) src);
-                            // convert date to GreogorianCalendar as CMIS
-                            // expects
-                            cal = new GregorianCalendar();
-                            cal.setTime(date);
-                        } catch (ParseException e) {
-                            LOG.error(e.toString(), e);
-                            throw new MapperException("Unrecognized date format in EXIF date tag: " + src
-                                    + " for tag: " + tag + " expected: yyyy:MM:dd HH:mm:ss", e);
-                        }
-                        res = cal;
-                    } else {
-                        String s = ((String) src);
-                        res = s;
-                    }
-                } else if (clazz.equals(Date.class)) {
-                    if (propType != PropertyType.DATETIME) {
-                        throw new MapperException("Tag value has type Date and expected CMIS DateTime, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    // convert to a String
-                    Date date = ((Date) src);
-                    // convert date to GreogorianCalendar as CMIS expects
-                    GregorianCalendar cal = new GregorianCalendar();
-                    cal.setTime(date);
-                    res = cal;
-                } else if (clazz.equals(Boolean.class)) {
-                    if (propType != PropertyType.BOOLEAN) {
-                        throw new MapperException("Tag value has type Boolean and expected CMIS Boolean, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    // convert to a String
-                    Boolean b = ((Boolean) src);
-                    res = b;
-                } else {
-                    LOG.debug("Tag value has unsupported type: " + clazz.getName() + " for EXIF tag: " + tag);
-                }
-            }
-        } else if (JpegDirectory.class.equals(dir.getClass())) {
-            // is there a property mapped to this tag?
-            String propId = propMapJpeg.get(hexStr);
-            LOG.debug("Found JPEG tag '" + tag + "\', property mapped is: " + propId);
-
-            if (null == propId) {
-                LOG.info("Ignoring JPEG tag '" + tag + "\' no property mapped to this tag.");
-            } else if (propType == null) {
-                // should not happen and is a configuration error: we have a
-                // property id but no type
-                LOG.error("Ignoring JPEG tag '" + tag + "\' no property type mapped to this tag.");
-            } else {
-                Object src = dir.getObject(tag.getTagType());
-                Class<?> clazz = src.getClass();
-
-                if (clazz.equals(Integer.class)) {
-                    if (propType != PropertyType.INTEGER) {
-                        throw new MapperException("Tag value has type Integer and expected CMIS Integer, but found: "
-                                + propType + " for tag: " + tag);
-                    }
-                    // convert to a long
-                    long l = ((Integer) src).longValue();
-                    res = l;
-                } else {
-                    LOG.debug("Tag value has unsupported type: " + clazz.getName() + " for JPEG tag: " + tag);
-                }
-            }
-        }
-
-        return res;
-    }
-
-    private static Object convertGps(Tag tag, Directory dir, boolean mustInvert) {
-        Double res = null;
-        Object src = dir.getObject(tag.getTagType());
-
-        Class<?> stringArrayClass = src.getClass();
-        Class<?> stringArrayComponentType = stringArrayClass.getComponentType();
-        if (!stringArrayClass.isArray() || null == stringArrayComponentType || Array.getLength(src) != 3) {
-            throw new MapperException("GPS coordinate \"" + tag + "\" has unknown type.");
-        }
-        if (!stringArrayComponentType.equals(Rational.class)) {
-            throw new MapperException("GPS coordinate \"" + tag
-                    + "\" has unknown component type (expected Rational, found: " + stringArrayComponentType.getName()
-                    + ")");
-        }
-        // do conversion
-        Rational[] components;
-        components = (Rational[]) src;
-        int deg = components[0].intValue();
-        double min = components[1].doubleValue();
-        double sec = components[2].doubleValue();
-        Double d = (deg + min / SECS_PER_MINUTE + sec / SECS_PER_HOUR);
-        if (d > 0.0 && mustInvert) {
-            d = -d;
-        }
-        res = d;
-        return res;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperTika.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperTika.java
deleted file mode 100644
index 1e560d7..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/mapper/PropertyMapperTika.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.mapper;
-
-import java.text.DateFormatSymbols;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PropertyMapperTika extends AbstractPropertyMapper {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PropertyMapperTika.class.getName());
-    
-    private Map<String, String> propMapTags = new HashMap<String, String> (); // tag to property id
-    private Map<String, String> tokenizerMap = new HashMap<String, String> (); // tag to tokenizer regexp
-
-    public PropertyMapperTika() {
-    }
-    
-    @Override
-    public boolean initialize(String cfgPrefix, String typeKey, Properties properties) {
-        super.initialize(cfgPrefix, typeKey, properties);
-        buildIdMap(typeKey, properties);
-        
-        return true;
-    }
-    
-    public void reset() {
-    }
-    
-    public String getMappedPropertyId(String key) {
-        String propId = propMapTags.get(key);
-        return propId;
-    }
-
-    public Object convertValue(String key, PropertyDefinition<?> propDef, String strValueParam) {
-        String strValue = strValueParam; 
-        Object value = null;
-        PropertyType pt = propDef.getPropertyType();
-        
-        if (null == pt) {
-            value = null;
-        } else if (null != strValue && strValue.length() > 0) {
-            // Tika has a bug and sometimes fails to parse MP3 tags, then generates '\0' in String
-            // see https://issues.apache.org/jira/browse/TIKA-887
-            int lastIllegalPos = -1;
-            for (int i=0; i<strValue.length(); i++) {
-              int c = strValue.codePointAt(i);
-              if (Character.isISOControl(c)) {
-                lastIllegalPos = i;
-            }                  
-            }
-            if (lastIllegalPos >= 0)
-             {
-                strValue = strValue.substring(lastIllegalPos+1); // use remaining part after illegal char
-            }
-
-            switch (pt) {
-            case STRING:
-            case HTML:
-            case URI:
-            case ID:
-                
-                if (propDef.getCardinality() == Cardinality.SINGLE) {
-                    value = strValue;
-                } else {
-                    String tokenizer = tokenizerMap.containsKey(key) ? tokenizerMap.get(key) : "\\W";
-                    String[] result = strValue.split(tokenizer);
-                    List<String> valList = new ArrayList<String>();
-                    for (String s : result) {
-                        valList.add(s.trim());
-                    }
-                    value = valList;
-                }
-                break;
-            case INTEGER:
-                if (propDef.getCardinality() == Cardinality.SINGLE) {
-                    value = Integer.valueOf(strValue);
-                } else {
-                        String tokenizer = tokenizerMap.containsKey(key) ? tokenizerMap.get(key) : "\\W";
-                        String[] result = strValue.split(tokenizer);
-                        List<Integer> valList = new ArrayList<Integer>();
-                        for (String s : result) {
-                            valList.add(Integer.valueOf(s.trim()));
-                        }
-                        value = valList;
-                    }
-                break;
-            case DECIMAL:
-                if (propDef.getCardinality() == Cardinality.SINGLE) {
-                    value = Double.valueOf(strValue);
-                } else {
-                    String tokenizer = tokenizerMap.containsKey(key) ? tokenizerMap.get(key) : "[\\s;:]";                        
-                    String[] result = strValue.split(tokenizer);
-                        List<Double> valList = new ArrayList<Double>();
-                        for (String s : result) {
-                            valList.add(Double.valueOf(s.trim()));
-                        }
-                        value = valList;
-                    }
-                break;
-            case DATETIME:
-                try {
-                    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, new DateFormatSymbols(Locale.US));
-                    if (propDef.getCardinality() == Cardinality.SINGLE) {
-                        Date date = sdf.parse(strValue);
-                        GregorianCalendar cal = new GregorianCalendar();
-                        cal.setTime(date);
-                        value = date;
-                    } else {
-                        String tokenizer = tokenizerMap.containsKey(key) ? tokenizerMap.get(key) : "[;,:]";                        
-                        String[] result = strValue.split(tokenizer);
-                        List<GregorianCalendar> valList = new ArrayList<GregorianCalendar>();
-                        for (String s : result) {
-                            Date date = sdf.parse(s.trim());
-                            GregorianCalendar cal = new GregorianCalendar();
-                            cal.setTime(date);
-                            valList.add(cal);
-                        }
-                        value = valList;
-                    }
-                } catch (ParseException e) {
-                    LOG.error("Could not parse date: " + strValue + " (check date format");
-                    LOG.error(e.toString(), e);
-                    value = null;
-                }
-                break;
-            default:
-                throw new MapperException("unknown property type " + pt);
-            }            
-        }
-        return value;
-    }
-    
-    void buildIdMap(String typeKey, Properties properties) {
-        Set<String> keys = properties.stringPropertyNames(); 
-        String prefix = propPrefix + ".id.";
-        String tokenizerPrefix = propPrefix + ".tokenizer.";
-
-        for (String key : keys) {
-            if (key.startsWith(prefix)) {
-                String id = key.substring(prefix.length());
-                String cmisPropId = properties.getProperty(key);
-                if (null == cmisPropId) {
-                    throw new MapperException("Configuration key " + key + " must have a value assigned");
-                }
-                cmisPropId = cmisPropId.trim();
-                LOG.debug("Found mapping for type " + typeKey + " with " + id + " to " + cmisPropId);
-                propMapTags.put(id,  cmisPropId);
-            }
-            if (key.startsWith(tokenizerPrefix)) {
-                String id = key.substring(tokenizerPrefix.length());
-                String regex = properties.getProperty(key);
-                if (null == regex) {
-                    throw new MapperException("Configuration key " + key + " must have a value assigned");
-                }
-                regex = regex.trim();
-                LOG.debug("Found tokenizer mapping for property " + id + " to " + regex);
-                tokenizerMap.put(id, regex);
-            }
-        }
-    }
-    
-    int getSize() {
-        return propMapTags.size();
-    }
-    
- }
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/AbstractMetadataParser.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/AbstractMetadataParser.java
deleted file mode 100644
index c6b385a..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/AbstractMetadataParser.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.parser;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.tools.mapper.MapperException;
-import org.apache.chemistry.opencmis.tools.mapper.PropertyMapper;
-
-public abstract class AbstractMetadataParser implements MetadataParser {
-    
-    protected Map<String, Object> cmisProperties;
-    protected PropertyMapper mapper = null;
-    
-    protected AbstractMetadataParser() {
-    }
-
-    public void initialize(PropertyMapper mapper, String contentType) {
-        this.mapper = mapper;
-        reset();
-    }
-
-    public Map<String, Object> getCmisProperties() {
-        return cmisProperties;
-    }
-    
-    public void reset() {
-        String typeId = mapper.getMappedTypeId();
-        cmisProperties = new HashMap<String, Object>();
-        mapper.reset();
-
-        if (null == typeId) {
-            throw new MapperException("No CMIS Type configured in this parser.");
-        }
-        cmisProperties.put(PropertyIds.OBJECT_TYPE_ID, typeId);
-    }
-    
-    public String[] getContentTypes() {
-        return mapper.getContentTypes();
-    }
-    
-    public String getMappedTypeId() {
-        return mapper.getMappedTypeId();
-    }
-    
-    public PropertyMapper getMapper() {
-        return mapper;
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParser.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParser.java
deleted file mode 100644
index 0706e9b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParser.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.tools.parser;

-

-import java.io.File;

-import java.util.Map;

-

-import org.apache.chemistry.opencmis.client.api.Session;

-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

-import org.apache.chemistry.opencmis.tools.mapper.MapperException;

-import org.apache.chemistry.opencmis.tools.mapper.PropertyMapper;

-

-/**

- * This interface is used to extract metadata from content. An instance is 

- * responsible to parse the content and extract the metadata. The metadata

- * must be stored in a CMIS property bag. Implementations of this class are

- * created by the Configurator depending on the Content-Type to parse and

- * the corresponding parser configuration

- * 

- */

-public interface MetadataParser {

-    

-    /**

-     * Initialize a parser with a given property mapper and a content type

-     * @param mapper

-     *      PropertyMapper used to map tags to properties and convert values

-     * @param contentType

-     *      content type of file to extract

-     */

-    void initialize(PropertyMapper mapper, String contentType);

-    

-    /**

-     * get ready for parsing a new file

-     */

-    void reset();

-    

-    /**

-     * Parse a file and extract all metadata and store them in a CMIS property bag

-     * @param f

-     *      file to parse

-     * @throws MapperException

-     */

-    void extractMetadata(File f, TypeDefinition td, Session session) throws MapperException;

-    

-    /**

-     * Return all found metadata, called after parsing is completed.

-     * @return

-     *      extracted CMIS properties

-     */

-    Map<String, Object> getCmisProperties();

-    

-    /**

-     * get all content types handled by this parser

-     * @return

-     *      array with content types

-     */

-    String[] getContentTypes();

-    

-    /**

-     * get the CMIS type id used by this type

-     * @return

-     *      CMIS type id

-     */

-    String getMappedTypeId();

-    

-    /**

-     * get the associated property mapper for this CMIS type

-     * 

-     * @return

-     *      property mapper

-     */

-    PropertyMapper getMapper();

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserExif.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserExif.java
deleted file mode 100644
index a4edd26..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserExif.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.parser;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.tools.mapper.MapperException;
-import org.apache.chemistry.opencmis.tools.mapper.PropertyMapperExif;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.drew.imaging.ImageMetadataReader;
-import com.drew.imaging.ImageProcessingException;
-import com.drew.metadata.Directory;
-import com.drew.metadata.Tag;
-
-/**
- * A parser implementation using a lower level interface to get more control about the 
- * EXIF tags than Tika provides
- * 
- */
-public class MetadataParserExif extends AbstractMetadataParser  {
-
-    private static final Logger LOG = LoggerFactory.getLogger(MetadataParserExif.class.getName());
-    
-    public void extractMetadata(File f, TypeDefinition td, Session session) throws MapperException {
-        
-        reset();
-        
-        // see  http://code.google.com/p/metadata-extractor/wiki/GettingStarted
-        try {
-            com.drew.metadata.Metadata metadata = ImageMetadataReader.readMetadata(f);
-            Iterator<?> it = metadata.getDirectoryIterator();
-            while (it.hasNext()) {
-                Directory directory = (com.drew.metadata.Directory) it.next();
-                Iterator<?> tagIt = directory.getTagIterator();
-                while (tagIt.hasNext()) {
-                    Tag tag = (Tag) tagIt.next();
-                    Object o = directory.getObject(tag.getTagType());
-                    LOG.debug("Tag: " + tag + ", value: " + o + ", class: " + o.getClass() + 
-                            ", tag type: " + tag.getTagType() + ", hex-value: " + tag.getTagTypeHex());
-                    if (null != cmisProperties) {
-                        ((PropertyMapperExif)mapper).mapTagAndConvert(directory, tag, td);
-                    }
-                }
-            }
-            Map<String, Object> props = ((PropertyMapperExif)mapper).getMappedProperties();
-            cmisProperties.putAll(props);
-        } catch (ImageProcessingException e) {            
-            LOG.error(e.toString(), e);
-        }
-
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserTika.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserTika.java
deleted file mode 100644
index f9bd5f7..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/parser/MetadataParserTika.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.parser;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.tools.mapper.MapperException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.parser.AutoDetectParser;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.parser.Parser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * A metadata parser using the Apache Tika library
- */
-public class MetadataParserTika extends AbstractMetadataParser {
-
-    private static final Logger LOG = LoggerFactory.getLogger(MetadataParserTika.class.getName());
-
-    public MetadataParserTika() {
-    }
-    
-    public void extractMetadata(File f, TypeDefinition td, Session session) throws MapperException {
-        try {
-            InputStream stream = new FileInputStream(f);
-            Metadata metadata = new Metadata();
-            ContentHandler handler = new DefaultHandler();
-            Parser parser = new AutoDetectParser(); 
-            ParseContext context = new ParseContext();
-            parser.parse(stream, handler, metadata, context);
-
-            reset();
-            
-            for (String key : metadata.names()) {
-                String val = metadata.get(key);
-                LOG.debug("Found metadata \'" + key + "\': " + val);      
-                if (null != cmisProperties) {
-                    String propertyId = mapper.getMappedPropertyId(key);
-                    if (null != propertyId && null != val) {
-                        if (td != null) {
-                            PropertyDefinition<?> propDef = getMappedPropertyDefinition(td.getId(), propertyId, session);                            
-                            Object convVal = mapper.convertValue(propertyId, propDef, val);
-                            if (null != convVal) {
-                                cmisProperties.put(propertyId, convVal);
-                            }
-                        }
-                        else {
-                            cmisProperties.put(propertyId, val); // omit conversion if no type definition is available
-                        }
-                    }
-                }
-            }
-
-        } catch (Exception e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Extracting metadata failed for file " + f.getAbsolutePath(), e);
-        }
-    }
-
-    private PropertyDefinition<?> getMappedPropertyDefinition(String typeId, String propertyId, Session session) throws MapperException {
-        String typeIdMod = typeId;
-        while (null != typeIdMod) {
-            TypeDefinition td = session.getTypeDefinition(typeIdMod);
-            PropertyDefinition<?> propDef = td.getPropertyDefinitions().get(propertyId);
-            if (null != propDef) {
-                return propDef;
-            }
-            typeIdMod = td.getParentTypeId();
-        }
-        throw new MapperException("Mapping error: unknown property "+ propertyId + " in type definition " + typeId);
-    }    
-    
-    public void listMetadata(File f) throws MapperException {
-        try {
-            InputStream stream = new FileInputStream(f);
-            Metadata metadata = new Metadata();
-            ContentHandler handler = new DefaultHandler();
-            Parser parser = new AutoDetectParser(); 
-            ParseContext context = new ParseContext();
-            parser.parse(stream, handler, metadata, context);
-
-            for (String key : metadata.names()) {
-                String val = metadata.get(key);
-                LOG.info("Found metadata \'" + key + "\': " + val);      
-            }
-
-        } catch (Exception e) {
-            LOG.error(e.toString(), e);
-            throw new MapperException("Extracting metadata failed, file not found: " + f.getAbsolutePath(), e);
-        }
-    } 
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/specexamples/SpecExamples.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/specexamples/SpecExamples.java
deleted file mode 100644
index 8199e40..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/java/org/apache/chemistry/opencmis/tools/specexamples/SpecExamples.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.tools.specexamples;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionDataImpl;
-import org.apache.chemistry.opencmis.commons.spi.AclService;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.commons.spi.VersioningService;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SpecExamples {
-
-    private static final int BUFSIZE = 32 * 1024;
-    private static final int SLEEP_TIME = 200;
-    private static final String MULTIFILED_DOCUMENT = "MultifiledDocument";
-    private static final String MULTIFILED_FOLDER_2 = "MultifiledFolder2";
-    private static final String MULTIFILED_FOLDER_1 = "MultifiledFolder1";
-    private static final Logger LOG = LoggerFactory.getLogger(SpecExamples.class.getName());
-    private static final BigInteger TYPE_DEPTH_ALL = BigInteger.valueOf(-1);
-    private static final BigInteger MAX_ITEMS = null;
-    private static final BigInteger SKIP_COUNT = BigInteger.valueOf(0);
-    private static final String TOPLEVEL_TYPE = "DocumentTopLevel";
-    private static final String VERSIONED_TYPE = "VersionableType";
-    private static final String VERSIONED_PROP = "VersionedStringProp";
-    private static final String LOGDIR = System.getProperty("java.io.tmpdir");// +
-                                                                        // File.separator;
-    private static final String ROOT_URL = "http://localhost:8080/inmemory";
-    private static final String ROOT_URL_OASIS = "http://www.example.com:8080/inmemory"; 
-      // required by OASIS rules, add this host to your hosts file
-    
-    static int NO_FILES_LOGGED = 0;
-
-    private String targetDir = System.getProperty("java.io.tmpdir");
-    private BindingsObjectFactory objFactory = new BindingsObjectFactoryImpl();
-    private BindingType bindingType;
-    private String rootFolderId;
-    private String repositoryId;
-    private ObjectService objSvc;
-    private NavigationService navSvc;
-    private RepositoryService repSvc;
-    private VersioningService verSvc;
-    private MultiFilingService multiSvc;
-    private DiscoveryService discSvc;
-    private AclService aclSvc;
-
-    private List<String> idsToDelete = new ArrayList<String>();
-    private String multiFiledDoc;
-    private String multiFiledFolder2;
-    private String changeToken;
-
-    private static final String[] URLS = { ROOT_URL + "/atom", ROOT_URL + "/services", ROOT_URL + "/browser" };
-    private static final BindingType[] BINDINGS = { BindingType.ATOMPUB, BindingType.WEBSERVICES, BindingType.BROWSER };
-
-    public SpecExamples() {
-    }
-
-    public void runAllBindings() {
-        cleanLogFilterDir(); // delete directory where Logging filter writes to
-                             // ensure not to include unwanted files
-
-        for (int i = 0; i < BINDINGS.length; i++) {
-            bindingType = BINDINGS[i];
-            init(URLS[i], BINDINGS[i]);
-            run();
-        }
-        String dirs[] = { BindingType.ATOMPUB.value(), BindingType.WEBSERVICES.value(), BindingType.BROWSER.value() };
-        createZipFile("CMIS-Spec-Examples.zip", dirs);
-
-    }
-
-    public void run() {
-        LOG.debug("Generating spec examples for Binding: " + bindingType.value());
-
-        try {
-            // Repository Service:
-            getRepositories();
-
-            repositoryId = "A1";
-            getRepositoryInfo(); // get root folder id here!
-
-            getTypeDefinition("cmis:folder");
-
-            String docId = getTestDocId();
-            String folderId = getTestFolderId();
-
-            getTypeChildren(TOPLEVEL_TYPE);
-
-            // Navigation Service:
-            getChildren(folderId);
-            getDescendants(folderId);
-            getObjectParents(folderId);
-            removeObjectFromFolder();
-
-            // Object Service:
-            getObject(docId);
-            getAcl(docId);
-            String id1 = createDocument("SampleDocument", TOPLEVEL_TYPE, rootFolderId, VersioningState.NONE);
-            updateProperties(id1, PropertyIds.NAME, "RenamedDocument");
-            getAllowableActions(id1);
-
-            deleteObject(id1);
-
-            // Discovery Service:
-            doQuery();
-            getContentChanges(changeToken);
-
-            // Versioning Service
-            String id2 = prepareVersionSeries("VersionedDocument", VERSIONED_TYPE, rootFolderId);
-            checkOut(id2);
-            checkIn(id2, true, "final version in series");
-            getAllVersions(id2);
-
-            // collect all captured files and store them in a ZIP file
-        } catch (Exception e) {
-            LOG.error("Failed to create spec examples: ", e);
-        }
-
-        // delete all generated objects
-        cleanup();
-    }
-
-    private void init(String url, BindingType bindingType) {
-        LOG.debug("Initializing connection to InMemory server: ");
-        LOG.debug("   Binding: " + bindingType.value());
-        LOG.debug("   URL: " + url);
-
-        Map<String, String> parameters = new HashMap<String, String>();
-        parameters.put(SessionParameter.USER, "admin");
-        parameters.put(SessionParameter.PASSWORD, "admin");
-
-        parameters.put(SessionParameter.BINDING_TYPE, bindingType.value());
-
-        // get factory and create binding
-        CmisBindingFactory factory = CmisBindingFactory.newInstance();
-        CmisBinding binding = null;
-
-        if (bindingType == BindingType.ATOMPUB) {
-            parameters.put(SessionParameter.ATOMPUB_URL, url);
-            binding = factory.createCmisAtomPubBinding(parameters);
-        } else if (bindingType == BindingType.WEBSERVICES) {
-            parameters.put(SessionParameter.WEBSERVICES_ACL_SERVICE, url + "/ACLService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, url + "/DiscoveryService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, url + "/MultiFilingService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, url + "/NavigationService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, url + "/ObjectService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, url + "/PolicyService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, url + "/RelatinshipService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, url + "/RepositoryService?wsdl");
-            parameters.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, url + "/VersioningService?wsdl");
-            binding = factory.createCmisWebServicesBinding(parameters);
-        } else if (bindingType == BindingType.BROWSER) {
-            parameters.put(SessionParameter.BROWSER_URL, url);
-            binding = factory.createCmisBrowserBinding(parameters);
-        } else {
-            LOG.error("Unknown binding type: " + bindingType.value());
-            return;
-        }
-        objFactory = binding.getObjectFactory();
-        repSvc = binding.getRepositoryService();
-        objSvc = binding.getObjectService();
-        navSvc = binding.getNavigationService();
-        verSvc = binding.getVersioningService();
-        multiSvc = binding.getMultiFilingService();
-        discSvc = binding.getDiscoveryService();
-        aclSvc = binding.getAclService();
-
-        // create a folder where target files will be stored:
-        targetDir = bindingType.value();
-        File in = new File(targetDir);
-        deleteDirRecursive(in); // avoid that there are unwanted files from
-                                // previous runs
-        boolean ok = in.mkdir();
-
-        LOG.debug("creating target directory for files: " + ok);
-        LOG.debug("Initializing done. ");
-    }
-
-    private void getRepositories() {
-        LOG.debug("getRepositories()");
-        List<RepositoryInfo> repositories = repSvc.getRepositoryInfos(null);
-        this.repositoryId = repositories.get(0).getId();
-        renameFiles("getRepositoryInfos");
-        LOG.debug("getRepositoryInfo() done.");
-    }
-
-    private void getRepositoryInfo() {
-        LOG.debug("getting repository info for repository " + repositoryId);
-
-        // Because some bindings silently retrieve all repositories on the first
-        // request we call it twice
-        // and use a dummy extension data element to prevent caching
-        RepositoryInfo repoInfo = repSvc.getRepositoryInfo(repositoryId, null);
-        ExtensionDataImpl dummyExt = new ExtensionDataImpl();
-        @SuppressWarnings("serial")
-        List<CmisExtensionElement> extList = new ArrayList<CmisExtensionElement>() {
-            {
-                add(new CmisExtensionElementImpl("foo", "foo", null, "bar"));
-            }
-        };
-        dummyExt.setExtensions(extList);
-        repoInfo = repSvc.getRepositoryInfo(repositoryId, dummyExt);
-
-        LOG.debug("repository id is: " + repoInfo.getId());
-        rootFolderId = repoInfo.getRootFolderId();
-        changeToken = repoInfo.getLatestChangeLogToken();
-        LOG.debug("root folder id is: " + repoInfo.getRootFolderId());
-        renameFiles("getRepositoryInfo");
-        LOG.debug("getRepositoryInfo() done.");
-    }
-
-    private void getObject(String objectId) {
-        LOG.debug("getObject " + objectId);
-        objSvc.getObject(repositoryId, objectId, "*", true /* includeAllowableActions */,
-                IncludeRelationships.NONE /* includeRelationships */, null /* renditionFilter */,
-                false /* includePolicyIds */, true /* includeAcl */, null);
-        renameFiles("getObject");
-        LOG.debug("getObject() done.");
-    }
-
-    private void getChildren(String folderId) {
-        LOG.debug("getChildren " + folderId);
-        navSvc.getChildren(repositoryId, folderId, "*", null /* orderBy */, true /* includeAllowableActions */,
-                IncludeRelationships.NONE, null /* renditionFilter */, true /* includePathSegment */, MAX_ITEMS,
-                SKIP_COUNT, null);
-        renameFiles("getChildren");
-        LOG.debug("getChildren() done.");
-    }
-
-    private void getDescendants(String folderId) {
-        final BigInteger depth = BigInteger.valueOf(3);
-        LOG.debug("getDescendants " + folderId);
-        navSvc.getDescendants(repositoryId, folderId, depth, "*", true /* includeAllowableActions */,
-                IncludeRelationships.NONE, null /* renditionFilter */, true /* includePathSegment */, null);
-        renameFiles("getDescendants");
-        LOG.debug("getDescendants() done.");
-    }
-
-    private void getObjectParents(String folderId) {
-        String multiFiledFolder1;
-        // get object parents first add object to two folders then get parents
-        LOG.debug("getObjectsParents " + folderId);
-        multiFiledFolder1 = createFolderIntern(MULTIFILED_FOLDER_1, BaseTypeId.CMIS_FOLDER.value(), folderId);
-        idsToDelete.add(multiFiledFolder1);
-        multiFiledFolder2 = createFolderIntern(MULTIFILED_FOLDER_2, BaseTypeId.CMIS_FOLDER.value(), folderId);
-        idsToDelete.add(multiFiledFolder2);
-        multiFiledDoc = createDocumentIntern(MULTIFILED_DOCUMENT, BaseTypeId.CMIS_DOCUMENT.value(), multiFiledFolder1,
-                VersioningState.NONE);
-        idsToDelete.add(0, multiFiledDoc); // add at the beginning must be
-                                           // removed before folders!
-        multiSvc.addObjectToFolder(repositoryId, multiFiledDoc, multiFiledFolder2, true, null);
-        navSvc.getObjectParents(repositoryId, multiFiledDoc, "*", false, IncludeRelationships.NONE, null, true, null);
-        renameFiles("getObjectParents");
-        LOG.debug("getObjectParents() done.");
-    }
-
-    private void removeObjectFromFolder() {
-        LOG.debug("removeObjectFromFolder");
-        multiSvc.removeObjectFromFolder(repositoryId, multiFiledDoc, multiFiledFolder2, null);
-        renameFiles("removeObjectFromFolder");
-        try {
-            Thread.sleep(SLEEP_TIME);
-        } catch (InterruptedException e) {
-            LOG.error("Thread interrupted: ", e);
-        }
-        LOG.debug("removeObjectFromFolder() done.");
-    }
-
-    private void doQuery() {
-        LOG.debug("doQuery ");
-        String statement = "SELECT * from cmis:document WHERE IN_FOLDER('" + rootFolderId + "')";
-        discSvc.query(repositoryId, statement, false /* searchAllVersions */, true /* includeAllowableActions */,
-                IncludeRelationships.NONE, null, MAX_ITEMS, SKIP_COUNT, null);
-        renameFiles("doQuery");
-        LOG.debug("doQuery() done.");
-    }
-
-    private void getContentChanges(String token) {
-        LOG.debug("getContentChanges");
-        Holder<String> changeLogToken = new Holder<String>("token");
-        discSvc.getContentChanges(repositoryId, changeLogToken, false, "*", false, false, null, null);
-        renameFiles("getContentChanges");
-        LOG.debug("getContentChanges() done.");
-    }
-
-    private void getTypeChildren(String typeId) {
-        LOG.debug("getTypeChildren " + typeId);
-        repSvc.getTypeChildren(repositoryId, typeId, true /* includePropertyDefinitions */, MAX_ITEMS, SKIP_COUNT, null);
-        renameFiles("getTypeChildren");
-        LOG.debug("getTypeChildren() done.");
-    }
-
-    private String createDocument(String name, String typeId, String folderId, VersioningState versioningState) {
-        LOG.debug("createDocument " + typeId);
-
-        String id = createDocumentIntern(name, typeId, folderId, versioningState);
-        renameFiles("createDocument");
-        LOG.debug("createDocument() done.");
-
-        return id;
-    }
-
-    private String createDocumentIntern(String name, String typeId, String folderId, VersioningState versioningState) {
-        ContentStream contentStream = null;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(objFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(objFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        Properties props = objFactory.createPropertiesData(properties);
-
-        contentStream = createContent();
-
-        String id = null;
-        try {
-            id = objSvc.createDocument(repositoryId, props, folderId, contentStream, versioningState, policies,
-                    addACEs, removeACEs, extension);
-        } catch (CmisBaseException e) {
-            // folder already there, get it:
-            ObjectInFolderList result = navSvc.getChildren(repositoryId, folderId, "*", null, false,
-                    IncludeRelationships.NONE, null, true, MAX_ITEMS, SKIP_COUNT, null);
-
-            List<ObjectInFolderData> children = result.getObjects();
-            LOG.debug(" found " + children.size() + " folders in getChildren()");
-            for (ObjectInFolderData child : children) {
-                String nameChild = (String) child.getObject().getProperties().getProperties().get(PropertyIds.NAME)
-                        .getFirstValue();
-                if (name.equals(nameChild)) {
-                    return child.getObject().getId();
-                }
-            }
-        }
-        return id;
-    }
-
-    private String createFolderIntern(String name, String typeId, String parentFolderId) {
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(objFactory.createPropertyIdData(PropertyIds.NAME, name));
-        properties.add(objFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-        Properties props = objFactory.createPropertiesData(properties);
-
-        String id = null;
-        try {
-            id = objSvc.createFolder(repositoryId, props, parentFolderId, policies, addACEs, removeACEs, extension);
-        } catch (CmisBaseException e) {
-            // folder already there, get it:
-            ObjectInFolderList result = navSvc.getChildren(repositoryId, parentFolderId, "*", null, false,
-                    IncludeRelationships.NONE, null, true, MAX_ITEMS, SKIP_COUNT, null);
-
-            List<ObjectInFolderData> children = result.getObjects();
-            LOG.debug(" found " + children.size() + " folders in getChildren()");
-            for (ObjectInFolderData child : children) {
-                String nameChild = (String) child.getObject().getProperties().getProperties().get(PropertyIds.NAME)
-                        .getFirstValue();
-                if (name.equals(nameChild)) {
-                    return child.getObject().getId();
-                }
-            }
-        }
-        return id;
-    }
-
-    private ContentStream createContent() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = BUFSIZE;
-        byte[] b = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
-                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a }; // 32
-        // Bytes
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int i = 0; i < 1024; i++) {
-                ba.write(b);
-            }
-        } catch (IOException e) {
-            LOG.error("Failed to fill content stream with data", e);
-            return null;
-        }
-        content.setStream(new ByteArrayInputStream(ba.toByteArray()));
-        content.setLength(BigInteger.valueOf(len));
-        return content;
-    }
-
-    private void updateProperties(String id, String propertyId, String propertyValue) {
-        LOG.debug("updateProperties " + id);
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(objFactory.createPropertyStringData(propertyId, propertyValue));
-        Properties newProps = objFactory.createPropertiesData(properties);
-
-        Holder<String> idHolder = new Holder<String>(id);
-        Holder<String> changeTokenHolder = new Holder<String>();
-        objSvc.updateProperties(repositoryId, idHolder, changeTokenHolder, newProps, null);
-        renameFiles("updateProperties");
-        LOG.debug("updateProperties() done.");
-    }
-
-    private void deleteObject(String id) {
-        LOG.debug("deleteObject " + id);
-        objSvc.deleteObject(repositoryId, id, true, null);
-        renameFiles("deleteObject");
-        LOG.debug("deleteObject() done.");
-    }
-
-    private void cleanup() {
-        LOG.debug("cleaning up...");
-        for (String id : idsToDelete) {
-            LOG.debug("deleting object " + id);
-            objSvc.deleteObject(repositoryId, id, true, null);
-        }
-        idsToDelete.clear();
-        LOG.debug("... cleaning up done");
-    }
-
-    /**
-     * enumerate the children of the root folder and return the id of the first
-     * document
-     * 
-     * @return id of first doc in root folder
-     */
-    private String getTestDocId() {
-        return getTestId(BaseTypeId.CMIS_DOCUMENT);
-    }
-
-    /**
-     * enumerate the children of the root folder and return the id of the first
-     * sub-folder
-     * 
-     * @return id of first doc in root folder
-     */
-    private String getTestFolderId() {
-        return getTestId(BaseTypeId.CMIS_FOLDER);
-    }
-
-    private String getTestId(BaseTypeId baseTypeId) {
-        LOG.debug("getTestDocId()");
-        ObjectInFolderList result = navSvc.getChildren(repositoryId, rootFolderId, "*", null, false,
-                IncludeRelationships.NONE, null, true, MAX_ITEMS, SKIP_COUNT, null);
-
-        List<ObjectInFolderData> children = result.getObjects();
-        LOG.debug(" found " + children.size() + " folders in getChildren()");
-        for (ObjectInFolderData child : children) {
-            if (baseTypeId.equals(child.getObject().getBaseTypeId())) {
-                return child.getObject().getId();
-            }
-        }
-        return null;
-    }
-
-    private String prepareVersionSeries(String name, String typeId, String folderId) {
-        String id = createDocumentIntern(name, typeId, folderId, VersioningState.MAJOR);
-        Holder<Boolean> contentCopied = new Holder<Boolean>();
-        Holder<String> idHolder = new Holder<String>(id);
-
-        verSvc.checkOut(repositoryId, idHolder, null, contentCopied);
-        String checkinComment = "Checkin V2.0";
-        verSvc.checkIn(repositoryId, idHolder, true /* major */, null /* properties */, null /* content */,
-                checkinComment, null/* policies */, null/* addAcl */, null /* removeAcl */, null /* extension */);
-
-        verSvc.checkOut(repositoryId, idHolder, null, contentCopied);
-        checkinComment = "Checkin V2.1";
-        verSvc.checkIn(repositoryId, idHolder, false /* major */, null /* properties */, null /* content */,
-                checkinComment, null/* policies */, null/* addAcl */, null /* removeAcl */, null /* extension */);
-
-        return idHolder.getValue();
-    }
-
-    private void checkOut(String id) {
-        LOG.debug("checkOut()");
-        Holder<String> idHolder = new Holder<String>(id);
-        Holder<Boolean> contentCopied = new Holder<Boolean>(true);
-        verSvc.checkOut(repositoryId, idHolder, null, contentCopied);
-        renameFiles("checkOut");
-        LOG.debug("checkOut done.");
-    }
-
-    private void checkIn(String id, boolean major, String checkinComment) {
-        LOG.debug("checkIn()");
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(objFactory.createPropertyStringData(VERSIONED_PROP, "updated value"));
-        Properties newProps = objFactory.createPropertiesData(properties);
-
-        Holder<String> idHolder = new Holder<String>(id);
-        verSvc.checkIn(repositoryId, idHolder, major /* major */, newProps /* properties */, null /* content */,
-                checkinComment, null/* policies */, null/* addAcl */, null /* removeAcl */, null /* extension */);
-        renameFiles("checkIn");
-        LOG.debug("checkIn done.");
-    }
-
-    private void getAllVersions(String id) {
-        LOG.debug("getAllVersions()");
-        verSvc.getAllVersions(repositoryId, id/* object id */, id/* series id */, "*"/* filter */,
-                false /* includeAllowableActions */, null /* extension */);
-        renameFiles("getAllVersions");
-        LOG.debug("getAllVersions done.");
-    }
-
-    private void getAcl(String objectId) {
-        LOG.debug("getting Acl() " + objectId);
-
-        // get old ACL first:
-        Acl oldAcl = aclSvc.getAcl(repositoryId, objectId, true, null);
-
-        // create a new ACL for the test doc
-        List<Ace> aces = new ArrayList<Ace>();
-        aces.add(objFactory.createAccessControlEntry("Alice", Collections.singletonList("cmis:read")));
-        aces.add(objFactory.createAccessControlEntry("Bob", Collections.singletonList("cmis:write")));
-        aces.add(objFactory.createAccessControlEntry("admin", Collections.singletonList("cmis:all")));
-        Acl acl = objFactory.createAccessControlList(aces);
-
-        // add the new ACL and remove the old one
-        aclSvc.applyAcl(repositoryId, objectId, acl, oldAcl, AclPropagation.OBJECTONLY, null);
-
-        aclSvc.getAcl(repositoryId, objectId, true, null);
-        renameFiles("getAcl");
-        LOG.debug("getting Acl() done.");
-    }
-
-    private void getTypeDefinition(String typeId) {
-        LOG.debug("getTypeDefinition " + typeId);
-        repSvc.getTypeDefinition(repositoryId, typeId, null);
-        renameFiles("getTypeDefinition");
-        LOG.debug("getTypeDefinition() done.");
-    }
-
-    private void getTypeDescendants(String typeId) {
-        LOG.debug("getTypeDescendants " + typeId);
-        repSvc.getTypeDescendants(repositoryId, typeId, TYPE_DEPTH_ALL, true /* includePropertyDefinitions */, null);
-        renameFiles("getTypeDescendants");
-        LOG.debug("getTypeDescendants() done.");
-    }
-
-    private void getAllowableActions(String objectId) {
-        LOG.debug("getAllowableActions " + objectId);
-        objSvc.getAllowableActions(repositoryId, objectId, null);
-        renameFiles("getAllowableActions");
-        LOG.debug("getAllowableActions() done.");
-    }
-
-    private void renameFiles(String name) {
-        String fileNameInReq = findLastFile(LOGDIR, "*-request.log");
-        String fileNameInResp = findLastFile(LOGDIR, "*-response.log");
-        if (null == fileNameInReq) {
-            LOG.error("Failed to find captured request file for " + name);
-            return;
-        }
-        if (null == fileNameInResp) {
-            LOG.error("Failed to find captured response file for " + name);
-            return;
-        }
-        File in = new File(fileNameInReq);
-        File out = new File(targetDir + File.separator + name + "-request.log");
-        if (out.exists()) {
-            out.delete();
-        }
-        boolean ok = in.renameTo(out);
-        if (ok) {
-            LOG.debug("Renaming file " + in.getAbsolutePath() + " to " + out.getAbsolutePath() + " succeeded.");
-        } else {
-            LOG.warn("Renaming file " + in.getAbsolutePath() + " to " + out.getAbsolutePath() + " failed.");
-        }
-
-        in = new File(fileNameInResp);
-        out = new File(targetDir + File.separator + name + "-response.log");
-        if (out.exists()) {
-            out.delete();
-        }
-        ok = in.renameTo(out);
-        if (ok) {
-            LOG.debug("Renaming file " + in.getAbsolutePath() + "to " + out.getAbsolutePath() + " succeeded.");
-        } else {
-            LOG.warn("Renaming file " + in.getAbsolutePath() + " to " + out.getAbsolutePath() + " failed.");
-        }
-    }
-
-    private void createZipFile(String zipFileName, String[] dirs) {
-
-        File out = new File(zipFileName);
-        if (out.exists()) {
-            out.delete();
-        }
-
-        FileOutputStream fout = null;
-        ZipOutputStream zout = null;
-        try {
-            fout = new FileOutputStream(zipFileName);
-            zout = new ZipOutputStream(fout);
-            for (String dir : dirs) {
-                File dirToZip = new File(dir);
-                addDirectory(zout, dir, dirToZip);
-            }
-        } catch (Exception e) {
-            LOG.error("Creating ZIP file failed: " + e);
-        } finally {
-            IOUtils.closeQuietly(zout);
-            IOUtils.closeQuietly(fout);
-        }
-    }
-
-    private static void addDirectory(ZipOutputStream zout, String prefix, File sourceDir) throws IOException {
-
-        File[] files = sourceDir.listFiles();
-        LOG.debug("Create Zip, adding directory " + sourceDir.getName());
-
-        if (null != files) {
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].isDirectory()) {
-                    addDirectory(zout, prefix + File.separator + files[i].getName(), files[i]);
-                } else {
-                    LOG.debug("Create Zip, adding file " + files[i].getName());
-                    byte[] buffer = new byte[BUFSIZE];
-                    FileInputStream fin = new FileInputStream(files[i]);
-                    try {
-                        String zipEntryName = prefix + File.separator + files[i].getName();
-                        LOG.debug("   adding entry " + zipEntryName);
-                        zout.putNextEntry(new ZipEntry(zipEntryName));
-
-                        int length;
-                        while ((length = fin.read(buffer)) > 0) {
-                            zout.write(buffer, 0, length);
-                        }
-                    } finally {
-                        IOUtils.closeQuietly(fin);
-                        zout.closeEntry();
-                    }
-                }
-            }
-        }
-    }
-
-    public static void clean() {
-        LOG.debug("Cleaning generated and captured request and response logs...");
-
-        cleanFilesWithFilter(LOGDIR, "*-request.log");
-        cleanFilesWithFilter(LOGDIR, "*-response.log");
-        for (int i = 0; i < BINDINGS.length; i++) {
-            String dir = BINDINGS[i].value();
-
-            cleanFilesWithFilter(dir, "*-request.log");
-            cleanFilesWithFilter(dir, "*-response.log");
-
-            File dirToDelete = new File(dir);
-            boolean ok = dirToDelete.delete();
-            if (ok) {
-                LOG.debug("Deleting dir " + dirToDelete.getAbsolutePath() + " succeeded.");
-            } else {
-                LOG.warn("Deleting dir " + dirToDelete.getAbsolutePath() + " failed.");
-            }
-        }
-        new File("./target/logs/log4j.log").delete();
-        LOG.debug("... done.");
-    }
-
-    private static void cleanFilesWithFilter(String directoryPath, String wildcardFilter) {
-        File dir = new File(directoryPath);
-        FileFilter fileFilter = new WildcardFileFilter(wildcardFilter);
-        File[] files = dir.listFiles(fileFilter);
-        if (files != null) {
-            for (int i = 0; i < files.length; i++) {
-                boolean ok = files[i].delete();
-                LOG.debug("Deleting file: " + files[i] + ", success: " + ok);
-            }
-        }
-    }
-
-    private static String findLastFile(String directoryPath, String wildcardFilter) {
-        File dir = new File(directoryPath);
-        FileFilter fileFilter = new WildcardFileFilter(wildcardFilter);
-        File[] files = dir.listFiles(fileFilter);
-        LOG.debug("Number of files in filter dir " + files.length);
-        if (files.length < NO_FILES_LOGGED) {
-            LOG.warn("WARNING TOO FEW FILES!");
-            // There might be some problem with disk caching, seems that
-            // listFiles
-            // does not always get the most recent state, ugly workaround
-            try {
-                Thread.sleep(SLEEP_TIME);
-            } catch (InterruptedException e) {
-                LOG.error("Thread interrupted: ", e);
-            }
-            files = dir.listFiles(fileFilter);
-            if (files.length < NO_FILES_LOGGED) {
-                LOG.error("WARNING TOO FEW FILES EVEN AFTER SECOND TRY!!!");
-            }
-        }
-        NO_FILES_LOGGED = files.length;
-        Arrays.sort(files);
-        if (files.length == 0) {
-            return null;
-        } else {
-            return files[files.length - 1].getAbsolutePath();
-        }
-    }
-
-    public static void main(String[] args) {
-        if (args.length > 0 && args[0].equals("-clean")) {
-            LOG.debug("Cleaning up generated files...");
-            SpecExamples.clean();
-            LOG.debug("... cleaning up done.");
-        } else {
-            LOG.debug("Starting generating spec examples...");
-            SpecExamples main = new SpecExamples();
-            main.runAllBindings();
-            LOG.debug("... finished generating spec examples.");
-        }
-    }
-
-    private static boolean deleteDirRecursive(File path) {
-        if (path.exists()) {
-            File[] files = path.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].isDirectory()) {
-                    deleteDirRecursive(files[i]);
-                } else {
-                    files[i].delete();
-                }
-            }
-        }
-        return (path.delete());
-    }
-
-    private void cleanLogFilterDir() {
-        File dir = new File(LOGDIR);
-        FileFilter fileFilter = new WildcardFileFilter("*-request.log");
-        File[] files = dir.listFiles(fileFilter);
-        for (File f : files) {
-            f.delete();
-        }
-        fileFilter = new WildcardFileFilter("*-response.log");
-        files = dir.listFiles(fileFilter);
-        for (File f : files) {
-            f.delete();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/log4j.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/log4j.properties
deleted file mode 100644
index 09a25f8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more

-# contributor license agreements.  See the NOTICE file distributed with

-# this work for additional information regarding copyright ownership.

-# The ASF licenses this file to You under the Apache License, Version 2.0

-# (the "License"); you may not use this file except in compliance with

-# the License.  You may obtain a copy of the License at

-# 

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

-# 

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

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

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

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

-# limitations under the License.

-

-

-# sample log4j.properties

-

-log4j.rootCategory=WARN, R, O

-

-# Stdout

-log4j.appender.O=org.apache.log4j.ConsoleAppender

-

-# File

-log4j.appender.R=org.apache.log4j.RollingFileAppender

-log4j.appender.R.File=log4j.log

-

-# Control the maximum log file size

-log4j.appender.R.MaxFileSize=100KB

-

-# Archive log files (one backup file here)

-log4j.appender.R.MaxBackupIndex=1

-log4j.appender.R.layout=org.apache.log4j.PatternLayout

-log4j.appender.O.layout=org.apache.log4j.PatternLayout

-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-

-# log4j.logger.org.apache.chemistry.opencmis.tools=DEBUG

-# log4j.logger.org.apache.chemistry.opencmis.server.support.filter=INFO
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/mapping.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/mapping.properties
deleted file mode 100644
index c8480bf..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tools/src/main/resources/mapping.properties
+++ /dev/null
@@ -1,205 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more

-# contributor license agreements.  See the NOTICE file distributed with

-# this work for additional information regarding copyright ownership.

-# The ASF licenses this file to You under the Apache License, Version 2.0

-# (the "License"); you may not use this file except in compliance with

-# the License.  You may obtain a copy of the License at

-# 

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

-# 

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

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

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

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

-# limitations under the License.

-

-# configuration file how to map file metadata to CMIS types and properties

-

-mapping.contentTypes = image, mp3, pdf, office, email, video

-#default CMIS type id for those files/folders without a special mapping configured

-mapping.contentType.default.document = cmis:document

-mapping.contentType.default.folder = cmis:folder

-

-# configure the MIME types for each key in value of mapping.contentTypes 

-# syntax can be like image/jpeg or image/* or colon separated list image/jpeg:image/tiff:image/png

-mapping.contentType.mp3 = audio/mpeg

-mapping.contentType.image = image/jpeg

-mapping.contentType.pdf = application/pdf

-mapping.contentType.office = application/vnd.openxmlformats-officedocument.presentationml.presentation:application/vnd.openxmlformats-officedocument.presentationml.template:application/vnd.openxmlformats-officedocument.presentationml.slideshow:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:vnd.openxmlformats-officedocument.spreadsheetml.template:application/vnd.openxmlformats-officedocument.wordprocessingml.document:application/vnd.openxmlformats-officedocument.wordprocessingml.template

-mapping.contentType.email = application/vnd.ms-outlook:message/rfc822

-mapping.contentType.video = video/mp4

-

-# CMIS type ids mapped to each key in value of mapping.contentTypes

-mapping.contentType.mp3.typeId = audioFile

-mapping.contentType.image.typeId = exifImage

-mapping.contentType.pdf.typeId = pdfDocument

-mapping.contentType.office.typeId = officeDocument

-mapping.contentType.email.typeId = emailDocument

-mapping.contentType.video.typeId = videoFile

-

-# classes for parsers and property mappers, usually MetadataParserTika and PropertyMapperTika

-# can be overridden with special implementations for other parsers, MetadataParserTika and

-# PropertyMapperTika are the default if not specified

-mapping.contentType.image.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserExif

-mapping.contentType.image.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperExif

-mapping.contentType.mp3.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserTika

-mapping.contentType.mp3.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperTika

-mapping.contentType.pdf.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserTika

-mapping.contentType.pdf.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperTika

-mapping.contentType.office.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserTika

-mapping.contentType.office.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperTika

-mapping.contentType.email.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserTika

-mapping.contentType.email.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperTika

-mapping.contentType.video.parserClass = org.apache.chemistry.opencmis.tools.parser.MetadataParserTika

-mapping.contentType.video.mapperClass = org.apache.chemistry.opencmis.tools.mapper.PropertyMapperTika

-

-# for content types that are not detected by Tika or that you want to treat differently

-# can be overridden depending on the file extension (.xyz to foo/bar)

-mapping.contentType.forceContentType.mp4 = video/mp4

-mapping.contentType.forceContentType.webm = video/webm

-

-# CMIS properties in use

-# a standard syntax for a Tika parser

-mapping.contentType.mp3.id.xmpDM\:artist = artist

-mapping.contentType.mp3.id.xmpDM\:album = album

-mapping.contentType.mp3.id.title = title

-mapping.contentType.mp3.id.xmpDM\:logComment = comment

-mapping.contentType.mp3.id.xmpDM\:genre = genre

-mapping.contentType.mp3.id.xxx = length

-mapping.contentType.mp3.id.xmpDM\:trackNumber = track

-mapping.contentType.mp3.id.xmpDM\:releaseDate = year

-mapping.contentType.mp3.id.xmpDM:composer = composer

-mapping.contentType.mp3.id.yyy = discNumber

-mapping.contentType.mp3.id.xmpDM\:audioCompressor = audioFormat

-mapping.contentType.mp3.id.xmpDM\:audioSampleRate = sampleRate

-mapping.contentType.mp3.id.xmpDM\:audioChannelType = audioChannelType

-mapping.contentType.mp3.id.channels = noChannels

-mapping.contentType.mp3.id.version = compressorVersion

-

-# images tags in exif directory

-# This is an example for a custom parser with a substructure in the tags

-mapping.contentType.image.exif.id.0x0100 = imageWidth

-mapping.contentType.image.exif.id.0x0101 = imageHeight

-mapping.contentType.image.exif.id.0x0102 = bitsPerSample

-mapping.contentType.image.exif.id.0x0103 = compression

-mapping.contentType.image.exif.id.0x0106 = photometricInterpretation

-mapping.contentType.image.exif.id.0x010e = imageDescription

-mapping.contentType.image.exif.id.0x010f = make

-mapping.contentType.image.exif.id.0x0110 = model

-mapping.contentType.image.exif.id.0x0112 = orientation       

-mapping.contentType.image.exif.id.0x011a = xResolution

-mapping.contentType.image.exif.id.0x011b = yResolution

-mapping.contentType.image.exif.id.0x0128 = resolutionUnit

-mapping.contentType.image.exif.id.0x0131 = software

-mapping.contentType.image.exif.id.0x0132 = modifyDate

-mapping.contentType.image.exif.id.0x013b = artist

-mapping.contentType.image.exif.id.0x0213 = yCbCrPositioning  

-mapping.contentType.image.exif.id.0xa406 = sceneCaptureType

-mapping.contentType.image.exif.id.0x8298 = copyright

-mapping.contentType.image.exif.id.0x829a = exposureTime

-mapping.contentType.image.exif.id.0x829d = fNumber

-mapping.contentType.image.exif.id.0x8822 = exposureProgram

-mapping.contentType.image.exif.id.0x8827 = isoSpeed

-mapping.contentType.image.exif.id.0x8825 = gpsAltitudeRef-0x0005

-mapping.contentType.image.exif.id.0x882b = selfTimerMode

-mapping.contentType.image.exif.id.0x882a = timeZoneOffset

-mapping.contentType.image.exif.id.0x9003 = dateTimeOriginal

-mapping.contentType.image.exif.id.0x9004 = createDate

-mapping.contentType.image.exif.id.0x9201 = shutterSpeedValue

-mapping.contentType.image.exif.id.0x9202 = apertureValue

-mapping.contentType.image.exif.id.0x9203 = brightnessValue

-mapping.contentType.image.exif.id.0x9204 = exposureCompensation

-mapping.contentType.image.exif.id.0x9205 = maxApertureValue

-mapping.contentType.image.exif.id.0x9207 = meteringMode

-mapping.contentType.image.exif.id.0x9206 = subjectDistance

-mapping.contentType.image.exif.id.0x9208 = lightSource

-mapping.contentType.image.exif.id.0x9209 = flash

-mapping.contentType.image.exif.id.0x920a = focalLength

-mapping.contentType.image.exif.id.0x9286 = userComment

-mapping.contentType.image.exif.id.0xa001 = colorSpace

-mapping.contentType.image.exif.id.0xa002 = pixelXDimension

-mapping.contentType.image.exif.id.0xa003 = pixelYDimension

-mapping.contentType.image.exif.id.0xa402 = exposureMode

-mapping.contentType.image.exif.id.0xa403 = whiteBalance

-mapping.contentType.image.exif.id.0xa420 = imageUniqueId

-mapping.contentType.image.exif.id.0xa430 = ownerName

-mapping.contentType.image.exif.id.0xa431 = serialNumber

-mapping.contentType.image.exif.id.0x4746 = rating

-mapping.contentType.image.exif.id.0x4749 = ratingPercent

-# gps directory

-mapping.contentType.image.gps.id.0x0001 = gpsLatitudeRef

-mapping.contentType.image.gps.id.0x0002 = gpsLatitude

-mapping.contentType.image.gps.id.0x0003 = gpsLongitudeRef

-mapping.contentType.image.gps.id.0x0004 = gpsLongitude

-mapping.contentType.image.gps.id.0x0005 = gpsAltitudeRef

-mapping.contentType.image.gps.id.0x0006 = gpsAltitude

-# jpeg directory 

-mapping.contentType.image.jpeg.id.0x0000 = dataPrecision

-mapping.contentType.image.jpeg.id.0x0001 = imageHeight

-mapping.contentType.image.jpeg.id.0x0003 = imageWidth

-

-# PDF type

-mapping.contentType.pdf.id.xmpTPg\:NPages = pageCount

-mapping.contentType.pdf.id.title = title

-mapping.contentType.pdf.id.author = author

-mapping.contentType.pdf.id.creator = creator

-mapping.contentType.pdf.id.Keywords = keywords

-mapping.contentType.pdf.id.producer = applicationName

-mapping.contentType.pdf.id.subject = subject

-mapping.contentType.pdf.id.Creation-Date = creationDate

-mapping.contentType.pdf.id.Last-Modified = lastSaveDate

-mapping.contentType.pdf.id.trapped  = trapped

-

-# Office type

-mapping.contentType.office.id.Application-Name = applicationName

-mapping.contentType.office.id.Application-Version = applicationVersion

-mapping.contentType.office.id.Author = author

-mapping.contentType.office.id.Category = category

-mapping.contentType.office.id.Content-Status = contentStatus

-mapping.contentType.office.id.Comments = comments

-mapping.contentType.office.id.Company = company

-mapping.contentType.office.id.Keywords = keywords

-mapping.contentType.office.id.Last-Author = lastAuthor

-mapping.contentType.office.id.Manager = manager

-mapping.contentType.office.id.Notes = notes

-mapping.contentType.office.id.Presentation-Format = presentationFormat

-mapping.contentType.office.id.Revision-Number = revisionNumber

-mapping.contentType.office.id.Template = template

-mapping.contentType.office.id.Version = version

-mapping.contentType.office.id.Character-Count = characterCount

-mapping.contentType.office.id.Character-Count-With-Spaces = characterCountWithSpaces

-mapping.contentType.office.id.Word-Count = wordCount

-mapping.contentType.office.id.Line-Count = lineCount

-mapping.contentType.office.id.Page-Count = pageCount

-mapping.contentType.office.id.Slide-Count = slideCount

-mapping.contentType.office.id.Paragraph-Count = paragraphCount

-mapping.contentType.office.id.Total-Time = totalTime

-mapping.contentType.office.id.Edit-Time = editTime

-mapping.contentType.office.id.Creation-Date = creationDate

-mapping.contentType.office.id.Last-Save-Date = lastSaveDate

-mapping.contentType.office.id.Last-Printed = lastPrinted

-

-#email

-mapping.contentType.email.id.Message-Recipient-Address messageRecipientAddress

-mapping.contentType.email.id.Message-From = from

-mapping.contentType.email.id.Message-To = to

-mapping.contentType.email.tokenizer.to = ;

-mapping.contentType.email.id.Message-Cc = cc

-mapping.contentType.email.tokenizer.cc = ;

-mapping.contentType.email.id.Message-Bcc = bcc

-mapping.contentType.email.tokenizer.bcc = ;

-mapping.contentType.email.id.subject = subject

-mapping.contentType.email.id.Creation-Date = creationDate

-mapping.contentType.email.id.Last-Save-Date = lastSaveDate

-

-#video

-mapping.contentType.video.id.xmpDM\:artist = artist

-mapping.contentType.video.id.xmpDM\:album = album

-mapping.contentType.video.id.title = title

-mapping.contentType.video.id.xmpDM\:logComment = comment

-mapping.contentType.video.id.xmpDM\:genre = genre

-mapping.contentType.video.id.xxx = length

-mapping.contentType.video.id.xmpDM\:trackNumber = track

-mapping.contentType.video.id.xmpDM\:releaseDate = year

-mapping.contentType.video.id.tiff:ImageWidth = imageWidth

-mapping.contentType.video.id.tiff:ImageLength = imageHeight

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/pom.xml b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/pom.xml
deleted file mode 100644
index c6bdfe5..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-    <!--
-        Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
-        with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
-        required by applicable law or agreed to in writing, software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-test-util</artifactId>
-    <name>OpenCMIS Test Utilities</name>
-    
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-    
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-bindings</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexPoint.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexPoint.java
deleted file mode 100644
index ccf260b..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexPoint.java
+++ /dev/null
@@ -1,54 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////

-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-

-package org.apache.chemistry.opencmis.util.content.fractal;

-

-public class ComplexPoint {

-    private double real;

-    private double imaginary;

-

-    public ComplexPoint(double real, double imaginary) {

-        this.real = real;

-        this.imaginary = imaginary;

-    }

-

-    public ComplexPoint() {

-        real = 0.0;

-        imaginary = 0.0;

-    }

-

-    public double getImaginary() {

-        return imaginary;

-    }

-

-    public double getReal() {

-        return real;

-    }

-

-    public void set(ComplexPoint cp) {

-        real = cp.getReal();

-        imaginary = cp.getImaginary();

-    }

-

-    public void set(double cr, double ci) {

-        real = cr;

-        imaginary = ci;

-    }

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexRectangle.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexRectangle.java
deleted file mode 100644
index fa5f049..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/ComplexRectangle.java
+++ /dev/null
@@ -1,91 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////

-////////////////////////////////////////////////////////////////////////////////

-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-

-package org.apache.chemistry.opencmis.util.content.fractal;

-

-

-public class ComplexRectangle {

-    private double iMin; // imaginary

-    private double iMax;

-    private double rMin; // real

-    private double rMax;

-

-    public ComplexRectangle(double r1, double r2, double i1, double i2) {

-        set(r1, r2, i1, i2);

-    }

-

-    public ComplexRectangle() {

-        set(0.0, 0.0, 0.0, 0.0);

-    }

-

-    public ComplexRectangle(ComplexRectangle cr) {

-        set(cr);

-    }

-

-    public double getIMin() {

-        return iMin;

-    }

-

-    public double getIMax() {

-        return iMax;

-    }

-

-    public double getRMin() {

-        return rMin;

-    }

-

-    public double getRMax() {

-        return rMax;

-    }

-

-    public double getHeight() {

-        return iMax - iMin;

-    }

-

-    public double getWidth() {

-        return rMax - rMin;

-    }

-

-    public void set(ComplexRectangle cr) {

-        set(cr.getRMin(), cr.getRMax(), cr.getIMin(), cr.getIMax());

-    }

-

-    public void set(ComplexPoint p1, ComplexPoint p2) {

-        set(p1.getReal(), p2.getReal(), p1.getImaginary(), p2.getImaginary());

-    }

-

-    public void set(double r1, double r2, double i1, double i2) {

-        if (r1 > r2) {

-            rMin = r2;

-            rMax = r1;

-        } else {

-            rMin = r1;

-            rMax = r2;

-        }

-        if (i1 > i2) {

-            iMin = i2;

-            iMax = i1;

-        } else {

-            iMin = i1;

-            iMax = i2;

-        }

-    }

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalCalculator.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalCalculator.java
deleted file mode 100644
index dddfbd4..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalCalculator.java
+++ /dev/null
@@ -1,165 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////

-////////////////////////////////////////////////////////////////////////////////

-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-

-package org.apache.chemistry.opencmis.util.content.fractal;

-

-import java.awt.Color;

-import java.awt.image.BufferedImage;

-import java.util.Arrays;

-

-final class FractalCalculator {

-    private int[] colorMap;

-    protected int[][] noIterations;

-    private double delta;

-    private double iRangeMax;

-    private double iRangeMin;

-    private int maxIterations;

-    private ComplexRectangle newRect;

-    private int numColors;

-    private int imageHeight;

-    private int imageWidth;

-    private double rRangeMax;

-    private double rRangeMin;

-    // For Julia set:

-    private double cJuliaPointR = 0.0; // Real

-    private double cJuliaPointI = 0.0; // Imaginary

-    boolean useJulia = false;

-

-    public FractalCalculator(ComplexRectangle complRect, int maxIters, int imgWidth, int imgHeight, int[] colMap,

-            ComplexPoint juliaPoint) {

-        maxIterations = maxIters;

-        newRect = complRect;

-        imageWidth = imgWidth;

-        imageHeight = imgHeight;

-        colorMap = Arrays.copyOf(colMap, colMap.length);

-        numColors = colorMap.length;

-        rRangeMin = newRect.getRMin();

-        rRangeMax = newRect.getRMax();

-        iRangeMin = newRect.getIMin();

-        iRangeMax = newRect.getIMax();

-        delta = (rRangeMax - rRangeMin) / imageWidth;

-        if (null != juliaPoint) {

-            cJuliaPointR = juliaPoint.getReal();

-            cJuliaPointI = juliaPoint.getImaginary();

-            useJulia = true;

-        }

-    }

-

-    public int[][] calcFractal() {

-        noIterations = new int[ imageWidth ][ imageHeight ];

-

-        // For each pixel...

-        for (int x = 0; x < imageWidth; x++) {

-            for (int y = 0; y < imageHeight; y++) {

-                double zR = rRangeMin + x * delta;

-                double zI = iRangeMin + (imageHeight - y) * delta;

-

-                // Is the point inside the set?

-                if (useJulia) {

-                    noIterations[x][y] = testPointJuliaSet(zR, zI, maxIterations);

-                } else {

-                    noIterations[x][y] = testPointMandelbrot(zR, zI, maxIterations);

-                }            

-            }

-        }

-        return noIterations;

-    }

-

-    public BufferedImage mapItersToColors(int[][] iterations) {

-

-        // Assign a color to every pixel ( x , y ) in the Image, corresponding

-        // to

-        // one point, z, in the imaginary plane ( zr, zi ).

-        BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_3BYTE_BGR );

-

-        // For each pixel...

-        for (int x = 0; x < imageWidth; x++) {

-            for (int y = 0; y < imageHeight; y++) {

-                int color = getColor(iterations[x][y]);

-                image.setRGB(x, y, color);

-            }

-        }

-        return image;

-    }

-

-    protected int getColor(int numIterations) {

-        int c = Color.black.getRGB();

-

-        if (numIterations != 0) {

-            // The point is outside the set. It gets a color based on the number

-            // of iterations it took to know this.

-            int colorNum = (int) (numColors * (1.0 - (float) numIterations / (float) maxIterations));

-            colorNum = (colorNum == numColors) ? 0 : colorNum;

-

-            c = colorMap[colorNum];

-        }

-        return c;

-    }

-

-    private int testPointMandelbrot(double cR, double cI, int maxIterations) {

-        // Is the given complex point, (cR, cI), in the Mandelbrot set?

-        // Use the formula: z <= z*z + c, where z is initially equal to c.

-        // If |z| >= 2, then the point is not in the set.

-        // Return 0 if the point is in the set; else return the number of

-        // iterations it took to decide that the point is not in the set.

-        double zR = cR;

-        double zI = cI;

-

-        for (int i = 1; i <= maxIterations; i++) {

-            // To square a complex number: (a+bi)(a+bi) = a*a - b*b + 2abi

-            double zROld = zR;

-            zR = zR * zR - zI * zI + cR;

-            zI = 2 * zROld * zI + cI;

-

-            // We know that if the distance from z to the origin is >= 2

-            // then the point is out of the set. To avoid a square root,

-            // we'll instead check if the distance squared >= 4.

-            double distSquared = zR * zR + zI * zI;

-            if (distSquared >= 4) {

-                return i;

-            }

-        }

-        return 0;

-    }

-

-    private int testPointJuliaSet(double zR, double zI, int maxIterations) {

-        // Is the given complex point, (zR, zI), in the Julia set?

-        // Use the formula: z <= z*z + c, where z is the point being tested,

-        // and c is the Julia Set constant.

-        // If |z| >= 2, then the point is not in the set.

-        // Return 0 if the point is in the set; else return the number of

-        // iterations it took to decide that the point is not in the set.

-        for (int i = 1; i <= maxIterations; i++) {

-            double zROld = zR;

-            // To square a complex number: (a+bi)(a+bi) = a*a - b*b + 2abi

-            zR = zR * zR - zI * zI + cJuliaPointR;

-            zI = 2 * zROld * zI + cJuliaPointI;

-            // We know that if the distance from z to the origin is >= 2

-            // then the point is out of the set. To avoid a square root,

-            // we'll instead check if the distance squared >= 4.

-            double distSquared = zR * zR + zI * zI;

-            if (distSquared >= 4) {

-                return i;

-            }

-        }

-        return 0;

-    }

-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalGenerator.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalGenerator.java
deleted file mode 100644
index 7b521a6..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/fractal/FractalGenerator.java
+++ /dev/null
@@ -1,484 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*
- * Original code inspired by work from David Lebernight 
- * see: http://www.gui.net/fractal.html
- * email as requested in original source has been sent,
- * to david@leberknight.com, but address is invalid (2012-02-07)
- */
-
-package org.apache.chemistry.opencmis.util.content.fractal;
-
-import java.awt.Color;
-import java.awt.Rectangle;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Random;
-
-import javax.imageio.IIOImage;
-import javax.imageio.ImageIO;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.ImageWriter;
-import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
-import javax.imageio.stream.ImageOutputStream;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FractalGenerator {
-    private static final Logger LOG = LoggerFactory.getLogger(FractalGenerator.class);
-
-    private static final int ZOOM_STEPS_PER_BATCH = 10;
-    private static final int DEFAULT_MAX_ITERATIONS = 33;
-    private static final ComplexRectangle INITIAL_RECT = new ComplexRectangle(-2.1, 1.1, -1.3, 1.3);
-    private static final ComplexRectangle INITIAL_JULIA_RECT = new ComplexRectangle(-2.0, 2.0, -2.0, 2.0);
-    private static final int INITIAL_ITERATIONS = 33;
-
-    // Color:
-    private Map<String, int[]> colorTable;
-    private static final String COLORS_BLACK_AND_WHITE = "black & white";
-    private static final String COLORS_BLUE_ICE = "blue ice";
-    private static final String COLORS_FUNKY = "funky";
-    private static final String COLORS_PASTEL = "pastel";
-    private static final String COLORS_PSYCHEDELIC = "psychedelic";
-    private static final String COLORS_PURPLE_HAZE = "purple haze";
-    private static final String COLORS_RADICAL = "radical";
-    private static final String COLORS_RAINBOW = "rainbow";
-    private static final String COLORS_RAINBOWS = "rainbows";
-    private static final String COLORS_SCINTILLATION = "scintillation";
-    private static final String COLORS_WARPED = "warped";
-    private static final String COLORS_WILD = "wild";
-    private static final String COLORS_ZEBRA = "zebra";
-    private static final String[] colorSchemes = { COLORS_BLACK_AND_WHITE, COLORS_BLUE_ICE, COLORS_FUNKY,
-            COLORS_PASTEL, COLORS_PSYCHEDELIC, COLORS_PURPLE_HAZE, COLORS_RADICAL, COLORS_RAINBOW, COLORS_RAINBOWS,
-            COLORS_SCINTILLATION, COLORS_WARPED, COLORS_WILD, COLORS_ZEBRA };
-    private static final int IMAGE_HEIGHT = 512; // default
-    private static final int IMAGE_WIDTH = 512; // default
-    private static final int NUM_COLORS = 512; // colors per colormap
-    private FractalCalculator calculator;
-    private int previousIterations = 1;
-    private int maxIterations;
-    private String color;
-    private int newRowTile, newColTile;
-    private int parts = 16;
-    private int stepInBatch = 0;
-    private ComplexRectangle rect;
-    private ComplexPoint juliaPoint;
-
-    public FractalGenerator() {
-        reset();
-    }
-
-    private void reset() {
-        rect = new ComplexRectangle(-1.6, -1.2, -0.1, 0.1);
-        juliaPoint = null; // new ComplexPoint();
-        maxIterations = DEFAULT_MAX_ITERATIONS;
-
-        Random ran = new Random();
-        color = colorSchemes[ran.nextInt(colorSchemes.length)];
-        parts = ran.nextInt(13) + 3;
-        LOG.debug("Parts: " + parts);
-        maxIterations = DEFAULT_MAX_ITERATIONS;
-        LOG.debug("Original rect " + ": (" + rect.getRMin() + "r," + rect.getRMax() + "r, " + rect.getIMin() + "i, "
-                + rect.getIMax() + "i)");
-        randomizeRect(rect);
-    }
-
-    public ByteArrayOutputStream generateFractal() throws IOException {
-        ByteArrayOutputStream bos = null;
-
-        if (stepInBatch == ZOOM_STEPS_PER_BATCH) {
-            stepInBatch = 0;
-            reset();
-        }
-
-        ++stepInBatch;
-        LOG.debug("Generating rect no " + stepInBatch + ": (" + rect.getRMin() + "r," + rect.getRMax() + "r, "
-                + rect.getIMin() + "i, " + rect.getIMax() + "i)");
-        LOG.debug("   width: " + rect.getWidth() + " height: " + rect.getHeight());
-        bos = genFractal(rect, juliaPoint);
-
-        double r1New = rect.getWidth() * newColTile / parts + rect.getRMin();
-        double r2New = rect.getWidth() * (newColTile + 1) / parts + rect.getRMin();
-        double i1New = rect.getIMax() - (rect.getHeight() * newRowTile / parts);
-        double i2New = rect.getIMax() - (rect.getHeight() * (newRowTile + 1) / parts);
-        rect.set(r1New, r2New, i1New, i2New);
-        randomizeRect(rect);
-        LOG.debug("Done generating fractals.");
-
-        return bos;
-    }
-
-    private void randomizeRect(ComplexRectangle rect) {
-        double jitterFactor = 0.15; // +/- 15%
-        double ran = Math.random() * jitterFactor + (1.0 - jitterFactor);
-        double width = rect.getWidth() * ran;
-        ran = Math.random() * jitterFactor + (1.0 - jitterFactor);
-        double height = rect.getHeight() * ran;
-        ran = Math.random() * jitterFactor + (1.0 - jitterFactor);
-        double r1 = (rect.getWidth() - width) * ran + rect.getRMin();
-        ran = Math.random() * jitterFactor + (1.0 - jitterFactor);
-        double i1 = (rect.getHeight() - height) * ran + rect.getIMin();
-        rect.set(r1, r1 + width, i1, i1 + height);
-    }
-
-    /**
-     * Create a fractal image as JPEG in memory and return it
-     * 
-     * @param rect
-     *            rectangle of mandelbrot or julia set
-     * @param juliaPoint
-     *            point in Julia set or null
-     * @return byte array with JPEG stream
-     * @throws IOException
-     */
-    public ByteArrayOutputStream genFractal(ComplexRectangle rect, ComplexPoint juliaPoint) throws IOException {
-
-        boolean isJulia = null != juliaPoint;
-        expandRectToFitImage(rect);
-        initializeColors();
-
-        maxIterations = maybeGuessMaxIterations(maxIterations, rect, isJulia);
-        LOG.debug("using " + maxIterations + " iterations.");
-        detectDeepZoom(rect);
-
-        calculator = new FractalCalculator(rect, maxIterations, IMAGE_WIDTH, IMAGE_HEIGHT, getCurrentColorMap(),
-                juliaPoint);
-        int[][] iterations = calculator.calcFractal();
-        BufferedImage image = calculator.mapItersToColors(iterations);
-        findNewRect(image, iterations);
-
-        // create image in memory
-        ByteArrayOutputStream bos = new ByteArrayOutputStream(200 * 1024);
-        ImageOutputStream ios = ImageIO.createImageOutputStream(bos);
-        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
-        ImageWriter imageWriter = writers.next();
-
-        JPEGImageWriteParam params = new JPEGImageWriteParam(Locale.getDefault());
-        params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
-        params.setCompressionQuality(0.9f);
-
-        imageWriter.setOutput(ios);
-        imageWriter.write(null, new IIOImage(image, null, null), params);
-        ios.close();
-
-        return bos;
-    }
-
-    protected int[] getCurrentColorMap() {
-        return colorTable.get(getColor());
-    }
-
-    protected String getColor() {
-        return color;
-    }
-
-    protected void expandRectToFitImage(ComplexRectangle complexRect) {
-        // The complex rectangle must be scaled to fit the pixel image view.
-        // Method: compare the width/height ratios of the two rectangles.
-        double imageWHRatio = 1.0;
-        double complexWHRatio = 1.0;
-        double iMin = complexRect.getIMin();
-        double iMax = complexRect.getIMax();
-        double rMin = complexRect.getRMin();
-        double rMax = complexRect.getRMax();
-        double complexWidth = rMax - rMin;
-        double complexHeight = iMax - iMin;
-
-        if ((IMAGE_WIDTH > 0) && (IMAGE_HEIGHT > 0)) {
-            imageWHRatio = ((double) IMAGE_WIDTH / (double) IMAGE_HEIGHT);
-        }
-
-        if ((complexWidth > 0) && (complexHeight > 0)) {
-            complexWHRatio = complexWidth / complexHeight;
-        } else {
-            return;
-        }
-
-        if (Double.compare(imageWHRatio, complexWHRatio) == 0) {
-            return;
-        }
-
-        if (imageWHRatio < complexWHRatio) {
-            // Expand vertically
-            double newHeight = complexWidth / imageWHRatio;
-            double heightDifference = Math.abs(newHeight - complexHeight);
-            iMin = iMin - heightDifference / 2;
-            iMax = iMax + heightDifference / 2;
-        } else {
-            // Expand horizontally
-            double newWidth = complexHeight * imageWHRatio;
-            double widthDifference = Math.abs(newWidth - complexWidth);
-            rMin = rMin - widthDifference / 2;
-            rMax = rMax + widthDifference / 2;
-        }
-        complexRect.set(rMin, rMax, iMin, iMax);
-    }
-
-    private int guessNewMaxIterations(ComplexRectangle cr, boolean isJulia) {
-        // The higher the zoom factor, the more iterations that are needed to
-        // see
-        // the detail. Guess at a number to produce a cool looking fractal:
-        double zoom = INITIAL_RECT.getWidth() / cr.getWidth();
-        if (zoom < 1.0) {
-            zoom = 1.0; // forces logZoom >= 0
-        }
-        double logZoom = Math.log(zoom);
-        double magnitude = (logZoom / 2.3) - 2.0; // just a guess.
-        if (magnitude < 1.0) {
-            magnitude = 1.0;
-        }
-        double iterations = INITIAL_ITERATIONS * (magnitude * logZoom + 1.0);
-        if (isJulia) {
-            iterations *= 2.0; // Julia sets tend to need more iterations.
-        }
-        return (int) iterations;
-    }
-
-    private int maybeGuessMaxIterations(int maxIterations, ComplexRectangle cr, boolean isJulia) {
-        // If the user did not change the number of iterations, make a guess...
-        if (previousIterations == maxIterations) {
-            maxIterations = guessNewMaxIterations(cr, isJulia);
-        }
-        previousIterations = maxIterations;
-        return maxIterations;
-    }
-
-    private boolean detectDeepZoom(ComplexRectangle cr) {
-        // "Deep Zoom" occurs when the precision provided by the Java type
-        // double
-        // runs out of resolution. The use of BigDecimal is required to fix
-        // this.
-        double deltaDiv2 = cr.getWidth() / ((IMAGE_WIDTH) * 2.0);
-        String min = "" + (cr.getRMin());
-        String minPlus = "" + (cr.getRMin() + deltaDiv2);
-
-        if (Double.valueOf(min).doubleValue() == Double.valueOf(minPlus).doubleValue()) {
-            LOG.warn("Deep Zoom...  Drawing resolution will be degraded ;-(");
-            return true;
-        }
-        return false;
-    }
-
-    private void initializeColors() {
-        colorTable = new HashMap<String, int[]>();
-
-        int red = 255;
-        int green = 255;
-        int blue = 255;
-
-        float hue = (float) 1.0;
-        float saturation = (float) 1.0;
-        float brightness = (float) 1.0;
-
-        // COLORS_BLACK_AND_WHITE:
-        int[] colorMap = new int[NUM_COLORS];
-        for (int colorNum = NUM_COLORS - 1; colorNum >= 0; colorNum--) {
-            colorMap[colorNum] = Color.white.getRGB();
-        }
-        colorTable.put(COLORS_BLACK_AND_WHITE, colorMap);
-
-        // COLORS_BLUE_ICE:
-        blue = 255;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = NUM_COLORS - 1; colorNum >= 0; colorNum--) {
-            red = (int) ((255 * (float) colorNum / NUM_COLORS)) % 255;
-            green = (int) ((255 * (float) colorNum / NUM_COLORS)) % 255;
-            colorMap[colorNum] = new Color(red, green, blue).getRGB();
-        }
-        colorTable.put(COLORS_BLUE_ICE, colorMap);
-
-        // COLORS_FUNKY:
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = NUM_COLORS - 1; colorNum >= 0; colorNum--) {
-            red = (int) ((1024 * (float) colorNum / NUM_COLORS)) % 255;
-            green = (int) ((512 * (float) colorNum / NUM_COLORS)) % 255;
-            blue = (int) ((256 * (float) colorNum / NUM_COLORS)) % 255;
-            colorMap[NUM_COLORS - colorNum - 1] = new Color(red, green, blue).getRGB();
-        }
-        colorTable.put(COLORS_FUNKY, colorMap);
-
-        // COLORS_PASTEL
-        brightness = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 4) / (float) NUM_COLORS) % NUM_COLORS;
-            saturation = ((float) (colorNum * 2) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_PASTEL, colorMap);
-
-        // COLORS_PSYCHEDELIC:
-        saturation = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 5) / (float) NUM_COLORS) % NUM_COLORS;
-            brightness = ((float) (colorNum * 20) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_PSYCHEDELIC, colorMap);
-
-        // COLORS_PURPLE_HAZE:
-        red = 255;
-        blue = 255;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = NUM_COLORS - 1; colorNum >= 0; colorNum--) {
-            green = (int) ((255 * (float) colorNum / NUM_COLORS)) % 255;
-            colorMap[NUM_COLORS - colorNum - 1] = new Color(red, green, blue).getRGB();
-        }
-        colorTable.put(COLORS_PURPLE_HAZE, colorMap);
-
-        // COLORS_RADICAL:
-        saturation = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 7) / (float) NUM_COLORS) % NUM_COLORS;
-            brightness = ((float) (colorNum * 49) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_RADICAL, colorMap);
-
-        // COLORS_RAINBOW:
-        saturation = (float) 1.0;
-        brightness = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = (float) colorNum / (float) NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_RAINBOW, colorMap);
-
-        // COLORS_RAINBOWS:
-        saturation = (float) 1.0;
-        brightness = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 5) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_RAINBOWS, colorMap);
-
-        // COLORS_SCINTILLATION
-        brightness = (float) 1.0;
-        saturation = (float) 1.0;
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 2) / (float) NUM_COLORS) % NUM_COLORS;
-            brightness = ((float) (colorNum * 5) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_SCINTILLATION, colorMap);
-
-        // COLORS_WARPED:
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = NUM_COLORS - 1; colorNum >= 0; colorNum--) {
-            red = (int) ((1024 * (float) colorNum / NUM_COLORS)) % 255;
-            green = (int) ((256 * (float) colorNum / NUM_COLORS)) % 255;
-            blue = (int) ((512 * (float) colorNum / NUM_COLORS)) % 255;
-            colorMap[NUM_COLORS - colorNum - 1] = new Color(red, green, blue).getRGB();
-        }
-        colorTable.put(COLORS_WARPED, colorMap);
-
-        // COLORS_WILD:
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            hue = ((float) (colorNum * 1) / (float) NUM_COLORS) % NUM_COLORS;
-            saturation = ((float) (colorNum * 2) / (float) NUM_COLORS) % NUM_COLORS;
-            brightness = ((float) (colorNum * 4) / (float) NUM_COLORS) % NUM_COLORS;
-            colorMap[colorNum] = Color.HSBtoRGB(hue, saturation, brightness);
-        }
-        colorTable.put(COLORS_WILD, colorMap);
-
-        // COLORS_ZEBRA:
-        colorMap = new int[NUM_COLORS];
-        for (int colorNum = 0; colorNum < NUM_COLORS; colorNum++) {
-            if (colorNum % 2 == 0) {
-                colorMap[colorNum] = Color.white.getRGB();
-            } else {
-                colorMap[colorNum] = Color.black.getRGB();
-            }
-        }
-        colorTable.put(COLORS_ZEBRA, colorMap);
-    }
-
-    private void findNewRect(BufferedImage image, int[][] iterations) {
-
-        int newWidth = image.getWidth() / parts;
-        int newHeight = image.getHeight() / parts;
-        int i = 0, j = 0;
-        int noTiles = (image.getWidth() / newWidth) * (image.getHeight() / newHeight); // equals
-                                                                                       // parts
-                                                                                       // but
-                                                                                       // be
-                                                                                       // aware
-                                                                                       // of
-                                                                                       // rounding
-                                                                                       // errors!
-        double[] stdDev = new double[noTiles];
-
-        for (int y = 0; y + newHeight <= image.getHeight(); y += newHeight) {
-            for (int x = 0; x + newWidth <= image.getWidth(); x += newWidth) {
-                Rectangle subRect = new Rectangle(x, y, newWidth, newHeight);
-                stdDev[i * parts + j] = calcStdDev(iterations, subRect);
-                ++j;
-            }
-            ++i;
-            j = 0;
-        }
-
-        // find tile with greatest std deviation:
-        double max = 0;
-        int index = 0;
-        for (i = 0; i < noTiles; i++) {
-            if (stdDev[i] > max) {
-                index = i;
-                max = stdDev[i];
-            }
-        }
-        newRowTile = index / parts;
-        newColTile = index % parts;
-    }
-
-    private double calcStdDev(int[][] iterations, Rectangle rect) {
-
-        int sum = 0;
-        long sumSquare = 0;
-
-        for (int x = rect.x; x < rect.x + rect.width; x += 1) {
-            for (int y = rect.y; y < rect.y + rect.height; y += 1) {
-                int iters = iterations[x][y];
-                sum += iters;
-                sumSquare += iters * iters;
-            }
-        }
-        int count = rect.width * rect.height;
-        double mean = 0.0;
-
-        mean = (double) sum / count;
-        return Math.sqrt(sumSquare / (count - (mean * mean)));
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsum.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsum.java
deleted file mode 100644
index 6949ea6..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsum.java
+++ /dev/null
@@ -1,1175 +0,0 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one

- * or more contributor license agreements.  See the NOTICE file

- * distributed with this work for additional information

- * regarding copyright ownership.  The ASF licenses this file

- * to you under the Apache License, Version 2.0 (the

- * "License"); you may not use this file except in compliance

- * with the License.  You may obtain a copy of the License at

- *

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

- *

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

- * software distributed under the License is distributed on an

- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

- * KIND, either express or implied.  See the License for the

- * specific language governing permissions and limitations

- * under the License.

- */

-package org.apache.chemistry.opencmis.util.content.loremipsum;

-

-import java.io.IOException;

-import java.io.StringWriter;

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.HashMap;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Map;

-import java.util.Random;

-import java.util.Set;

-

-/**

- * A generator of lorem ipsum text ported from the Python implementation at

- * http://code.google.com/p/lorem-ipsum-generator/. Note: original code licensed

- * under the BSD license

- * 

- */

-public class LoremIpsum {

-

-    private static class WordLengthPair {

-        public int len1;

-        public int len2;

-

-        public WordLengthPair(int len1, int len2) {

-            this.len1 = len1;

-            this.len2 = len2;

-        }

-

-        @Override

-        public String toString() {

-            return "WordLengthPair: len1: " + len1 + ", len2: " + len2;

-        }

-

-        @Override

-        public boolean equals(Object other) {

-            if (this == null || other == null) {

-                return false;

-            }

-            if (other.getClass() != getClass()) {

-                return false;

-            }

-

-            return (len1 == ((WordLengthPair) other).len1 && len2 == ((WordLengthPair) other).len2);

-        }

-

-        @Override

-        public int hashCode() {

-            return len1 ^ len2;

-        }

-    }

-

-    /**

-     * Delimiters that end sentences.

-     * 

-     * @type {Array.<string>}

-     * @private

-     */

-    private static final String DELIMITERS_SENTENCES[] = { ".", "?", "!" };

-

-    /**

-     * Regular expression for splitting a text into sentences.

-     * 

-     * @type {RegExp}

-     * @private

-     */

-    private static final String SENTENCE_SPLIT_REGEX = "[\\.\\?\\!]";

-

-    /**

-     * Delimiters that end words.

-     * 

-     * @type {Array.<string>}

-     * @private

-     */

-    private static final String DELIMITERS_WORDS[] = { ".", ",", "?", "!" };

-

-    /**

-     * Regular expression for splitting text into words.

-     * 

-     * @type {RegExp}

-     * @private

-     */

-    private static final String WORD_SPLIT_REGEX = "\\s";

-

-    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

-

-    /**

-     * Words that can be used in the generated output. Maps a word-length to a

-     * list of words of that length.

-     * 

-     * @type {goog.structs.Map}

-     * @private

-     */

-    private Map<Integer, List<String>> words;

-

-    /**

-     * Chains of three words that appear in the sample text Maps a pair of

-     * word-lengths to a third word-length and an optional piece of trailing

-     * punctuation (for example, a period, comma, etc.).

-     * 

-     * @type {goog.structs.Map}

-     * @private

-     */

-    private Map<WordLengthPair, List<WordInfo>> chains;

-

-    /**

-     * Pairs of word-lengths that can appear at the beginning of sentences.

-     * 

-     * @type {Array}

-     */

-    private List<WordLengthPair> starts;

-

-    /**

-     * Average sentence length in words.

-     * 

-     * @type {number}

-     * @private

-     */

-    private double sentenceMean;

-

-    /**

-     * Sigma (sqrt of Objectiance) for the sentence length in words.

-     * 

-     * @type {number}

-     * @private

-     */

-    private double sentenceSigma;

-

-    /**

-     * Average paragraph length in sentences.

-     * 

-     * @type {number}

-     * @private

-     */

-    private double paragraphMean;

-

-    /**

-     * Sigma (sqrt of variance) for the paragraph length in sentences.

-     * 

-     * @type {number}

-     * @private

-     */

-    private double paragraphSigma;

-

-    /**

-     * Sample that the generated text is based on .

-     * 

-     * @type {string}

-     */

-    private String sample = SAMPLE;

-

-    /**

-     * Dictionary of words.

-     * 

-     * @type {string}

-     */

-    private String dictionary = DICT;

-

-    /**

-     * Picks a random element of the array.

-     * 

-     * @param {Array} array The array to pick from.

-     * @return {*} An element from the array.

-     */

-    private WordInfo randomChoice(WordInfo[] array) {

-        return array[randomInt(array.length)];

-    };

-

-    private String randomChoice(String[] array) {

-        return array[randomInt(array.length)];

-    };

-

-    private int randomInt(int length) {

-        return randomGenerator.nextInt(length);

-    }

-

-    private static class WordInfo {

-        int len;

-        String delim;

-    }

-

-    private Random randomGenerator = new Random();

-

-    /**

-     * Generates random strings of "lorem ipsum" text, based on the word

-     * distribution of a sample text, using the words in a dictionary.

-     * 

-     * @constructor

-     */

-    public LoremIpsum() {

-        generateChains(this.sample);

-        generateStatistics(this.sample);

-        initializeDictionary(this.dictionary);

-    };

-

-    public LoremIpsum(String sample, String dictionary) {

-        this.sample = sample;

-        this.dictionary = dictionary;

-        generateChains(this.sample);

-        generateStatistics(this.sample);

-        initializeDictionary(this.dictionary);

-    };

-

-    public LoremIpsum(String sample, String[] newDictionary) {

-        this.sample = sample;

-        this.dictionary = null;

-        generateChains(this.sample);

-        generateStatistics(this.sample);

-        initializeDictionary(newDictionary);

-    };

-

-    public LoremIpsum(String sample) {

-        this.sample = sample;

-        String[] dictWords = filterNotEmptyOrWhiteSpace(sample.split("[^\\p{L}]"/* "\\W" */)).toArray(new String[0]);

-        Set<String> dict = new HashSet<String>(Arrays.asList(dictWords));

-        dictWords = dict.toArray(new String[0]);

-        Arrays.sort(dictWords);

-

-        generateChains(this.sample);

-        generateStatistics(this.sample);

-        initializeDictionary(dictWords);

-    };

-

-    /**

-     * Generates a single lorem ipsum paragraph, of random length.

-     * 

-     * @param {boolean} optStartWithLorem Whether to start the sentence with the

-     *        standard "Lorem ipsum..." first sentence.

-     * @return {string} The generated sentence.

-     */

-    public String generateParagraph(boolean optStartWithLorem) {

-        // The length of the paragraph is a normally distributed random

-        // Objectiable.

-        Double paragraphLengthDbl = randomNormal(this.paragraphMean, this.paragraphSigma);

-        int paragraphLength = Math.max((int) Math.floor(paragraphLengthDbl), 1);

-

-        // Construct a paragraph from a number of sentences.

-        List<String> paragraph = new ArrayList<String>();

-        boolean startWithLorem = optStartWithLorem;

-        while (paragraph.size() < paragraphLength) {

-            String sentence = this.generateSentence(startWithLorem);

-            paragraph.add(sentence);

-            startWithLorem = false;

-        }

-

-        StringBuffer result = new StringBuffer();

-        // Form the paragraph into a string.

-        for (String sentence : paragraph) {

-            result.append(sentence);

-            result.append(" ");

-        }

-        return result.toString();

-    }

-

-    /**

-     * Generates a single sentence, of random length.

-     * 

-     * @param {boolean} optStartWithLorem Whether to start the setnence with the

-     *        standard "Lorem ipsum..." first sentence.

-     * @return {string} The generated sentence.

-     */

-    public String generateSentence(boolean optStartWithLorem) {

-        if (this.chains.size() == 0 || this.starts.size() == 0) {

-            throw new RuntimeException("No chains created (Invalid sample text?)");

-        }

-

-        if (this.words.size() == 0) {

-            throw new RuntimeException("No dictionary");

-        }

-

-        // The length of the sentence is a normally distributed random

-        // Objectiable.

-        double sentenceLengthDbl = randomNormal(this.sentenceMean, this.sentenceSigma);

-        int sentenceLength = Math.max((int) Math.floor(sentenceLengthDbl), 1);

-

-        String wordDelimiter = ""; // Defined here in case while loop doesn't

-                                   // run

-

-        // Start the sentence with "Lorem ipsum...", if desired

-        List<String> sentence;

-

-        if (optStartWithLorem) {

-            String lorem = "lorem ipsum dolor sit amet, consecteteur adipiscing elit";

-            sentence = new ArrayList<String>(Arrays.asList(splitWords(lorem)));

-            if (sentence.size() > sentenceLength) {

-                sentence.subList(0, sentenceLength);

-            }

-            String lastWord = sentence.get(sentence.size() - 1);

-            String lastChar = lastWord.substring(lastWord.length() - 1);

-            if (contains(DELIMITERS_WORDS, lastChar)) {

-                wordDelimiter = lastChar;

-            }

-        } else {

-            sentence = new ArrayList<String>();

-        }

-

-        WordLengthPair previous = new WordLengthPair(0, 0);

-

-        // Generate a sentence from the "chains"

-        while (sentence.size() < sentenceLength) {

-            // If the current starting point is invalid, choose another randomly

-            if (!this.chains.containsKey(previous)) {

-                previous = this.chooseRandomStart_();

-            }

-

-            // Choose the next "chain" to go to. This determines the next word

-            // length we use, and whether there is e.g. a comma at the end of

-            // the word.

-            WordInfo chain = randomChoice(this.chains.get(previous).toArray(new WordInfo[0]));

-            int wordLength = chain.len;

-

-            // If the word delimiter contained in the chain is also a sentence

-            // delimiter, then we don"t include it because we don"t want the

-            // sentence to end prematurely (we want the length to match the

-            // sentence_length value).

-            if (contains(DELIMITERS_SENTENCES, chain.delim)) {

-                wordDelimiter = "";

-            } else {

-                wordDelimiter = chain.delim;

-            }

-

-            // Choose a word randomly that matches (or closely matches) the

-            // length we're after.

-            int closestLength = chooseClosest(this.words.keySet().toArray(new Integer[0]), wordLength);

-            String word = randomChoice(this.words.get(closestLength).toArray(new String[0]));

-

-            sentence.add(word + wordDelimiter);

-            previous = new WordLengthPair(previous.len2, wordLength);

-

-        }

-

-        // Finish the sentence off with capitalisation, a period and

-        // form it into a string

-        StringBuffer result = new StringBuffer();

-        for (String s : sentence) {

-            result.append(s);

-            result.append(" ");

-        }

-        result.deleteCharAt(result.length() - 1);

-

-        result.replace(0, 1, result.substring(0, 1).toUpperCase());

-        int strLen = result.length() - 1;

-        if (wordDelimiter.length() > 0 && wordDelimiter.charAt(0) == result.charAt(strLen)) {

-            result.deleteCharAt(strLen);

-        }

-        result.append(".");

-        return result.toString();

-    }

-

-    public String getSample() {

-        return sample;

-    }

-

-    public void setSample(String sample) {

-        this.sample = sample;

-        generateChains(this.sample);

-        generateStatistics(this.sample);

-    }

-

-    public String getDictionary() {

-        return dictionary;

-    }

-

-    public void setDictionary(String dictionary) {

-        this.dictionary = dictionary;

-        initializeDictionary(this.dictionary);

-    }

-

-    /**

-     * Generates multiple paragraphs of text, with begin before the paragraphs,

-     * end after the paragraphs, and between between each two paragraphs.

-     */

-    private String generateMarkupParagraphs(String begin, String end, String between, int quantity,

-            boolean startWithLorem) {

-

-        StringBuffer text = new StringBuffer();

-

-        text.append(begin);

-        String para = generateParagraph(startWithLorem);

-        text.append(para);

-        while (text.length() < quantity) {

-            para = generateParagraph(false);

-            text.append(para);

-            if (text.length() < quantity) {

-                text.append(between);

-            }

-        }

-

-        text.append(end);

-        return text.toString();

-    }

-

-    /**

-     * Generates multiple paragraphs of text, with begin before the paragraphs,

-     * end after the paragraphs, and between between each two paragraphs.

-     * 

-     * @throws IOException

-     */

-    private void generateMarkupParagraphs(Appendable writer, String begin, String end, String between, int quantity,

-            boolean startWithLorem) throws IOException {

-

-        int len = begin.length();

-        writer.append(begin);

-        String para = generateParagraph(startWithLorem);

-        len += para.length();

-        writer.append(para);

-        while (len < quantity) {

-            para = generateParagraph(false);

-            len += para.length();

-            writer.append(para);

-            if (len < quantity) {

-                writer.append(between);

-                len += para.length();

-            }

-        }

-

-        writer.append(end);

-    }

-

-    /**

-     * Generates multiple sentences of text, with begin before the sentences,

-     * end after the sentences, and between between each two sentences.

-     */

-    private String generateMarkupSentences(String begin, String end, String between, int quantity,

-            boolean startWithLorem) {

-

-        StringBuffer text = new StringBuffer();

-        text.append(begin);

-        String sentence = generateSentence(startWithLorem);

-        text.append(sentence);

-

-        while (text.length() < quantity) {

-            sentence = generateSentence(false);

-            text.append(sentence);

-            if (text.length() < quantity) {

-                text.append(between);

-            }

-        }

-

-        text.append(end);

-        return text.toString();

-    }

-

-    /**

-     * Generates the chains and starts values required for sentence generation.

-     * 

-     * @param {string} sample The same text.

-     * @private

-     */

-    private void generateChains(String sample) {

-

-        String[] words = splitWords(sample);

-        WordInfo[] wordInfos = generateWordInfo(words);

-        WordLengthPair previous = new WordLengthPair(0, 0);

-        List<WordLengthPair> starts = new ArrayList<WordLengthPair>();

-        List<String> delimList = Arrays.asList(DELIMITERS_SENTENCES);

-        Map<WordLengthPair, List<WordInfo>> chains = new HashMap<WordLengthPair, List<WordInfo>>();

-

-        for (WordInfo wi : wordInfos) {

-            if (wi.len == 0) {

-                continue;

-            }

-

-            List<WordInfo> value = chains.get(previous);

-            if (null == value) {

-                chains.put(previous, new ArrayList<WordInfo>());

-            } else {

-                chains.get(previous).add(wi);

-            }

-

-            if (delimList.contains(wi.delim)) {

-                starts.add(previous);

-            }

-

-            previous.len1 = previous.len2;

-            previous.len2 = wi.len;

-        }

-

-        if (chains.isEmpty()) {

-            throw new RuntimeException("Invalid sample text.");

-        }

-

-        this.chains = chains;

-        this.starts = starts;

-    }

-

-    /**

-     * Calculates the mean and standard deviation of sentence and paragraph

-     * lengths.

-     * 

-     * @param {string} sample The same text.

-     * @private

-     */

-    private void generateStatistics(String sample) {

-        this.generateSentenceStatistics(sample);

-        this.generateParagraphStatistics(sample);

-    }

-

-    /**

-     * Calculates the mean and standard deviation of the lengths of sentences

-     * (in words) in a sample text.

-     * 

-     * @param {string} sample The same text.

-     * @private

-     */

-    private void generateSentenceStatistics(String sample) {

-        List<String> sentences = filterNotEmptyOrWhiteSpace(splitSentences(sample));

-        int sentenceLengths[] = new int[sentences.size()];

-        for (int i = 0; i < sentences.size(); i++) {

-            String[] words = splitWords(sentences.get(i));

-            sentenceLengths[i] = words.length;

-        }

-        this.sentenceMean = mean(sentenceLengths);

-        this.sentenceSigma = sigma(sentenceLengths);

-    }

-

-    /**

-     * Calculates the mean and standard deviation of the lengths of paragraphs

-     * (in sentences) in a sample text.

-     * 

-     * @param {string} sample The same text.

-     * @private

-     */

-    private void generateParagraphStatistics(String sample) {

-        List<String> paragraphs = filterNotEmptyOrWhiteSpace(splitParagraphs(sample));

-

-        int paragraphLengths[] = new int[paragraphs.size()];

-        for (int i = 0; i < paragraphs.size(); i++) {

-            String[] sentences = splitSentences(paragraphs.get(i));

-            paragraphLengths[i] = sentences.length;

-        }

-

-        this.paragraphMean = mean(paragraphLengths);

-        this.paragraphSigma = sigma(paragraphLengths);

-    }

-

-    /**

-     * Sets the generator to use a given selection of words for generating

-     * sentences with.

-     * 

-     * @param {string} dictionary The dictionary to use.

-     */

-    private void initializeDictionary(String dictionary) {

-        String[] dictionaryWords = splitWords(dictionary);

-        initializeDictionary(dictionaryWords);

-    }

-

-    private void initializeDictionary(String[] dictionaryWords) {

-        words = new HashMap<Integer, List<String>>();

-        for (String word : dictionaryWords) {

-            List<String> wordWithLen = words.get(word.length());

-            if (null == wordWithLen) {

-                List<String> list = new ArrayList<String>();

-                list.add(word);

-                words.put(word.length(), list);

-            } else {

-                wordWithLen.add(word);

-            }

-        }

-

-        if (words.size() == 0) {

-            throw new RuntimeException("Invalid dictionary.");

-        }

-    }

-

-    /**

-     * Picks a random starting chain.

-     * 

-     * @return {string} The starting key.

-     * @private

-     */

-    private WordLengthPair chooseRandomStart_() {

-        Set<WordLengthPair> keys = chains.keySet();

-        Set<WordLengthPair> validStarts = new HashSet<WordLengthPair>(starts);

-        validStarts.retainAll(keys);

-        int index = randomInt(validStarts.size());

-        WordLengthPair wlPair = validStarts.toArray(new WordLengthPair[0])[index];

-        return wlPair;

-    }

-

-    /**

-     * Splits a piece of text into paragraphs.

-     * 

-     * @param {string} text The text to split.

-     * @return {Array.<string>} An array of paragraphs.

-     * @private

-     */

-

-    static String[] splitParagraphs(String text) {

-        return filterNotEmptyOrWhiteSpace(text.split("\n")).toArray(new String[0]);

-    }

-

-    /**

-     * Splits a piece of text into sentences.

-     * 

-     * @param {string} text The text to split.

-     * @return {Array.<string>} An array of sentences.

-     * @private

-     */

-    static String[] splitSentences(String text) {

-        return filterNotEmptyOrWhiteSpace(text.split(SENTENCE_SPLIT_REGEX)).toArray(new String[0]);

-    }

-

-    /**

-     * Splits a piece of text into words..

-     * 

-     * @param {string} text The text to split.

-     * @return {Array.<string>} An array of words.

-     * @private

-     */

-    static String[] splitWords(String text) {

-        return filterNotEmptyOrWhiteSpace(text.split(WORD_SPLIT_REGEX)).toArray(new String[0]);

-    }

-

-    /**

-     * Find the number in the list of values that is closest to the target.

-     * 

-     * @param {Array.<number>} values The values.

-     * @param {number} target The target value.

-     * @return {number} The closest value.

-     */

-    static int chooseClosest(Integer[] values, int target) {

-        int closest = values[0];

-        for (int value : values) {

-            if (Math.abs(target - value) < Math.abs(target - closest)) {

-                closest = value;

-            }

-        }

-

-        return closest;

-    }

-

-    /**

-     * Gets info about a word used as part of the lorem ipsum algorithm.

-     * 

-     * @param {string} word The word to check.

-     * @return {Array} A two element array. The first element is the size of the

-     *         word. The second element is the delimiter used in the word.

-     * @private

-     */

-    private static WordInfo getWordInfo(String word) {

-        WordInfo ret = new WordInfo();

-        for (String delim : DELIMITERS_WORDS) {

-            if (word.endsWith(delim)) {

-                ret.len = word.length() - delim.length();

-                ret.delim = delim;

-                return ret;

-            }

-        }

-        ret.len = word.length();

-        ret.delim = "";

-        return ret;

-    }

-

-    private static WordInfo[] generateWordInfo(String[] words) {

-        WordInfo[] result = new WordInfo[words.length];

-        int i = 0;

-        for (String word : words) {

-            result[i++] = getWordInfo(word);

-        }

-        return result;

-    }

-

-    /**

-     * Constant used for {@link #randomNormal_}.

-     * 

-     * @type {number}

-     * @private

-     */

-    private static final double NV_MAGICCONST_ = 4 * Math.exp(-0.5) / Math.sqrt(2.0);

-

-    /**

-     * Generates a random number for a normal distribution with the specified

-     * mean and sigma.

-     * 

-     * @param {number} mu The mean of the distribution.

-     * @param {number} sigma The sigma of the distribution.

-     * @private

-     */

-    private static double randomNormal(double mu, double sigma) {

-        double z = 0.0d;

-        while (true) {

-            double u1 = Math.random();

-            double u2 = 1.0d - Math.random();

-            z = NV_MAGICCONST_ * (u1 - 0.5d) / u2;

-            double zz = z * z / 4.0d;

-            if (zz <= -Math.log(u2)) {

-                break;

-            }

-        }

-        return mu + z * sigma;

-    }

-

-    /**

-     * Returns the text if it is not empty or just whitespace.

-     * 

-     * @param {string} text the text to check.

-     * @return {boolean} Whether the text is neither empty nor whitespace.

-     * @private

-     */

-    private static List<String> filterNotEmptyOrWhiteSpace(String[] arr) {

-        List<String> result = new ArrayList<String>();

-        for (String s : arr) {

-            String trims = s.trim();

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

-                result.add(trims);

-            }

-        }

-        return result;

-    }

-

-    public static double mean(int[] values) {

-        return ((double) sum(values)) / ((double) (Math.max(values.length, 1)));

-    }

-

-    public static double mean(double[] values) {

-        return sum(values) / ((Math.max(values.length, 1)));

-    }

-

-    public static double variance(double[] values) {

-        double[] squared = new double[values.length];

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

-            squared[i] = values[i] * values[i];

-        }

-

-        double meanVal = mean(values);

-        return mean(squared) - (meanVal * meanVal);

-    }

-

-    public static double sigma(int[] values) {

-        double[] d = new double[values.length];

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

-            d[i] = values[i];

-        }

-

-        return sigma(d);

-    }

-

-    public static double sigma(double[] values) {

-        return Math.sqrt(variance(values));

-    }

-

-    public static int sum(int[] values) {

-        int sum = 0;

-        for (int val : values) {

-            sum += val;

-        }

-        return sum;

-    }

-

-    public static double sum(double[] values) {

-        double sum = 0.0d;

-        for (double val : values) {

-            sum += val;

-        }

-        return sum;

-    }

-

-    public static boolean contains(String[] array, String val) {

-        for (String s : array) {

-            if (s.equals(val)) {

-                return true;

-            }

-        }

-        return false;

-    }

-

-    /* for unit testing */

-    double getSentenceMean() {

-        return sentenceMean;

-    }

-

-    double getSentenceSigma() {

-        return sentenceSigma;

-    }

-

-    double getParagraphMean() {

-        return paragraphMean;

-    }

-

-    double getParagraphSigma() {

-        return paragraphSigma;

-    }

-

-    /**

-     * Dictionary of words for lorem ipsum.

-     * 

-     * @type {string}

-     * @private

-     */

-    private static final String DICT = "a ac accumsan ad adipiscing aenean aliquam aliquet amet ante "

-            + "aptent arcu at auctor augue bibendum blandit class commodo "

-            + "condimentum congue consectetuer consequat conubia convallis cras "

-            + "cubilia cum curabitur curae cursus dapibus diam dictum dictumst "

-            + "dignissim dis dolor donec dui duis egestas eget eleifend elementum "

-            + "elit eni enim erat eros est et etiam eu euismod facilisi facilisis "

-            + "fames faucibus felis fermentum feugiat fringilla fusce gravida "

-            + "habitant habitasse hac hendrerit hymenaeos iaculis id imperdiet "

-            + "in inceptos integer interdum ipsum justo lacinia lacus laoreet "

-            + "lectus leo libero ligula litora lobortis lorem luctus maecenas "

-            + "magna magnis malesuada massa mattis mauris metus mi molestie "

-            + "mollis montes morbi mus nam nascetur natoque nec neque netus "

-            + "nibh nisi nisl non nonummy nostra nulla nullam nunc odio orci "

-            + "ornare parturient pede pellentesque penatibus per pharetra "

-            + "phasellus placerat platea porta porttitor posuere potenti praesent "

-            + "pretium primis proin pulvinar purus quam quis quisque rhoncus "

-            + "ridiculus risus rutrum sagittis sapien scelerisque sed sem semper "

-            + "senectus sit sociis sociosqu sodales sollicitudin suscipit "

-            + "suspendisse taciti tellus tempor tempus tincidunt torquent tortor "

-            + "tristique turpis ullamcorper ultrices ultricies urna ut Objectius ve "

-            + "vehicula vel velit venenatis vestibulum vitae vivamus viverra " + "volutpat vulputate";

-

-    /**

-     * A sample to use for generating the distribution of word and sentence

-     * lengths in lorem ipsum.

-     * 

-     * @type {string}

-     * @private

-     */

-    private static final String SAMPLE = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean "

-            + "commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus "

-            + "et magnis dis parturient montes, nascetur ridiculus mus. Donec quam "

-            + "felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla "

-            + "consequat massa quis enim. Donec pede justo, fringilla vel, aliquet "

-            + "nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, "

-            + "venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. "

-            + "Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean "

-            + "vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat "

-            + "vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra "

-            + "quis, feugiat a, tellus. Phasellus viverra nulla ut metus Objectius "

-            + "laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel "

-            + "augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.\n\n" +

-

-            "Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem "

-            + "quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam "

-            + "nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec "

-            + "odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis "

-            + "faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus "

-            + "tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales "

-            + "sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit "

-            + "cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend "

-            + "sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, "

-            + "metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis "

-            + "hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci "

-            + "luctus et ultrices posuere cubilia Curae; In ac dui quis mi " + "consectetuer lacinia.\n\n" +

-

-            "Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet "

-            + "nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer "

-            + "ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent "

-            + "adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy "

-            + "metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros "

-            + "et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, "

-            + "nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit "

-            + "risus. Phasellus nec sem in justo pellentesque facilisis. Etiam "

-            + "imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus "

-            + "non, auctor et, hendrerit quis, nisi.\n\n" +

-

-            "Curabitur ligula sapien, tincidunt non, euismod vitae, posuere "

-            + "imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed "

-            + "cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus "

-            + "accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci "

-            + "luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis "

-            + "porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis "

-            + "orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, "

-            + "bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede "

-            + "sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.\n\n" +

-

-            "Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu "

-            + "sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales "

-            + "nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse "

-            + "pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, "

-            + "nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in "

-            + "faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id "

-            + "purus. Ut Objectius tincidunt libero. Phasellus dolor. Maecenas vestibulum "

-            + "mollis diam. Pellentesque ut neque. Pellentesque habitant morbi "

-            + "tristique senectus et netus et malesuada fames ac turpis egestas.\n\n" +

-

-            "In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac "

-            + "felis quis tortor malesuada pretium. Pellentesque auctor neque nec "

-            + "urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean "

-            + "viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et "

-            + "netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis "

-            + "pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna.\n\n" +

-

-            "In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare "

-            + "lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis "

-            + "ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. "

-            + "Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, "

-            + "quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at "

-            + "pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo "

-            + "quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam "

-            + "sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce "

-            + "risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis " + "vulputate lorem.\n\n" +

-

-            "Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, "

-            + "dui et placerat feugiat, eros pede Objectius nisi, condimentum viverra "

-            + "felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, "

-            + "Objectius ut, felis. In auctor lobortis lacus. Quisque libero metus, "

-            + "condimentum nec, tempor a, commodo mollis, magna. Vestibulum "

-            + "ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia "

-            + "erat. Praesent blandit laoreet nibh.\n\n" +

-

-            "Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, "

-            + "neque sit amet convallis pulvinar, justo nulla eleifend augue, ac "

-            + "auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. "

-            + "Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. "

-            + "Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In "

-            + "hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis "

-            + "mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat "

-            + "nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, " + "lacus.\n\n" +

-

-            "Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, "

-            + "dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi "

-            + "congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin "

-            + "fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit "

-            + "amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam "

-            + "gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac "

-            + "sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus "

-            + "blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in "

-            + "libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In "

-            + "consectetuer turpis ut velit. Nulla sit amet est. Praesent metus "

-            + "tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus "

-            + "ipsum, faucibus ut, ullamcorper id, Objectius ac, leo. Suspendisse "

-            + "feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum "

-            + "nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac "

-            + "massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, "

-            + "iaculis quis, molestie non, velit.\n\n" +

-

-            "Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. "

-            + "Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus "

-            + "at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet "

-            + "velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. "

-            + "Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, "

-            + "sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla "

-            + "facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere "

-            + "iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. "

-            + "Curabitur suscipit suscipit tellus.\n\n" +

-

-            "Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id "

-            + "nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu "

-            + "pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante "

-            + "odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque "

-            + "suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce "

-            + "ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu "

-            + "quis ligula mattis placerat. Duis lobortis massa imperdiet quam. " + "Suspendisse potenti.\n\n" +

-

-            "Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, "

-            + "lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat "

-            + "volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam "

-            + "eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris "

-            + "ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta "

-            + "dolor. Class aptent taciti sociosqu ad litora torquent per conubia "

-            + "nostra, per inceptos hymenaeos.\n\n" +

-

-            "Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. "

-            + "Sed a libero. Cras Objectius. Donec vitae orci sed dolor rutrum auctor. "

-            + "Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, "

-            + "elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum "

-            + "sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus "

-            + "non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. " + "Vestibulum eu odio.\n\n" +

-

-            "Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. "

-            + "Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique "

-            + "sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse "

-            + "faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, "

-            + "vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce "

-            + "fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae "

-            + "odio lacinia tincidunt. Praesent ut ligula non mi Objectius sagittis. "

-            + "Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus "

-            + "consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna "

-            + "cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit "

-            + "quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar " + "varius.\n\n";

-

-    /**

-     * Generates a number of paragraphs, with each paragraph surrounded by HTML

-     * pararaph tags.

-     * 

-     * @param quantity

-     * @param startWithLorem

-     * @return

-     */

-    public String generateParagraphsHtml(int quantity, boolean startWithLorem) {

-

-        return generateMarkupParagraphs("<p>" + LINE_SEPARATOR + "\t", LINE_SEPARATOR + "</p>", LINE_SEPARATOR + "</p>"

-                + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR + "\t", quantity, startWithLorem);

-

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph surrounded by HTML

-     * pararaph tags.

-     * 

-     * @param writer

-     * @param quantity

-     * @param startWithLorem

-     * @throws IOException

-     */

-    public void generateParagraphsHtml(Appendable writer, int quantity, boolean startWithLorem) throws IOException {

-

-        generateMarkupParagraphs(writer, "<p>" + LINE_SEPARATOR + "\t", LINE_SEPARATOR + "</p>", LINE_SEPARATOR

-                + "</p>" + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR + "\t", quantity, startWithLorem);

-

-    }

-

-    /**

-     * Generates one paragraph of HTML, surrounded by HTML pararaph tags.

-     * 

-     * @param quantity

-     * @param startWithLorem

-     * @return

-     */

-    public String generateOneParagraphHtml(int quantity, boolean startWithLorem) {

-

-        return generateMarkupSentences("<p>" + LINE_SEPARATOR + "\t", LINE_SEPARATOR + "</p>", LINE_SEPARATOR,

-                quantity, startWithLorem);

-

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph surrounded by HTML

-     * paragraph tags as a full HTML page.

-     * 

-     * @param quantity

-     * @param startWithLorem

-     * @return

-     */

-    public String generateParagraphsFullHtml(int quantity, boolean startWithLorem) {

-

-        String prefix = "<html>" + LINE_SEPARATOR + "<header>" + LINE_SEPARATOR + "<title>Lorem Ipsum</title>"

-                + LINE_SEPARATOR + "</header>" + LINE_SEPARATOR + LINE_SEPARATOR + "<body>";

-        String postfix = "</body>" + LINE_SEPARATOR + "</html>" + LINE_SEPARATOR;

-

-        return generateMarkupParagraphs(prefix + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR + "\t", LINE_SEPARATOR

-                + "</p>" + LINE_SEPARATOR + postfix, LINE_SEPARATOR + "</p>" + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR

-                + "\t", quantity, startWithLorem);

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph surrounded by HTML

-     * paragraph tags as a full HTML page.

-     * 

-     * @param writer

-     * @param quantity

-     * @param startWithLorem

-     * @throws IOException

-     */

-    public void generateParagraphsFullHtml(Appendable writer, int quantity, boolean startWithLorem) throws IOException {

-

-        String prefix = "<html>" + LINE_SEPARATOR + "<header>" + LINE_SEPARATOR + "<title>Lorem Ipsum</title>"

-                + LINE_SEPARATOR + "</header>" + LINE_SEPARATOR + LINE_SEPARATOR + "<body>";

-        String postfix = "</body>" + LINE_SEPARATOR + "</html>" + LINE_SEPARATOR;

-

-        generateMarkupParagraphs(writer, prefix + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR + "\t", LINE_SEPARATOR

-                + "</p>" + LINE_SEPARATOR + postfix, LINE_SEPARATOR + "</p>" + LINE_SEPARATOR + "<p>" + LINE_SEPARATOR

-                + "\t", quantity, startWithLorem);

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph separated by two

-     * newlines.

-     * 

-     * @param quantity

-     * @param startWithLorem

-     * @return

-     */

-    public String generateParagraphsPlainText(int quantity, boolean startWithLorem) {

-

-        return generateMarkupParagraphs("", "", LINE_SEPARATOR + LINE_SEPARATOR, quantity, startWithLorem);

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph separated by two

-     * newlines.

-     * 

-     * @param writer

-     * @param quantity

-     * @param startWithLorem

-     * @throws IOException

-     */

-    public void generateParagraphsPlainText(Appendable writer, int quantity, boolean startWithLorem) throws IOException {

-

-        generateMarkupParagraphs(writer, "", "", LINE_SEPARATOR + LINE_SEPARATOR, quantity, startWithLorem);

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph separated by two

-     * newlines and no line exceeding maxCols columns

-     * 

-     * @param quantity

-     * @param startWithLorem

-     * @return

-     */

-    public String generateParagraphsPlainText(int quantity, int maxCols, boolean startWithLorem) {

-

-        StringWriter writer = new StringWriter(quantity + 512);

-        try {

-            generateParagraphsPlainText(writer, quantity, maxCols, startWithLorem);

-        } catch (IOException e) {

-            throw new RuntimeException(e);

-        }

-        return writer.toString();

-    }

-

-    /**

-     * Generates a number of paragraphs, with each paragraph separated by two

-     * newlines and no line exceeding maxCols columns

-     * 

-     * @param writer

-     * @param quantity

-     * @param startWithLorem

-     * @throws IOException

-     */

-    public void generateParagraphsPlainText(Appendable writer, int quantity, int maxCols, boolean startWithLorem)

-            throws IOException {

-

-        String delims = " .,?!";

-        String unformatted = generateMarkupParagraphs("", "", LINE_SEPARATOR + LINE_SEPARATOR, quantity, startWithLorem);

-        int len = unformatted.length();

-

-        if (maxCols <= 0) {

-            writer.append(unformatted);

-        } else {

-            int startPos = 0;

-            while (startPos < len - 1) {

-                int endPos = Math.min(startPos + maxCols, len - 1);

-                boolean shift = true;

-                // check if there is already a line break:

-                for (int i = startPos; i < endPos; i++) {

-                    if (unformatted.charAt(i) == '\n') {

-                        shift = false;

-                        endPos = i;

-                    }

-                }

-                char ch = unformatted.charAt(endPos);

-                while (shift) {

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

-                        if (ch == delims.charAt(i)) {

-                            shift = false;

-                            break;

-                        }

-                    }

-                    if (shift) {

-                        ch = unformatted.charAt(--endPos);

-                        shift = endPos > startPos;

-                    }

-                }

-                writer.append(unformatted.substring(startPos, endPos + 1));

-                if (unformatted.charAt(endPos) != '\n') {

-                    writer.append(LINE_SEPARATOR);

-                }

-                startPos = endPos + 1;

-            }

-        }

-    }

-

-}

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java
deleted file mode 100644
index 2201275..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.util.repository;
-
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.util.repository.ObjectGenerator.ContentKind;
-
-public class MultiThreadedObjectGenerator {
-
-    public static enum Action {
-        CreateDocument, CreateTree, CreateFolders, CreateTypes
-    }
-
-    private MultiThreadedObjectGenerator() {
-    }
-
-    public static class ObjectGeneratorRunner implements Runnable {
-        private final Action fAction;
-        ObjectGenerator fObjGen;
-        private String fRootFolderId;
-        private int fFoldersPerFolders;
-        private int fDepth;
-        private int fCount;
-        private TypeDefinitionList fTypeDefList;
-
-        public ObjectGeneratorRunner(ObjectGenerator objGen, Action action) {
-            fObjGen = objGen;
-            fAction = action;
-        }
-
-        public void run() {
-            if (fAction == Action.CreateDocument) {
-                doCreateDocument();
-            } else if (fAction == Action.CreateTree) {
-                doCreateTree();
-            } else if (fAction == Action.CreateFolders) {
-                doCreateFolder();
-            } else if (fAction == Action.CreateTypes) {
-                doCreateTypes();
-            }
-        }
-
-        public String[] doCreateDocument() {
-            String[] ids = fObjGen.createDocuments(fRootFolderId, fCount);
-            return ids;
-        }
-
-        public void doCreateTree() {
-            fObjGen.createFolderHierachy(fDepth, fFoldersPerFolders, fRootFolderId);
-        }
-
-        public String[] doCreateFolder() {
-            return fObjGen.createFolders(fRootFolderId, fCount);
-        }
-        
-        public void doCreateTypes() {
-            fObjGen.createTypes(fTypeDefList);
-        }
-
-        public ObjectGenerator getObjectGenerator() {
-            return fObjGen;
-        }
-
-    } // ObjectCreatorRunner
-
-    private static ObjectGenerator createObjectGenerator(CmisBinding binding, String repoId, int docsPerFolder,
-            int foldersPerFolders, int depth, String documentType, String folderType, int contentSizeInKB,
-            String rootFolderId, ContentKind contentKind, boolean doCleanup) {
-
-        BindingsObjectFactory objectFactory = binding.getObjectFactory();
-        NavigationService navSvc = binding.getNavigationService();
-        ObjectService objSvc = binding.getObjectService();
-        RepositoryService repSvc = binding.getRepositoryService();
-        
-        ObjectGenerator gen = new ObjectGenerator(objectFactory, navSvc, objSvc, repSvc, repoId, contentKind);
-        gen.setUseUuidsForNames(true);
-        gen.setNumberOfDocumentsToCreatePerFolder(docsPerFolder);
-        // Set the type id for all created documents:
-        gen.setDocumentTypeId(documentType);
-        // Set the type id for all created folders:
-        gen.setFolderTypeId(folderType);
-        // Set contentSize
-        gen.setContentSizeInKB(contentSizeInKB);
-        gen.setCleanUpAfterCreate(doCleanup);
-
-        return gen;
-    }
-
-    private static String getRootFolderId(CmisBinding binding, String repositoryId, String rootFolderId) {
-        RepositoryService repSvc = binding.getRepositoryService();
-
-        RepositoryInfo rep = repSvc.getRepositoryInfo(repositoryId, null);
-        if (null == rootFolderId || rootFolderId.length() == 0) {
-            rootFolderId = rep.getRootFolderId();
-        }
-
-        return rootFolderId;
-    }
-
-    public static ObjectGeneratorRunner prepareForCreateTree(CmisBinding binding, String repoId, int docsPerFolder,
-            int foldersPerFolders, int depth, String documentType, String folderType, int contentSizeInKB,
-            String rootFolderId, ContentKind contentKind, boolean doCleanup) {
-
-        ObjectGenerator objGen = createObjectGenerator(binding, repoId, docsPerFolder, foldersPerFolders, depth,
-                documentType, folderType, contentSizeInKB, rootFolderId, contentKind, doCleanup);
-
-        ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTree);
-        gen.fFoldersPerFolders = foldersPerFolders;
-        gen.fDepth = depth;
-        gen.fRootFolderId = getRootFolderId(binding, repoId, rootFolderId);
-        return gen;
-    }
-
-    public static ObjectGeneratorRunner[] prepareForCreateTreeMT(CmisBinding provider, String repoId,
-            int docsPerFolder, int foldersPerFolders, int depth, String documentType, String folderType,
-            int contentSizeInKB, String[] rootFolderIds, ContentKind contentKind, boolean doCleanup) {
-
-        ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[rootFolderIds.length];
-        for (int i = 0; i < rootFolderIds.length; i++) {
-            ObjectGenerator objGen = createObjectGenerator(provider, repoId, docsPerFolder, foldersPerFolders, depth,
-                    documentType, folderType, contentSizeInKB, rootFolderIds[i], contentKind,
-                    doCleanup);
-
-            ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTree);
-            gen.fFoldersPerFolders = foldersPerFolders;
-            gen.fDepth = depth;
-            gen.fRootFolderId = rootFolderIds[i];
-            runners[i] = gen;
-        }
-        return runners;
-    }
-
-    public static ObjectGeneratorRunner prepareForCreateDocument(CmisBinding provider, String repoId,
-            String documentType, int contentSizeInKB, String rootFolderId, int noDocuments, 
-            ContentKind contentKind, boolean doCleanup) {
-
-        ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, documentType, null, contentSizeInKB,
-                rootFolderId, contentKind, doCleanup);
-
-        ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateDocument);
-        gen.fRootFolderId = getRootFolderId(provider, repoId, rootFolderId);
-        gen.fCount = noDocuments;
-        return gen;
-    }
-
-    public static ObjectGeneratorRunner[] prepareForCreateDocumentMT(int threadCount, CmisBinding binding,
-            String repoId, String documentType, int contentSizeInKB, String rootFolderId, int noDocuments,
-            ContentKind contentKind, boolean doCleanup) {
-
-        ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[threadCount];
-        for (int i = 0; i < threadCount; i++) {
-            ObjectGenerator objGen = createObjectGenerator(binding, repoId, 0, 0, 0, documentType, null,
-                    contentSizeInKB, rootFolderId, contentKind, doCleanup);
-
-            ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateDocument);
-            gen.fRootFolderId = getRootFolderId(binding, repoId, rootFolderId);
-            gen.fCount = noDocuments;
-            runners[i] = gen;
-        }
-        return runners;
-    }
-
-    public static ObjectGeneratorRunner prepareForCreateFolder(CmisBinding provider, String repoId, String folderType,
-            String rootFolderId, int noFolders, boolean doCleanup) {
-
-        ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, null, folderType, 0, rootFolderId,
-                null, doCleanup);
-
-        ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateFolders);
-        gen.fRootFolderId = getRootFolderId(provider, repoId, rootFolderId);
-        gen.fCount = noFolders;
-        return gen;
-    }
-
-    public static ObjectGeneratorRunner[] prepareForCreateFolderMT(int threadCount, CmisBinding binding, String repoId,
-            String folderType, String rootFolderId, int noFolders, boolean doCleanup) {
-
-        ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[threadCount];
-        for (int i = 0; i < threadCount; i++) {
-            ObjectGenerator objGen = createObjectGenerator(binding, repoId, 0, 0, 0, null, folderType, 0, rootFolderId,
-                    null, doCleanup);
-
-            ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateFolders);
-            gen.fRootFolderId = getRootFolderId(binding, repoId, rootFolderId);
-            gen.fCount = noFolders;
-            runners[i] = gen;
-        }
-        return runners;
-    }
-
-    public static ObjectGeneratorRunner prepareForCreateTypes(CmisBinding provider, String repoId, TypeDefinitionList typeDefList) {
-
-        ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, null, null, 0, null,
-                null, false);
-
-        ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTypes);
-        gen.fTypeDefList = typeDefList;
-        return gen;
-    }
-
-    public static void runMultiThreaded(ObjectGeneratorRunner[] runner) {
-        int threadCount = runner.length;
-        Thread[] threads = new Thread[threadCount];
-        for (int i = 0; i < threadCount; i++) {
-            Thread thread = new Thread(runner[i], "ObjectGeneratorThread-" + i);
-            threads[i] = thread;
-            thread.start();
-        }
-
-        try {
-            for (Thread thread : threads) {
-                thread.join();
-            }
-            // Print all timings to System.out
-            System.out.println();
-            System.out.println("Result:");
-            TimeLogger[] loggersCreateDoc = new TimeLogger[threadCount];
-            TimeLogger[] loggersCreateFolder = new TimeLogger[threadCount];
-            TimeLogger[] loggersDelete = new TimeLogger[threadCount];
-            for (int i = 0; i < threadCount; i++) {
-                loggersCreateDoc[i] = runner[i].fObjGen.getCreateDocumentTimeLogger();
-                loggersCreateFolder[i] = runner[i].fObjGen.getCreateFolderTimeLogger();
-                loggersDelete[i] = runner[i].fObjGen.getDeleteTimeLogger();
-            }
-            TimeLogger.printTimes(loggersCreateDoc);
-            TimeLogger.printTimes(loggersCreateFolder);
-            TimeLogger.printTimes(loggersDelete);
-
-        } catch (InterruptedException e) {
-            System.out.println("Failed to wait for termination of threads: " + e);
-        }
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java
deleted file mode 100644
index c40f8cf..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.util.repository;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
-import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
-import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.ObjectService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.util.content.fractal.FractalGenerator;
-import org.apache.chemistry.opencmis.util.content.loremipsum.LoremIpsum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A simple helper class for the tests that generates a sample folder hierarchy
- * and optionally documents in it.
- */
-public class ObjectGenerator {
-
-    private static final int KILO = 1024;
-    private static final Logger LOG = LoggerFactory.getLogger(ObjectGenerator.class);
-    private final BindingsObjectFactory fFactory;
-    NavigationService fNavSvc;
-    ObjectService fObjSvc;
-    RepositoryService fRepSvc;
-    private final String fRepositoryId;
-    private final TimeLogger fTimeLoggerCreateDoc;
-    private final TimeLogger fTimeLoggerCreateFolder;
-    private final TimeLogger fTimeLoggerDelete;
-    private final TimeLogger fTimeLoggerCreateType;
-    private boolean fCleanup;
-    List<String> fTopLevelDocsCreated; // list of ids created on first level
-    List<String> fTopLevelFoldersCreated; // list of ids created on first level
-
-    /**
-     * supported kinds of content
-     * 
-     */
-    public enum ContentKind {
-        STATIC_TEXT, LOREM_IPSUM_TEXT, LOREM_IPSUM_HTML, IMAGE_FRACTAL_JPEG
-    };
-
-    /**
-     * Indicates if / how many documents are created in each folder
-     */
-    private int fNoDocumentsToCreate;
-
-    /**
-     * The type id of the document id that is created.
-     */
-    private String fDocTypeId = BaseTypeId.CMIS_DOCUMENT.value();
-
-    /**
-     * The type id of the folder that is created.
-     */
-    private String fFolderTypeId = BaseTypeId.CMIS_FOLDER.value();
-
-    /**
-     * A list of property ids. For each element in this list a String property
-     * value is created for each creation of a document. All ids must be valid
-     * string property id of the type fDocTypeId
-     */
-    private List<String> fStringPropertyIdsToSetForDocument;
-
-    /**
-     * A list of property ids. For each element in this list a String property
-     * value is created for each creation of a folder. All ids must be valid
-     * string property id of the type fFolderTypeId
-     */
-    private List<String> fStringPropertyIdsToSetForFolder;
-
-    /**
-     * number of documents created in total
-     */
-    private int fDocumentsInTotalCount = 0;
-
-    /**
-     * number of folders created in total
-     */
-    private int fFoldersInTotalCount = 0;
-
-    /**
-     * size of content in KB, if 0 create documents without content
-     */
-    private int fContentSizeInK = 0;
-
-    /**
-     * Kind of content to create
-     */
-    private ContentKind fContentKind;
-
-    private static final String NAMEPROPVALPREFIXDOC = "My_Document-";
-    private static final String NAMEPROPVALPREFIXFOLDER = "My_Folder-";
-    private static final String STRINGPROPVALPREFIXDOC = "My Doc StringProperty ";
-    private static final String STRINGPROPVALPREFIXFOLDER = "My Folder StringProperty ";
-    private int propValCounterDocString = 0;
-    private int propValCounterFolderString = 0;
-    /**
-     * use UUIDs to generate folder and document names
-     */
-    private boolean fUseUuids;
-
-    /**
-     * generator for images
-     */
-    private FractalGenerator fractalGenerator = null;
-
-    public ObjectGenerator(BindingsObjectFactory factory, NavigationService navSvc, ObjectService objSvc,
-            RepositoryService repSvc, String repositoryId, ContentKind contentKind) {
-        super();
-        fFactory = factory;
-        fNavSvc = navSvc;
-        fObjSvc = objSvc;
-        fRepSvc = repSvc;
-        fRepositoryId = repositoryId;
-        // create an empty list of properties to generate by default for folder
-        // and document
-        fStringPropertyIdsToSetForDocument = new ArrayList<String>();
-        fStringPropertyIdsToSetForFolder = new ArrayList<String>();
-        fNoDocumentsToCreate = 0;
-        fUseUuids = false;
-        fTimeLoggerCreateDoc = new TimeLogger("createDocument()");
-        fTimeLoggerCreateFolder = new TimeLogger("createFolder()");
-        fTimeLoggerDelete = new TimeLogger("Delete");
-        fTimeLoggerCreateType = new TimeLogger("createType()");
-        fCleanup = false;
-        fTopLevelDocsCreated = new ArrayList<String>();
-        fTopLevelFoldersCreated = new ArrayList<String>();
-        fContentKind = contentKind;
-    }
-
-    public void setNumberOfDocumentsToCreatePerFolder(int noDocumentsToCreate) {
-        fNoDocumentsToCreate = noDocumentsToCreate;
-    }
-
-    public void setFolderTypeId(String folderTypeId) {
-        fFolderTypeId = folderTypeId;
-    }
-
-    public void setDocumentTypeId(String docTypeId) {
-        fDocTypeId = docTypeId;
-    }
-
-    public void setDocumentPropertiesToGenerate(List<String> propertyIds) {
-        fStringPropertyIdsToSetForDocument = propertyIds;
-    }
-
-    public void setFolderPropertiesToGenerate(List<String> propertyIds) {
-        fStringPropertyIdsToSetForFolder = propertyIds;
-    }
-
-    public void setContentSizeInKB(int sizeInK) {
-        fContentSizeInK = sizeInK;
-    }
-
-    public ContentKind getContentKind() {
-        return fContentKind;
-    }
-
-    public void setLoreIpsumGenerator(ContentKind contentKind) {
-        fContentKind = contentKind;
-    }
-
-    public void setCleanUpAfterCreate(boolean doCleanup) {
-        fCleanup = doCleanup;
-    }
-
-    public TimeLogger getCreateDocumentTimeLogger() {
-        return fTimeLoggerCreateDoc;
-    }
-
-    public TimeLogger getCreateFolderTimeLogger() {
-        return fTimeLoggerCreateFolder;
-    }
-
-    public TimeLogger getDeleteTimeLogger() {
-        return fTimeLoggerDelete;
-    }
-
-    public void createFolderHierachy(int levels, int childrenPerLevel, String rootFolderId) {
-        resetCounters();
-        fTimeLoggerCreateDoc.reset();
-        fTimeLoggerCreateFolder.reset();
-        fTopLevelFoldersCreated.clear();
-        fTopLevelDocsCreated.clear();
-        createFolderHierachy(rootFolderId, 0, levels, childrenPerLevel);
-        if (fCleanup) {
-            deleteTree();
-        }
-    }
-
-    public void setUseUuidsForNames(boolean useUuids) {
-        /**
-         * use UUIDs to generate folder and document names
-         */
-        fUseUuids = useUuids;
-    }
-
-    /**
-     * retrieve the index-th folder from given level of the hierarchy starting
-     * at rootId
-     * 
-     * @param rootId
-     * @param level
-     * @param index
-     * @return
-     */
-    public String getFolderId(String rootId, int level, int index) {
-        String objectId = rootId;
-        final String requiredProperties = PropertyIds.OBJECT_ID + "," + PropertyIds.OBJECT_TYPE_ID + ","
-                + PropertyIds.BASE_TYPE_ID;
-        // Note: This works because first folders are created then documents
-        for (int i = 0; i < level; i++) {
-            ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, objectId, requiredProperties,
-                    PropertyIds.OBJECT_TYPE_ID, false, IncludeRelationships.NONE, null, true, BigInteger.valueOf(-1),
-                    BigInteger.valueOf(-1), null);
-            List<ObjectInFolderData> children = result.getObjects();
-            ObjectData child = children.get(index).getObject();
-            objectId = (String) child.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue();
-        }
-        return objectId;
-    }
-
-    /**
-     * retrieve the index-th document from given folder
-     * 
-     * @param folderId
-     *            folder to retrieve document from
-     * @param index
-     *            index of document to retrieve from this folder
-     * @return
-     */
-    public String getDocumentId(String folderId, int index) {
-        String docId = null;
-        final String requiredProperties = PropertyIds.OBJECT_ID + "," + PropertyIds.OBJECT_TYPE_ID + ","
-                + PropertyIds.BASE_TYPE_ID;
-        ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, folderId, requiredProperties,
-                PropertyIds.OBJECT_TYPE_ID, false, IncludeRelationships.NONE, null, true, BigInteger.valueOf(-1),
-                BigInteger.valueOf(-1), null);
-        List<ObjectInFolderData> children = result.getObjects();
-        int numDocsFound = 0;
-        for (int i = 0; i < children.size(); i++) {
-            ObjectData child = children.get(i).getObject();
-            docId = (String) child.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue();
-            if (child.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT)) {
-                if (numDocsFound == index) {
-                    return docId;
-                } else {
-                    numDocsFound++;
-                }
-            }
-        }
-        return docId;
-    }
-
-    /**
-     * return the total number of documents created
-     * 
-     * @return
-     */
-    public int getDocumentsInTotal() {
-        return fDocumentsInTotalCount;
-    }
-
-    /**
-     * return the total number of folders created
-     * 
-     * @return
-     */
-    public int getFoldersInTotal() {
-        return fFoldersInTotalCount;
-    }
-
-    /**
-     * return the total number of objects created
-     */
-    public int getObjectsInTotal() {
-        return fDocumentsInTotalCount + fFoldersInTotalCount;
-    }
-
-    public String createSingleDocument(String folderId) {
-        fTimeLoggerCreateDoc.reset();
-        String objectId = createDocument(folderId, 0, 0);
-        if (fCleanup) {
-            deleteObject(objectId);
-        }
-        return objectId;
-    }
-
-    public String[] createDocuments(String folderId, int count) {
-
-        String[] result;
-
-        fTimeLoggerCreateDoc.reset();
-        for (int i = 0; i < count; i++) {
-            String id = createDocument(folderId, 0, 0);
-            fTopLevelDocsCreated.add(id);
-        }
-        if (fCleanup) {
-            deleteTree();
-            result = null;
-        } else {
-            result = new String[count];
-            for (int i = 0; i < fTopLevelDocsCreated.size(); i++) {
-                result[i] = fTopLevelDocsCreated.get(i);
-            }
-        }
-        return result;
-    }
-
-    public String[] createFolders(String folderId, int count) {
-
-        String[] result;
-
-        fTimeLoggerCreateFolder.reset();
-        for (int i = 0; i < count; i++) {
-            createFolder(folderId);
-        }
-        if (fCleanup) {
-            deleteTree();
-            result = null;
-        } else {
-            result = new String[count];
-            for (int i = 0; i < fTopLevelFoldersCreated.size(); i++) {
-                result[i] = fTopLevelFoldersCreated.get(i);
-            }
-        }
-        return result;
-    }
-
-    public void resetCounters() {
-        fDocumentsInTotalCount = 0;
-        fFoldersInTotalCount = 0;
-    }
-
-    public void printTimings() {
-        fTimeLoggerCreateDoc.printTimes();
-        fTimeLoggerCreateFolder.printTimes();
-        if (fCleanup) {
-            fTimeLoggerDelete.printTimes();
-        }
-    }
-
-    public void logTimings() {
-        fTimeLoggerCreateDoc.logTimes();
-        fTimeLoggerCreateFolder.logTimes();
-        if (fCleanup) {
-            fTimeLoggerDelete.logTimes();
-        }
-    }
-
-    private void createFolderHierachy(String parentId, int level, int levels, int childrenPerLevel) {
-        String id = null;
-
-        if (level >= levels) {
-            return;
-        }
-
-        LOG.debug(" create folder for parent id: " + parentId + ", in level " + level + ", max levels " + levels);
-
-        for (int i = 0; i < childrenPerLevel; i++) {
-            Properties props = createFolderProperties(i, level);
-            try {
-                fTimeLoggerCreateFolder.start();
-                id = fObjSvc.createFolder(fRepositoryId, props, parentId, null, null, null, null);
-                if (level == 0) {
-                    fTopLevelFoldersCreated.add(id);
-                }
-            } finally {
-                fTimeLoggerCreateFolder.stop();
-            }
-
-            if (id != null) {
-                ++fFoldersInTotalCount;
-                createFolderHierachy(id, level + 1, levels, childrenPerLevel);
-            }
-        }
-        for (int j = 0; j < fNoDocumentsToCreate; j++) {
-            id = createDocument(parentId, j, level);
-            if (level == 0) {
-                fTopLevelDocsCreated.add(id);
-            }
-        }
-    }
-
-    private String createFolder(String parentId) {
-        Properties props = createFolderProperties(0, 0);
-        String id = null;
-        try {
-            fTimeLoggerCreateFolder.start();
-            id = fObjSvc.createFolder(fRepositoryId, props, parentId, null, null, null, null);
-            fTopLevelFoldersCreated.add(id);
-        } finally {
-            fTimeLoggerCreateFolder.stop();
-        }
-        return id;
-    }
-
-    private String createDocument(String folderId, int no, int level) {
-        ContentStream contentStream = null;
-        VersioningState versioningState = VersioningState.NONE;
-        List<String> policies = null;
-        Acl addACEs = null;
-        Acl removeACEs = null;
-        ExtensionsData extension = null;
-
-        LOG.debug("create document in folder " + folderId);
-        Properties props = createDocumentProperties(no, level);
-        String id = null;
-
-        if (fContentSizeInK > 0) {
-            switch (fContentKind) {
-            case STATIC_TEXT:
-                contentStream = createContentStaticText();
-                break;
-            case LOREM_IPSUM_TEXT:
-                contentStream = createContentLoremIpsumText();
-                break;
-            case LOREM_IPSUM_HTML:
-                contentStream = createContentLoremIpsumHtml();
-                break;
-            case IMAGE_FRACTAL_JPEG:
-                contentStream = createContentFractalimageJpeg();
-                break;
-            }
-        }
-
-        try {
-            fTimeLoggerCreateDoc.start();
-            id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
-                    addACEs, removeACEs, extension);
-        } finally {
-            fTimeLoggerCreateDoc.stop();
-        }
-
-        if (null == id) {
-            LOG.error("createDocument failed.");
-        }
-        ++fDocumentsInTotalCount;
-        return id;
-    }
-
-    private void deleteTree() {
-
-        // delete all documents from first level
-        for (String id : fTopLevelDocsCreated) {
-            deleteObject(id);
-        }
-
-        // delete recursively all folders from first level
-        for (String id : fTopLevelFoldersCreated) {
-            try {
-                fTimeLoggerDelete.start();
-                fObjSvc.deleteTree(fRepositoryId, id, true, UnfileObject.DELETE, true, null);
-            } finally {
-                fTimeLoggerDelete.stop();
-            }
-        }
-    }
-
-    private void deleteObject(String objectId) {
-        try {
-            fTimeLoggerDelete.start();
-            fObjSvc.deleteObject(fRepositoryId, objectId, true, null);
-        } finally {
-            fTimeLoggerDelete.stop();
-        }
-    }
-
-    public ContentStream createContentLoremIpsumHtml() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.html");
-        content.setMimeType("text/html");
-        int len = fContentSizeInK * KILO; // size of document in K
-
-        LoremIpsum ipsum = new LoremIpsum();
-        String text = ipsum.generateParagraphsFullHtml(len, true);
-
-        content.setStream(new ByteArrayInputStream(IOUtils.toUTF8Bytes(text)));
-        return content;
-    }
-
-    public ContentStream createContentLoremIpsumText() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = fContentSizeInK * 1024; // size of document in K
-
-        LoremIpsum ipsum = new LoremIpsum();
-        String text = ipsum.generateParagraphsPlainText(len, 80, true);
-        content.setStream(new ByteArrayInputStream(IOUtils.toUTF8Bytes(text)));
-        return content;
-    }
-
-    public ContentStream createContentStaticText() {
-        ContentStreamImpl content = new ContentStreamImpl();
-        content.setFileName("data.txt");
-        content.setMimeType("text/plain");
-        int len = fContentSizeInK * 1024; // size of document in K
-        byte[] b = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
-                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a }; // 32
-        // Bytes
-        ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
-        try {
-            for (int j = 0; j < fContentSizeInK; j++) {
-                // write 1K of data
-                for (int i = 0; i < 32; i++) {
-                    ba.write(b);
-                }
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to fill content stream with data", e);
-        }
-        content.setStream(new ByteArrayInputStream(ba.toByteArray()));
-        return content;
-    }
-
-    public ContentStream createContentFractalimageJpeg() {
-        if (null == fractalGenerator) {
-            fractalGenerator = new FractalGenerator();
-        }
-
-        ContentStreamImpl content = null;
-
-        try {
-            ByteArrayOutputStream bos = fractalGenerator.generateFractal();
-            content = new ContentStreamImpl();
-            content.setFileName("image.jpg");
-            content.setMimeType("image/jpeg");
-            content.setStream(new ByteArrayInputStream(bos.toByteArray()));
-            bos.close();
-        } catch (IOException e) {
-            System.err.println("Error when generating fractal image: " + e);
-            e.printStackTrace();
-        }
-
-        return content;
-    }
-
-    private Properties createFolderProperties(int no, int level) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, generateFolderNameValue(no, level)));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, fFolderTypeId));
-        // Generate some property values for custom attributes
-        for (String stringPropId : fStringPropertyIdsToSetForFolder) {
-            properties.add(fFactory.createPropertyStringData(stringPropId, generateStringPropValueFolder()));
-        }
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private Properties createDocumentProperties(int no, int level) {
-        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-        properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, generateDocNameValue(no, level)));
-        properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, fDocTypeId));
-        // Generate some property values for custom attributes
-        for (String stringPropId : fStringPropertyIdsToSetForDocument) {
-            properties.add(fFactory.createPropertyStringData(stringPropId, generateStringPropValueDoc()));
-        }
-        Properties props = fFactory.createPropertiesData(properties);
-        return props;
-    }
-
-    private synchronized int incrementPropCounterDocStringProp() {
-        return propValCounterDocString++;
-    }
-
-    private synchronized int incrementPropCounterFolderStringProp() {
-        return propValCounterFolderString++;
-    }
-
-    private String generateDocNameValue(int no, int level) {
-        if (fUseUuids) {
-            return UUID.randomUUID().toString();
-        } else {
-            return NAMEPROPVALPREFIXDOC + level + "-" + no;
-        }
-    }
-
-    private String generateFolderNameValue(int no, int level) {
-        if (fUseUuids) {
-            return UUID.randomUUID().toString();
-        } else {
-            return NAMEPROPVALPREFIXFOLDER + level + "-" + no;
-        }
-    }
-
-    private String generateStringPropValueDoc() {
-        return STRINGPROPVALPREFIXDOC + incrementPropCounterDocStringProp();
-    }
-
-    private String generateStringPropValueFolder() {
-        return STRINGPROPVALPREFIXFOLDER + incrementPropCounterFolderStringProp();
-    }
-
-    public void dumpFolder(String folderId, String propertyFilter) {
-        LOG.debug("starting dumpFolder() id " + folderId + " ...");
-        boolean allRequiredPropertiesArePresent = propertyFilter != null && propertyFilter.equals("*"); // can
-        // be
-        // optimized
-        final String requiredProperties = allRequiredPropertiesArePresent ? propertyFilter : PropertyIds.OBJECT_ID
-                + "," + PropertyIds.NAME + "," + PropertyIds.OBJECT_TYPE_ID + "," + PropertyIds.BASE_TYPE_ID;
-        // if all required properties are contained in the filter use we use the
-        // filter otherwise
-        // we use our own set and get those from the filter later in an extra
-        // call
-        String propertyFilterIntern = allRequiredPropertiesArePresent ? propertyFilter : requiredProperties;
-        dumpFolder(folderId, propertyFilterIntern, 0);
-    }
-
-    private void dumpFolder(String folderId, String propertyFilter, int depth) {
-        boolean allRequiredPropertiesArePresent = propertyFilter.equals("*"); // can
-        // be
-        // optimized
-        StringBuilder prefix = new StringBuilder();
-        for (int i = 0; i < depth; i++) {
-            prefix.append("   ");
-        }
-
-        ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, folderId, propertyFilter, null, false,
-                IncludeRelationships.NONE, null, true, BigInteger.valueOf(-1), BigInteger.valueOf(-1), null);
-        List<ObjectInFolderData> folders = result.getObjects();
-        if (null != folders) {
-            LOG.debug(prefix + "found " + folders.size() + " children in folder " + folderId);
-            int no = 0;
-            for (ObjectInFolderData folder : folders) {
-                LOG.debug(prefix.toString() + ++no + ": found object with id: " + folder.getObject().getId()
-                        + " and path segment: " + folder.getPathSegment());
-                dumpObjectProperties(folder.getObject(), depth, propertyFilter, !allRequiredPropertiesArePresent);
-                String objectTypeBaseId = folder.getObject().getBaseTypeId().value();
-                if (objectTypeBaseId.equals(BaseTypeId.CMIS_FOLDER.value())) {
-                    dumpFolder(folder.getObject().getId(), propertyFilter, depth + 1);
-                } else if (objectTypeBaseId.equals(BaseTypeId.CMIS_DOCUMENT.value())) {
-                    dumpObjectProperties(folder.getObject(), depth + 1, propertyFilter,
-                            !allRequiredPropertiesArePresent);
-                }
-            }
-        }
-        LOG.debug(""); // add empty line
-    }
-
-    private void dumpObjectProperties(ObjectData object, int depth, String propertyFilter, boolean mustFetchProperties) {
-        final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
-        StringBuilder prefix = new StringBuilder();
-        for (int i = 0; i < depth; i++) {
-            prefix.append("   ");
-        }
-
-        LOG.debug(prefix + "found object id " + object.getId());
-        Map<String, PropertyData<?>> propMap;
-        if (mustFetchProperties) {
-            String objId = (String) object.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue();
-            Properties props = fObjSvc.getProperties(fRepositoryId, objId, propertyFilter, null);
-            propMap = props.getProperties();
-        } else {
-            propMap = object.getProperties().getProperties();
-        }
-        StringBuilder valueStr = new StringBuilder("[");
-        for (Map.Entry<String, PropertyData<?>> entry : propMap.entrySet()) {
-            if (entry.getValue().getValues().size() > 1) {
-                if (entry.getValue().getFirstValue() instanceof GregorianCalendar) {
-                    for (Object obj : entry.getValue().getValues()) {
-                        GregorianCalendar cal = (GregorianCalendar) obj;
-                        valueStr.append(df.format(cal.getTime())).append(", ");
-                    }
-                    valueStr.append("]");
-                } else {
-                    valueStr = new StringBuilder(entry.getValue().getValues().toString());
-                }
-            } else {
-                Object value = entry.getValue().getFirstValue();
-                if (null != value) {
-                    valueStr = new StringBuilder(value.toString());
-                    if (value instanceof GregorianCalendar) {
-                        valueStr = new StringBuilder(df.format(((GregorianCalendar) entry.getValue().getFirstValue())
-                                .getTime()));
-                    }
-                }
-            }
-            LOG.debug(prefix + entry.getKey() + ": " + valueStr);
-        }
-        LOG.debug(""); // add empty line
-    }
-
-    public void createTypes(TypeDefinitionList typeDefList) {
-
-        fTimeLoggerCreateType.reset();
-        for (TypeDefinition td : typeDefList.getList()) {
-            // TODO: enable this if available!
-            // fRepSvc.createTypeDefinition(fRepositoryId, td);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/TimeLogger.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/TimeLogger.java
deleted file mode 100644
index a7c3f03..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/TimeLogger.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.util.repository;
-
-import java.util.ArrayDeque;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Simple utility class for time logging. Note: NOT thread safe!
- */
-public class TimeLogger {
-    private static final Logger LOG = LoggerFactory.getLogger(TimeLogger.class);
-
-    private static class TimeRecord {
-        public long fStart;
-        public long fStop;
-    }
-
-    private final String fAction;
-    private ArrayDeque<TimeRecord> fTimeRecs = new ArrayDeque<TimeRecord>();
-    private static final int MAX_SIZE = 2500;
-    TimeRecord fCurrentRec;
-
-    public TimeLogger() {
-        fAction = "";
-        fTimeRecs = new ArrayDeque<TimeRecord>();
-    }
-
-    public TimeLogger(String action) {
-        fAction = action;
-    }
-
-    public void start() {
-        createAndAddNewRecord();
-        fCurrentRec.fStart = System.currentTimeMillis();
-    }
-
-    public void stop() {
-        fCurrentRec.fStop = System.currentTimeMillis();
-    }
-
-    public void reset() {
-        fTimeRecs.clear();
-    }
-
-    public void logTimes() {
-        long size = fTimeRecs.size();
-        if (size == 0) {
-            LOG.info("No samples for " + fAction + " available. ");
-        } else if (size == 1) {
-            LOG.info("Time elapsed for " + fAction + ": " + getLastTime());
-        } else {
-            LOG.info("Timings for " + size + " samples for action " + fAction + ": ");
-            LOG.info("  Average: " + getAverageTime() + "ms");
-            LOG.info("  Min    : " + getMinTime() + "ms");
-            LOG.info("  Max    : " + getMaxTime() + "ms");
-            LOG.info("  Total  : " + getTotalTime() + "ms");
-        }
-    }
-
-    public void printTimes() {
-        long size = fTimeRecs.size();
-        if (size == 0) {
-            System.out.println("No samples for " + fAction + " available. ");
-        } else if (size == 1) {
-            System.out.println("Time elapsed for " + fAction + ": " + getLastTime());
-        } else {
-            System.out.println("Timings for " + size + " samples for action " + fAction + ": ");
-            System.out.println("  Average: " + getAverageTime() + "ms");
-            System.out.println("  Min    : " + getMinTime() + "ms");
-            System.out.println("  Max    : " + getMaxTime() + "ms");
-            System.out.println("  Total  : " + getTotalTime() + "ms");
-        }
-    }
-
-    public long getLastTime() {
-        TimeRecord lastRec = fTimeRecs.getLast();
-        if (null != lastRec) {
-            return lastRec.fStop - lastRec.fStart;
-        } else {
-            return 0;
-        }
-    }
-
-    private void createAndAddNewRecord() {
-        if (fTimeRecs.size() < MAX_SIZE) {
-            fCurrentRec = new TimeRecord();
-            fTimeRecs.add(fCurrentRec);
-        }
-    }
-
-    private long getAverageTime() {
-        long sum = 0;
-        long size = fTimeRecs.size();
-
-        if (0 == fTimeRecs.size()) {
-            return 0;
-        }
-
-        for (TimeRecord tm : fTimeRecs) {
-            sum += tm.fStop - tm.fStart;
-        }
-        return (sum + size / 2) / size;
-    }
-
-    private long getMinTime() {
-        long min = Long.MAX_VALUE;
-
-        if (0 == fTimeRecs.size()) {
-            return 0;
-        }
-
-        for (TimeRecord tm : fTimeRecs) {
-            long val = tm.fStop - tm.fStart;
-            if (val < min) {
-                min = val;
-            }
-        }
-        return min;
-
-    }
-
-    private long getMaxTime() {
-        long max = Long.MIN_VALUE;
-
-        if (0 == fTimeRecs.size()) {
-            return 0;
-        }
-
-        for (TimeRecord tm : fTimeRecs) {
-            long val = tm.fStop - tm.fStart;
-            if (val > max) {
-                max = val;
-            }
-        }
-        return max;
-    }
-
-    private long getTotalTime() {
-        long sum = 0;
-
-        for (TimeRecord tm : fTimeRecs) {
-            sum += tm.fStop - tm.fStart;
-        }
-        return sum;
-    }
-
-    // //////////////////////////////////////////////////////////////////////////
-    // ////////
-    //
-    // Same methods used for multithreaded logging
-
-    public static void logTimes(TimeLogger[] loggers) {
-        long size = 0;
-        if (null == loggers) {
-            return;
-        }
-
-        for (int i = 0; i < loggers.length; i++) {
-            size += loggers[i].fTimeRecs.size();
-        }
-
-        LOG.info("Timings for " + size + " samples for action " + loggers[0].fAction + ": ");
-        LOG.info("  Average: " + getAverageTime(loggers) + "ms");
-        LOG.info("  Min    : " + getMinTime(loggers) + "ms");
-        LOG.info("  Max    : " + getMaxTime(loggers) + "ms");
-        LOG.info("  Total  : " + getTotalTime(loggers) + "ms");
-    }
-
-    public static void printTimes(TimeLogger[] loggers) {
-        long size = 0;
-        if (null == loggers) {
-            return;
-        }
-
-        for (int i = 0; i < loggers.length; i++) {
-            size += loggers[i].fTimeRecs.size();
-        }
-
-        System.out.println("Timings for " + size + " samples for action " + loggers[0].fAction + ": ");
-        System.out.println("  Average: " + getAverageTime(loggers) + "ms");
-        System.out.println("  Min    : " + getMinTime(loggers) + "ms");
-        System.out.println("  Max    : " + getMaxTime(loggers) + "ms");
-        System.out.println("  Total  : " + getTotalTime(loggers) + "ms");
-
-    }
-
-    private static long getAverageTime(TimeLogger[] loggers) {
-        long sum = 0;
-        long size = 0;
-
-        for (int i = 0; i < loggers.length; i++) {
-            size += loggers[i].fTimeRecs.size();
-        }
-
-        if (size == 0) {
-            return 0;
-        }
-
-        for (int i = 0; i < loggers.length; i++) {
-            if (0 == loggers[i].fTimeRecs.size()) {
-                continue;
-            }
-
-            for (TimeRecord tm : loggers[i].fTimeRecs) {
-                sum += tm.fStop - tm.fStart;
-            }
-        }
-
-        return (sum + size / 2) / size;
-    }
-
-    private static long getMaxTime(TimeLogger[] loggers) {
-        long max = Long.MIN_VALUE;
-
-        for (int i = 0; i < loggers.length; i++) {
-            long val = loggers[i].getMaxTime();
-            if (val > max) {
-                max = val;
-            }
-        }
-
-        return max;
-    }
-
-    private static long getMinTime(TimeLogger[] loggers) {
-        long min = Long.MAX_VALUE;
-
-        for (int i = 0; i < loggers.length; i++) {
-            long val = loggers[i].getMinTime();
-            if (val < min) {
-                min = val;
-            }
-        }
-
-        return min;
-    }
-
-    private static long getTotalTime(TimeLogger[] loggers) {
-        long totalTime = Long.MIN_VALUE;
-
-        for (int i = 0; i < loggers.length; i++) {
-            long val = loggers[i].getTotalTime();
-            if (val > totalTime) {
-                totalTime = val;
-            }
-        }
-
-        return totalTime;
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/resources/log4j.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/resources/log4j.properties
deleted file mode 100644
index 25e94d8..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more

-# contributor license agreements.  See the NOTICE file distributed with

-# this work for additional information regarding copyright ownership.

-# The ASF licenses this file to You under the Apache License, Version 2.0

-# (the "License"); you may not use this file except in compliance with

-# the License.  You may obtain a copy of the License at

-# 

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

-# 

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

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

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

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

-# limitations under the License.

-

-# sample log4j.properties

-

-log4j.rootCategory=WARN, R, O

-#log4j.rootCategory=DEBUG, R, O

-

-# Stdout

-log4j.appender.O=org.apache.log4j.ConsoleAppender

-

-# File

-log4j.appender.R=org.apache.log4j.RollingFileAppender

-log4j.appender.R.File=log4j.log

-

-# Control the maximum log file size

-log4j.appender.R.MaxFileSize=100KB

-

-# Archive log files (one backup file here)

-log4j.appender.R.MaxBackupIndex=1

-log4j.appender.R.layout=org.apache.log4j.PatternLayout

-log4j.appender.O.layout=org.apache.log4j.PatternLayout

-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-

diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java
deleted file mode 100644
index 7044a34..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.util.content.loremipsum;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringWriter;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LoremIpsumTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(LoremIpsumTest.class);
-
-    String sample = "One two three four five six. Seven eight nine ten eleven twelve. " + "\n\n"
-            + "Thirteen fourteen fifteen sixteen. Seventeen eighteen nineteen twenty.";
-
-    String dictionary = "a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh iiiiiiiii jjjjjjjjjj kkkkkkkkkkk llllllllllll";
-    LoremIpsum generator = new LoremIpsum(sample, dictionary);
-
-    @Before
-    public void setUp() throws Exception {
-        dictionary.split(" ");
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void test_mean() {
-        int[] ia1 = { 1, 2, 3, 4 };
-        assertEquals(2.5d, LoremIpsum.mean(ia1), 0.01d);
-        int[] ia2 = { 6, 6, 4, 4 };
-        assertEquals(5.0d, LoremIpsum.mean(ia2), 0.01d);
-    }
-
-    @Test
-    public void test_mean_empty() {
-        int[] ia1 = {};
-        assertEquals(0.0d, LoremIpsum.mean(ia1), 0.01d);
-    }
-
-    @Test
-    public void test_variance() {
-        double[] ia1 = { 6.0d, 6.0d, 4.0d, 4.0d };
-        assertEquals(1.0d, LoremIpsum.variance(ia1), 0.01d);
-        double[] ia2 = { 1.0d, 2.0d, 3.0d, 4.0d };
-        assertEquals(1.25d, LoremIpsum.variance(ia2), 0.01d);
-    }
-
-    @Test
-    public void test_sigma() {
-        double[] ia1 = { 6.0d, 6.0d, 4.0d, 4.0d };
-        double[] ia2 = { 1.0d, 2.0d, 3.0d, 4.0d };
-        assertEquals(1.0d, LoremIpsum.sigma(ia1), 0.01d);
-        assertEquals(Math.sqrt(1.25), LoremIpsum.sigma(ia2), 0.01d);
-    }
-
-    @Test
-    public void test_sigma_empty() {
-        int[] ia1 = {};
-        assertEquals(0.0d, LoremIpsum.sigma(ia1), 0.01d);
-    }
-
-    @Test
-    public void test_split_sentences() {
-        String[] sentences1 = { "Hello", "Hi" };
-        assertArrayEquals(sentences1, LoremIpsum.splitSentences("Hello. Hi."));
-        String[] sentences2 = { "One two three four five six", "Seven eight nine ten eleven twelve",
-                "Thirteen fourteen fifteen sixteen", "Seventeen eighteen nineteen twenty" };
-        assertArrayEquals(sentences2, LoremIpsum.splitSentences(sample));
-    }
-
-    @Test
-    public void test_split_sentences_empty() {
-        String[] sentences = {};
-        assertArrayEquals(sentences, LoremIpsum.splitSentences(""));
-    }
-
-    @Test
-    public void test_split_sentences_trailing() {
-        String[] sentences1 = { "Hello", "Hi", "Hello" };
-        assertArrayEquals(sentences1, LoremIpsum.splitSentences("Hello. Hi. Hello"));
-        String[] sentences2 = { "Hello", "Hi", "Hello" };
-        assertArrayEquals(sentences2, LoremIpsum.splitSentences("  Hello. Hi. Hello  "));
-        String[] sentences3 = { "Hello", "Hi", "Hello" };
-        assertArrayEquals(sentences3, LoremIpsum.splitSentences("..  Hello... Hi.... Hello  "));
-    }
-
-    @Test
-    public void test_split_paragraphs() {
-        String[] paragraphs = { "One two three four five six. Seven eight nine ten eleven twelve.",
-                "Thirteen fourteen fifteen sixteen. Seventeen eighteen nineteen twenty." };
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs(sample));
-    }
-
-    @Test
-    public void test_split_paragraphs_empty() {
-        String[] paragraphs = {};
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs(""));
-    }
-
-    @Test
-    public void test_split_paragraphs_trailing() {
-        String[] paragraphs = { "Hello", "Hi" };
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n\n"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n\n\n\n\n"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\nHello\n\nHi"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\nHello\n\nHi"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\n\nHello\n\nHi"));
-        assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\n\n\n\n\nHello\n\nHi"));
-    }
-
-    @Test
-    public void test_split_words() {
-        String[] words = { "One", "two", "three", "four" };
-        assertArrayEquals(words, LoremIpsum.splitWords("One two three four"));
-        assertArrayEquals(words, LoremIpsum.splitWords("  One    two  three  four   "));
-    }
-
-    @Test
-    public void test_split_words_empty() {
-        String[] words = {};
-        assertArrayEquals(words, LoremIpsum.splitWords(""));
-    }
-
-    @Test
-    public void test_choose_closest() {
-        Integer[] intArray1 = { 1, 2, 3, 4 };
-        assertEquals(1, LoremIpsum.chooseClosest(intArray1, 1));
-        Integer[] intArray2 = { 1, 2, 3, 4 };
-        assertEquals(4, LoremIpsum.chooseClosest(intArray2, 4));
-        assertEquals(4, LoremIpsum.chooseClosest(intArray2, 20));
-        assertEquals(1, LoremIpsum.chooseClosest(intArray2, -10));
-        Integer[] intArray3 = { 1, 4 };
-        assertEquals(1, LoremIpsum.chooseClosest(intArray3, 2));
-        assertEquals(4, LoremIpsum.chooseClosest(intArray3, 3));
-        Integer[] intArray4 = { 1, 3 };
-        assertEquals(1, LoremIpsum.chooseClosest(intArray4, 2));
-        Integer[] intArray5 = { 3, 1 };
-        assertEquals(3, LoremIpsum.chooseClosest(intArray5, 2));
-        Integer[] intArray6 = { 1 };
-        assertEquals(1, LoremIpsum.chooseClosest(intArray6, 200));
-    }
-
-    @Test
-    public void test_sentence_mean() {
-        assertEquals(5.0d, generator.getSentenceMean(), 0.01d);
-    }
-
-    @Test
-    public void test_paragraph_mean() {
-        assertEquals(2.0d, generator.getParagraphMean(), 0.01d);
-    }
-
-    @Test
-    public void test_sentence_sigma() {
-        assertEquals(1.0d, generator.getSentenceSigma(), 0.01d);
-    }
-
-    @Test
-    public void test_paragraph_sigma() {
-        assertEquals(0.0d, generator.getParagraphSigma(), 0.01d);
-    }
-
-    @Test
-    public void test_sample() {
-        assertEquals(generator.getSample(), sample);
-    }
-
-    @Test
-    public void test_dictionary() {
-        assertEquals(generator.getDictionary(), dictionary);
-    }
-
-    @Test
-    public void test_set_dictionary() {
-        String newdict = "a b c";
-        generator.setDictionary(newdict);
-        assertEquals(generator.getDictionary(), newdict);
-    }
-
-    @Test
-    public void test_init_no_sample() {
-        doGenerate("");
-        doGenerate(" ");
-        doGenerate("\n\n");
-        doGenerate("  \n\n  ");
-        doGenerate(" .\n\n .");
-    }
-
-    private void doGenerate(String text) {
-        try {
-            generator = new LoremIpsum(text, dictionary);
-            generator.generateParagraph(false);
-            fail("Sample text " + text + " should generate exception.");
-        } catch (RuntimeException e) {
-            assertTrue(e.getMessage().contains("Invalid sample text"));
-        }
-    }
-
-    @Test
-    public void test_init_no_dict() {
-        doGenerateNoDict("");
-        doGenerateNoDict(" ");
-        doGenerateNoDict("\n\n");
-        doGenerateNoDict("  \n\n  ");
-    }
-
-    private void doGenerateNoDict(String dict) {
-        try {
-            generator = new LoremIpsum(sample, dict);
-            generator.generateParagraph(false);
-            fail("Dictionary " + dict + " should generate exception.");
-        } catch (RuntimeException e) {
-            assertEquals(e.getMessage(), "Invalid dictionary.");
-        }
-    }
-
-    @Test
-    public void testGenerate() {
-        LOG.debug("Generate new text: ");
-        String newDict = "me you he the One two three four five six Seven eight nine ten eleven twelve "
-                + "Thirteen fourteen fifteen sixteen Seventeen eighteen nineteen twenty joe fred some";
-        String[] newParagraphs = new String[4];
-        generator.setDictionary(newDict);
-        for (int i = 0; i < newParagraphs.length; i++) {
-            newParagraphs[i] = generator.generateParagraph(false);
-            LOG.debug(newParagraphs[i]);
-            LOG.debug("");
-        }
-        assertFalse(newParagraphs[0].equals(newParagraphs[1]));
-        assertFalse(newParagraphs[0].equals(newParagraphs[2]));
-        assertFalse(newParagraphs[0].equals(newParagraphs[3]));
-        assertFalse(newParagraphs[1].equals(newParagraphs[2]));
-        assertFalse(newParagraphs[1].equals(newParagraphs[3]));
-        assertFalse(newParagraphs[2].equals(newParagraphs[3]));
-    }
-
-    @Test
-    public void testGenerateLoreIpsum() {
-        LOG.debug("Generate new Lore Ipsum text: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        String[] newParagraphs = new String[4];
-        for (int i = 0; i < newParagraphs.length; i++) {
-            newParagraphs[i] = ipsum.generateParagraph(false);
-            LOG.debug(newParagraphs[i]);
-            LOG.debug("");
-            LOG.debug("");
-        }
-    }
-
-    @Test
-    public void testGenerateLoreIpsumHtml1() {
-        LOG.debug("Generate new Lore Ipsum as html paragraphs:");
-        LoremIpsum ipsum = new LoremIpsum();
-        String output = ipsum.generateParagraphsHtml(2048, true);
-        LOG.debug(output);
-        LOG.debug("");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumHtml2() {
-        LOG.debug("Generate new Lore Ipsum as one html paragraph:");
-        LoremIpsum ipsum = new LoremIpsum();
-        String output = ipsum.generateOneParagraphHtml(2048, true);
-        LOG.debug(output);
-        LOG.debug("");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumHtml3() {
-        LOG.debug("Generate new Lore Ipsum as full html document: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        String output = ipsum.generateParagraphsFullHtml(2048, true);
-        LOG.debug(output);
-        LOG.debug("");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumPlainText() {
-        LOG.debug("Generate new Lore Ipsum as plain text: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        String output = ipsum.generateParagraphsPlainText(2048, true);
-        LOG.debug(output);
-        LOG.debug("");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumPlainTextFormatted() {
-        LOG.debug("Generate new Lore Ipsum as plain text with 60 columns: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        String output = ipsum.generateParagraphsPlainText(256, 60, false);
-        LOG.debug(output);
-        LOG.debug("");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumHtml1Writer() throws IOException {
-        LOG.debug("Generate new Lore Ipsum as html paragraphs with PrintWriter:");
-        LoremIpsum ipsum = new LoremIpsum();
-        StringWriter writer = new StringWriter();
-        ipsum.generateParagraphsHtml(writer, 2048, true);
-        LOG.debug(writer.toString());
-        LOG.debug("End Test.");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumHtml2Writer() throws IOException {
-        LOG.debug("Generate new Lore Ipsum as full html paragraph with PrintWriter:");
-        LoremIpsum ipsum = new LoremIpsum();
-        StringWriter writer = new StringWriter();
-        ipsum.generateParagraphsFullHtml(writer, 2048, true);
-        LOG.debug(writer.toString());
-        LOG.debug("End Test.");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumPlainTextWriter() throws IOException {
-        LOG.debug("Generate new Lore Ipsum as plain text with PrintWriter: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        StringWriter writer = new StringWriter();
-        ipsum.generateParagraphsPlainText(writer, 2048, true);
-        LOG.debug(writer.toString());
-        LOG.debug("End Test.");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumPlainTextFormattedWriter() throws IOException {
-        LOG.debug("Generate new Lore Ipsum as plain text with 60 columns with PrintWriter: ");
-        LoremIpsum ipsum = new LoremIpsum();
-        StringWriter writer = new StringWriter();
-        ipsum.generateParagraphsPlainText(writer, 256, 60, false);
-        LOG.debug(writer.toString());
-        LOG.debug("End Test.");
-    }
-
-    @Test
-    public void testGenerateLoreIpsumGerman() throws Exception {
-        LOG.debug("Generate new Lore Ipsum Ferry Tale: ");
-        InputStream is = this.getClass().getResourceAsStream("/HaenselUndGretel.txt");
-
-        // read stream into a string
-        final char[] buffer = new char[0x10000];
-        StringBuilder sample = new StringBuilder();
-        Reader in = new InputStreamReader(is, "ISO-8859-1");
-        int read;
-        do {
-            read = in.read(buffer, 0, buffer.length);
-            if (read > 0) {
-                sample.append(buffer, 0, read);
-            }
-        } while (read >= 0);
-
-        LoremIpsum ipsum = new LoremIpsum(sample.toString());
-        String output = ipsum.generateParagraphsPlainText(4096, 80, false);
-        LOG.debug(output);
-        LOG.debug("End Test.");
-    }
-
-}
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/HaenselUndGretel.txt b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/HaenselUndGretel.txt
deleted file mode 100644
index dcb1113..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/HaenselUndGretel.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-Hänsel und Grethel.

-

-Vor einem großen Walde wohnte ein armer Holzhacker mit seiner Frau und seinen zwei Kindern; das Bübchen hieß Hänsel und das Mädchen Grethel. Er hatte wenig zu beißen und zu brechen, und einmal, als große Theuerung ins Land kam, konnte er auch das täglich Brot nicht mehr schaffen. Wie er sich nun Abends im Bette Gedanken machte und sich vor Sorgen herum wälzte, seufzte er und sprach zu seiner Frau "was soll aus uns werden? wie können wir unsere armen Kinder ernähren, da wir für uns selbst nichts mehr haben?" "Weißt du was, Mann," antwortete die Frau, "wir wollen Morgen in aller Frühe die Kinder hinaus in den Wald führen, wo er am dicksten ist: da machen wir ihnen ein Feuer an und geben jedem noch ein Stückchen Brot, dann gehen wir an unsere Arbeit und lassen sie allein. Sie finden den Weg nicht wieder nach Haus und wir sind sie los." "Nein, Frau," sagte der Mann, "das thue ich nicht; wie sollt ichs übers Herz bringen meine Kinder im Walde allein zu lassen, die wilden Thiere würden bald kommen und sie zerreißen." "O du Narr," sagte sie, "dann müssen wir alle viere Hungers sterben, du kannst nur die Bretter für die Särge hobelen," und ließ ihm keine Ruhe bis er einwilligte. "Aber die armen Kinder dauern mich doch" sagte der Mann.

-

-Die zwei Kinder hatten vor Hunger auch nicht einschlafen können und hatten gehört was die Stiefmutter zum Vater gesagt 

-Als der Tag anbrach, noch ehe die Sonne aufgegangen war, kam schon die Frau und weckte die beiden Kinder, "steht auf, ihr Faullenzer, wir wollen in den Wald gehen und Holz holen." Dann gab sie jedem ein Stückchen Brot und sprach "da habt ihr etwas für den Mittag, aber eßts nicht vorher auf, weiter kriegt ihr nichts." Grethel nahm das Brot unter die Schürze, weil Hänsel die Steine in der Tasche hatte. Danach machten sie sich alle zusammen auf den Weg nach dem Wald. Als sie ein Weilchen gegangen waren, stand Hänsel still und guckte nach dem Haus zurück und that das wieder und immer wieder. Der Vater sprach "Hänsel, was guckst du da und bleibst zurück, hab Acht und vergiß deine Beine nicht." "Ach, Vater," sagte Hänsel, "ich sehe nach meinem weißen Kätzchen, das sitzt oben auf dem Dach und will mir Ade sagen." Die Frau sprach "Narr, das ist dein Kätzchen nicht, das ist die Morgensonne, die auf den Schornstein scheint." Hänsel aber hatte nicht nach dem Kätzchen gesehen, sondern immer einen von den blanken Kieselsteinen aus seiner Tasche auf den Weg geworfen.

-

-Als sie mitten in den Wald gekommen waren, sprach der Vater "nun sammelt Holz, ihr Kinder, ich will ein Feuer anmachen, damit ihr nicht friert." Hänsel und Grethel trugen Reisig zusammen, einen kleinen Berg hoch. Das Reisig ward angezündet, und als die Flamme recht hoch brannte, sagte die Frau "nun legt euch ans Feuer, ihr Kinder und ruht euch aus, wir gehen in den Wald und hauen Holz. Wenn wir fertig sind, kommen wir wieder und holen euch ab."

-

-Hänsel und Grethel saßen am Feuer, und als der Mittag kam, aß jedes sein Stücklein Brot. Und weil sie die Schläge der Holzaxt hörten, so glaubten sie ihr Vater wäre in der Nähe. Es war aber nicht die Holzaxt, es war ein Ast, den er an einen dürren Baum gebunden hatte und den der Wind hin und her schlug. Und als sie so lange gesessen hatten, fielen ihnen die Augen vor Müdigkeit zu, und sie schliefen fest ein. Als sie endlich erwachten, war es schon finstere Nacht. Grethel fieng an zu weinen und sprach "wie sollen wir nun aus dem Wald kommen!" Hänsel aber tröstete sie, "wart nur ein Weilchen, bis der Mond aufgegangen ist, dann wollen wir den Weg schon finden." Und als der volle Mond aufgestiegen war, so nahm Hänsel sein Schwesterchen an der Hand und gieng den Kieselsteinen nach, die schimmerten wie neu geschlagene Batzen und zeigten ihnen den Weg. Sie giengen die ganze Nacht hindurch und kamen bei anbrechendem Tag wieder zu ihres Vaters Haus. Sie klopften an die Thür, und als die Frau aufmachte und sah daß es Hänsel und Grethel war, sprach sie "ihr bösen Kinder, was habt ihr so lange im Walde geschlafen, wir haben geglaubt ihr wolltet gar nicht wieder kommen." Der Vater aber freute sich, denn es war ihm zu Herzen gegangen daß er sie so allein zurück gelassen hatte.

-

-Nicht lange danach war wieder Noth in allen Ecken, und die Kinder hörten wie die Mutter Nachts im Bette zu dem Vater sprach "alles ist wieder aufgezehrt, wir haben noch einen halben Laib Brot, hernach hat das Lied ein Ende. Die Kinder müssen fort, wir wollen sie tiefer in den Wald hineinführen, damit sie den Weg nicht wieder heraus finden; es ist sonst keine Rettung für uns." Dem Mann fiels schwer aufs Herz und er dachte "es wäre besser, daß du den letzten Bissen mit deinen Kindern theiltest." Aber die Frau hörte auf nichts, was er sagte, schalt ihn und machte ihm Vorwürfe. Wer A sagt muß auch B sagen, und weil er das erste Mal nachgegeben hatte, so mußte er es auch zum zweiten Mal.

-

-Die Kinder waren aber noch wach gewesen und hatten das Gespräch mit angehört. Als die Alten schliefen, stand Hänsel wieder auf, wollte hinaus und Kieselsteine auflesen, wie das vorigemal, aber die Frau hatte die Thür verschlossen, und Hänsel konnte nicht heraus. Aber er tröstete sein Schwesterchen und sprach "weine nicht, Grethel, und schlaf nur ruhig, der liebe Gott wird uns schon helfen."

-

-Am frühen Morgen kam die Frau und holte die Kinder aus dem Bette. Sie erhielten ihr Stückchen Brot, das war aber noch kleiner als das vorigemal. Auf dem Wege nach dem Wald bröckelte es Hänsel in der Tasche, stand oft still und warf ein Bröcklein auf die Erde. "Hänsel, was stehst du und guckst dich um," sagte der Vater, "geh deiner Wege." "Ich sehe nach meinem Täubchen, das sitzt auf dem Dache und will mir Ade sagen," antwortete Hänsel. "Narr," sagte die Frau, "das ist dein Täubchen nicht, das ist die Morgensonne, die auf den Schornstein oben scheint." Hänsel aber warf nach und nach alle Bröcklein auf den Weg.

-

-Die Frau führte die Kinder noch tiefer in den Wald, wo sie ihr Lebtag noch nicht gewesen waren. Da ward wieder ein großes Feuer angemacht, und die Mutter sagte "bleibt nur da sitzen, ihr Kinder, und wenn ihr müde seid, könnt ihr ein wenig schlafen: wir gehen in den Wald und hauen Holz, und Abends, wenn wir fertig sind, kommen wir und holen euch ab." Als es Mittag war, theilte Grethel ihr Brot mit Hänsel, der sein Stück auf den Weg gestreut hatte. Dann schliefen sie ein, und der Abend vergieng, aber niemand kam zu den armen Kindern. Sie erwachten erst in der finstern Nacht, und Hänsel tröstete sein Schwesterchen und sagte, "wart nur, Grethel, bis der Mond aufgeht, dann werden wir die Brotbröcklein sehen, die ich ausgestreut habe, die zeigen uns den Weg nach Haus." Als der Mond kam, machten sie sich auf, aber sie fanden kein Bröcklein mehr, denn die viel tausend Vögel, die im Walde und im Felde umher fliegen, die hatten sie weggepickt. Hänsel sagte zu Grethel "wir werden den Weg schon finden," aber sie fanden ihn nicht. Sie giengen die ganze Nacht und noch einen Tag von Morgen bis Abend, aber sie kamen aus dem Wald nicht heraus, und waren so hungrig, denn sie hatten nichts als die paar Beeren, die auf der Erde standen. Und weil sie so müde waren daß die Beine sie nicht mehr tragen wollten, so legten sie sich unter einen Baum und schliefen ein.

-

-Nun wars schon der dritte Morgen, daß sie ihres Vaters Haus verlassen hatten. Sie fiengen wieder an zu gehen, aber sie geriethen immer tiefer in den Wald und wenn nicht bald Hilfe kam, so mußten sie verschmachten. Als es Mittag war, sahen sie ein schönes schneeweißes Vöglein auf einem Ast sitzen, das sang so schön, daß sie stehen blieben und ihm zuhörten. Und als es fertig war, schwang es seine Flügel und flog vor ihnen her, und sie giengen ihm nach, bis sie zu einem Häuschen gelangten, auf dessen Dach es sich setzte, und als sie ganz nah heran kamen, so sahen sie daß das Häuslein aus Brot gebaut war, und mit Kuchen gedeckt; aber die Fenster waren von hellem Zucker. "Da wollen wir uns dran machen," sprach Hänsel, "und eine gesegnete Mahlzeit halten. Ich will ein Stück vom Dach essen, Grethel, du kannst vom Fenster essen, das schmeckt süß." Hänsel reichte in die Höhe und brach sich ein wenig vom Dach ab, um zu versuchen wie es schmeckte, und Grethel stellte sich an die Scheiben und knuperte daran. Da rief eine feine Stimme aus der Stube heraus

-

-"knuper, knuper, kneischen,

-wer knupert an meinem Häuschen?"

-

-die Kinder antworteten

-

-"der Wind, der Wind,

-das himmlische Kind,"

-

-und aßen weiter, ohne sich irre machen zu lassen. Hänsel, dem das Dach sehr gut schmeckte, riß sich ein großes Stück davon herunter, und Grethel stieß eine ganze runde Fensterscheibe heraus, setzte sich nieder, und that sich wohl damit. Da gieng auf einmal die Thüre auf, und eine steinalte Frau, die sich auf eine Krücke stützte, kam heraus geschlichen. Hänsel und Grethel erschracken so gewaltig, daß sie fallen ließen was sie in den Händen hielten. Die Alte aber wackelte mit dem Kopfe und sprach "ei, ihr lieben Kinder, wer hat euch hierher gebracht? kommt nur herein und bleibt bei mir, es geschieht euch kein Leid." Sie faßte beide an der Hand und führte sie in ihr Häuschen. Da ward gutes Essen aufgetragen, Milch und Pfannekuchen mit Zucker, Äpfel und Nüsse. Hernach wurden zwei schöne Bettlein weiß gedeckt, und Hänsel und Grethel legten sich hinein und meinten sie wären im Himmel.

-

-Die Alte hatte sich nur so freundlich angestellt, sie war aber eine böse Hexe, die den Kindern auflauerte, und hatte das Brothäuslein bloß gebaut, um sie herbeizulocken. Wenn eins in ihre Gewalt kam, so machte sie es todt, kochte es und aß es, und das war ihr ein Festtag. Die Hexen haben rothe Augen und können nicht weit sehen, aber sie haben eine feine Witterung, wie die Thiere, und merkens wenn Menschen heran kommen. Als Hänsel und Grethel in ihre Nähe kamen, da lachte sie boshaft und sprach höhnisch "die habe ich, die sollen mir nicht wieder entwischen." Früh Morgens ehe die Kinder erwacht waren, stand sie schon auf, und als sie beide so lieblich ruhen sah, mit den vollen rothen Backen, so murmelte sie vor sich hin "das wird ein guter Bissen werden." Da packte sie Hänsel mit ihrer dürren Hand und trug ihn in einen kleinen Stall und sperrte ihn mit einer Gitterthüre ein; er mochte schreien wie er wollte, es half ihm nichts. Dann gieng sie zur Grethel, rüttelte sie wach und rief "steh auf, Faullenzerin, trag Wasser und koch deinem Bruder etwas gutes, der sitzt draußen im Stall und soll fett werden. Wenn er fett ist, so will ich ihn essen." Grethel fieng an bitterlich zu weinen, aber es war alles vergeblich, sie mußte thun was die böse Hexe verlangte.

-

-Nun ward dem armen Hänsel das beste Essen gekocht, aber Grethel bekam nichts als Krebsschalen. Jeden Morgen schlich die Alte zu dem Ställchen und rief "Hänsel, streck deine Finger heraus, damit ich fühle ob du bald fett bist." Hänsel streckte ihr aber ein Knöchlein heraus, und die Alte, die trübe Augen hatte, konnte es nicht sehen, und meinte es wären Hänsels Finger, und verwunderte sich daß er gar nicht fett werden wollte. Als vier Wochen herum waren und Hänsel immer mager blieb, da übernahm sie die Ungeduld, und sie wollte nicht länger warten. "Heda, Grethel," rief sie dem Mädchen zu, "sei flink und trag Wasser: Hänsel mag fett oder mager sein, morgen will ich ihn schlachten und kochen." Ach, wie jammerte das arme Schwesterchen, als es das Wasser tragen mußte, und wie flossen ihm die Thränen über die Backen herunter! "Lieber Gott, hilf uns doch," rief sie aus, "hätten uns nur die wilden Thiere im Wald gefressen, so wären wir doch zusammen gestorben." "Spar nur dein Geblärre," sagte die Alte, "es hilft dir alles nichts."

-

-Früh Morgens mußte Grethel heraus, den Kessel mit Wasser aufhängen und Feuer anzünden. "Erst wollen wir backen" sagte die Alte, "ich habe den Backofen schon eingeheizt und den Teig geknätet." Sie stieß das arme Grethel hinaus zu dem Backofen, aus dem die Feuerflammen schon heraus schlugen. "Kriech hinein," sagte die Hexe, "und sieh zu ob recht eingeheizt ist, damit wir das Brot hineinschieben können." Und wenn Grethel darin war, wollte sie den Ofen zumachen, und Grethel sollte darin braten, und dann wollte sies auch aufessen. Aber Grethel merkte was sie im Sinn hatte und sprach "ich weiß nicht wie ichs machen soll; wie komm ich da hinein?" "Dumme Gans," sagte die Alte, "die Öffnung ist groß genug, siehst du wohl, ich könnte selbst hinein," krappelte heran und steckte den Kopf in den Backofen. Da gab ihr Grethel einen Stoß daß sie weit hinein fuhr, machte die eiserne Thür zu und schob den Riegel vor. Hu! da fieng sie an zu heulen, ganz grauselich; aber Grethel lief fort, und die gottlose Hexe mußte elendiglich verbrennen.

-

-Grethel aber lief schnurstracks zum Hänsel, öffnete sein Ställchen und rief "Hänsel, wir sind erlöst, die alte Hexe ist todt." Da sprang Hänsel heraus, wie ein Vogel aus dem Käfig, wenn ihm die Thüre aufgemacht wird. Wie haben sie sich gefreut, sind sich um den Hals gefallen, sind herumgesprungen und haben sich geküßt! Und weil sie sich nicht mehr zu fürchten brauchten, so giengen sie in das Haus der Hexe hinein, da standen in allen Ecken Kasten mit Perlen und Edelsteinen. "Die sind noch besser als Kieselsteine" sagte Hänsel und steckte in seine Taschen was hinein wollte, und Grethel sagte "ich will auch etwas mit nach Haus bringen" und füllte sich sein Schürzchen voll. "Aber jetzt wollen wir fort," sagte Hänsel, "damit wir aus dem Hexenwald herauskommen." Als sie aber ein paar Stunden gegangen waren, gelangten sie an ein großes Wasser. "Wir können nicht hinüber," sprach Hänsel, "ich sehe keinen Steg und keine Brücke." "Hier fährt auch kein Schiffchen," antwortete Grethel, "aber da schwimmt eine weiße Ente, wenn ich die bitte, so hilft sie uns hinüber." Da rief sie

-

-"Entchen, Entchen,

-da steht Grethel und Hänsel.

-Kein Steg und keine Brücke,

-nimm uns auf deinen weißen Rücken."

-

-Das Entchen kam auch heran, und Hänsel setzte sich auf und bat sein Schwesterchen sich zu ihm zu setzen. "Nein," antwortete Grethel, "es wird dem Entchen zu schwer, es soll uns nach einander hinüber bringen." Das that das gute Thierchen, und als sie glücklich drüben waren und ein Weilchen fortgiengen, da kam ihnen der Wald immer bekannter und immer bekannter vor, und endlich erblickten sie von weitem ihres Vaters Haus. Da fiengen sie an zu laufen, stürzten in die Stube hinein und fielen ihrem Vater um den Hals. Der Mann hatte keine frohe Stunde gehabt, seitdem er die Kinder im Walde gelassen hatte, die Frau aber war gestorben. Grethel schüttete sein Schürzchen aus daß die Perlen und Edelsteine in der Stube herumsprangen, und Hänsel warf eine Handvoll nach der andern aus seiner Tasche dazu. Da hatten alle Sorgen ein Ende, und sie lebten in lauter Freude zusammen. Mein Märchen ist aus, dort lauft eine Maus, wer sie fängt, darf sich eine große große Pelzkappe daraus machen
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/log4j.properties b/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/log4j.properties
deleted file mode 100644
index aa5aec1..0000000
--- a/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more

-# contributor license agreements.  See the NOTICE file distributed with

-# this work for additional information regarding copyright ownership.

-# The ASF licenses this file to You under the Apache License, Version 2.0

-# (the "License"); you may not use this file except in compliance with

-# the License.  You may obtain a copy of the License at

-# 

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

-# 

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

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

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

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

-# limitations under the License.

-

-# sample log4j.properties

-

-log4j.rootCategory=WARN, R, O

-

-# Stdout

-log4j.appender.O=org.apache.log4j.ConsoleAppender

-

-# File

-log4j.appender.R=org.apache.log4j.RollingFileAppender

-log4j.appender.R.File=log4j.log

-

-# Control the maximum log file size

-log4j.appender.R.MaxFileSize=100KB

-

-# Archive log files (one backup file here)

-log4j.appender.R.MaxBackupIndex=0

-log4j.appender.R.layout=org.apache.log4j.PatternLayout

-log4j.appender.O.layout=org.apache.log4j.PatternLayout

-# log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-# log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

-log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %-5p: %m%n

-log4j.appender.O.layout.ConversionPattern=%d{ISO8601} %-5p: %m%n

-

-log4j.logger.org.apache.chemistry.opencmis.util=WARN
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/pom.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/pom.xml
deleted file mode 100644
index 2a86c1e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/pom.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.chemistry.opencmis</groupId>
-        <artifactId>chemistry-opencmis</artifactId>
-        <version>0.13.0</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>chemistry-opencmis-workbench</artifactId>
-    <name>OpenCMIS Workbench</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <parentBasedir>../../</parentBasedir>
-    </properties>
-
-    <build>
-        <resources>
-          <resource>
-            <directory>${basedir}/src/main/resources</directory>
-          </resource>
-          <resource>
-            <directory>${project.build.directory}/generated-resources</directory>
-          </resource>
-        </resources>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.2-beta-5</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <target>${maven.compile.target}</target>
-                    <source>${maven.compile.source}</source>
-                    <encoding>UTF-8</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>2.1.2</version>
-                <executions>
-                    <execution>
-                        <id>attach-sources</id>
-                        <goals>
-                            <goal>jar-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <includePom>true</includePom>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.5</version>
-                <configuration>
-                    <encoding>UTF-8</encoding>
-                    <filtering>false</filtering>
-                </configuration>
-            </plugin>
-            <plugin>
-                 <artifactId>maven-antrun-plugin</artifactId>
-                 <executions>
-                     <execution>
-                         <phase>generate-resources</phase>
-                         <configuration>
-                             <target>
-                                 <property name="version" value="${maven.version}" />
-                                 <property name="timestamp" value="${timestamp}" />
-                                 <property name="revision" value="${buildNumber}" />
-                                 <property name="basedir" value="${maven.basedir}" />
-                                 <property name="targetdir" value="${project.build.directory}" />
-                                 <property name="workbench.jar" value="${project.artifactId}-${project.version}.${project.packaging}" />
-                                 
-                                 <!-- build timestamp -->
-                                 <echo file="${targetdir}/generated-resources/META-INF/build-timestamp.txt">Version: ${project.version} / Revision: ${revision} / Build: ${timestamp}</echo>
-                                 
-                                 <!-- start scripts -->
-                                 <mkdir dir="${targetdir}/start" />
-                                 <copy todir="${targetdir}/start" overwrite="true">
-                                     <fileset dir="${basedir}/src/main/start" />
-                                 </copy>
-                                 <replace dir="${targetdir}/start">
-                                     <replacefilter token="@workbench.jar@" value="${workbench.jar}" />
-                                     <replacefilter token="@version@" value="Version: ${project.version} / Revision: ${revision} / Build: ${timestamp}" />
-                                     <replacefilter token="@versionnumber@" value="${project.version}" />
-                                 </replace>
-                                 <chmod dir="${targetdir}/start" perm="+x" includes="**/*.sh" />
-                             </target>
-                         </configuration>
-                         <goals>
-                             <goal>run</goal>
-                         </goals>
-                     </execution>
-                 </executions>
-            </plugin>                  
-            <plugin>
-                <artifactId>maven-eclipse-plugin</artifactId>
-                <version>2.9</version>
-                <configuration>
-                    <downloadSources>true</downloadSources>
-                    <downloadJavadocs>true</downloadJavadocs>
-                    <workspace>.</workspace>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <addMavenDescriptor>false</addMavenDescriptor>
-                        <manifest>
-                            <mainClass>org.apache.chemistry.opencmis.workbench.Workbench</mainClass>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix />
-                        </manifest>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>pack-workbench</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>true</attach>
-                            <descriptors>
-                                <descriptor>src/main/assembly/workbench-assembly.xml</descriptor>
-                                <descriptor>src/main/assembly/workbench-ri-assembly.xml</descriptor>
-                                <descriptor>src/main/assembly/workbench-cxf-assembly.xml</descriptor>
-                                <descriptor>src/main/assembly/workbench-axis2-assembly.xml</descriptor>  
-                            </descriptors>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>mac-workbench</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>true</attach>
-                            <finalName>CMIS Workbench ${project.version}.app</finalName>
-                            <appendAssemblyId>false</appendAssemblyId>
-                            <descriptors>
-                                <descriptor>
-                                  src/main/assembly/workbench-mac-assembly.xml
-                                </descriptor>  
-                            </descriptors>
-                        </configuration>
-                     </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo.webstart</groupId>
-                <artifactId>webstart-maven-plugin</artifactId>
-                <version>1.0-beta-1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>jnlp-inline</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <libPath>lib</libPath>
-                    <jnlp>
-                        <mainClass>org.apache.chemistry.opencmis.workbench.Workbench</mainClass>
-                    </jnlp>
-                    <pack200>true</pack200>
-                    <gzip>true</gzip>
-
-                    <sign>
-                        <keystore>${project.build.directory}/keystore</keystore>
-                        <keypass>password</keypass>
-                        <storepass>password</storepass>
-                        <alias>webstart</alias>
-
-                        <validity>365</validity>
-                        <dnameCn>OpenCMIS Development Team</dnameCn>
-                        <dnameOu>Apache Chemistry OpenCMIS</dnameOu>
-                        <dnameO>The Apache Software Foundation</dnameO>
-
-                        <verify>true</verify>
-
-                        <keystoreConfig>
-                            <delete>true</delete>
-                            <gen>true</gen>
-                        </keystoreConfig>
-                    </sign>
-
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>chemistry-opencmis-test-tck</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-all</artifactId>
-            <version>2.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>          
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>${log4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.zxing</groupId>
-            <artifactId>javase</artifactId>
-            <version>2.2</version>
-        </dependency>
-        <!-- Sun RI -->
-        <dependency>
-            <groupId>org.jvnet.mimepull</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>${mimepull.version}</version>
-            <scope>provided</scope>
-        </dependency> 
-        <dependency>
-            <groupId>com.sun.xml.ws</groupId>
-            <artifactId>jaxws-rt</artifactId>
-            <version>${jaxws-rt.version}</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>javax.xml.stream</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion> <!-- included in Java 6 and above -->
-                    <groupId>stax</groupId>
-                    <artifactId>stax-api</artifactId>
-                </exclusion>
-                <exclusion>	 
-                    <groupId>org.codehaus.woodstox</groupId>	 
-                    <artifactId>wstx-asl</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>junit</groupId>	 
-                    <artifactId>junit</artifactId>	 
-                </exclusion>	 
-                <exclusion>	 
-                    <groupId>org.jvnet</groupId>	 
-                    <artifactId>mimepull</artifactId>	 
-                </exclusion>	 
-            </exclusions>
-        </dependency>
-        <!-- CXF -->
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxws</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-transports-http</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-ws-policy</artifactId>
-            <version>${cxf.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <!-- Axis2 -->
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-jaxws</artifactId>
-            <version>${axis2.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-adb</artifactId>
-            <version>${axis2.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-transport-local</artifactId>
-            <version>${axis2.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-mtompolicy</artifactId>
-            <version>${axis2.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-	        <groupId>wsdl4j</groupId>
-	        <artifactId>wsdl4j</artifactId>
-	        <version>1.6.3</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-
-    <!--
-        Extending the default -Papache-release profile used *only*
-        during releases
-    -->
-    <profiles>
-       <profile>
-           <id>apache-release</id>
-           <activation>
-               <activeByDefault>false</activeByDefault>
-           </activation>
-           <build>
-               <plugins>
-                   <plugin>
-                      <artifactId>maven-assembly-plugin</artifactId>
-                      <inherited>false</inherited>
-                      <executions>
-                          <execution>
-                              <id>pack-workbench</id>
-                              <goals>
-                                  <goal>single</goal>
-                              </goals>
-                              <phase>package</phase>
-                              <configuration>
-                                  <attach>true</attach>
-                                  <descriptors>
-                                      <descriptor>
-                                        src/main/assembly/workbench-assembly.xml
-                                      </descriptor>                                  
-                                  </descriptors>
-                              </configuration>
-                          </execution>
-                      </executions>
-                  </plugin>
-              </plugins>
-           </build>
-       </profile>
-   </profiles>
-</project>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-license.txt b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-license.txt
deleted file mode 100644
index 7663160..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-license.txt
+++ /dev/null
@@ -1,726 +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.
-
-
-=======================================================================
-- Groovy (http://groovy.codehaus.org/)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-- ZXing Core (http://nexus.sonatype.org/oss-repository-hosting.html/core)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-- ZXing Java SE extensions (http://nexus.sonatype.org/oss-repository-hosting.html/javase)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-=======================================================================
-- Woodstox (http://woodstox.codehaus.org)
-  License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-This copy of Woodstox XML processor is licensed under the
-Apache (Software) License, version 2.0 ("the License").
-See the License for details about distribution rights, and the
-specific rights regarding derivate works.
-
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/
-
-A copy is also included with both the the downloadable source code package
-and jar that contains class bytecodes, as file "ASL 2.0". In both cases,
-that file should be located next to this file: in source distribution
-the location should be "release-notes/asl"; and in jar "META-INF/"
-
-
-=======================================================================
-- Stax2 API (http://woodstox.codehaus.org/StAX2)
-  License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)
-
-
-Copyright (c) 2004-2010, Woodstox Project (http://woodstox.codehaus.org/)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-3. Neither the name of the Woodstox XML Processor nor the names
-   of its contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- Streaming API for XML (http://stax.codehaus.org)
-  License: Dual license consisting of the CDDL v1.0 and GPL v2  (https://glassfish.dev.java.net/public/CDDL+GPL.html)
-
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      1. Definitions.
-            1.1. "Contributor" means each individual or entity that
-            creates or contributes to the creation of Modifications.
-            1.2. "Contributor Version" means the combination of the
-            Original Software, prior Modifications used by a
-            Contributor (if any), and the Modifications made by that
-            particular Contributor.
-            1.3. "Covered Software" means (a) the Original Software, or
-            (b) Modifications, or (c) the combination of files
-            containing Original Software with files containing
-            Modifications, in each case including portions thereof.
-            1.4. "Executable" means the Covered Software in any form
-            other than Source Code. 
-            1.5. "Initial Developer" means the individual or entity
-            that first makes Original Software available under this
-            License. 
-            1.6. "Larger Work" means a work which combines Covered
-            Software or portions thereof with code not governed by the
-            terms of this License.
-            1.7. "License" means this document.
-            1.8. "Licensable" means having the right to grant, to the
-            maximum extent possible, whether at the time of the initial
-            grant or subsequently acquired, any and all of the rights
-            conveyed herein.
-            1.9. "Modifications" means the Source Code and Executable
-            form of any of the following: 
-                  A. Any file that results from an addition to,
-                  deletion from or modification of the contents of a
-                  file containing Original Software or previous
-                  Modifications; 
-                  B. Any new file that contains any part of the
-                  Original Software or previous Modification; or 
-                  C. Any new file that is contributed or otherwise made
-                  available under the terms of this License.
-            1.10. "Original Software" means the Source Code and
-            Executable form of computer software code that is
-            originally released under this License. 
-            1.11. "Patent Claims" means any patent claim(s), now owned
-            or hereafter acquired, including without limitation,
-            method, process, and apparatus claims, in any patent
-            Licensable by grantor. 
-            1.12. "Source Code" means (a) the common form of computer
-            software code in which modifications are made and (b)
-            associated documentation included in or with such code.
-            1.13. "You" (or "Your") means an individual or a legal
-            entity exercising rights under, and complying with all of
-            the terms of, this License. For legal entities, "You"
-            includes any entity which controls, is controlled by, or is
-            under common control with You. For purposes of this
-            definition, "control" means (a) the power, direct or
-            indirect, to cause the direction or management of such
-            entity, whether by contract or otherwise, or (b) ownership
-            of more than fifty percent (50%) of the outstanding shares
-            or beneficial ownership of such entity.
-      2. License Grants. 
-            2.1. The Initial Developer Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, the
-            Initial Developer hereby grants You a world-wide,
-            royalty-free, non-exclusive license: 
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Initial Developer,
-                  to use, reproduce, modify, display, perform,
-                  sublicense and distribute the Original Software (or
-                  portions thereof), with or without Modifications,
-                  and/or as part of a Larger Work; and 
-                  (b) under Patent Claims infringed by the making,
-                  using or selling of Original Software, to make, have
-                  made, use, practice, sell, and offer for sale, and/or
-                  otherwise dispose of the Original Software (or
-                  portions thereof). 
-                  (c) The licenses granted in Sections 2.1(a) and (b)
-                  are effective on the date Initial Developer first
-                  distributes or otherwise makes the Original Software
-                  available to a third party under the terms of this
-                  License. 
-                  (d) Notwithstanding Section 2.1(b) above, no patent
-                  license is granted: (1) for code that You delete from
-                  the Original Software, or (2) for infringements
-                  caused by: (i) the modification of the Original
-                  Software, or (ii) the combination of the Original
-                  Software with other software or devices. 
-            2.2. Contributor Grant.
-            Conditioned upon Your compliance with Section 3.1 below and
-            subject to third party intellectual property claims, each
-            Contributor hereby grants You a world-wide, royalty-free,
-            non-exclusive license:
-                  (a) under intellectual property rights (other than
-                  patent or trademark) Licensable by Contributor to
-                  use, reproduce, modify, display, perform, sublicense
-                  and distribute the Modifications created by such
-                  Contributor (or portions thereof), either on an
-                  unmodified basis, with other Modifications, as
-                  Covered Software and/or as part of a Larger Work; and
-                  (b) under Patent Claims infringed by the making,
-                  using, or selling of Modifications made by that
-                  Contributor either alone and/or in combination with
-                  its Contributor Version (or portions of such
-                  combination), to make, use, sell, offer for sale,
-                  have made, and/or otherwise dispose of: (1)
-                  Modifications made by that Contributor (or portions
-                  thereof); and (2) the combination of Modifications
-                  made by that Contributor with its Contributor Version
-                  (or portions of such combination). 
-                  (c) The licenses granted in Sections 2.2(a) and
-                  2.2(b) are effective on the date Contributor first
-                  distributes or otherwise makes the Modifications
-                  available to a third party. 
-                  (d) Notwithstanding Section 2.2(b) above, no patent
-                  license is granted: (1) for any code that Contributor
-                  has deleted from the Contributor Version; (2) for
-                  infringements caused by: (i) third party
-                  modifications of Contributor Version, or (ii) the
-                  combination of Modifications made by that Contributor
-                  with other software (except as part of the
-                  Contributor Version) or other devices; or (3) under
-                  Patent Claims infringed by Covered Software in the
-                  absence of Modifications made by that Contributor. 
-      3. Distribution Obligations.
-            3.1. Availability of Source Code.
-            Any Covered Software that You distribute or otherwise make
-            available in Executable form must also be made available in
-            Source Code form and that Source Code form must be
-            distributed only under the terms of this License. You must
-            include a copy of this License with every copy of the
-            Source Code form of the Covered Software You distribute or
-            otherwise make available. You must inform recipients of any
-            such Covered Software in Executable form as to how they can
-            obtain such Covered Software in Source Code form in a
-            reasonable manner on or through a medium customarily used
-            for software exchange.
-            3.2. Modifications.
-            The Modifications that You create or to which You
-            contribute are governed by the terms of this License. You
-            represent that You believe Your Modifications are Your
-            original creation(s) and/or You have sufficient rights to
-            grant the rights conveyed by this License.
-            3.3. Required Notices.
-            You must include a notice in each of Your Modifications
-            that identifies You as the Contributor of the Modification.
-            You may not remove or alter any copyright, patent or
-            trademark notices contained within the Covered Software, or
-            any notices of licensing or any descriptive text giving
-            attribution to any Contributor or the Initial Developer.
-            3.4. Application of Additional Terms.
-            You may not offer or impose any terms on any Covered
-            Software in Source Code form that alters or restricts the
-            applicable version of this License or the recipients'
-            rights hereunder. You may choose to offer, and to charge a
-            fee for, warranty, support, indemnity or liability
-            obligations to one or more recipients of Covered Software.
-            However, you may do so only on Your own behalf, and not on
-            behalf of the Initial Developer or any Contributor. You
-            must make it absolutely clear that any such warranty,
-            support, indemnity or liability obligation is offered by
-            You alone, and You hereby agree to indemnify the Initial
-            Developer and every Contributor for any liability incurred
-            by the Initial Developer or such Contributor as a result of
-            warranty, support, indemnity or liability terms You offer.
-            3.5. Distribution of Executable Versions.
-            You may distribute the Executable form of the Covered
-            Software under the terms of this License or under the terms
-            of a license of Your choice, which may contain terms
-            different from this License, provided that You are in
-            compliance with the terms of this License and that the
-            license for the Executable form does not attempt to limit
-            or alter the recipient's rights in the Source Code form
-            from the rights set forth in this License. If You
-            distribute the Covered Software in Executable form under a
-            different license, You must make it absolutely clear that
-            any terms which differ from this License are offered by You
-            alone, not by the Initial Developer or Contributor. You
-            hereby agree to indemnify the Initial Developer and every
-            Contributor for any liability incurred by the Initial
-            Developer or such Contributor as a result of any such terms
-            You offer.
-            3.6. Larger Works.
-            You may create a Larger Work by combining Covered Software
-            with other code not governed by the terms of this License
-            and distribute the Larger Work as a single product. In such
-            a case, You must make sure the requirements of this License
-            are fulfilled for the Covered Software. 
-      4. Versions of the License. 
-            4.1. New Versions.
-            Sun Microsystems, Inc. is the initial license steward and
-            may publish revised and/or new versions of this License
-            from time to time. Each version will be given a
-            distinguishing version number. Except as provided in
-            Section 4.3, no one other than the license steward has the
-            right to modify this License. 
-            4.2. Effect of New Versions.
-            You may always continue to use, distribute or otherwise
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. If the Initial Developer includes a
-            notice in the Original Software prohibiting it from being
-            distributed or otherwise made available under any
-            subsequent version of the License, You must distribute and
-            make the Covered Software available under the terms of the
-            version of the License under which You originally received
-            the Covered Software. Otherwise, You may also choose to
-            use, distribute or otherwise make the Covered Software
-            available under the terms of any subsequent version of the
-            License published by the license steward. 
-            4.3. Modified Versions.
-            When You are an Initial Developer and You want to create a
-            new license for Your Original Software, You may create and
-            use a modified version of this License if You: (a) rename
-            the license and remove any references to the name of the
-            license steward (except to note that the license differs
-            from this License); and (b) otherwise make it clear that
-            the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
-      BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-      INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
-      SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
-      PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
-      PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
-      COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
-      INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
-      ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
-      WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-      ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
-      DISCLAIMER. 
-      6. TERMINATION. 
-            6.1. This License and the rights granted hereunder will
-            terminate automatically if You fail to comply with terms
-            herein and fail to cure such breach within 30 days of
-            becoming aware of the breach. Provisions which, by their
-            nature, must remain in effect beyond the termination of
-            this License shall survive.
-            6.2. If You assert a patent infringement claim (excluding
-            declaratory judgment actions) against Initial Developer or
-            a Contributor (the Initial Developer or Contributor against
-            whom You assert such claim is referred to as "Participant")
-            alleging that the Participant Software (meaning the
-            Contributor Version where the Participant is a Contributor
-            or the Original Software where the Participant is the
-            Initial Developer) directly or indirectly infringes any
-            patent, then any and all rights granted directly or
-            indirectly to You by such Participant, the Initial
-            Developer (if the Initial Developer is not the Participant)
-            and all Contributors under Sections 2.1 and/or 2.2 of this
-            License shall, upon 60 days notice from Participant
-            terminate prospectively and automatically at the expiration
-            of such 60 day notice period, unless if within such 60 day
-            period You withdraw Your claim with respect to the
-            Participant Software against such Participant either
-            unilaterally or pursuant to a written agreement with
-            Participant.
-            6.3. In the event of termination under Sections 6.1 or 6.2
-            above, all end user licenses that have been validly granted
-            by You or any distributor hereunder prior to termination
-            (excluding licenses granted to You by any distributor)
-            shall survive termination.
-      7. LIMITATION OF LIABILITY.
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-      INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-      COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
-      LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
-      CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
-      LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
-      STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
-      INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
-      APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
-      NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
-      CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
-      APPLY TO YOU.
-      8. U.S. GOVERNMENT END USERS.
-      The Covered Software is a "commercial item," as that term is
-      defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
-      computer software" (as that term is defined at 48 C.F.R. ¤
-      252.227-7014(a)(1)) and "commercial computer software
-      documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
-      1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
-      through 227.7202-4 (June 1995), all U.S. Government End Users
-      acquire Covered Software with only those rights set forth herein.
-      This U.S. Government Rights clause is in lieu of, and supersedes,
-      any other FAR, DFAR, or other clause or provision that addresses
-      Government rights in computer software under this License.
-      9. MISCELLANEOUS.
-      This License represents the complete agreement concerning subject
-      matter hereof. If any provision of this License is held to be
-      unenforceable, such provision shall be reformed only to the
-      extent necessary to make it enforceable. This License shall be
-      governed by the law of the jurisdiction specified in a notice
-      contained within the Original Software (except to the extent
-      applicable law, if any, provides otherwise), excluding such
-      jurisdiction's conflict-of-law provisions. Any litigation
-      relating to this License shall be subject to the jurisdiction of
-      the courts located in the jurisdiction and venue specified in a
-      notice contained within the Original Software, with the losing
-      party responsible for costs, including, without limitation, court
-      costs and reasonable attorneys' fees and expenses. The
-      application of the United Nations Convention on Contracts for the
-      International Sale of Goods is expressly excluded. Any law or
-      regulation which provides that the language of a contract shall
-      be construed against the drafter shall not apply to this License.
-      You agree that You alone are responsible for compliance with the
-      United States export administration regulations (and the export
-      control laws and regulation of any other countries) when You use,
-      distribute or otherwise make available any Covered Software.
-      10. RESPONSIBILITY FOR CLAIMS.
-      As between Initial Developer and the Contributors, each party is
-      responsible for claims and damages arising, directly or
-      indirectly, out of its utilization of rights under this License
-      and You agree to work with Initial Developer and Contributors to
-      distribute such responsibility on an equitable basis. Nothing
-      herein is intended or shall be deemed to constitute any admission
-      of liability.
-
-
-=======================================================================
-- ANTLR
-
-
-ANTLR 1989-2006 Developed by Terence Parr
-Partially supported by University of San Francisco & jGuru.com
-
-We reserve no legal rights to the ANTLR--it is fully in the
-public domain. An individual or company may do whatever
-they wish with source code distributed with ANTLR or the
-code generated by ANTLR, including the incorporation of
-ANTLR, or its output, into commerical software.
-
-We encourage users to develop software with ANTLR. However,
-we do ask that credit is given to us for developing
-ANTLR. By "credit", we mean that if you use ANTLR or
-incorporate any source code into one of your programs
-(commercial product, research project, or otherwise) that
-you acknowledge this fact somewhere in the documentation,
-research report, etc... If you like ANTLR and have
-developed a nice tool with the output, please mention that
-you developed it using ANTLR. In addition, we ask that the
-headers remain intact in our source code. As long as these
-guidelines are kept, we expect to continue enhancing this
-system and expect to make other tools available as they are
-completed.
-
-The primary ANTLR guy:
-
-Terence Parr
-parrt@cs.usfca.edu
-parrt@antlr.org
-
-
-=======================================================================
-- ASM
-
-
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- JSR223
-
-
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.  
- * Use is subject to license terms.
- *
- * Redistribution and use in source and binary forms, with or without modification, are 
- * permitted provided that the following conditions are met: Redistributions of source code 
- * must retain the above copyright notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list of 
- * conditions and the following disclaimer in the documentation and/or other materials 
- * provided with the distribution. Neither the name of the Sun Microsystems nor the names of 
- * is contributors may be used to endorse or promote products derived from this software 
- * without specific prior written permission. 
-
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
-
-
-=======================================================================
-- SLF4J API Module (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-- SLF4J LOG4J-12 Binding (http://www.slf4j.org)
-  License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
-
-
-Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
- 
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
- 
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-notice.txt b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-notice.txt
deleted file mode 100644
index 37c0c19..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly-notice.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-
-OpenCMIS Workbench
-Copyright 2009-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-OpenCMIS contains code from the following Open Source projects:
-
-- Base64 
-  Copyright (c) 2010 Robert Harder
-  Public Domain, <http://iharder.net/base64>
-
-- JSON.simple
-  Copyright (c) 2012 Yidong Fang
-  Apache License 2.0, <http://code.google.com/p/json-simple/>
-  
-  
-OpenCMIS contains OASIS CMIS 1.0 and CMIS 1.1 schema and WSDL files.
-Copyright (c) 2010 and 2013 OASIS Open
-<https://www.oasis-open.org/committees/cmis>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly.xml
deleted file mode 100644
index cd3bc0e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-assembly.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>full</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-
-    <fileSets>
-        <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>LICENSE</exclude>
-                <exclude>NOTICE</exclude>
-            </excludes>
-        </fileSet>
-    </fileSets>
-    <files>
-        <file>
-            <source>src/main/assembly/workbench-assembly-license.txt</source>
-            <outputDirectory>/</outputDirectory>
-            <destName>LICENSE</destName>
-        </file>
-        <file>
-            <source>src/main/assembly/workbench-assembly-notice.txt</source>
-            <outputDirectory>/</outputDirectory>
-            <destName>NOTICE</destName>
-        </file>
-        <file>
-            <source>target/start/workbench.sh</source>
-            <outputDirectory></outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/workbench.bat</source>
-            <outputDirectory></outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </file>
-    </files>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>junit:junit</exclude>
-            </excludes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>com.sun.xml.ws:jaxws-rt</exclude>
-                <exclude>org.apache.cxf:*</exclude>
-                <exclude>org.apache.axis2:*</exclude>
-                <exclude>wsdl4j:*</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-axis2-assembly.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-axis2-assembly.xml
deleted file mode 100644
index a094922..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-axis2-assembly.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>axis2</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    
-    <fileSets>
-         <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-    <files>
-        <file>
-            <source>target/start/workbench-axis2.sh</source>
-            <destName>workbench.sh</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/workbench-axis2.bat</source>
-            <destName>workbench.bat</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </file>
-    </files>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>junit:junit</exclude>
-            </excludes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <includes>
-                <include>org.apache.axis2:*</include>
-                <include>org.apache.neethi:*</include>
-                <include>org.apache.geronimo.specs:geronimo-javamail_1.4_spec:*</include>
-                <include>xml-resolver:*</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>org.codehaus.woodstox:wstx-asl:*</exclude>
-                <exclude>com.sun.xml.ws:jaxws-rt</exclude>
-                <exclude>org.apache.cxf:*</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-cxf-assembly.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-cxf-assembly.xml
deleted file mode 100644
index b528298..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-cxf-assembly.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>cxf</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    
-    <fileSets>
-         <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-    <files>
-        <file>
-            <source>target/start/workbench-cxf.sh</source>
-            <destName>workbench.sh</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/workbench-cxf.bat</source>
-            <destName>workbench.bat</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </file>
-    </files>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>junit:junit</exclude>
-            </excludes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <includes>
-                <include>org.apache.cxf:*</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>org.codehaus.woodstox:wstx-asl:*</exclude>
-                <exclude>com.sun.xml.ws:jaxws-rt</exclude>
-                <exclude>org.apache.axis2:*</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-mac-assembly.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-mac-assembly.xml
deleted file mode 100644
index 065762e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-mac-assembly.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>mac</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    
-    <fileSets>
-         <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-    <files>
-        <file>
-            <source>target/start/workbench.sh</source>
-            <outputDirectory>/Contents/Resources</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/run.sh</source>
-            <outputDirectory>/Contents/MacOS</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/info.plist</source>
-            <outputDirectory>/Contents</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </file>
-        <file>
-            <source>src/main/resources/images/icon.icns</source>
-            <outputDirectory>/Contents/Resources</outputDirectory>
-        </file> 
-    </files>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/Contents/Resources/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>junit:junit</exclude>
-            </excludes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/Contents/Resources/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>com.sun.xml.ws:jaxws-rt</exclude>
-                <exclude>org.apache.cxf:*</exclude>
-                <exclude>org.apache.axis2:*</exclude>
-                <exclude>wsdl4j:*</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-ri-assembly.xml b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-ri-assembly.xml
deleted file mode 100644
index 7c7d1a9..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/assembly/workbench-ri-assembly.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<assembly
-    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-    <!-- To build this, run "mvn package assembly:assembly" -->
-    <id>ri</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    
-    <fileSets>
-         <!-- license, readme, etc. calculated at build time -->
-        <fileSet>
-            <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-    </fileSets>
-    <files>
-        <file>
-            <source>target/start/workbench-ri.sh</source>
-            <destName>workbench.sh</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </file>
-        <file>
-            <source>target/start/workbench-ri.bat</source>
-            <destName>workbench.bat</destName>
-            <outputDirectory></outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </file>
-    </files>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact></useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>junit:junit</exclude>
-            </excludes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <includes>
-                <include>com.sun.xml.ws:jaxws-rt</include>
-                <include>org.jvnet.mimepull:mimepull</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <useProjectArtifact>false</useProjectArtifact>
-            <unpack>false</unpack>
-            <scope>provided</scope>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-            <excludes>
-                <exclude>org.codehaus.woodstox:wstx-asl:*</exclude>
-                <exclude>org.apache.cxf:*</exclude>
-                <exclude>org.apache.axis2:*</exclude>
-            </excludes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractLoginTab.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractLoginTab.java
deleted file mode 100644
index f8f0479..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractLoginTab.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.JPanel;
-
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-
-/**
- * Abstract Login Tab.
- * 
- * To add a new login tab, derive a class from this class, create a file
- * {@code META-INF/services/org.apache.chemistry.opencmis.workbench.AbstractLoginTab}
- * , and put the name of the fully qualified name of your class into this file.
- */
-public abstract class AbstractLoginTab extends JPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Returns the title of the tab.
-     */
-    public abstract String getTabTitle();
-
-    /**
-     * Returns the session parameters when the user hits the "Load Repositories"
-     * button.
-     */
-    public abstract Map<String, String> getSessionParameters();
-
-    /**
-     * Returns an {@code ObjectFactory} instance or {@code null} for the default
-     * object factory.
-     */
-    public ObjectFactory getObjectFactory() {
-        return null;
-    }
-
-    /**
-     * Returns an {@code AuthenticationProvider} instance or {@code null} for
-     * the default authentication provider.
-     */
-    public AuthenticationProvider getAuthenticationProvider() {
-        return null;
-    }
-
-    /**
-     * Returns a {@code Cache} instance or {@code null} for the default cache.
-     */
-    public Cache getCache() {
-        return null;
-    }
-
-    /**
-     * Returns an {@code TypeDefinitionCache} instance or {@code null} for the
-     * default authentication provider.
-     */
-    public TypeDefinitionCache getTypeDefinitionCache() {
-        return null;
-    }
-
-    /**
-     * Defines whether the session parameters should be transfered to the expert
-     * tab when the user switches from the this tab to the expert tab or not.
-     * The default is {@code false}.
-     */
-    public boolean transferSessionParametersToExpertTab() {
-        return false;
-    }
-
-    /**
-     * Called before the list of repositories is loaded.
-     */
-    public void beforeLoadRepositories() {
-    }
-
-    /**
-     * Called after the list of repositories has been loaded.
-     */
-    public void afterLoadRepositories(List<Repository> repositories) {
-    }
-
-    /**
-     * Called before the Workbench session is created.
-     */
-    public void beforeLogin(Repository repository) {
-    }
-
-    /**
-     * Called after the Workbench session has been created.
-     */
-    public void afterLogin(Session session) {
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java
deleted file mode 100644
index aca787a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AbstractSpringLoginTab.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Component;
-import java.awt.Container;
-
-import javax.swing.JLabel;
-import javax.swing.JPasswordField;
-import javax.swing.JTextField;
-import javax.swing.Spring;
-import javax.swing.SpringLayout;
-
-/**
- * Convenience methods for spring layout tabs.
- */
-public abstract class AbstractSpringLoginTab extends AbstractLoginTab {
-
-    private static final long serialVersionUID = 1L;
-
-    protected JTextField createTextField(Container pane, String label) {
-        JTextField textField = new JTextField(60);
-        JLabel textLabel = new JLabel(label, JLabel.TRAILING);
-        textLabel.setLabelFor(textField);
-
-        pane.add(textLabel);
-        pane.add(textField);
-
-        return textField;
-    }
-
-    protected JPasswordField createPasswordField(Container pane, String label) {
-        JPasswordField textField = new JPasswordField(60);
-        JLabel textLabel = new JLabel(label, JLabel.TRAILING);
-        textLabel.setLabelFor(textField);
-
-        pane.add(textLabel);
-        pane.add(textField);
-
-        return textField;
-    }
-
-    private SpringLayout.Constraints getConstraintsForCell(int row, int col, Container parent, int cols) {
-        SpringLayout layout = (SpringLayout) parent.getLayout();
-        Component c = parent.getComponent(row * cols + col);
-        return layout.getConstraints(c);
-    }
-
-    protected void makeCompactGrid(Container parent, int rows, int cols, int initialX, int initialY, int xPad, int yPad) {
-        SpringLayout layout = (SpringLayout) parent.getLayout();
-
-        Spring x = Spring.constant(initialX);
-        for (int c = 0; c < cols; c++) {
-            Spring width = Spring.constant(0);
-            for (int r = 0; r < rows; r++) {
-                width = Spring.max(width, getConstraintsForCell(r, c, parent, cols).getWidth());
-            }
-            for (int r = 0; r < rows; r++) {
-                SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
-                constraints.setX(x);
-                constraints.setWidth(width);
-            }
-            x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
-        }
-
-        Spring y = Spring.constant(initialY);
-        for (int r = 0; r < rows; r++) {
-            Spring height = Spring.constant(0);
-            for (int c = 0; c < cols; c++) {
-                height = Spring.max(height, getConstraintsForCell(r, c, parent, cols).getHeight());
-            }
-            for (int c = 0; c < cols; c++) {
-                SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
-                constraints.setY(y);
-                constraints.setHeight(height);
-            }
-            y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
-        }
-
-        layout.getConstraints(parent).setConstraint(SpringLayout.EAST, x);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java
deleted file mode 100644
index 158dd59..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JSeparator;
-import javax.swing.JSplitPane;
-import javax.swing.SwingConstants;
-import javax.swing.UIManager;
-import javax.swing.text.JTextComponent;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class AclEditorFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "ACL Editor";
-    private static final ImageIcon ICON_ADD = ClientHelper.getIcon("add.png");
-
-    private final ClientModel model;
-    private final CmisObject object;
-
-    private final AceList addAceList;
-    private final AceList removeAceList;
-
-    private JRadioButton propagationRepositoryButton;
-    private JRadioButton propagationObjectOnlyButton;
-    private JRadioButton propagationPropagteButton;
-
-    public AclEditorFrame(final ClientModel model, final CmisObject object) {
-        super();
-
-        this.model = model;
-        this.object = object;
-
-        // get users
-        List<String> princiaplList = new ArrayList<String>();
-        try {
-            princiaplList.add("");
-            princiaplList.add("cmis:user");
-
-            String user = model.getClientSession().getSessionParameters().get(SessionParameter.USER);
-            if (user != null && user.length() > 0) {
-                princiaplList.add(user);
-            }
-
-            String anonymous = model.getRepositoryInfo().getPrincipalIdAnonymous();
-            if (anonymous != null && anonymous.length() > 0) {
-                princiaplList.add(anonymous);
-            }
-
-            String anyone = model.getRepositoryInfo().getPrincipalIdAnyone();
-            if (anyone != null && anyone.length() > 0) {
-                princiaplList.add(anyone);
-            }
-
-            if (object.getAcl() != null && object.getAcl().getAces() != null) {
-                List<String> aclPrinciaplList = new ArrayList<String>();
-
-                for (Ace ace : object.getAcl().getAces()) {
-                    String pid = ace.getPrincipalId();
-                    if (!princiaplList.contains(pid) && !aclPrinciaplList.contains(pid)) {
-                        aclPrinciaplList.add(pid);
-                    }
-                }
-
-                Collections.sort(aclPrinciaplList);
-
-                princiaplList.addAll(aclPrinciaplList);
-            }
-        } catch (Exception ex) {
-            princiaplList = new ArrayList<String>();
-            princiaplList.add("");
-            princiaplList.add("cmis:user");
-        }
-
-        // get permissions
-        List<String> permissionsList = new ArrayList<String>();
-        try {
-            permissionsList.add("");
-            for (PermissionDefinition pd : model.getRepositoryInfo().getAclCapabilities().getPermissions()) {
-                permissionsList.add(pd.getId());
-            }
-        } catch (Exception ex) {
-            permissionsList = new ArrayList<String>();
-            permissionsList.add("");
-            permissionsList.add("cmis:read");
-            permissionsList.add("cmis:write");
-            permissionsList.add("cmis:all");
-        }
-
-        addAceList = new AceList(princiaplList, permissionsList);
-        removeAceList = new AceList(princiaplList, permissionsList);
-
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE);
-        setPreferredSize(new Dimension(800, 600));
-        setMinimumSize(new Dimension(300, 120));
-
-        setLayout(new BorderLayout());
-
-        final JPanel panel = new JPanel();
-        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
-
-        final Font labelFont = UIManager.getFont("Label.font");
-        final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-
-        final JPanel topPanel = new JPanel();
-        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));
-        topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        final JLabel nameLabel = new JLabel(object.getName());
-        nameLabel.setFont(boldFont);
-        topPanel.add(nameLabel);
-        topPanel.add(new JLabel(object.getId()));
-        add(topPanel, BorderLayout.PAGE_START);
-
-        // ACE panels
-        final JPanel addAcePanel = createAceListPanel("Add ACEs", addAceList);
-        final JPanel removeAcePanel = createAceListPanel("Remove ACEs", removeAceList);
-
-        JPanel centerPanel = new JPanel(new BorderLayout());
-
-        final JSplitPane aceSplitPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(addAcePanel),
-                new JScrollPane(removeAcePanel));
-
-        centerPanel.add(aceSplitPanel, BorderLayout.CENTER);
-
-        // propagation buttons
-        propagationRepositoryButton = new JRadioButton("repository determined", true);
-        propagationObjectOnlyButton = new JRadioButton("object only", false);
-        propagationPropagteButton = new JRadioButton("propagate", false);
-
-        try {
-            if (model.getRepositoryInfo().getAclCapabilities().getAclPropagation() == AclPropagation.OBJECTONLY) {
-                propagationPropagteButton.setEnabled(false);
-            }
-        } catch (Exception e) {
-            propagationPropagteButton.setEnabled(true);
-        }
-
-        ButtonGroup propagtionGroup = new ButtonGroup();
-        propagtionGroup.add(propagationRepositoryButton);
-        propagtionGroup.add(propagationObjectOnlyButton);
-        propagtionGroup.add(propagationPropagteButton);
-
-        JPanel propagtionPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
-        propagtionPanel.add(new JLabel("ACL Propagation:"));
-        propagtionPanel.add(propagationRepositoryButton);
-        propagtionPanel.add(propagationObjectOnlyButton);
-        propagtionPanel.add(propagationPropagteButton);
-
-        centerPanel.add(propagtionPanel, BorderLayout.PAGE_END);
-
-        add(centerPanel, BorderLayout.CENTER);
-
-        // update button
-        JButton updateButton = new JButton("Update");
-        updateButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        updateButton.setDefaultCapable(true);
-        updateButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                if (doApply()) {
-                    dispose();
-                }
-            }
-        });
-
-        add(updateButton, BorderLayout.PAGE_END);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(null);
-        setVisible(true);
-
-        aceSplitPanel.setDividerLocation(0.5f);
-    }
-
-    private JPanel createAceListPanel(final String title, final AceList list) {
-        final Font labelFont = UIManager.getFont("Label.font");
-        final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-
-        final JPanel result = new JPanel();
-        result.setLayout(new BoxLayout(result, BoxLayout.PAGE_AXIS));
-
-        final JPanel topPanel = new JPanel();
-        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.LINE_AXIS));
-        topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-        final JLabel titleLabel = new JLabel(title);
-        titleLabel.setFont(boldFont);
-        topPanel.add(titleLabel, BorderLayout.LINE_START);
-
-        topPanel.add(Box.createHorizontalGlue());
-
-        final JButton addButton = new JButton(ICON_ADD);
-        addButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                list.addNewAce();
-            }
-        });
-
-        topPanel.add(addButton, BorderLayout.LINE_END);
-
-        result.add(topPanel);
-
-        result.add(list);
-
-        return result;
-    }
-
-    /**
-     * Applies the ACEs.
-     */
-    private boolean doApply() {
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            List<Ace> adds = addAceList.getAces();
-            List<Ace> removes = removeAceList.getAces();
-
-            if (adds != null || removes != null) {
-                AclPropagation aclPropagation = AclPropagation.REPOSITORYDETERMINED;
-                if (propagationObjectOnlyButton.isSelected()) {
-                    aclPropagation = AclPropagation.OBJECTONLY;
-                }
-
-                if (propagationPropagteButton.isSelected()) {
-                    aclPropagation = AclPropagation.PROPAGATE;
-                }
-
-                object.applyAcl(adds, removes, aclPropagation);
-                model.reloadObject();
-            }
-
-            return true;
-        } catch (Exception ex) {
-            ClientHelper.showError(this, ex);
-            return false;
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    /**
-     * ACE list panel.
-     */
-    private static class AceList extends JPanel {
-
-        private static final long serialVersionUID = 1L;
-
-        private final List<AceInputPanel> panels;
-        private final List<String> principals;
-        private final List<String> permissions;
-
-        public AceList(final List<String> principals, final List<String> permissions) {
-            super();
-
-            panels = new ArrayList<AceInputPanel>();
-            this.principals = principals;
-            this.permissions = permissions;
-
-            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-        }
-
-        public synchronized void addNewAce() {
-            AceInputPanel acePanel = new AceInputPanel(this, principals, permissions, panels.size());
-            panels.add(acePanel);
-
-            add(acePanel);
-        }
-
-        public synchronized void removeAce(int position) {
-            panels.remove(position);
-            for (int i = position; i < panels.size(); i++) {
-                panels.get(i).updatePosition(i);
-            }
-
-            removeAll();
-            for (AceInputPanel p : panels) {
-                add(p);
-            }
-
-            revalidate();
-        }
-
-        public synchronized List<Ace> getAces() {
-            List<Ace> result = new ArrayList<Ace>();
-
-            for (AceInputPanel p : panels) {
-                result.add(p.getAce());
-            }
-
-            return result.isEmpty() ? null : result;
-        }
-    }
-
-    /**
-     * ACE input panel.
-     */
-    public static class AceInputPanel extends JPanel {
-
-        private static final long serialVersionUID = 1L;
-
-        private static final Color BACKGROUND1 = UIManager.getColor("Table:\"Table.cellRenderer\".background");
-        private static final Color BACKGROUND2 = UIManager.getColor("Table.alternateRowColor");
-        private static final Color LINE = new Color(0xB8, 0xB8, 0xB8);
-
-        private static final ImageIcon ICON_REMOVE = ClientHelper.getIcon("remove.png");
-
-        private final List<String> permissions;
-
-        private int position;
-        private final JComboBox principalBox;
-        private final JPanel permissionsPanel;
-        private final List<JComboBox> permissionBoxes;
-
-        public AceInputPanel(final AceList list, final List<String> principals, final List<String> permissions,
-                int position) {
-            super();
-
-            this.permissions = permissions;
-
-            updatePosition(position);
-
-            setLayout(new GridBagLayout());
-            setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, LINE),
-                    BorderFactory.createEmptyBorder(10, 5, 10, 5)));
-
-            GridBagConstraints c = new GridBagConstraints();
-            c.gridheight = 1;
-            c.gridwidth = 1;
-
-            // col 1
-            c.gridx = 0;
-            c.weightx = 1;
-            c.fill = GridBagConstraints.HORIZONTAL;
-            c.anchor = GridBagConstraints.LINE_START;
-
-            c.gridy = 0;
-            add(new JLabel("Principal:"), c);
-
-            c.gridy = 1;
-            add(new JSeparator(SwingConstants.HORIZONTAL), c);
-
-            c.gridy = 2;
-            add(new JLabel("Permissions:"), c);
-
-            // col 2
-            c.gridx = 1;
-            c.weightx = 1;
-            c.fill = GridBagConstraints.HORIZONTAL;
-            c.anchor = GridBagConstraints.LINE_START;
-
-            principalBox = new JComboBox(principals.toArray(new String[0]));
-            principalBox.setEditable(true);
-            principalBox.setPrototypeDisplayValue("1234567890123456789012345");
-
-            c.gridy = 0;
-            add(principalBox, c);
-
-            c.gridy = 1;
-            add(new JSeparator(SwingConstants.HORIZONTAL), c);
-
-            permissionsPanel = new JPanel();
-            permissionsPanel.setLayout(new BoxLayout(permissionsPanel, BoxLayout.Y_AXIS));
-            permissionsPanel.setOpaque(false);
-
-            permissionBoxes = new ArrayList<JComboBox>();
-
-            updatePermissionsPanel(false);
-
-            c.gridy = 2;
-            add(permissionsPanel, c);
-
-            // col 3
-            c.gridx = 2;
-            c.weightx = 1;
-            c.fill = GridBagConstraints.NONE;
-            c.anchor = GridBagConstraints.LINE_END;
-
-            c.gridy = 0;
-            JButton removeButton = new JButton(ICON_REMOVE);
-            removeButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent event) {
-                    list.removeAce(getPosition());
-                }
-            });
-
-            add(removeButton, c);
-        }
-
-        private JComboBox createPermissionBox() {
-            JComboBox result = new JComboBox(permissions.toArray(new String[0]));
-            result.setEditable(true);
-            result.setPrototypeDisplayValue("1234567890123456789012345");
-
-            JTextComponent editor = (JTextComponent) result.getEditor().getEditorComponent();
-            editor.addFocusListener(new FocusAdapter() {
-                @Override
-                public void focusLost(FocusEvent event) {
-                    updatePermissionsPanel(true);
-                }
-            });
-
-            editor.addKeyListener(new KeyAdapter() {
-                public void keyPressed(KeyEvent e) {
-                    if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB) {
-                        updatePermissionsPanel(true);
-                    }
-                }
-            });
-
-            return result;
-        }
-
-        private void updatePermissionsPanel(boolean focus) {
-            boolean changed = false;
-
-            if (!permissionBoxes.isEmpty()) {
-                int i = 0;
-                while (i < permissionBoxes.size() - 1) {
-                    if (permissionBoxes.get(i).getSelectedItem().toString().trim().length() == 0) {
-                        permissionBoxes.remove(i);
-                        changed = true;
-                    } else {
-                        i++;
-                    }
-                }
-
-                if (permissionBoxes.get(permissionBoxes.size() - 1).getSelectedItem().toString().trim().length() > 0) {
-                    permissionBoxes.add(createPermissionBox());
-                    changed = true;
-                }
-            } else {
-                permissionBoxes.add(createPermissionBox());
-                changed = true;
-            }
-
-            if (changed) {
-                permissionsPanel.removeAll();
-
-                for (JComboBox box : permissionBoxes) {
-                    permissionsPanel.add(box);
-                }
-
-                revalidate();
-
-                if (focus) {
-                    permissionBoxes.get(permissionBoxes.size() - 1).requestFocusInWindow();
-                }
-            }
-        }
-
-        private void updatePosition(int position) {
-            this.position = position;
-            setBackground(position % 2 == 0 ? BACKGROUND1 : BACKGROUND2);
-        }
-
-        public int getPosition() {
-            return position;
-        }
-
-        @Override
-        public Dimension getMaximumSize() {
-            return new Dimension(Short.MAX_VALUE, getPreferredSize().height);
-        }
-
-        public Ace getAce() {
-            List<String> permissionsList = new ArrayList<String>();
-
-            for (JComboBox box : permissionBoxes) {
-                String permission = box.getSelectedItem().toString().trim();
-                if (permission.length() > 0) {
-                    permissionsList.add(permission);
-                }
-            }
-
-            return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalBox.getSelectedItem()
-                    .toString()), permissionsList);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/BasicLoginTab.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/BasicLoginTab.java
deleted file mode 100644
index c62b18b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/BasicLoginTab.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Container;
-import java.awt.Dimension;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JPasswordField;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.SpringLayout;
-
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.workbench.model.ClientSession;
-
-public class BasicLoginTab extends AbstractSpringLoginTab {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String SYSPROP_URL = ClientSession.WORKBENCH_PREFIX + "url";
-    public static final String SYSPROP_BINDING = ClientSession.WORKBENCH_PREFIX + "binding";
-    public static final String SYSPROP_AUTHENTICATION = ClientSession.WORKBENCH_PREFIX + "authentication";
-    public static final String SYSPROP_COMPRESSION = ClientSession.WORKBENCH_PREFIX + "compression";
-    public static final String SYSPROP_CLIENTCOMPRESSION = ClientSession.WORKBENCH_PREFIX + "clientcompression";
-    public static final String SYSPROP_COOKIES = ClientSession.WORKBENCH_PREFIX + "cookies";
-    public static final String SYSPROP_USER = ClientSession.WORKBENCH_PREFIX + "user";
-    public static final String SYSPROP_PASSWORD = ClientSession.WORKBENCH_PREFIX + "password";
-
-    private JTextField urlField;
-    private JRadioButton bindingAtomButton;
-    private JRadioButton bindingWebServicesButton;
-    private JRadioButton bindingBrowserButton;
-    private JTextField usernameField;
-    private JPasswordField passwordField;
-    private JRadioButton authenticationNoneButton;
-    private JRadioButton authenticationStandardButton;
-    private JRadioButton authenticationNTLMButton;
-    private JRadioButton authenticationOAuthButton;
-    private JRadioButton compressionOnButton;
-    private JRadioButton compressionOffButton;
-    private JRadioButton clientCompressionOnButton;
-    private JRadioButton clientCompressionOffButton;
-    private JRadioButton cookiesOnButton;
-    private JRadioButton cookiesOffButton;
-
-    public BasicLoginTab() {
-        super();
-        createGUI();
-    }
-
-    private void createGUI() {
-        setLayout(new SpringLayout());
-
-        urlField = createTextField(this, "URL:");
-        urlField.setText(System.getProperty(SYSPROP_URL, "").trim());
-
-        createBindingButtons(this);
-
-        usernameField = createTextField(this, "Username:");
-        usernameField.setText(System.getProperty(SYSPROP_USER, ""));
-
-        passwordField = createPasswordField(this, "Password:");
-        passwordField.setText(System.getProperty(SYSPROP_PASSWORD, ""));
-
-        createAuthenticationButtons(this);
-
-        createCompressionButtons(this);
-
-        createClientCompressionButtons(this);
-
-        createCookieButtons(this);
-
-        makeCompactGrid(this, 8, 2, 5, 10, 5, 5);
-    }
-
-    private void createBindingButtons(Container pane) {
-        JPanel bindingContainer = new JPanel();
-        bindingContainer.setLayout(new BoxLayout(bindingContainer, BoxLayout.LINE_AXIS));
-        char bc = System.getProperty(SYSPROP_BINDING, "atom").toLowerCase(Locale.ENGLISH).charAt(0);
-        boolean atom = (bc == 'a');
-        boolean ws = (bc == 'w');
-        boolean browser = (bc == 'b');
-        bindingAtomButton = new JRadioButton("AtomPub", atom);
-        bindingWebServicesButton = new JRadioButton("Web Services", ws);
-        bindingBrowserButton = new JRadioButton("Browser", browser);
-        ButtonGroup bindingGroup = new ButtonGroup();
-        bindingGroup.add(bindingAtomButton);
-        bindingGroup.add(bindingWebServicesButton);
-        bindingGroup.add(bindingBrowserButton);
-        bindingContainer.add(bindingAtomButton);
-        bindingContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        bindingContainer.add(bindingWebServicesButton);
-        bindingContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        bindingContainer.add(bindingBrowserButton);
-        JLabel bindingLabel = new JLabel("Binding:", JLabel.TRAILING);
-
-        pane.add(bindingLabel);
-        pane.add(bindingContainer);
-    }
-
-    private void createAuthenticationButtons(Container pane) {
-        JPanel authenticationContainer = new JPanel();
-        authenticationContainer.setLayout(new BoxLayout(authenticationContainer, BoxLayout.LINE_AXIS));
-        boolean standard = (System.getProperty(SYSPROP_AUTHENTICATION, "standard").toLowerCase(Locale.ENGLISH)
-                .equals("standard"));
-        boolean ntlm = (System.getProperty(SYSPROP_AUTHENTICATION, "").toLowerCase(Locale.ENGLISH).equals("ntlm"));
-        boolean oauth = (System.getProperty(SYSPROP_AUTHENTICATION, "").toLowerCase(Locale.ENGLISH).equals("oauth"));
-        boolean none = !standard && !ntlm;
-        authenticationNoneButton = new JRadioButton("None", none);
-        authenticationStandardButton = new JRadioButton("Standard", standard);
-        authenticationNTLMButton = new JRadioButton("NTLM", ntlm);
-        authenticationOAuthButton = new JRadioButton("OAuth 2.0 (Bearer Token)", oauth);
-        ButtonGroup authenticationGroup = new ButtonGroup();
-        authenticationGroup.add(authenticationNoneButton);
-        authenticationGroup.add(authenticationStandardButton);
-        authenticationGroup.add(authenticationNTLMButton);
-        authenticationGroup.add(authenticationOAuthButton);
-        authenticationContainer.add(authenticationNoneButton);
-        authenticationContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        authenticationContainer.add(authenticationStandardButton);
-        authenticationContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        authenticationContainer.add(authenticationNTLMButton);
-        authenticationContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        authenticationContainer.add(authenticationOAuthButton);
-        JLabel authenticatioLabel = new JLabel("Authentication:", JLabel.TRAILING);
-
-        pane.add(authenticatioLabel);
-        pane.add(authenticationContainer);
-    }
-
-    private void createCompressionButtons(Container pane) {
-        JPanel compressionContainer = new JPanel();
-        compressionContainer.setLayout(new BoxLayout(compressionContainer, BoxLayout.LINE_AXIS));
-        boolean compression = !(System.getProperty(SYSPROP_COMPRESSION, "on").equalsIgnoreCase("off"));
-        compressionOnButton = new JRadioButton("On", compression);
-        compressionOffButton = new JRadioButton("Off", !compression);
-        ButtonGroup compressionGroup = new ButtonGroup();
-        compressionGroup.add(compressionOnButton);
-        compressionGroup.add(compressionOffButton);
-        compressionContainer.add(compressionOnButton);
-        compressionContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        compressionContainer.add(compressionOffButton);
-        JLabel compressionLabel = new JLabel("Compression:", JLabel.TRAILING);
-
-        pane.add(compressionLabel);
-        pane.add(compressionContainer);
-    }
-
-    private void createClientCompressionButtons(Container pane) {
-        JPanel clientCompressionContainer = new JPanel();
-        clientCompressionContainer.setLayout(new BoxLayout(clientCompressionContainer, BoxLayout.LINE_AXIS));
-        boolean clientCompression = (System.getProperty(SYSPROP_CLIENTCOMPRESSION, "off").equalsIgnoreCase("on"));
-        clientCompressionOnButton = new JRadioButton("On", clientCompression);
-        clientCompressionOffButton = new JRadioButton("Off", !clientCompression);
-        ButtonGroup clientCompressionGroup = new ButtonGroup();
-        clientCompressionGroup.add(clientCompressionOnButton);
-        clientCompressionGroup.add(clientCompressionOffButton);
-        clientCompressionContainer.add(clientCompressionOnButton);
-        clientCompressionContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        clientCompressionContainer.add(clientCompressionOffButton);
-        JLabel clientCompressionLabel = new JLabel("Client Compression:", JLabel.TRAILING);
-
-        pane.add(clientCompressionLabel);
-        pane.add(clientCompressionContainer);
-    }
-
-    private void createCookieButtons(Container pane) {
-        JPanel cookiesContainer = new JPanel();
-        cookiesContainer.setLayout(new BoxLayout(cookiesContainer, BoxLayout.LINE_AXIS));
-        boolean cookies = (System.getProperty(SYSPROP_COOKIES, "on").equalsIgnoreCase("on"));
-        cookiesOnButton = new JRadioButton("On", cookies);
-        cookiesOffButton = new JRadioButton("Off", !cookies);
-        ButtonGroup cookiesGroup = new ButtonGroup();
-        cookiesGroup.add(cookiesOnButton);
-        cookiesGroup.add(cookiesOffButton);
-        cookiesContainer.add(cookiesOnButton);
-        cookiesContainer.add(Box.createRigidArea(new Dimension(10, 0)));
-        cookiesContainer.add(cookiesOffButton);
-        JLabel cookiesLabel = new JLabel("Cookies:", JLabel.TRAILING);
-
-        pane.add(cookiesLabel);
-        pane.add(cookiesContainer);
-    }
-
-    @Override
-    public String getTabTitle() {
-        return "Basic";
-    }
-
-    @Override
-    public Map<String, String> getSessionParameters() {
-        String url = urlField.getText().trim();
-
-        BindingType binding = BindingType.ATOMPUB;
-        if (bindingWebServicesButton.isSelected()) {
-            binding = BindingType.WEBSERVICES;
-        } else if (bindingBrowserButton.isSelected()) {
-            binding = BindingType.BROWSER;
-        }
-
-        String username = usernameField.getText();
-        String password = new String(passwordField.getPassword());
-
-        ClientSession.Authentication authentication = ClientSession.Authentication.NONE;
-        if (authenticationStandardButton.isSelected()) {
-            authentication = ClientSession.Authentication.STANDARD;
-        } else if (authenticationNTLMButton.isSelected()) {
-            authentication = ClientSession.Authentication.NTLM;
-        } else if (authenticationOAuthButton.isSelected()) {
-            authentication = ClientSession.Authentication.OAUTH_BEARER;
-        }
-        return ClientSession.createSessionParameters(url, binding, username, password, authentication,
-                compressionOnButton.isSelected(), clientCompressionOnButton.isSelected(), cookiesOnButton.isSelected());
-    }
-
-    @Override
-    public boolean transferSessionParametersToExpertTab() {
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ChangeLogFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ChangeLogFrame.java
deleted file mode 100644
index 3239f5a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ChangeLogFrame.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Collection;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumn;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.ChangeEvents;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.CollectionRenderer;
-import org.apache.chemistry.opencmis.workbench.swing.GregorianCalendarRenderer;
-
-public class ChangeLogFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "CMIS Change Logger";
-
-    private final ClientModel model;
-
-    private JTextField changeLogTokenField;
-    private ChangeLogTable changeLogTable;
-
-    public ChangeLogFrame(ClientModel model) {
-        super();
-
-        this.model = model;
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE + " - " + model.getRepositoryName());
-        setPreferredSize(new Dimension(700, 700));
-        setMinimumSize(new Dimension(200, 60));
-
-        setLayout(new BorderLayout());
-
-        JPanel inputPanel = new JPanel(new BorderLayout());
-        inputPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
-
-        inputPanel.add(new JLabel("Change Log Token: "), BorderLayout.LINE_START);
-
-        changeLogTokenField = new JTextField();
-        try {
-            changeLogTokenField.setText(model.getRepositoryInfo().getLatestChangeLogToken());
-        } catch (Exception e) {
-            changeLogTokenField.setText("");
-        }
-        inputPanel.add(changeLogTokenField, BorderLayout.CENTER);
-
-        JButton loadButton = new JButton("Load");
-        loadButton.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-
-                String changeLogToken = changeLogTokenField.getText();
-                if (changeLogToken.trim().length() == 0) {
-                    changeLogToken = null;
-                }
-
-                ChangeEvents events = null;
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    events = model.getClientSession().getSession().getContentChanges(changeLogToken, true, 1000);
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                    return;
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-
-                changeLogTable.setChangeEvents(events.getChangeEvents());
-                changeLogTokenField.setText(events.getLatestChangeLogToken() == null ? "" : events
-                        .getLatestChangeLogToken());
-            }
-        });
-        inputPanel.add(loadButton, BorderLayout.LINE_END);
-        getRootPane().setDefaultButton(loadButton);
-
-        add(inputPanel, BorderLayout.PAGE_START);
-
-        changeLogTable = new ChangeLogTable();
-        add(new JScrollPane(changeLogTable), BorderLayout.CENTER);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    static class ChangeLogTable extends JTable {
-
-        private static final long serialVersionUID = 1L;
-
-        private static final String[] COLUMN_NAMES = { "Change Type", "Object Id", "Change Time", "Properties" };
-        private static final int[] COLUMN_WIDTHS = { 100, 200, 200, 400 };
-
-        private List<ChangeEvent> changeEvents;
-
-        public ChangeLogTable() {
-            setDefaultRenderer(GregorianCalendar.class, new GregorianCalendarRenderer());
-            setDefaultRenderer(Collection.class, new CollectionRenderer());
-            setModel(new ChangeLogTableModel(this));
-
-            setAutoResizeMode(AUTO_RESIZE_OFF);
-            setAutoCreateRowSorter(true);
-
-            for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
-                TableColumn column = getColumnModel().getColumn(i);
-                column.setPreferredWidth(COLUMN_WIDTHS[i]);
-            }
-
-            setFillsViewportHeight(true);
-        }
-
-        public void setChangeEvents(List<ChangeEvent> changeEvents) {
-            this.changeEvents = changeEvents;
-            ((AbstractTableModel) getModel()).fireTableDataChanged();
-        }
-
-        public List<ChangeEvent> getChangeEvents() {
-            return changeEvents;
-        }
-
-        static class ChangeLogTableModel extends AbstractTableModel {
-
-            private static final long serialVersionUID = 1L;
-
-            private final ChangeLogTable table;
-
-            public ChangeLogTableModel(ChangeLogTable table) {
-                this.table = table;
-            }
-
-            public String getColumnName(int columnIndex) {
-                return COLUMN_NAMES[columnIndex];
-            }
-
-            public int getColumnCount() {
-                return COLUMN_NAMES.length;
-            }
-
-            public int getRowCount() {
-                if (table.getChangeEvents() == null) {
-                    return 0;
-                }
-
-                return table.getChangeEvents().size();
-            }
-
-            public Object getValueAt(int rowIndex, int columnIndex) {
-                ChangeEvent event = table.getChangeEvents().get(rowIndex);
-
-                switch (columnIndex) {
-                case 0:
-                    return (event.getChangeType() == null ? "?" : event.getChangeType().value());
-                case 1:
-                    return (event.getObjectId() == null ? "?" : event.getObjectId());
-                case 2:
-                    return event.getChangeTime();
-                case 3:
-                    return event.getProperties().entrySet();
-                default:
-                }
-
-                return null;
-            }
-
-            @Override
-            public Class<?> getColumnClass(int columnIndex) {
-                if (columnIndex == 2) {
-                    return GregorianCalendar.class;
-                } else if (columnIndex == 3) {
-                    return Collection.class;
-                }
-
-                return super.getColumnClass(columnIndex);
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java
deleted file mode 100644
index 252b13e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.io.File;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.util.Collections;
-import java.util.List;
-import java.util.prefs.Preferences;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JSplitPane;
-import javax.swing.JToolBar;
-
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.workbench.ClientHelper.FileEntry;
-import org.apache.chemistry.opencmis.workbench.details.DetailsTabs;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ClientFrame extends JFrame implements WindowListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = LoggerFactory.getLogger(ClientFrame.class);
-
-    public static final String SYSPROP_SCRIPTS = ClientSession.WORKBENCH_PREFIX + "scripts";
-
-    private static final String WINDOW_TITLE = "CMIS Workbench";
-
-    private static final int BUTTON_CONNECT = 0;
-    private static final int BUTTON_REPOSITORY_INFO = 1;
-    private static final int BUTTON_TYPES = 2;
-    private static final int BUTTON_QUERY = 3;
-    private static final int BUTTON_CHANGELOG = 4;
-    private static final int BUTTON_CONSOLE = 5;
-    private static final int BUTTON_TCK = 6;
-    private static final int BUTTON_CREATE = 7;
-    private static final int BUTTON_LOG = 8;
-    private static final int BUTTON_INFO = 9;
-
-    private static final String PREFS_X = "x";
-    private static final String PREFS_Y = "y";
-    private static final String PREFS_WIDTH = "width";
-    private static final String PREFS_HEIGHT = "height";
-    private static final String PREFS_DIV = "div";
-
-    private static final String GROOVY_SCRIPT_FOLDER = "/scripts/";
-    private static final String GROOVY_SCRIPT_LIBRARY = "script-library.properties";
-
-    private final Preferences prefs = Preferences.userNodeForPackage(this.getClass());
-
-    private LoginDialog loginDialog;
-    private LogFrame logFrame;
-    private InfoDialog infoDialog;
-
-    private JToolBar toolBar;
-    private JButton[] toolbarButton;
-    private JPopupMenu toolbarConsolePopup;
-    private JPopupMenu toolbarCreatePopup;
-    private JMenuItem documentMenuItem;
-    private JMenuItem itemMenuItem;
-    private JMenuItem folderMenuItem;
-    private JMenuItem relationshipMenuItem;
-
-    private JSplitPane split;
-    private FolderPanel folderPanel;
-    private DetailsTabs detailsTabs;
-
-    private final ClientModel model;
-
-    public ClientFrame() {
-        super();
-
-        model = new ClientModel();
-        createGUI();
-        showLoginForm();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE);
-
-        ImageIcon icon = ClientHelper.getIcon("icon.png");
-        if (icon != null) {
-            setIconImage(icon.getImage());
-        }
-
-        // Mac OS X goodies
-        if (ClientHelper.isMacOSX()) {
-            try {
-                Class<?> macAppClass = Class.forName("com.apple.eawt.Application");
-                Method macAppGetApp = macAppClass.getMethod("getApplication", (Class<?>[]) null);
-                Object macApp = macAppGetApp.invoke(null, (Object[]) null);
-
-                if (icon != null) {
-                    try {
-                        macAppClass.getMethod("setDockIconImage", new Class<?>[] { Image.class }).invoke(macApp,
-                                new Object[] { icon.getImage() });
-                    } catch (Exception e) {
-                        LOG.debug("Could not set dock icon!", e);
-                    }
-                }
-
-                try {
-                    Class<?> fullscreenClass = Class.forName("com.apple.eawt.FullScreenUtilities");
-                    fullscreenClass.getMethod("setWindowCanFullScreen", new Class<?>[] { Window.class, Boolean.TYPE })
-                            .invoke(fullscreenClass, this, true);
-                } catch (Exception e) {
-                    LOG.debug("Could not add fullscreen button!", e);
-                }
-            } catch (Exception e) {
-                LOG.debug("Could not get com.apple.eawt.Application object!", e);
-            }
-        }
-
-        setLayout(new BorderLayout());
-
-        final ClientFrame thisFrame = this;
-        loginDialog = new LoginDialog(this);
-        logFrame = new LogFrame();
-        infoDialog = new InfoDialog(this);
-
-        Container pane = getContentPane();
-
-        toolBar = new JToolBar("CMIS Toolbar", JToolBar.HORIZONTAL);
-
-        toolbarButton = new JButton[10];
-
-        toolbarButton[BUTTON_CONNECT] = new JButton("Connection", ClientHelper.getIcon("connect.png"));
-        toolbarButton[BUTTON_CONNECT].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                showLoginForm();
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_CONNECT]);
-
-        toolBar.addSeparator();
-
-        toolbarButton[BUTTON_REPOSITORY_INFO] = new JButton("Repository Info",
-                ClientHelper.getIcon("repository-info.png"));
-        toolbarButton[BUTTON_REPOSITORY_INFO].setEnabled(false);
-        toolbarButton[BUTTON_REPOSITORY_INFO].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                new RepositoryInfoFrame(model);
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_REPOSITORY_INFO]);
-
-        toolbarButton[BUTTON_TYPES] = new JButton("Types", ClientHelper.getIcon("types.png"));
-        toolbarButton[BUTTON_TYPES].setEnabled(false);
-        toolbarButton[BUTTON_TYPES].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                new TypesFrame(model);
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_TYPES]);
-
-        toolbarButton[BUTTON_QUERY] = new JButton("Query", ClientHelper.getIcon("query.png"));
-        toolbarButton[BUTTON_QUERY].setEnabled(false);
-        toolbarButton[BUTTON_QUERY].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                new QueryFrame(model);
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_QUERY]);
-
-        toolbarButton[BUTTON_CHANGELOG] = new JButton("Change Log", ClientHelper.getIcon("changelog.png"));
-        toolbarButton[BUTTON_CHANGELOG].setEnabled(false);
-        toolbarButton[BUTTON_CHANGELOG].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                new ChangeLogFrame(model);
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_CHANGELOG]);
-
-        toolbarButton[BUTTON_CONSOLE] = new JButton("Console", ClientHelper.getIcon("console.png"));
-        toolbarButton[BUTTON_CONSOLE].setEnabled(false);
-        toolbarButton[BUTTON_CONSOLE].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                toolbarConsolePopup.show(toolbarButton[BUTTON_CONSOLE], 0, toolbarButton[BUTTON_CONSOLE].getHeight());
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_CONSOLE]);
-
-        toolbarConsolePopup = new JPopupMenu();
-        for (FileEntry fe : readScriptLibrary()) {
-            JMenuItem menuItem = new JMenuItem(fe.getName());
-            final URI file = fe.getFile();
-            menuItem.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    ClientHelper.openConsole(ClientFrame.this, model, file);
-                }
-            });
-            toolbarConsolePopup.add(menuItem);
-        }
-
-        toolbarButton[BUTTON_TCK] = new JButton("TCK", ClientHelper.getIcon("tck.png"));
-        toolbarButton[BUTTON_TCK].setEnabled(false);
-        toolbarButton[BUTTON_TCK].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                new TckDialog(thisFrame, model);
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_TCK]);
-
-        toolBar.addSeparator();
-
-        toolbarCreatePopup = new JPopupMenu();
-        documentMenuItem = new JMenuItem("Document");
-        documentMenuItem.setEnabled(true);
-        toolbarCreatePopup.add(documentMenuItem);
-        documentMenuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                new CreateDocumentDialog(thisFrame, model);
-            }
-        });
-
-        itemMenuItem = new JMenuItem("Item");
-        itemMenuItem.setEnabled(false);
-        toolbarCreatePopup.add(itemMenuItem);
-        itemMenuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                new CreateItemDialog(thisFrame, model);
-            }
-        });
-
-        folderMenuItem = new JMenuItem("Folder");
-        folderMenuItem.setEnabled(true);
-        toolbarCreatePopup.add(folderMenuItem);
-        folderMenuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                new CreateFolderDialog(thisFrame, model);
-            }
-        });
-
-        relationshipMenuItem = new JMenuItem("Relationship");
-        relationshipMenuItem.setEnabled(false);
-        toolbarCreatePopup.add(relationshipMenuItem);
-        relationshipMenuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                new CreateRelationshipDialog(thisFrame, model);
-            }
-        });
-
-        toolbarButton[BUTTON_CREATE] = new JButton("Create Object", ClientHelper.getIcon("newdocument.png"));
-        toolbarButton[BUTTON_CREATE].setEnabled(false);
-        toolbarButton[BUTTON_CREATE].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                toolbarCreatePopup.show(toolbarButton[BUTTON_CREATE], 0, toolbarButton[BUTTON_CREATE].getHeight());
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_CREATE]);
-
-        toolBar.addSeparator();
-
-        toolbarButton[BUTTON_LOG] = new JButton("Log", ClientHelper.getIcon("log.png"));
-        toolbarButton[BUTTON_LOG].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                logFrame.showFrame();
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_LOG]);
-
-        toolbarButton[BUTTON_INFO] = new JButton("Info", ClientHelper.getIcon("info.png"));
-        toolbarButton[BUTTON_INFO].addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                infoDialog.showDialog();
-            }
-        });
-
-        toolBar.add(toolbarButton[BUTTON_INFO]);
-
-        pane.add(toolBar, BorderLayout.PAGE_START);
-
-        folderPanel = new FolderPanel(model);
-        detailsTabs = new DetailsTabs(model);
-
-        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, folderPanel, detailsTabs);
-
-        pane.add(split, BorderLayout.CENTER);
-
-        addWindowListener(this);
-
-        setPreferredSize(new Dimension(prefs.getInt(PREFS_WIDTH, 1000), prefs.getInt(PREFS_HEIGHT, 600)));
-        setMinimumSize(new Dimension(200, 60));
-
-        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        pack();
-
-        split.setDividerLocation(prefs.getInt(PREFS_DIV, 500));
-
-        if (prefs.getInt(PREFS_X, Integer.MAX_VALUE) == Integer.MAX_VALUE) {
-            setLocationRelativeTo(null);
-        } else {
-            setLocation(prefs.getInt(PREFS_X, 0), prefs.getInt(PREFS_Y, 0));
-        }
-
-        setVisible(true);
-    }
-
-    private void showLoginForm() {
-        loginDialog.showDialog();
-        if (!loginDialog.isCanceled()) {
-            ClientSession clientSession = loginDialog.getClientSession();
-
-            model.setClientSession(clientSession);
-
-            try {
-                setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                model.loadFolder(clientSession.getSession().getRepositoryInfo().getRootFolderId(), false);
-                model.loadObject(clientSession.getSession().getRepositoryInfo().getRootFolderId());
-
-                toolbarButton[BUTTON_REPOSITORY_INFO].setEnabled(true);
-                toolbarButton[BUTTON_TYPES].setEnabled(true);
-                toolbarButton[BUTTON_QUERY].setEnabled(model.supportsQuery());
-                toolbarButton[BUTTON_CHANGELOG].setEnabled(model.supportsChangeLog());
-                toolbarButton[BUTTON_CONSOLE].setEnabled(true);
-                toolbarButton[BUTTON_TCK].setEnabled(true);
-                toolbarButton[BUTTON_CREATE].setEnabled(true);
-
-                itemMenuItem.setEnabled(model.supportsItems());
-                relationshipMenuItem.setEnabled(model.supportsRelationships());
-
-                String user = clientSession.getSessionParameters().get(SessionParameter.USER);
-                if (user != null) {
-                    user = " - (" + user + ")";
-                } else {
-                    user = "";
-                }
-
-                setTitle(WINDOW_TITLE + user + " - " + clientSession.getSession().getRepositoryInfo().getName());
-            } catch (Exception ex) {
-                toolbarButton[BUTTON_REPOSITORY_INFO].setEnabled(false);
-                toolbarButton[BUTTON_TYPES].setEnabled(false);
-                toolbarButton[BUTTON_QUERY].setEnabled(false);
-                toolbarButton[BUTTON_CHANGELOG].setEnabled(false);
-                toolbarButton[BUTTON_CONSOLE].setEnabled(false);
-                toolbarButton[BUTTON_TCK].setEnabled(false);
-                toolbarButton[BUTTON_CREATE].setEnabled(false);
-
-                ClientHelper.showError(null, ex);
-
-                setTitle(WINDOW_TITLE);
-            } finally {
-                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            }
-        }
-    }
-
-    private List<FileEntry> readScriptLibrary() {
-
-        URI propFile = null;
-
-        String externalScripts = System.getProperty(SYSPROP_SCRIPTS);
-        if (externalScripts == null) {
-            propFile = ClientHelper.getClasspathURI(GROOVY_SCRIPT_FOLDER + GROOVY_SCRIPT_LIBRARY);
-        } else {
-            propFile = (new File(externalScripts)).toURI();
-        }
-
-        List<FileEntry> result = ClientHelper.readFileProperties(propFile);
-
-        if (result == null || result.isEmpty()) {
-            result = Collections.singletonList(new FileEntry("Groovy Console", null));
-        }
-
-        return result;
-    }
-
-    public void windowOpened(WindowEvent e) {
-    }
-
-    public void windowClosing(WindowEvent e) {
-        Point p = getLocation();
-        prefs.putInt(PREFS_X, p.x);
-        prefs.putInt(PREFS_Y, p.y);
-        prefs.putInt(PREFS_WIDTH, getWidth());
-        prefs.putInt(PREFS_HEIGHT, getHeight());
-        prefs.putInt(PREFS_DIV, split.getDividerLocation());
-    }
-
-    public void windowClosed(WindowEvent e) {
-    }
-
-    public void windowIconified(WindowEvent e) {
-    }
-
-    public void windowDeiconified(WindowEvent e) {
-    }
-
-    public void windowActivated(WindowEvent e) {
-    }
-
-    public void windowDeactivated(WindowEvent e) {
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
deleted file mode 100644
index 4ae7605..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import groovy.lang.Binding;
-import groovy.ui.Console;
-import groovy.util.GroovyScriptEngine;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Desktop;
-import java.awt.Desktop.Action;
-import java.awt.Toolkit;
-import java.awt.Window;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Properties;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.swing.AbstractAction;
-import javax.swing.ImageIcon;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JRootPane;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.UIManager;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.DefaultEditorKit;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeTypes;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class ClientHelper {
-
-    public static final Color LINK_COLOR = new Color(105, 29, 21);
-    public static final Color LINK_SELECTED_COLOR = new Color(255, 255, 255);
-
-    private static final Logger LOG = LoggerFactory.getLogger(ClientHelper.class);
-    private static final int BUFFER_SIZE = 64 * 1024;
-
-    private ClientHelper() {
-    }
-
-    public static void logError(Exception ex) {
-        if (LOG.isErrorEnabled()) {
-            LOG.error(ex.getClass().getSimpleName() + ": " + ex.getMessage(), ex);
-
-            if (ex instanceof CmisBaseException) {
-                CmisBaseException cex = (CmisBaseException) ex;
-
-                if (cex.getCode() != null) {
-                    LOG.error("Error code: " + cex.getCode());
-                }
-
-                if (cex.getErrorContent() != null) {
-                    LOG.error("Error content: " + cex.getErrorContent());
-                }
-
-                if (LOG.isDebugEnabled() && cex.getCause() != null) {
-                    LOG.debug("Cause: " + cex.getCause().toString(), cex.getCause());
-                }
-            }
-        }
-    }
-
-    public static void showError(Component parent, Exception ex) {
-        logError(ex);
-
-        String exceptionName = ex.getClass().getSimpleName();
-        if (ex instanceof CmisBaseException) {
-            exceptionName = ((CmisBaseException) ex).getExceptionName();
-        }
-
-        StringBuilder sb = new StringBuilder(ex.getMessage() == null ? "null" : ex.getMessage());
-
-        int width = 80;
-        while (sb.length() > width) {
-            int p = width;
-
-            int x = sb.indexOf(" ", p);
-            if (x < 0 || x > p + 10) {
-                x = sb.indexOf("/", p);
-            }
-            if (x < 0 || x > p + 10) {
-                x = sb.indexOf(":", p);
-            }
-            if (x < 0 || x > p + 10) {
-                x = p;
-            }
-
-            sb.insert(x, '\n');
-            width = x + 80;
-        }
-
-        JOptionPane.showMessageDialog(parent, exceptionName + ":\n" + sb, "Error", JOptionPane.ERROR_MESSAGE);
-    }
-
-    public static boolean isMacOSX() {
-        return System.getProperty("os.name").startsWith("Mac OS X");
-    }
-
-    public static void installKeyBindings() {
-        if (isMacOSX()) {
-            final KeyStroke copyKeyStroke = KeyStroke.getKeyStroke("meta pressed C");
-            final KeyStroke pasteKeyStroke = KeyStroke.getKeyStroke("meta pressed V");
-            final KeyStroke cutKeyStroke = KeyStroke.getKeyStroke("meta pressed X");
-            final KeyStroke allKeyStroke = KeyStroke.getKeyStroke("meta pressed A");
-
-            InputMap textFieldMap = (InputMap) UIManager.get("TextField.focusInputMap");
-            textFieldMap.put(copyKeyStroke, DefaultEditorKit.copyAction);
-            textFieldMap.put(pasteKeyStroke, DefaultEditorKit.pasteAction);
-            textFieldMap.put(cutKeyStroke, DefaultEditorKit.cutAction);
-            textFieldMap.put(allKeyStroke, DefaultEditorKit.selectAllAction);
-
-            InputMap formattedTextFieldMap = (InputMap) UIManager.get("FormattedTextField.focusInputMap");
-            formattedTextFieldMap.put(copyKeyStroke, DefaultEditorKit.copyAction);
-            formattedTextFieldMap.put(pasteKeyStroke, DefaultEditorKit.pasteAction);
-            formattedTextFieldMap.put(cutKeyStroke, DefaultEditorKit.cutAction);
-            formattedTextFieldMap.put(allKeyStroke, DefaultEditorKit.selectAllAction);
-
-            InputMap textAreaMap = (InputMap) UIManager.get("TextArea.focusInputMap");
-            textAreaMap.put(copyKeyStroke, DefaultEditorKit.copyAction);
-            textAreaMap.put(pasteKeyStroke, DefaultEditorKit.pasteAction);
-            textAreaMap.put(cutKeyStroke, DefaultEditorKit.cutAction);
-            textAreaMap.put(allKeyStroke, DefaultEditorKit.selectAllAction);
-
-            InputMap passwordFieldMap = (InputMap) UIManager.get("PasswordField.focusInputMap");
-            passwordFieldMap.put(pasteKeyStroke, DefaultEditorKit.pasteAction);
-        }
-    }
-
-    public static void installEscapeBinding(final Window window, final JRootPane rootPane, final boolean dispose) {
-        final KeyStroke stroke = KeyStroke.getKeyStroke("ESCAPE");
-        final InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        inputMap.put(stroke, "ESCAPE");
-        rootPane.getActionMap().put("ESCAPE", new AbstractAction() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                if (dispose) {
-                    window.dispose();
-                } else {
-                    window.setVisible(false);
-                }
-            }
-        });
-    }
-
-    public static ImageIcon getIcon(String name) {
-        URL imageURL = ClientHelper.class.getResource("/images/" + name);
-        if (imageURL != null) {
-            return new ImageIcon(imageURL);
-        }
-
-        return null;
-    }
-
-    public static String getDateString(GregorianCalendar cal) {
-        if (cal == null) {
-            return "";
-        }
-
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ZZZ");
-        sdf.setTimeZone(cal.getTimeZone());
-
-        return sdf.format(cal.getTime());
-    }
-
-    public static void download(Component component, CmisObject object, String streamId) {
-        ContentStream content = getContentStream(object, streamId);
-        if (content == null) {
-            return;
-        }
-
-        String filename = content.getFileName();
-        if (filename == null) {
-            if (object instanceof Document) {
-                filename = ((Document) object).getContentStreamFileName();
-            } else {
-                filename = object.getName();
-            }
-        }
-
-        JFileChooser fileChooser = new JFileChooser();
-        fileChooser.setSelectedFile(new File(filename));
-
-        int chooseResult = fileChooser.showDialog(component, "Download");
-        if (chooseResult == JFileChooser.APPROVE_OPTION) {
-            try {
-                storeStream(content.getStream(), fileChooser.getSelectedFile());
-            } catch (Exception e) {
-                showError(component, e);
-            }
-        }
-    }
-
-    public static void copy(Component component, File file) {
-        JFileChooser fileChooser = new JFileChooser();
-        fileChooser.setSelectedFile(new File(file.getName()));
-
-        int chooseResult = fileChooser.showDialog(component, "Download");
-        if (chooseResult == JFileChooser.APPROVE_OPTION) {
-            try {
-                storeStream(new FileInputStream(file), fileChooser.getSelectedFile());
-            } catch (Exception e) {
-                showError(component, e);
-            }
-        }
-    }
-
-    public static void open(Component component, CmisObject object, String streamId) {
-        if (!Desktop.isDesktopSupported()) {
-            download(component, object, streamId);
-            return;
-        }
-
-        Desktop desktop = Desktop.getDesktop();
-
-        if (!desktop.isSupported(Desktop.Action.OPEN)) {
-            download(component, object, streamId);
-            return;
-        }
-
-        File file = null;
-
-        try {
-            file = createTempFileFromDocument(object, streamId);
-        } catch (Exception e) {
-            showError(component, e);
-            return;
-        }
-
-        try {
-            desktop.open(file);
-        } catch (Exception e) {
-            if (e instanceof IOException) {
-                copy(component, file);
-            } else {
-                showError(component, e);
-            }
-        }
-    }
-
-    public static File createTempFile(String filename) {
-        String tempDir = System.getProperty("java.io.tmpdir");
-        File clientTempDir = new File(tempDir, "cmisworkbench");
-        if (!clientTempDir.exists() && !clientTempDir.mkdirs()) {
-            throw new CmisRuntimeException("Could not create directory for temp file!");
-        }
-        clientTempDir.deleteOnExit();
-
-        File tempFile = new File(clientTempDir, filename);
-        tempFile.deleteOnExit();
-
-        return tempFile;
-    }
-
-    public static File createTempFileFromDocument(CmisObject object, String streamId) throws IOException {
-        ContentStream content = getContentStream(object, streamId);
-        if (content == null) {
-            throw new IllegalArgumentException("No content!");
-        }
-
-        String filename = content.getFileName();
-        if ((filename == null) || (filename.length() == 0)) {
-            if (object instanceof Document) {
-                filename = ((Document) object).getContentStreamFileName();
-            }
-        }
-        if ((filename == null) || (filename.length() == 0)) {
-            filename = object.getName();
-        }
-        if ((filename == null) || (filename.length() == 0)) {
-            filename = "content";
-        }
-
-        String ext = MimeTypes.getExtension(content.getMimeType());
-        if (ext.length() > 0 && !filename.endsWith(ext)) {
-            filename = filename + ext;
-        }
-
-        File tempFile = ClientHelper.createTempFile(filename);
-        try {
-            storeStream(content.getStream(), tempFile);
-        } catch (CmisConstraintException e) {
-            // there is no content - leave the temp file empty
-        }
-
-        return tempFile;
-    }
-
-    private static void storeStream(InputStream in, File file) throws IOException {
-        OutputStream out = null;
-        try {
-            out = new FileOutputStream(file);
-            IOUtils.copy(new LoggingInputStream(in, file.getName()), out, BUFFER_SIZE);
-        } finally {
-            IOUtils.closeQuietly(in);
-            IOUtils.closeQuietly(out);
-        }
-    }
-
-    private static ContentStream getContentStream(CmisObject object, String streamId) {
-        if (object == null) {
-            return null;
-        }
-
-        if (object instanceof Document) {
-            return ((Document) object).getContentStream(streamId);
-        } else {
-            if (streamId == null) {
-                return null;
-            }
-
-            List<Rendition> renditions = object.getRenditions();
-            if (renditions == null) {
-                return null;
-            }
-
-            for (Rendition rendition : renditions) {
-                if (streamId.equals(rendition.getStreamId())) {
-                    return rendition.getContentStream();
-                }
-            }
-        }
-
-        return null;
-    }
-
-    public static void copyTableToClipboard(JTable table) {
-        final String newline = System.getProperty("line.separator");
-
-        final StringBuilder sb = new StringBuilder();
-        final int rows = table.getModel().getRowCount();
-        final int cols = table.getModel().getColumnCount();
-
-        for (int col = 0; col < cols; col++) {
-            if (col > 0) {
-                sb.append(',');
-            }
-
-            sb.append(formatCSVValue(table.getModel().getColumnName(col)));
-        }
-
-        sb.append(newline);
-
-        for (int row = 0; row < rows; row++) {
-            for (int col = 0; col < cols; col++) {
-                if (col > 0) {
-                    sb.append(',');
-                }
-
-                Object value = table.getModel().getValueAt(row, col);
-                sb.append(formatCSVValue(value));
-            }
-            sb.append(newline);
-        }
-
-        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-        Transferable transferable = new StringSelection(sb.toString());
-        clipboard.setContents(transferable, null);
-    }
-
-    public static String encodeHtml(StringBuilder sb, String s) {
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            if (c == '<') {
-                sb.append("&lt;");
-            } else if (c == '<') {
-                sb.append("&lt;");
-            } else if (c == '"') {
-                sb.append("&quot;");
-            } else if (c == '\'') {
-                sb.append("&apos;");
-            } else if (c > 127) {
-                sb.append("&#" + (int) c + ";");
-            } else {
-                sb.append(c);
-            }
-        }
-
-        return sb.toString();
-    }
-
-    private static String formatCSVValue(Object value) {
-        if (value == null) {
-            return "";
-        } else if (value instanceof GregorianCalendar) {
-            return getDateString((GregorianCalendar) value);
-        } else if (value instanceof String) {
-            String s = value.toString();
-
-            StringBuilder sb = new StringBuilder();
-            sb.append('\"');
-
-            for (int i = 0; i < s.length(); i++) {
-                char c = s.charAt(i);
-                sb.append(c);
-                if (c == '\"') {
-                    sb.append('\"');
-                }
-            }
-
-            sb.append('\"');
-
-            return sb.toString();
-        } else if (value instanceof Collection<?>) {
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-
-            for (Object v : (Collection<?>) value) {
-                if (sb.length() > 1) {
-                    sb.append(',');
-                }
-                sb.append(formatCSVValue(v));
-            }
-
-            sb.append(']');
-
-            return sb.toString();
-        } else if (value instanceof ObjectId) {
-            return formatCSVValue(((ObjectId) value).getId());
-        } else if (value instanceof ImageIcon) {
-            return "<icon>";
-        }
-
-        return value.toString();
-    }
-
-    public static URI getClasspathURI(String path) {
-        try {
-            return ClientHelper.class.getResource(path).toURI();
-        } catch (URISyntaxException e) {
-            // not very likely
-            LOG.error(e.getMessage(), e);
-            return null;
-        }
-    }
-
-    public static String readFileAndRemoveHeader(final URI file) {
-        if (file == null) {
-            return "";
-        }
-
-        final InputStream stream;
-        try {
-            stream = file.toURL().openStream();
-        } catch (Exception e) {
-            return "";
-        }
-
-        final String result = readStreamAndRemoveHeader(stream);
-
-        IOUtils.closeQuietly(stream);
-
-        return result;
-    }
-
-    public static String readStreamAndRemoveHeader(final InputStream stream) {
-        if (stream == null) {
-            return "";
-        }
-
-        try {
-            return IOUtils.readAllLinesAndRemoveHeader(stream);
-        } catch (IOException e1) {
-            return "";
-        }
-    }
-
-    public static List<FileEntry> readFileProperties(URI propertiesFile) {
-
-        final InputStream stream;
-        try {
-            stream = propertiesFile.toURL().openStream();
-            if (stream == null) {
-                return null;
-            }
-        } catch (Exception e) {
-            LOG.error("Cannot open library file: " + propertiesFile, e);
-            return null;
-        }
-
-        String classpathParent = null;
-        if ("classpath".equalsIgnoreCase(propertiesFile.getScheme())) {
-            String path = propertiesFile.getSchemeSpecificPart();
-            int x = path.lastIndexOf('/');
-            if (x > -1) {
-                classpathParent = path.substring(0, x);
-            }
-        }
-
-        if ("jar".equalsIgnoreCase(propertiesFile.getScheme())) {
-            String path = propertiesFile.getSchemeSpecificPart();
-            int x = path.lastIndexOf('/');
-            if (x > -1) {
-                path = path.substring(0, x);
-                x = path.indexOf("!/");
-                if (x > -1) {
-                    classpathParent = path.substring(x + 1);
-                }
-            }
-        }
-
-        String fileParent = null;
-        if ("file".equalsIgnoreCase(propertiesFile.getScheme())) {
-            fileParent = (new File(propertiesFile)).getParent();
-        }
-
-        try {
-            Properties properties = new Properties();
-            properties.load(stream);
-            stream.close();
-
-            final List<FileEntry> result = new ArrayList<FileEntry>();
-            for (String file : properties.stringPropertyNames()) {
-
-                try {
-                    URI uri = null;
-
-                    if (classpathParent != null) {
-                        URL url = ClientHelper.class.getResource(classpathParent + "/" + file);
-                        if (url != null) {
-                            uri = url.toURI();
-                        }
-                    }
-
-                    if (fileParent != null) {
-                        uri = (new File(fileParent, file)).toURI();
-                    }
-
-                    if (uri != null) {
-                        result.add(new FileEntry(properties.getProperty(file), uri));
-                    } else {
-                        LOG.error("Cannot find library entry: " + file);
-                    }
-                } catch (URISyntaxException e) {
-                    // ignore entry
-                }
-            }
-            Collections.sort(result);
-
-            return result;
-        } catch (IOException e) {
-            LOG.error("Cannot read library file: " + propertiesFile);
-            return null;
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-    }
-
-    public static Console openConsole(final Component parent, final ClientModel model, final URI file) {
-        try {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            final Session groovySession = model.getClientSession().getSession();
-            final String user = model.getClientSession().getSessionParameters().get(SessionParameter.USER);
-            final String title = "GroovyConsole - Repsository: " + groovySession.getRepositoryInfo().getId();
-
-            final Console console = new Console(parent.getClass().getClassLoader()) {
-                @Override
-                public void updateTitle() {
-                    JFrame frame = (JFrame) getFrame();
-
-                    if (getScriptFile() != null) {
-                        frame.setTitle(((File) getScriptFile()).getName() + (getDirty() ? " * " : "") + " - " + title);
-                    } else {
-                        frame.setTitle(title);
-                    }
-                }
-            };
-
-            console.setVariable("session", groovySession);
-            console.setVariable("binding", groovySession.getBinding());
-
-            console.run();
-
-            JMenu cmisMenu = new JMenu("CMIS");
-            console.getFrame().getRootPane().getJMenuBar().add(cmisMenu);
-
-            addConsoleMenu(cmisMenu, "CMIS 1.0 Specification", new URI(
-                    "http://docs.oasis-open.org/cmis/CMIS/v1.0/os/cmis-spec-v1.0.html"));
-            addConsoleMenu(cmisMenu, "CMIS 1.1 Specification", new URI(
-                    "http://docs.oasis-open.org/cmis/CMIS/v1.1/CMIS-v1.1.html"));
-            addConsoleMenu(cmisMenu, "OpenCMIS Documentation",
-                    new URI("http://chemistry.apache.org/java/opencmis.html"));
-            addConsoleMenu(cmisMenu, "OpenCMIS Client API JavaDoc", new URI(
-                    "http://chemistry.apache.org/java/0.12.0/maven/apidocs/"));
-            cmisMenu.addSeparator();
-            JMenuItem menuItem = new JMenuItem("CMIS Session Details");
-            menuItem.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    AttributeSet style = console.getOutputStyle();
-                    console.clearOutput();
-                    console.appendOutputNl("Session ID:      " + groovySession.getBinding().getSessionId(), style);
-                    console.appendOutputNl("Repository ID:   " + groovySession.getRepositoryInfo().getId(), style);
-                    console.appendOutputNl("Repository name: " + groovySession.getRepositoryInfo().getName(), style);
-                    console.appendOutputNl("Binding:         " + groovySession.getBinding().getBindingType(), style);
-                    console.appendOutputNl("User:            " + user, style);
-                }
-            });
-            cmisMenu.add(menuItem);
-
-            console.getInputArea().setText(readFileAndRemoveHeader(file));
-
-            return console;
-        } catch (Exception ex) {
-            showError(null, ex);
-            return null;
-        } finally {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    private static void addConsoleMenu(JMenu menu, String title, final URI url) {
-        if (!Desktop.isDesktopSupported() || !Desktop.getDesktop().isSupported(Action.BROWSE)) {
-            return;
-        }
-
-        JMenuItem menuItem = new JMenuItem(title);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    Desktop.getDesktop().browse(url);
-                } catch (IOException ex) {
-                    showError(null, ex);
-                }
-            }
-        });
-
-        menu.add(menuItem);
-    }
-
-    public static void runGroovyScript(final Component parent, final ClientModel model, final File file,
-            final Writer out) {
-        try {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            String[] roots = new String[] { file.getParentFile().getAbsolutePath() };
-            GroovyScriptEngine gse = new GroovyScriptEngine(roots, parent.getClass().getClassLoader());
-            Binding binding = new Binding();
-            binding.setVariable("session", model.getClientSession().getSession());
-            binding.setVariable("binding", model.getClientSession().getSession().getBinding());
-            binding.setVariable("out", out);
-            gse.run(file.getName(), binding);
-        } catch (Exception ex) {
-            ClientHelper.showError(null, ex);
-        } finally {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    public static void runJSR223Script(final Component parent, final ClientModel model, final File file,
-            final String ext, final Writer out) {
-        try {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            ScriptEngineManager mgr = new ScriptEngineManager();
-            ScriptEngine engine = mgr.getEngineByExtension(ext);
-            engine.getContext().setWriter(out);
-            engine.getContext().setErrorWriter(out);
-            engine.put("session", model.getClientSession().getSession());
-            engine.put("binding", model.getClientSession().getSession().getBinding());
-            engine.put("out", new PrintWriter(out));
-            engine.eval(new InputStreamReader(new FileInputStream(file), IOUtils.UTF8));
-        } catch (Exception ex) {
-            ClientHelper.showError(null, ex);
-        } finally {
-            parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    public static class FileEntry implements Comparable<FileEntry> {
-        private final String name;
-        private final URI file;
-
-        public FileEntry(String name, URI file) {
-            this.name = name;
-            this.file = file;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public URI getFile() {
-            return file;
-        }
-
-        @Override
-        public String toString() {
-            return name;
-        }
-
-        @Override
-        public int compareTo(FileEntry o) {
-            return name.compareToIgnoreCase(o.getName());
-        }
-
-        @Override
-        public int hashCode() {
-            return name.hashCode();
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-
-            if (!(obj instanceof FileEntry)) {
-                return false;
-            }
-
-            return name.equals(((FileEntry) obj).getName());
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientWriterAppender.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientWriterAppender.java
deleted file mode 100644
index 0f5e2f6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientWriterAppender.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-
-import org.apache.log4j.WriterAppender;
-import org.apache.log4j.spi.LoggingEvent;
-
-public class ClientWriterAppender extends WriterAppender {
-
-    private static JTextArea logTextArea = null;
-
-    public static void setTextArea(JTextArea textArea) {
-        logTextArea = textArea;
-    }
-
-    @Override
-    public void append(LoggingEvent loggingEvent) {
-        if (logTextArea == null) {
-            return;
-        }
-
-        final String message = layout.format(loggingEvent);
-
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                logTextArea.append(message);
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
deleted file mode 100644
index d03fe8a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.UnknownHostException;
-import java.util.Locale;
-
-import javax.net.ssl.SSLException;
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
-import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
-import org.xml.sax.SAXParseException;
-
-public class ConnectionErrorDialog extends JDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String HTTP_PROXY_HOST = "http.proxyHost";
-    public static final String HTTP_PROXY_PORT = "http.proxyPort";
-    public static final String HTTPS_PROXY_HOST = "https.proxyHost";
-    public static final String HTTPS_PROXY_PORT = "https.proxyPort";
-    public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
-
-    private final Exception exception;
-
-    public ConnectionErrorDialog(JDialog owner, Exception exception) {
-        super(owner, "Connection Error", true);
-        this.exception = exception;
-
-        ClientHelper.logError(exception);
-
-        createGUI();
-    }
-
-    private void createGUI() {
-        setMinimumSize(new Dimension(600, 400));
-        setPreferredSize(new Dimension(600, 450));
-
-        setLayout(new BorderLayout());
-
-        StringBuilder hint = new StringBuilder();
-        hint.append("<h2><font color=\"red\">Exception: <em>" + exception.getClass().getSimpleName()
-                + "</em></font><br>" + exception.getMessage() + "</h2>");
-        if (exception.getCause() != null) {
-            hint.append("<h3><font color=\"red\">Cause: <em>" + exception.getCause().getClass().getSimpleName()
-                    + "</em></font><br>" + exception.getCause().getMessage() + "</h3>");
-        }
-        hint.append("<hr><br>");
-        hint.append(getHint());
-
-        // hint area
-        JPanel hintsPanel = new JPanel();
-        hintsPanel.setLayout(new BoxLayout(hintsPanel, BoxLayout.PAGE_AXIS));
-        hintsPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        add(hintsPanel, BorderLayout.CENTER);
-
-        JEditorPane hints = new JEditorPane("text/html", hint.toString());
-        hints.setEditable(false);
-
-        hintsPanel.add(new JScrollPane(hints, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
-
-        // close button
-        JPanel buttonPanel = new JPanel();
-        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));
-        buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
-        add(buttonPanel, BorderLayout.PAGE_END);
-
-        JButton closeButton = new JButton("Close");
-        closeButton.setPreferredSize(new Dimension(Short.MAX_VALUE, 30));
-        closeButton.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
-        closeButton.setAlignmentX(Component.CENTER_ALIGNMENT);
-
-        closeButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ConnectionErrorDialog.this.dispose();
-            }
-        });
-
-        buttonPanel.add(closeButton);
-
-        getRootPane().setDefaultButton(closeButton);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(getOwner());
-
-        setVisible(true);
-    }
-
-    private String getHint() {
-        if (exception instanceof CmisObjectNotFoundException || exception instanceof CmisNotSupportedException) {
-            return "The CMIS Workbench could connect to the server but the provided URL is not a CMIS endpoint URL."
-                    + "<br>Check your URL and proxy settings." + getProxyConfig();
-        } else if (exception instanceof CmisUnauthorizedException) {
-            return "The provide credentials are invalid.<br>Check your credentials.";
-        } else if (exception instanceof CmisPermissionDeniedException) {
-            return "The provide credentials are invalid or the user has no permission to connect."
-                    + "<br>Check your credentials.";
-        } else if (exception instanceof CmisProxyAuthenticationException) {
-            return "The proxy server requires valid credentials.<br>Check the session parameters "
-                    + "'org.apache.chemistry.opencmis.binding.proxyuser' and "
-                    + "'org.apache.chemistry.opencmis.binding.proxypassword'." + getProxyConfig();
-        } else if (exception instanceof CmisRuntimeException) {
-            return "Something fatal happend on the client or server side."
-                    + "<br>Check your URL, the binding, and your proxy settings."
-                    + "<br><br>Also see the CMIS Workbench log for more details." + getProxyConfig();
-        } else if (exception instanceof CmisConnectionException) {
-            Throwable cause = exception.getCause();
-            while (cause instanceof CmisConnectionException) {
-                cause = cause.getCause();
-            }
-
-            if (cause instanceof MalformedURLException || cause instanceof URISyntaxException) {
-                return "The provided URL is not a valid URL.<br>Check your URL.";
-            } else if (cause instanceof UnknownHostException) {
-                return "The CMIS Workbench could not connect to the server."
-                        + "<br>Check your URL and your network and proxy settings." + getProxyConfig();
-            } else if (cause instanceof SSLException) {
-                return "The CMIS Workbench could not establish a SSL connection to the server."
-                        + "<br>Check your network and proxy settings."
-                        + "<br><br>If you want to connect to a server with a self-signed certificate, "
-                        + "add the parameter <code>-Dcmis.workbench.acceptSelfSignedCertificates=true</code> "
-                        + "to the JAVA_OPTS in the CMIS Workbench start script and restart."
-                        + "<br><b>WARNING:</b> It disables <em>all</em> SSL certificate checks!" + getProxyConfig();
-            } else if (cause instanceof JSONParseException) {
-                return "The provided URL does not return a JSON response."
-                        + "<br>Check your URL, the binding, and your proxy settings."
-                        + "<br><br>Some servers return a HTML login page if the credentials are incorrect."
-                        + "<br>Check your credentials." + getProxyConfig();
-            } else if (cause instanceof XMLStreamException) {
-                return "The provided URL does not return an AtomPub response."
-                        + "<br>Check your URL, the binding, and your proxy settings."
-                        + "<br><br>Some servers return a HTML login page if the credentials are incorrect."
-                        + "<br>Check your credentials." + getProxyConfig();
-            } else if (cause instanceof SAXParseException) {
-                return "The provided URL does not return a WSDL."
-                        + "<br>Check your URL, the binding, and your proxy settings."
-                        + "<br><br>Some servers return a HTML login page if the credentials are incorrect."
-                        + "<br>Check your credentials." + getProxyConfig();
-            } else if (cause instanceof IOException) {
-                return "A network problem occured.<br>Check your URL and your network and proxy settings."
-                        + getProxyConfig();
-            }
-
-            if (exception.getMessage().toLowerCase(Locale.ENGLISH).startsWith("unexpected document")) {
-                return "The provided URL does not return a AtomPub response."
-                        + "<br>Check your URL, the binding, and your proxy settings."
-                        + "<br><br>Some servers return a HTML login page if the credentials are incorrect."
-                        + "<br>Check your credentials." + getProxyConfig();
-            }
-
-            return "Check the URL, the binding, and the credentials.";
-        }
-
-        return exception.getMessage();
-    }
-
-    private String getProxyConfig() {
-        StringBuilder sb = new StringBuilder();
-
-        sb.append("<br><br><hr><br><em>Current proxy settings:</em><br><br>");
-
-        if (System.getProperty(HTTP_PROXY_HOST) == null && System.getProperty(HTTPS_PROXY_HOST) == null) {
-            sb.append("<b>- no proxy settings -</b>");
-        } else {
-            sb.append("<table>");
-            if (System.getProperty(HTTP_PROXY_HOST) != null) {
-                sb.append("<tr><td><b>HTTP proxy:</b></td><td>");
-                sb.append(System.getProperty(HTTP_PROXY_HOST) + ":" + System.getProperty(HTTP_PROXY_PORT));
-                sb.append("</td></tr>");
-            }
-
-            if (System.getProperty(HTTPS_PROXY_HOST) != null) {
-                sb.append("<tr><td><b>HTTPS proxy:</b></td><td>");
-                sb.append(System.getProperty(HTTPS_PROXY_HOST) + ":" + System.getProperty(HTTPS_PROXY_PORT));
-                sb.append("</td></tr>");
-            }
-
-            if (System.getProperty(HTTP_NON_PROXY_HOSTS) != null) {
-                sb.append("<tr><td><b>Non proxy hosts:</b></td><td>");
-                sb.append(System.getProperty(HTTP_NON_PROXY_HOSTS));
-                sb.append("</td></tr>");
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java
deleted file mode 100644
index 268d751..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.InputStream;
-import java.text.NumberFormat;
-
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JFileChooser;
-import javax.swing.JFormattedTextField;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientSession;
-import org.apache.chemistry.opencmis.workbench.swing.CreateDialog;
-
-public class CreateDocumentDialog extends CreateDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    private JRadioButton unfiledButton;
-    private JRadioButton currentPathButton;
-    private JTextField nameField;
-    private JComboBox typeBox;
-    private JTextField filenameField;
-    private JFormattedTextField generateContentSizeField;
-    private JComboBox generateContentUnitField;
-    private JRadioButton versioningStateNoneButton;
-    private JRadioButton versioningStateMajorButton;
-    private JRadioButton versioningStateMinorButton;
-    private JRadioButton versioningStateCheckedoutButton;
-
-    private JCheckBox verifyAfterUploadButton;
-
-    public CreateDocumentDialog(Frame owner, ClientModel model) {
-        this(owner, model, null);
-    }
-
-    public CreateDocumentDialog(Frame owner, ClientModel model, File file) {
-        super(owner, "Create Document", model);
-        createGUI(file);
-    }
-
-    private void createGUI(File file) {
-        final CreateDocumentDialog thisDialog = this;
-
-        unfiledButton = new JRadioButton("create unfiled");
-        unfiledButton.setSelected(false);
-
-        currentPathButton = new JRadioButton("create in the current folder: "
-                + getClientModel().getCurrentFolder().getPath());
-        currentPathButton.setSelected(true);
-
-        ButtonGroup filedGroup = new ButtonGroup();
-        filedGroup.add(unfiledButton);
-        filedGroup.add(currentPathButton);
-
-        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
-        buttonPanel.add(unfiledButton);
-        buttonPanel.add(currentPathButton);
-
-        createRow("", buttonPanel, 0);
-
-        nameField = new JTextField(60);
-        createRow("Name:", nameField, 1);
-
-        Object[] types = getTypes(BaseTypeId.CMIS_DOCUMENT.value());
-        if (types.length == 0) {
-            JOptionPane.showMessageDialog(this, "No creatable type!", "Creatable Types", JOptionPane.ERROR_MESSAGE);
-            thisDialog.dispose();
-            return;
-        }
-
-        typeBox = new JComboBox(types);
-        typeBox.setSelectedIndex(0);
-        typeBox.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                DocumentTypeDefinition type = (DocumentTypeDefinition) ((ObjectTypeItem) typeBox.getSelectedItem())
-                        .getObjectType();
-                if (type.isVersionable()) {
-                    versioningStateMajorButton.setSelected(true);
-                } else {
-                    versioningStateNoneButton.setSelected(true);
-                }
-                updateMandatoryFields(type);
-            }
-        });
-
-        ObjectTypeItem type = (ObjectTypeItem) typeBox.getSelectedItem();
-        updateMandatoryFields(type.getObjectType());
-
-        createRow("Type:", typeBox, 2);
-
-        JPanel filePanel = new JPanel(new BorderLayout());
-
-        filenameField = new JTextField(30);
-        filenameField.getDocument().addDocumentListener(new DocumentListener() {
-            @Override
-            public void removeUpdate(DocumentEvent e) {
-                adjustGenerateContentComponents();
-            }
-
-            @Override
-            public void insertUpdate(DocumentEvent e) {
-                adjustGenerateContentComponents();
-            }
-
-            @Override
-            public void changedUpdate(DocumentEvent e) {
-            }
-
-            private void adjustGenerateContentComponents() {
-                if (filenameField.getText().length() == 0) {
-                    generateContentSizeField.setEnabled(true);
-                    generateContentUnitField.setEnabled(true);
-                } else {
-                    generateContentSizeField.setEnabled(false);
-                    generateContentUnitField.setEnabled(false);
-                }
-            }
-        });
-
-        filePanel.add(filenameField, BorderLayout.CENTER);
-
-        JButton browseButton = new JButton("Browse");
-        browseButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = new JFileChooser();
-                int chooseResult = fileChooser.showDialog(filenameField, "Select");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    if (fileChooser.getSelectedFile().isFile()) {
-                        setFile(fileChooser.getSelectedFile());
-                    }
-                }
-            }
-        });
-        filePanel.add(browseButton, BorderLayout.LINE_END);
-
-        createRow("File:", filePanel, 4);
-
-        JPanel generateContentPanel = new JPanel();
-        generateContentPanel.setLayout(new BoxLayout(generateContentPanel, BoxLayout.X_AXIS));
-
-        generateContentSizeField = new JFormattedTextField(NumberFormat.getIntegerInstance());
-        generateContentSizeField.setValue(0L);
-        generateContentSizeField.setColumns(8);
-        generateContentSizeField.setHorizontalAlignment(JTextField.RIGHT);
-        generateContentSizeField.setMaximumSize(generateContentSizeField.getPreferredSize());
-        generateContentPanel.add(generateContentSizeField);
-
-        generateContentUnitField = new JComboBox(new String[] { "Bytes", "KiB", "MiB", "GiB" });
-        generateContentUnitField.setMaximumSize(new Dimension((int) generateContentUnitField.getPreferredSize()
-                .getWidth() + 200, (int) generateContentUnitField.getPreferredSize().getHeight()));
-        generateContentPanel.add(generateContentUnitField);
-
-        generateContentPanel.add(Box.createHorizontalGlue());
-
-        createRow("Generate content:", generateContentPanel, 5);
-
-        versioningStateNoneButton = new JRadioButton("none");
-        versioningStateMajorButton = new JRadioButton("major");
-        versioningStateMinorButton = new JRadioButton("minor");
-        versioningStateCheckedoutButton = new JRadioButton("checked out");
-
-        ButtonGroup versioningStateGroup = new ButtonGroup();
-        versioningStateGroup.add(versioningStateNoneButton);
-        versioningStateGroup.add(versioningStateMajorButton);
-        versioningStateGroup.add(versioningStateMinorButton);
-        versioningStateGroup.add(versioningStateCheckedoutButton);
-
-        JPanel versioningStatePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
-        versioningStatePanel.add(versioningStateNoneButton);
-        versioningStatePanel.add(versioningStateMajorButton);
-        versioningStatePanel.add(versioningStateMinorButton);
-        versioningStatePanel.add(versioningStateCheckedoutButton);
-
-        if (((DocumentTypeDefinition) ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType()).isVersionable()) {
-            versioningStateMajorButton.setSelected(true);
-        } else {
-            versioningStateNoneButton.setSelected(true);
-        }
-        createRow("Versioning State:", versioningStatePanel, 6);
-
-        verifyAfterUploadButton = new JCheckBox("Verify content after upload");
-        createRow("", verifyAfterUploadButton, 7);
-
-        JButton createButton = new JButton("Create Document", ClientHelper.getIcon("newdocument.png"));
-        createButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                String name = nameField.getText();
-                String type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType().getId();
-                String filename = filenameField.getText();
-
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    VersioningState versioningState = VersioningState.NONE;
-                    if (versioningStateMajorButton.isSelected()) {
-                        versioningState = VersioningState.MAJOR;
-                    } else if (versioningStateMinorButton.isSelected()) {
-                        versioningState = VersioningState.MINOR;
-                    } else if (versioningStateCheckedoutButton.isSelected()) {
-                        versioningState = VersioningState.CHECKEDOUT;
-                    }
-
-                    ObjectId objectId = null;
-                    if (filename.length() > 0) {
-                        // create a document from a file
-                        objectId = getClientModel().createDocument(name, type, filename, getMandatoryPropertyValues(),
-                                versioningState, unfiledButton.isSelected());
-
-                        if (verifyAfterUploadButton.isSelected()) {
-                            ContentStream contentStream = getClientModel().createContentStream(filename);
-                            verifyContentStreams(contentStream, objectId);
-                        }
-                    } else {
-                        // create a document with random data
-                        long seed = System.currentTimeMillis();
-                        long length = ((Number) generateContentSizeField.getValue()).longValue();
-                        if (length < 0) {
-                            length = 0;
-                        } else {
-                            for (int i = 0; i < generateContentUnitField.getSelectedIndex(); i++) {
-                                length = length * 1024;
-                            }
-                        }
-
-                        objectId = getClientModel().createDocument(name, type, getMandatoryPropertyValues(), length,
-                                seed, versioningState, unfiledButton.isSelected());
-
-                        if (verifyAfterUploadButton.isSelected()) {
-                            ContentStream contentStream = getClientModel().createContentStream("", length, seed);
-                            verifyContentStreams(contentStream, objectId);
-                        }
-                    }
-
-                    if (objectId != null) {
-                        getClientModel().loadObject(objectId.getId());
-                    }
-
-                    thisDialog.setVisible(false);
-                    thisDialog.dispose();
-                } catch (Exception e) {
-                    ClientHelper.showError(null, e);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-
-                    try {
-                        getClientModel().reloadFolder();
-                    } catch (Exception e) {
-                        ClientHelper.showError(null, e);
-                    }
-                }
-            }
-        });
-        createActionRow("", createButton, 7);
-
-        if (file != null) {
-            setFile(file);
-        }
-
-        getRootPane().setDefaultButton(createButton);
-
-        showDialog();
-    }
-
-    private void setFile(File file) {
-        filenameField.setText(file.getAbsolutePath());
-        if (nameField.getText().trim().length() == 0) {
-            nameField.setText(file.getName());
-        }
-    }
-
-    private void verifyContentStreams(ContentStream sourceContentStream, ObjectId objectId) {
-        // download content from repository
-        ClientSession clientSession = getClientModel().getClientSession();
-        Document doc = (Document) clientSession.getSession().getObject(objectId,
-                clientSession.getObjectOperationContext());
-        ContentStream docContentStream = doc.getContentStream();
-
-        // compare
-        if (docContentStream == null) {
-            if (sourceContentStream.getLength() == 0) {
-                JOptionPane.showMessageDialog(getOwner(), "Source file and document content are both empty.",
-                        "Verification successful", JOptionPane.INFORMATION_MESSAGE);
-            } else {
-                JOptionPane.showMessageDialog(getOwner(), "Document has no conent but the source file is not empty!",
-                        "Verification failed", JOptionPane.ERROR_MESSAGE);
-            }
-            return;
-        }
-
-        InputStream sourceContent = null;
-        InputStream docContent = null;
-        try {
-            sourceContent = new BufferedInputStream(sourceContentStream.getStream(), 64 * 1024);
-            docContent = new BufferedInputStream(docContentStream.getStream(), 64 * 1024);
-
-            int fb = 0;
-            int db = 0;
-            long pos = 0;
-            while (fb > -1 && db > -1) {
-                fb = sourceContent.read();
-                db = docContent.read();
-
-                if (fb != db) {
-                    if (fb == -1) {
-                        JOptionPane.showMessageDialog(getOwner(),
-                                "The document content is bigger than the source file!", "Verification failed",
-                                JOptionPane.ERROR_MESSAGE);
-                    } else if (db == -1) {
-                        JOptionPane.showMessageDialog(getOwner(),
-                                "The source file is bigger than the document content!", "Verification failed",
-                                JOptionPane.ERROR_MESSAGE);
-                    } else {
-                        JOptionPane.showMessageDialog(getOwner(), "Contents differ at byte " + pos + "!",
-                                "Verification failed", JOptionPane.ERROR_MESSAGE);
-                    }
-
-                    return;
-                }
-
-                pos++;
-            }
-
-            JOptionPane.showMessageDialog(getOwner(), "Source file and document content are identical.",
-                    "Verification successful", JOptionPane.INFORMATION_MESSAGE);
-        } catch (Exception e) {
-            JOptionPane.showMessageDialog(getOwner(), "Content test exception: " + e.getMessage(),
-                    "Verification failed", JOptionPane.ERROR_MESSAGE);
-        } finally {
-            IOUtils.closeQuietly(sourceContent);
-            IOUtils.consumeAndClose(docContent);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java
deleted file mode 100644
index bd18342..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Cursor;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.CreateDialog;
-
-public class CreateFolderDialog extends CreateDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField nameField;
-    private JComboBox typeBox;
-
-    public CreateFolderDialog(Frame owner, ClientModel model) {
-        super(owner, "Create Folder", model);
-        createGUI();
-    }
-
-    private void createGUI() {
-        final CreateFolderDialog thisDialog = this;
-
-        nameField = new JTextField(60);
-        createRow("Name:", nameField, 0);
-
-        Object[] types = getTypes(BaseTypeId.CMIS_FOLDER.value());
-        if (types.length == 0) {
-            JOptionPane.showMessageDialog(this, "No creatable type!", "Creatable Types", JOptionPane.ERROR_MESSAGE);
-            thisDialog.dispose();
-            return;
-        }
-
-        typeBox = new JComboBox(types);
-        typeBox.setSelectedIndex(0);
-        typeBox.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                TypeDefinition type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType();
-                updateMandatoryFields(type);
-            }
-        });
-
-        ObjectTypeItem type = (ObjectTypeItem) typeBox.getSelectedItem();
-        updateMandatoryFields(type.getObjectType());
-
-        createRow("Type:", typeBox, 1);
-
-        JButton createButton = new JButton("Create Folder", ClientHelper.getIcon("newfolder.png"));
-        createButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                String name = nameField.getText();
-                String type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType().getId();
-
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    ObjectId objectId = getClientModel().createFolder(name, type, getMandatoryPropertyValues());
-
-                    if (objectId != null) {
-                        getClientModel().loadObject(objectId.getId());
-                    }
-
-                    thisDialog.setVisible(false);
-                    thisDialog.dispose();
-                } catch (Exception e) {
-                    ClientHelper.showError(null, e);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-
-                    try {
-                        getClientModel().reloadFolder();
-                    } catch (Exception e) {
-                        ClientHelper.showError(null, e);
-                    }
-                }
-            }
-        });
-        createActionRow("", createButton, 3);
-
-        getRootPane().setDefaultButton(createButton);
-
-        showDialog();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateItemDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateItemDialog.java
deleted file mode 100644
index e54134a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateItemDialog.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Cursor;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.CreateDialog;
-
-public class CreateItemDialog extends CreateDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField nameField;
-    private JComboBox typeBox;
-
-    public CreateItemDialog(Frame owner, ClientModel model) {
-        super(owner, "Create Item", model);
-        createGUI();
-    }
-
-    private void createGUI() {
-        final CreateItemDialog thisDialog = this;
-
-        nameField = new JTextField(60);
-        createRow("Name:", nameField, 0);
-
-        Object[] types = getTypes(BaseTypeId.CMIS_ITEM.value());
-        if (types.length == 0) {
-            JOptionPane.showMessageDialog(this, "No creatable type!", "Creatable Types", JOptionPane.ERROR_MESSAGE);
-            thisDialog.dispose();
-            return;
-        }
-
-        typeBox = new JComboBox(types);
-        typeBox.setSelectedIndex(0);
-        typeBox.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                TypeDefinition type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType();
-                updateMandatoryFields(type);
-            }
-        });
-
-        ObjectTypeItem type = (ObjectTypeItem) typeBox.getSelectedItem();
-        updateMandatoryFields(type.getObjectType());
-
-        createRow("Type:", typeBox, 1);
-
-        JButton createButton = new JButton("Create Item", ClientHelper.getIcon("newfolder.png"));
-        createButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                String name = nameField.getText();
-                String type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType().getId();
-
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    ObjectId objectId = getClientModel().createItem(name, type, getMandatoryPropertyValues());
-
-                    if (objectId != null) {
-                        getClientModel().loadObject(objectId.getId());
-                    }
-
-                    thisDialog.setVisible(false);
-                    thisDialog.dispose();
-                } catch (Exception e) {
-                    ClientHelper.showError(null, e);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-
-                    try {
-                        getClientModel().reloadFolder();
-                    } catch (Exception e) {
-                        ClientHelper.showError(null, e);
-                    }
-                }
-            }
-        });
-        createActionRow("", createButton, 3);
-
-        getRootPane().setDefaultButton(createButton);
-
-        showDialog();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java
deleted file mode 100644
index ed3a2ac..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Cursor;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.CreateDialog;
-
-public class CreateRelationshipDialog extends CreateDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField nameField;
-    private JComboBox typeBox;
-    private JTextField sourceIdField;
-    private JTextField targetIdField;
-
-    public CreateRelationshipDialog(Frame owner, ClientModel model) {
-        super(owner, "Create Relationship", model);
-        createGUI();
-    }
-
-    private void createGUI() {
-        final CreateRelationshipDialog thisDialog = this;
-
-        nameField = new JTextField(60);
-        createRow("Name:", nameField, 0);
-
-        Object[] types = getTypes(BaseTypeId.CMIS_RELATIONSHIP.value());
-        if (types.length == 0) {
-            JOptionPane.showMessageDialog(this, "No creatable type!", "Creatable Types", JOptionPane.ERROR_MESSAGE);
-            thisDialog.dispose();
-            return;
-        }
-
-        typeBox = new JComboBox(types);
-        typeBox.setSelectedIndex(0);
-        typeBox.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                TypeDefinition type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType();
-                updateMandatoryFields(type);
-            }
-        });
-
-        ObjectTypeItem type = (ObjectTypeItem) typeBox.getSelectedItem();
-        updateMandatoryFields(type.getObjectType());
-
-        createRow("Type:", typeBox, 1);
-
-        sourceIdField = new JTextField(60);
-        if (getClientModel().getCurrentObject() != null) {
-            sourceIdField.setText(getClientModel().getCurrentObject().getId());
-        }
-        createRow("Source Id:", sourceIdField, 2);
-
-        targetIdField = new JTextField(60);
-        createRow("Target Id:", targetIdField, 3);
-
-        JButton createButton = new JButton("Create Relationship", ClientHelper.getIcon("newrelationship.png"));
-        createButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                String name = nameField.getText();
-                String type = ((ObjectTypeItem) typeBox.getSelectedItem()).getObjectType().getId();
-                String sourceId = sourceIdField.getText();
-                String targetId = targetIdField.getText();
-
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    ObjectId objectId = getClientModel().createRelationship(name, type, sourceId, targetId,
-                            getMandatoryPropertyValues());
-
-                    if (objectId != null) {
-                        getClientModel().loadObject(objectId.getId());
-                    }
-
-                    thisDialog.setVisible(false);
-                    thisDialog.dispose();
-                } catch (Exception e) {
-                    ClientHelper.showError(null, e);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-
-                    try {
-                        getClientModel().reloadFolder();
-                    } catch (Exception e) {
-                        ClientHelper.showError(null, e);
-                    }
-                }
-            }
-        });
-        createActionRow("", createButton, 4);
-
-        getRootPane().setDefaultButton(createButton);
-
-        showDialog();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ExpertLoginTab.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ExpertLoginTab.java
deleted file mode 100644
index 9bf219d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ExpertLoginTab.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.io.File;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.BorderFactory;
-import javax.swing.JComboBox;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-
-import org.apache.chemistry.opencmis.client.SessionParameterMap;
-import org.apache.chemistry.opencmis.workbench.ClientHelper.FileEntry;
-import org.apache.chemistry.opencmis.workbench.model.ClientSession;
-
-public class ExpertLoginTab extends AbstractLoginTab {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String SYSPROP_CONFIGS = ClientSession.WORKBENCH_PREFIX + "configs";
-
-    private static final String CONFIGS_FOLDER = "/configs/";
-    private static final String CONFIGS_LIBRARY = "config-library.properties";
-
-    private JComboBox configs;
-    private JTextArea sessionParameterTextArea;
-    private List<FileEntry> sessionConfigurations;
-
-    public ExpertLoginTab() {
-        super();
-        createGUI();
-    }
-
-    private void createGUI() {
-        setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
-
-        URI propFile = null;
-
-        String externalConfigs = System.getProperty(SYSPROP_CONFIGS);
-        if (externalConfigs == null) {
-            propFile = ClientHelper.getClasspathURI(CONFIGS_FOLDER + CONFIGS_LIBRARY);
-        } else {
-            propFile = (new File(externalConfigs)).toURI();
-        }
-
-        sessionConfigurations = ClientHelper.readFileProperties(propFile);
-
-        configs = new JComboBox();
-        configs.setMaximumRowCount(20);
-
-        configs.addItem(new FileEntry("", null));
-        if (sessionConfigurations != null) {
-            for (FileEntry fe : sessionConfigurations) {
-                configs.addItem(fe);
-            }
-        }
-
-        configs.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                if (e.getStateChange() == ItemEvent.SELECTED) {
-                    FileEntry fe = (FileEntry) e.getItem();
-
-                    sessionParameterTextArea.setText(ClientHelper.readFileAndRemoveHeader(fe.getFile()));
-                    sessionParameterTextArea.setCaretPosition(0);
-                }
-            }
-        });
-
-        add(configs, BorderLayout.PAGE_START);
-
-        sessionParameterTextArea = new JTextArea();
-        sessionParameterTextArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
-        add(new JScrollPane(sessionParameterTextArea), BorderLayout.CENTER);
-    }
-
-    public void setSessionParameters(Map<String, String> parameters) {
-        configs.setSelectedIndex(0);
-
-        StringBuilder sb = new StringBuilder();
-        for (Map.Entry<String, String> parameter : parameters.entrySet()) {
-            sb.append(parameter.getKey());
-            sb.append('=');
-            sb.append(parameter.getValue());
-            sb.append('\n');
-        }
-
-        sessionParameterTextArea.setText(sb.toString());
-        sessionParameterTextArea.setCaretPosition(0);
-    }
-
-    @Override
-    public String getTabTitle() {
-        return "Expert";
-    }
-
-    @Override
-    public Map<String, String> getSessionParameters() {
-        SessionParameterMap result = new SessionParameterMap();
-        result.parse(sessionParameterTextArea.getText());
-
-        return result;
-    }
-
-    @Override
-    public boolean transferSessionParametersToExpertTab() {
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderPanel.java
deleted file mode 100644
index 076fcde..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderPanel.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.FolderListener;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-
-public class FolderPanel extends JPanel implements FolderListener, ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private String parentId;
-
-    private JButton upButton;
-    private JTextField pathField;
-    private JButton goButton;
-    private FolderTable folderTable;
-
-    public FolderPanel(ClientModel model) {
-        super();
-
-        this.model = model;
-        model.addFolderListener(this);
-        model.addObjectListener(this);
-        createGUI();
-    }
-
-    public void folderLoaded(final ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                Folder currentFolder = event.getClientModel().getCurrentFolder();
-
-                if (currentFolder != null) {
-                    String path = currentFolder.getPath();
-                    pathField.setText(path);
-
-                    Folder parent = currentFolder.getFolderParent();
-                    if (parent == null) {
-                        parentId = null;
-                        upButton.setEnabled(false);
-                    } else {
-                        parentId = parent.getId();
-                        upButton.setEnabled(true);
-                    }
-                } else {
-                    pathField.setText("???");
-                    parentId = null;
-                    upButton.setEnabled(false);
-                }
-            }
-        });
-    }
-
-    public void objectLoaded(ClientModelEvent event) {
-        int selectedRow = folderTable.getSelectedRow();
-        if (selectedRow > -1 && event.getClientModel().getCurrentObject() != null) {
-            if (selectedRow < folderTable.getRowCount()) {
-
-                String selId = folderTable.getValueAt(folderTable.getSelectedRow(), FolderTable.ID_COLUMN).toString();
-                String curId = event.getClientModel().getCurrentObject().getId();
-
-                if (!curId.equals(selId)) {
-                    folderTable.clearSelection();
-                }
-            } else {
-                folderTable.clearSelection();
-            }
-        }
-    }
-
-    private void createGUI() {
-        setLayout(new BorderLayout());
-
-        JPanel panel = new JPanel();
-        panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
-        panel.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0));
-
-        upButton = new JButton("up");
-        upButton.setEnabled(false);
-        upButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    ObjectId objectId = model.loadFolder(parentId, false);
-                    model.loadObject(objectId.getId());
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                    return;
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-        panel.add(upButton);
-
-        pathField = new JTextField("");
-        pathField.addKeyListener(new KeyListener() {
-            public void keyTyped(KeyEvent e) {
-            }
-
-            public void keyReleased(KeyEvent e) {
-                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
-                    loadFolder();
-                }
-            }
-
-            public void keyPressed(KeyEvent e) {
-            }
-        });
-        panel.add(pathField);
-
-        goButton = new JButton("go");
-        goButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                loadFolder();
-            }
-        });
-        panel.add(goButton);
-
-        add(panel, BorderLayout.PAGE_START);
-
-        folderTable = new FolderTable(model);
-        folderTable.setFillsViewportHeight(true);
-        model.addFolderListener(folderTable);
-
-        add(new JScrollPane(folderTable), BorderLayout.CENTER);
-    }
-
-    private void loadFolder() {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    String id = pathField.getText().trim();
-                    if (id.length() == 0) {
-                        id = "/";
-                    }
-                    ObjectId objectId = model.loadFolder(id, id.charAt(0) == '/');
-                    model.loadObject(objectId.getId());
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                    return;
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderTable.java
deleted file mode 100644
index b41e02e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/FolderTable.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Cursor;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.DropMode;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JTable;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
-import javax.swing.TransferHandler;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumn;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.FolderListener;
-import org.apache.chemistry.opencmis.workbench.swing.GregorianCalendarRenderer;
-
-public class FolderTable extends JTable implements FolderListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "", "Name", "Type", "Content Type", "Size", "Creation Date",
-            "Created by", "Modification Date", "Modified by", "Id" };
-    private static final int[] COLUMN_WIDTHS = { 24, 200, 150, 150, 80, 180, 100, 180, 100, 300 };
-    public static final int ID_COLUMN = 9;
-
-    private final ClientModel model;
-
-    private Map<BaseTypeId, ImageIcon> icons;
-    private ImageIcon checkedOutIcon;
-    private ImageIcon pwcIcon;
-
-    public FolderTable(final ClientModel model) {
-        super();
-
-        this.model = model;
-
-        setModel(new FolderTableModel());
-
-        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        setAutoResizeMode(AUTO_RESIZE_OFF);
-        setAutoCreateRowSorter(true);
-
-        setDefaultRenderer(GregorianCalendar.class, new GregorianCalendarRenderer());
-        setTransferHandler(new FolderTransferHandler());
-        setDragEnabled(true);
-        setDropMode(DropMode.INSERT);
-
-        for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
-            TableColumn column = getColumnModel().getColumn(i);
-            column.setPreferredWidth(COLUMN_WIDTHS[i]);
-        }
-
-        final JPopupMenu popup = new JPopupMenu();
-        JMenuItem menuItem = new JMenuItem("Copy to clipboard");
-        popup.add(menuItem);
-
-        menuItem.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ClientHelper.copyTableToClipboard(FolderTable.this);
-            }
-        });
-
-        getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-            public void valueChanged(ListSelectionEvent e) {
-                if (e.getValueIsAdjusting()) {
-                    return;
-                }
-
-                int row = getSelectedRow();
-                if (row > -1) {
-                    String id = getModel().getValueAt(getRowSorter().convertRowIndexToModel(row), ID_COLUMN).toString();
-
-                    try {
-                        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                        model.loadObject(id);
-                    } catch (Exception ex) {
-                        ClientHelper.showError(null, ex);
-                        return;
-                    } finally {
-                        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                    }
-                }
-            }
-        });
-
-        addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                if (e.getClickCount() == 2) {
-                    doAction(e.isShiftDown());
-                }
-            }
-
-            public void mousePressed(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            public void mouseReleased(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            private void maybeShowPopup(MouseEvent e) {
-                if (e.isPopupTrigger()) {
-                    popup.show(e.getComponent(), e.getX(), e.getY());
-                }
-            }
-        });
-
-        addKeyListener(new KeyListener() {
-            public void keyTyped(KeyEvent e) {
-            }
-
-            public void keyReleased(KeyEvent e) {
-                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
-                    doAction(e.isShiftDown());
-                }
-            }
-
-            public void keyPressed(KeyEvent e) {
-            }
-        });
-
-        loadIcons();
-    }
-
-    private void loadIcons() {
-        icons = new HashMap<BaseTypeId, ImageIcon>();
-        icons.put(BaseTypeId.CMIS_DOCUMENT, ClientHelper.getIcon("document.png"));
-        icons.put(BaseTypeId.CMIS_FOLDER, ClientHelper.getIcon("folder.png"));
-        icons.put(BaseTypeId.CMIS_RELATIONSHIP, ClientHelper.getIcon("relationship.png"));
-        icons.put(BaseTypeId.CMIS_POLICY, ClientHelper.getIcon("policy.png"));
-        icons.put(BaseTypeId.CMIS_ITEM, ClientHelper.getIcon("item.png"));
-
-        checkedOutIcon = ClientHelper.getIcon("checkedout.png");
-        pwcIcon = ClientHelper.getIcon("pwc.png");
-    }
-
-    public void folderLoaded(final ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                event.getClientModel().getCurrentChildren();
-                ((FolderTableModel) getModel()).fireTableDataChanged();
-            }
-        });
-    }
-
-    private void doAction(boolean alternate) {
-        int row = getSelectedRow();
-        if ((row > -1) && (row < model.getCurrentChildren().size())) {
-            String id = getModel().getValueAt(getRowSorter().convertRowIndexToModel(row), ID_COLUMN).toString();
-            CmisObject object = model.getFromCurrentChildren(id);
-
-            if (object instanceof Document) {
-                if (alternate) {
-                    ClientHelper.download(this.getParent(), (Document) object, null);
-                } else {
-                    ClientHelper.open(this.getParent(), (Document) object, null);
-                }
-            } else if (object instanceof Folder) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    model.loadFolder(object.getId(), false);
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                    return;
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        }
-    }
-
-    class FolderTableModel extends AbstractTableModel {
-
-        private static final long serialVersionUID = 1L;
-
-        public String getColumnName(int columnIndex) {
-            return COLUMN_NAMES[columnIndex];
-        }
-
-        public int getColumnCount() {
-            return COLUMN_NAMES.length;
-        }
-
-        public int getRowCount() {
-            return model.getCurrentChildren().size();
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            CmisObject obj = model.getCurrentChildren().get(rowIndex);
-
-            switch (columnIndex) {
-            case 0:
-                if (obj instanceof Document) {
-                    Document doc = (Document) obj;
-                    if (Boolean.TRUE.equals(doc.isVersionSeriesCheckedOut())) {
-                        if (doc.getId().equals(doc.getVersionSeriesCheckedOutId())) {
-                            return pwcIcon;
-                        } else {
-                            return checkedOutIcon;
-                        }
-                    } else {
-                        return icons.get(BaseTypeId.CMIS_DOCUMENT);
-                    }
-                }
-                return icons.get(obj.getBaseTypeId());
-            case 1:
-                return obj.getName();
-            case 2:
-                return obj.getType().getId();
-            case 3:
-                if (obj instanceof Document) {
-                    return ((Document) obj).getContentStreamMimeType();
-                } else {
-                    return null;
-                }
-            case 4:
-                if (obj instanceof Document) {
-                    return ((Document) obj).getContentStreamLength();
-                } else {
-                    return null;
-                }
-            case 5:
-                return obj.getCreationDate();
-            case 6:
-                return obj.getCreatedBy();
-            case 7:
-                return obj.getLastModificationDate();
-            case 8:
-                return obj.getLastModifiedBy();
-            case ID_COLUMN:
-                return obj.getId();
-            default:
-            }
-
-            return "";
-        }
-
-        @Override
-        public Class<?> getColumnClass(int columnIndex) {
-            switch (columnIndex) {
-            case 0:
-                return ImageIcon.class;
-            case 4:
-                return Long.class;
-            case 5:
-            case 7:
-                return GregorianCalendar.class;
-            default:
-            }
-
-            return String.class;
-        }
-    }
-
-    class FolderTransferHandler extends TransferHandler {
-
-        private static final long serialVersionUID = 1L;
-
-        public FolderTransferHandler() {
-            super();
-        }
-
-        @Override
-        public boolean canImport(TransferSupport support) {
-            if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-                return false;
-            }
-
-            if (!support.isDrop()) {
-                return false;
-            }
-
-            return true;
-        }
-
-        @SuppressWarnings("unchecked")
-        @Override
-        public boolean importData(TransferSupport support) {
-            if (!canImport(support)) {
-                return false;
-            }
-
-            File file = null;
-            try {
-                List<File> fileList = (List<File>) support.getTransferable().getTransferData(
-                        DataFlavor.javaFileListFlavor);
-
-                if ((fileList == null) || (fileList.size() != 1) || (fileList.get(0) == null)
-                        || !fileList.get(0).isFile()) {
-                    return false;
-                }
-
-                file = fileList.get(0);
-            } catch (Exception ex) {
-                ClientHelper.showError(null, ex);
-                return false;
-            }
-
-            new CreateDocumentDialog(null, model, file);
-
-            return true;
-        }
-
-        @Override
-        public int getSourceActions(JComponent c) {
-            return COPY;
-        }
-
-        @Override
-        protected Transferable createTransferable(JComponent c) {
-            int row = getSelectedRow();
-            if ((row > -1) && (row < model.getCurrentChildren().size())) {
-                String id = getValueAt(row, ID_COLUMN).toString();
-                CmisObject object = model.getFromCurrentChildren(id);
-
-                if (object instanceof Document) {
-                    Document doc = (Document) object;
-
-                    File tempFile = null;
-                    try {
-                        tempFile = ClientHelper.createTempFileFromDocument(doc, null);
-                    } catch (Exception e) {
-                        ClientHelper.showError(null, e);
-                    }
-
-                    final File tempTransFile = tempFile;
-
-                    return new Transferable() {
-                        public boolean isDataFlavorSupported(DataFlavor flavor) {
-                            return flavor == DataFlavor.javaFileListFlavor;
-                        }
-
-                        public DataFlavor[] getTransferDataFlavors() {
-                            return new DataFlavor[] { DataFlavor.javaFileListFlavor };
-                        }
-
-                        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
-                            return Collections.singletonList(tempTransFile);
-                        }
-                    };
-                }
-            }
-
-            return null;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/InfoDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/InfoDialog.java
deleted file mode 100644
index 6d6b4b4..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/InfoDialog.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.Frame;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-import java.util.TreeSet;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.UIManager;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-
-public class InfoDialog extends JDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    public InfoDialog(Frame owner) {
-        super(owner, "Info", true);
-        createGUI();
-    }
-
-    private void createGUI() {
-        setPreferredSize(new Dimension(800, 500));
-        setMinimumSize(new Dimension(600, 400));
-
-        setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
-
-        JPanel topPanel = new JPanel(new FlowLayout());
-
-        JLabel cmisLogo = new JLabel(ClientHelper.getIcon("icon.png"));
-        topPanel.add(cmisLogo);
-
-        Font labelFont = UIManager.getFont("Label.font");
-        Font titleFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 2f);
-
-        JLabel titleLabel = new JLabel("CMIS Workbench");
-        titleLabel.setFont(titleFont);
-        topPanel.add(titleLabel);
-
-        add(topPanel);
-
-        StringBuilder readme = new StringBuilder();
-
-        readme.append(loadText("/META-INF/README-cmis-workbench.txt", "CMIS Workbench"));
-        readme.append("\n---------------------------------------------------------\n");
-
-        readme.append("\nCurrent System Properties:\n\n");
-
-        Properties sysProps = System.getProperties();
-        for (Object key : new TreeSet<Object>(sysProps.keySet())) {
-            readme.append(key).append(" = ").append(sysProps.get(key)).append('\n');
-        }
-
-        readme.append("\n---------------------------------------------------------\n");
-        readme.append(loadText("/META-INF/build-timestamp.txt", ""));
-
-        JTextArea ta = new JTextArea(readme.toString());
-        ta.setEditable(false);
-        ta.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
-        JScrollPane readmePane = new JScrollPane(ta);
-        readmePane.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
-
-        add(readmePane);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), false);
-
-        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(null);
-    }
-
-    public void showDialog() {
-        setVisible(true);
-    }
-
-    public void hideDialog() {
-        setVisible(false);
-    }
-
-    private String loadText(String file, String defaultText) {
-        InputStream stream = getClass().getResourceAsStream(file);
-        if (stream != null) {
-            try {
-                return IOUtils.readAllLines(stream);
-            } catch (IOException e) {
-                return defaultText;
-            }
-        }
-
-        return defaultText;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LogFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LogFrame.java
deleted file mode 100644
index bc31497..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LogFrame.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-public class LogFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "CMIS Client Logging";
-
-    private JTextArea logTextArea;
-
-    public LogFrame() {
-        super();
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE);
-        setPreferredSize(new Dimension(800, 600));
-        setMinimumSize(new Dimension(200, 60));
-
-        setLayout(new BorderLayout());
-
-        logTextArea = new JTextArea();
-        logTextArea.setEditable(false);
-        logTextArea.setFont(new Font("Monospaced", Font.PLAIN, 12));
-        logTextArea.setLineWrap(true);
-        logTextArea.setWrapStyleWord(true);
-        add(new JScrollPane(logTextArea), BorderLayout.CENTER);
-
-        JPanel inputPanel = new JPanel(new FlowLayout());
-        add(inputPanel, BorderLayout.PAGE_END);
-
-        JButton clearButton = new JButton("Clear");
-        clearButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                logTextArea.setText("");
-            }
-        });
-        inputPanel.add(clearButton);
-
-        String[] levels = new String[] { Level.ALL.toString(), Level.TRACE.toString(), Level.DEBUG.toString(),
-                Level.INFO.toString(), Level.WARN.toString(), Level.ERROR.toString(), Level.FATAL.toString(),
-                Level.OFF.toString() };
-
-        final JComboBox levelBox = new JComboBox(levels);
-        levelBox.setSelectedItem(Logger.getRootLogger().getLevel().toString());
-        levelBox.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                Logger.getRootLogger().setLevel(Level.toLevel(levelBox.getSelectedItem().toString()));
-            }
-        });
-        inputPanel.add(levelBox);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), false);
-
-        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
-        pack();
-
-        setLocationRelativeTo(null);
-        setVisible(false);
-
-        ClientWriterAppender.setTextArea(logTextArea);
-    }
-
-    public void showFrame() {
-        setVisible(true);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoggingInputStream.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoggingInputStream.java
deleted file mode 100644
index 8c140c3..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoggingInputStream.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.NumberFormat;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LoggingInputStream extends InputStream {
-
-    private static final Logger LOG = LoggerFactory.getLogger(LoggingInputStream.class);
-
-    private final InputStream stream;
-    private final String desc;
-    private long marked;
-    private long count = 0;
-    private long startTimestamp = -1;
-    private long endTimestamp = -1;
-
-    public LoggingInputStream(InputStream stream, String desc) {
-        super();
-        this.stream = stream;
-        this.desc = desc;
-    }
-
-    @Override
-    public int available() throws IOException {
-        return stream.available();
-    }
-
-    @Override
-    public synchronized void mark(int readlimit) {
-        stream.mark(readlimit);
-        marked = count;
-
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("{}: mark", desc);
-        }
-    }
-
-    @Override
-    public boolean markSupported() {
-        return stream.markSupported();
-    }
-
-    @Override
-    public synchronized void reset() throws IOException {
-        stream.reset();
-        count = marked;
-
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("{}: reset", desc);
-        }
-    }
-
-    protected void count(long len) {
-        if (startTimestamp < 0) {
-            startTimestamp = System.currentTimeMillis();
-            LOG.info("{}: started streaming", desc);
-        }
-        if (len == -1 && endTimestamp == -1) {
-            endTimestamp = System.currentTimeMillis();
-            long time = (endTimestamp - startTimestamp);
-            long kibPerSec = (time < 1 ? -1L : (long) (((double) count / 1024) / ((double) time / 1000)));
-
-            NumberFormat nf = NumberFormat.getInstance();
-            LOG.info("{}: streamed {} bytes in {} ms, {} KiB/sec", desc, nf.format(count), nf.format(time),
-                    nf.format(kibPerSec));
-        } else {
-            count += len;
-        }
-    }
-
-    @Override
-    public int read() throws IOException {
-        int b = stream.read();
-        count(b == -1 ? -1 : 1);
-
-        if (b != -1 && LOG.isTraceEnabled()) {
-            LOG.trace("{}: read {} bytes", desc, count);
-        }
-
-        return b;
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        int rb = stream.read(b, off, len);
-        count(rb);
-
-        if (rb != -1 && LOG.isTraceEnabled()) {
-            LOG.trace("{}: read {} bytes", desc, count);
-        }
-
-        return rb;
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        int rb = stream.read(b);
-        count(rb);
-
-        if (rb != -1 && LOG.isTraceEnabled()) {
-            LOG.trace("{}: read {} bytes", desc, count);
-        }
-
-        return rb;
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        long len = super.skip(n);
-        count(len);
-
-        if (len > 0 && LOG.isTraceEnabled()) {
-            LOG.trace("{}: read {} bytes", desc, count);
-        }
-
-        return len;
-    }
-
-    @Override
-    public void close() throws IOException {
-        super.close();
-
-        if (LOG.isDebugEnabled()) {
-            LOG.info("{}: stream closed", desc);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
deleted file mode 100644
index 8001781..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.ServiceLoader;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.ListCellRenderer;
-import javax.swing.UIManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.workbench.model.ClientSession;
-
-public class LoginDialog extends JDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String SYSPROP_LOGIN_TAB = ClientSession.WORKBENCH_PREFIX + "logintab";
-
-    private static final ServiceLoader<AbstractLoginTab> TAB_SERVICE_LOADER = ServiceLoader
-            .load(AbstractLoginTab.class);
-
-    private JTabbedPane loginTabs;
-    private BasicLoginTab basicLoginTab;
-    private ExpertLoginTab expertLoginTab;
-    private JButton loadRepositoryButton;
-    private JButton loginButton;
-    private JComboBox repositoryBox;
-    private AbstractLoginTab currentTab;
-
-    private boolean canceled = true;
-
-    private ClientSession clientSession;
-
-    public LoginDialog(Frame owner) {
-        super(owner, "Login", true);
-        createGUI();
-    }
-
-    private void createGUI() {
-        setMinimumSize(new Dimension(700, 500));
-        setPreferredSize(new Dimension(700, 500));
-
-        Container pane = getContentPane();
-        pane.setLayout(new BorderLayout());
-
-        loginTabs = new JTabbedPane();
-        add(loginTabs, BorderLayout.CENTER);
-
-        // add tabs
-        addLoginTabs(loginTabs);
-
-        // repository
-        JPanel buttonPanel = new JPanel();
-        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));
-        buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
-        add(buttonPanel, BorderLayout.PAGE_END);
-
-        loadRepositoryButton = createButton("Load Repositories");
-        buttonPanel.add(loadRepositoryButton);
-        getRootPane().setDefaultButton(loadRepositoryButton);
-
-        createRepositoryBox(buttonPanel);
-
-        loginButton = createButton("Login");
-        buttonPanel.add(loginButton);
-        loginButton.setEnabled(false);
-
-        // listeners
-        loadRepositoryButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                repositoryBox.removeAllItems();
-
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    currentTab.beforeLoadRepositories();
-
-                    createClientSession();
-
-                    List<Repository> repositories = clientSession.getRepositories();
-
-                    Collections.sort(repositories, new Comparator<Repository>() {
-                        @Override
-                        public int compare(Repository r1, Repository r2) {
-                            if (r1 == null || r1.getName() == null) {
-                                return 1;
-                            }
-
-                            if (r2 == null || r2.getName() == null) {
-                                return -1;
-                            }
-
-                            return r1.getName().compareTo(r2.getName());
-                        }
-                    });
-
-                    if (repositories.isEmpty()) {
-                        repositoryBox.setEnabled(false);
-                        loginButton.setEnabled(false);
-                        getRootPane().setDefaultButton(loadRepositoryButton);
-
-                        JOptionPane.showMessageDialog(getOwner(),
-                                "The CMIS endpoint retruned an empty list of repositories.", "No repositories!",
-                                JOptionPane.WARNING_MESSAGE);
-                    } else {
-                        for (Repository repository : repositories) {
-                            repositoryBox.addItem(repository);
-                        }
-
-                        repositoryBox.setEnabled(true);
-                        loginButton.setEnabled(true);
-                        getRootPane().setDefaultButton(loginButton);
-                    }
-
-                    currentTab.afterLoadRepositories(repositories);
-                } catch (Exception ex) {
-                    repositoryBox.setEnabled(false);
-                    loginButton.setEnabled(false);
-                    getRootPane().setDefaultButton(loadRepositoryButton);
-
-                    new ConnectionErrorDialog(LoginDialog.this, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-
-        loginButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    currentTab.beforeLogin(clientSession.getRepositories().get(repositoryBox.getSelectedIndex()));
-
-                    clientSession.createSession(repositoryBox.getSelectedIndex());
-
-                    currentTab.afterLogin(clientSession.getSession());
-
-                    canceled = false;
-                    hideDialog();
-                } catch (Exception ex) {
-                    repositoryBox.setEnabled(false);
-                    loginButton.setEnabled(false);
-                    getRootPane().setDefaultButton(loadRepositoryButton);
-
-                    new ConnectionErrorDialog(LoginDialog.this, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                    getRootPane().setDefaultButton(loadRepositoryButton);
-                }
-            }
-        });
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), false);
-
-        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(null);
-    }
-
-    private void addLoginTabs(final JTabbedPane loginTabs) {
-
-        for (AbstractLoginTab tab : TAB_SERVICE_LOADER) {
-            loginTabs.add(tab.getTabTitle(), tab);
-        }
-
-        basicLoginTab = new BasicLoginTab();
-        loginTabs.addTab(basicLoginTab.getTabTitle(), basicLoginTab);
-
-        expertLoginTab = new ExpertLoginTab();
-        loginTabs.addTab(expertLoginTab.getTabTitle(), expertLoginTab);
-
-        loginTabs.setSelectedIndex(0);
-
-        String startTab = System.getProperty(SYSPROP_LOGIN_TAB, "0");
-        try {
-            int tab = Integer.parseInt(startTab);
-            if (tab >= 0 && tab < loginTabs.getTabCount()) {
-                loginTabs.setSelectedIndex(tab);
-            }
-        } catch (NumberFormatException nfe) {
-            // do nothing
-        }
-
-        currentTab = (AbstractLoginTab) loginTabs.getSelectedComponent();
-
-        loginTabs.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent e) {
-                if (loginTabs.getSelectedComponent() == expertLoginTab) {
-                    if (currentTab.transferSessionParametersToExpertTab()) {
-                        expertLoginTab.setSessionParameters(currentTab.getSessionParameters());
-                    }
-                }
-
-                currentTab = (AbstractLoginTab) loginTabs.getSelectedComponent();
-            }
-        });
-    }
-
-    private JButton createButton(String title) {
-        JButton button = new JButton(title);
-        button.setPreferredSize(new Dimension(Short.MAX_VALUE, 30));
-        button.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
-        button.setAlignmentX(Component.CENTER_ALIGNMENT);
-
-        return button;
-    }
-
-    private void createRepositoryBox(Container pane) {
-        repositoryBox = new JComboBox();
-        repositoryBox.setEnabled(false);
-        repositoryBox.setRenderer(new RepositoryRenderer());
-        repositoryBox.setPreferredSize(new Dimension(Short.MAX_VALUE, 60));
-        repositoryBox.setAlignmentX(Component.CENTER_ALIGNMENT);
-
-        pane.add(repositoryBox);
-    }
-
-    protected void setClientSession(ClientSession clientSession) {
-        this.clientSession = clientSession;
-    }
-
-    public void createClientSession() {
-        setClientSession(new ClientSession(currentTab.getSessionParameters(), currentTab.getObjectFactory(),
-                currentTab.getAuthenticationProvider(), currentTab.getCache(), currentTab.getTypeDefinitionCache()));
-    }
-
-    public void showDialog() {
-        clientSession = null;
-        canceled = true;
-
-        repositoryBox.removeAllItems();
-        repositoryBox.setEnabled(false);
-        loginButton.setEnabled(false);
-        getRootPane().setDefaultButton(loadRepositoryButton);
-
-        setLocationRelativeTo(getOwner());
-        setVisible(true);
-    }
-
-    public void hideDialog() {
-        setVisible(false);
-    }
-
-    public ClientSession getClientSession() {
-        return clientSession;
-    }
-
-    public boolean isCanceled() {
-        return canceled;
-    }
-
-    static class RepositoryRenderer extends JPanel implements ListCellRenderer {
-        private static final long serialVersionUID = 1L;
-
-        private final JLabel nameLabel;
-        private final JLabel idLabel;
-        private final JLabel descriptionLabel;
-
-        public RepositoryRenderer() {
-            super();
-            setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
-            setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
-
-            Font labelFont = UIManager.getFont("Label.font");
-
-            nameLabel = new JLabel();
-            nameLabel.setFont(labelFont.deriveFont(Font.BOLD));
-            add(nameLabel);
-
-            idLabel = new JLabel();
-            add(idLabel);
-
-            descriptionLabel = new JLabel();
-            add(descriptionLabel);
-        }
-
-        @Override
-        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
-                boolean cellHasFocus) {
-            Repository repository = (Repository) value;
-
-            if (isSelected) {
-                setBackground(list.getSelectionBackground());
-                setForeground(list.getSelectionForeground());
-            } else {
-                setBackground(list.getBackground());
-                setForeground(list.getForeground());
-            }
-
-            if (repository == null) {
-                nameLabel.setText("");
-                idLabel.setText("");
-                descriptionLabel.setText("");
-            } else {
-                nameLabel.setText(repository.getName());
-                idLabel.setText(repository.getId());
-                descriptionLabel.setText(repository.getDescription());
-            }
-
-            return this;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
deleted file mode 100644
index 72b0523..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.text.Format;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JFormattedTextField;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSpinner;
-import javax.swing.JTextField;
-import javax.swing.SpinnerListModel;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.UIManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.Cardinality;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.workbench.PropertyEditorFrame.UpdateStatus.StatusFlag;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-/**
- * Simple property editor.
- */
-public class PropertyEditorFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "Property Editor";
-    private static final ImageIcon ICON_ADD = ClientHelper.getIcon("add.png");
-
-    private final ClientModel model;
-    private final CmisObject object;
-    private List<PropertyInputPanel> propertyPanels;
-
-    public PropertyEditorFrame(final ClientModel model, final CmisObject object) {
-        super();
-
-        this.model = model;
-        this.object = object;
-
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE);
-        setPreferredSize(new Dimension(800, 600));
-        setMinimumSize(new Dimension(300, 120));
-
-        setLayout(new BorderLayout());
-
-        final JPanel panel = new JPanel();
-        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
-
-        final Font labelFont = UIManager.getFont("Label.font");
-        final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-
-        final JPanel topPanel = new JPanel();
-        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));
-        topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        final JLabel nameLabel = new JLabel(object.getName());
-        nameLabel.setFont(boldFont);
-        topPanel.add(nameLabel);
-        topPanel.add(new JLabel(object.getId()));
-        add(topPanel, BorderLayout.PAGE_START);
-
-        JScrollPane scrollPane = new JScrollPane(panel);
-        add(scrollPane, BorderLayout.CENTER);
-
-        propertyPanels = new ArrayList<PropertyEditorFrame.PropertyInputPanel>();
-
-        int position = 0;
-
-        // primary type
-        for (PropertyDefinition<?> propDef : object.getType().getPropertyDefinitions().values()) {
-            boolean isUpdatable = (propDef.getUpdatability() == Updatability.READWRITE)
-                    || (propDef.getUpdatability() == Updatability.WHENCHECKEDOUT && object
-                            .hasAllowableAction(Action.CAN_CHECK_IN));
-
-            if (isUpdatable) {
-                PropertyInputPanel propertyPanel = new PropertyInputPanel(propDef, object.getPropertyValue(propDef
-                        .getId()), position++);
-
-                propertyPanels.add(propertyPanel);
-                panel.add(propertyPanel);
-            }
-        }
-
-        // secondary types
-        if (object.getSecondaryTypes() != null) {
-            for (ObjectType secType : object.getSecondaryTypes()) {
-                if (secType.getPropertyDefinitions() != null) {
-                    for (PropertyDefinition<?> propDef : secType.getPropertyDefinitions().values()) {
-                        boolean isUpdatable = (propDef.getUpdatability() == Updatability.READWRITE)
-                                || (propDef.getUpdatability() == Updatability.WHENCHECKEDOUT && object
-                                        .hasAllowableAction(Action.CAN_CHECK_IN));
-
-                        if (isUpdatable) {
-                            PropertyInputPanel propertyPanel = new PropertyInputPanel(propDef,
-                                    object.getPropertyValue(propDef.getId()), position++);
-
-                            propertyPanels.add(propertyPanel);
-                            panel.add(propertyPanel);
-                        }
-                    }
-                }
-            }
-        }
-
-        JButton updateButton = new JButton("Update");
-        updateButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        updateButton.setDefaultCapable(true);
-        updateButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                if (doUpdate()) {
-                    dispose();
-                }
-            }
-        });
-
-        add(updateButton, BorderLayout.PAGE_END);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    /**
-     * Performs the update.
-     */
-    private boolean doUpdate() {
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            Map<String, Object> properties = new HashMap<String, Object>();
-            for (PropertyInputPanel propertyPanel : propertyPanels) {
-                if (propertyPanel.includeInUpdate()) {
-                    properties.put(propertyPanel.getId(), propertyPanel.getValue());
-                }
-            }
-
-            if (properties.isEmpty()) {
-                return false;
-            }
-
-            ObjectId newId = object.updateProperties(properties, false);
-
-            if ((newId != null) && newId.getId().equals(model.getCurrentObject().getId())) {
-                try {
-                    model.reloadObject();
-                    model.reloadFolder();
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                }
-            }
-
-            return true;
-        } catch (Exception ex) {
-            ClientHelper.showError(this, ex);
-            return false;
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    interface UpdateStatus {
-        enum StatusFlag {
-            DONT_CHANGE, UPDATE, UNSET
-        }
-
-        void setStatus(StatusFlag status);
-
-        StatusFlag getStatus();
-    }
-
-    interface MultivalueManager {
-        void addNewValue();
-
-        void removeValue(int pos);
-
-        void moveUp(int pos);
-
-        void moveDown(int pos);
-    }
-
-    /**
-     * Property input panel.
-     */
-    public static class PropertyInputPanel extends JPanel implements UpdateStatus, MultivalueManager {
-        private static final long serialVersionUID = 1L;
-
-        private static final Color BACKGROUND1 = UIManager.getColor("Table:\"Table.cellRenderer\".background");
-        private static final Color BACKGROUND2 = UIManager.getColor("Table.alternateRowColor");
-        private static final Color LINE = new Color(0xB8, 0xB8, 0xB8);
-
-        private final PropertyDefinition<?> propDef;
-        private final Object value;
-        private final Color bgColor;
-        private JComboBox changeBox;
-        private List<JComponent> valueComponents;
-
-        public PropertyInputPanel(PropertyDefinition<?> propDef, Object value, int position) {
-            super();
-            this.propDef = propDef;
-            this.value = value;
-            bgColor = (position % 2 == 0 ? BACKGROUND1 : BACKGROUND2);
-            createGUI();
-        }
-
-        private void createGUI() {
-            setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
-
-            setBackground(bgColor);
-            setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, LINE),
-                    BorderFactory.createEmptyBorder(10, 5, 10, 5)));
-
-            Font labelFont = UIManager.getFont("Label.font");
-            Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-
-            JPanel titlePanel = new JPanel();
-            titlePanel.setLayout(new BorderLayout());
-            titlePanel.setBackground(bgColor);
-            titlePanel.setToolTipText("<html><b>"
-                    + propDef.getPropertyType().value()
-                    + "</b> ("
-                    + propDef.getCardinality().value()
-                    + " value)"
-                    + (propDef.getDescription() != null ? "<br>"
-                            + ClientHelper.encodeHtml(new StringBuilder(), propDef.getDescription()) : ""));
-            add(titlePanel);
-
-            JPanel namePanel = new JPanel();
-            namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));
-            namePanel.setBackground(bgColor);
-            JLabel displayNameLabel = new JLabel(propDef.getDisplayName());
-            displayNameLabel.setFont(boldFont);
-            namePanel.add(displayNameLabel);
-            JLabel idLabel = new JLabel(propDef.getId());
-            namePanel.add(idLabel);
-
-            titlePanel.add(namePanel, BorderLayout.LINE_START);
-
-            changeBox = new JComboBox(new Object[] { "Don't change     ", "Update    ", "Unset     " });
-            titlePanel.add(changeBox, BorderLayout.LINE_END);
-
-            valueComponents = new ArrayList<JComponent>();
-            if (propDef.getCardinality() == Cardinality.SINGLE) {
-                JComponent valueField = createInputField(value);
-                valueComponents.add(valueField);
-                add(valueField);
-            } else {
-                if (value instanceof List<?>) {
-                    for (Object v : (List<?>) value) {
-                        JComponent valueField = new MultiValuePropertyInputField(createInputField(v), this, bgColor);
-                        valueComponents.add(valueField);
-                        add(valueField);
-                    }
-                }
-
-                JPanel addPanel = new JPanel(new BorderLayout());
-                addPanel.setBackground(bgColor);
-                JButton addButton = new JButton(ICON_ADD);
-                addButton.addActionListener(new ActionListener() {
-                    @Override
-                    public void actionPerformed(ActionEvent e) {
-                        addNewValue();
-                        setStatus(StatusFlag.UPDATE);
-                    }
-                });
-                addPanel.add(addButton, BorderLayout.LINE_END);
-                add(addPanel);
-
-                updatePositions();
-            }
-
-            setMaximumSize(new Dimension(Short.MAX_VALUE, getPreferredSize().height));
-        }
-
-        private JComponent createInputField(Object value) {
-            switch (propDef.getPropertyType()) {
-            case INTEGER:
-                return new IntegerPropertyInputField(value, this, bgColor);
-            case DECIMAL:
-                return new DecimalPropertyInputField(value, this, bgColor);
-            case DATETIME:
-                return new DateTimePropertyInputField(value, this, bgColor);
-            case BOOLEAN:
-                return new BooleanPropertyInputField(value, this, bgColor);
-            default:
-                return new StringPropertyInputField(value, this, bgColor);
-            }
-        }
-
-        private void updatePositions() {
-            int n = valueComponents.size();
-            for (int i = 0; i < n; i++) {
-                MultiValuePropertyInputField comp = (MultiValuePropertyInputField) valueComponents.get(i);
-                comp.updatePosition(i, i + 1 == n);
-            }
-        }
-
-        public void addNewValue() {
-            JComponent valueField = new MultiValuePropertyInputField(createInputField(null), this, bgColor);
-            valueComponents.add(valueField);
-            add(valueField, getComponentCount() - 1);
-
-            updatePositions();
-            setStatus(StatusFlag.UPDATE);
-
-            revalidate();
-        }
-
-        public void removeValue(int pos) {
-            remove(valueComponents.remove(pos));
-
-            updatePositions();
-            setStatus(StatusFlag.UPDATE);
-
-            revalidate();
-        }
-
-        public void moveUp(int pos) {
-            JComponent comp = valueComponents.get(pos);
-            Collections.swap(valueComponents, pos, pos - 1);
-
-            remove(comp);
-            add(comp, pos);
-
-            updatePositions();
-            setStatus(StatusFlag.UPDATE);
-
-            revalidate();
-        }
-
-        public void moveDown(int pos) {
-            JComponent comp = valueComponents.get(pos);
-            Collections.swap(valueComponents, pos, pos + 1);
-
-            remove(comp);
-            add(comp, pos + 2);
-
-            updatePositions();
-            setStatus(StatusFlag.UPDATE);
-
-            revalidate();
-        }
-
-        public String getId() {
-            return propDef.getId();
-        }
-
-        public Object getValue() {
-            Object result = null;
-
-            if (getStatus() == StatusFlag.UPDATE) {
-                try {
-                    if (propDef.getCardinality() == Cardinality.SINGLE) {
-                        result = ((PropertyValue) valueComponents.get(0)).getPropertyValue();
-                    } else {
-                        List<Object> list = new ArrayList<Object>();
-                        for (JComponent comp : valueComponents) {
-                            list.add(((PropertyValue) comp).getPropertyValue());
-                        }
-                        result = list;
-                    }
-                } catch (Exception ex) {
-                    ClientHelper.showError(this, ex);
-                }
-            }
-
-            return result;
-        }
-
-        public boolean includeInUpdate() {
-            return getStatus() != StatusFlag.DONT_CHANGE;
-        }
-
-        public void setStatus(StatusFlag status) {
-            switch (status) {
-            case UPDATE:
-                changeBox.setSelectedIndex(1);
-                break;
-            case UNSET:
-                changeBox.setSelectedIndex(2);
-                break;
-            default:
-                changeBox.setSelectedIndex(0);
-            }
-        }
-
-        public StatusFlag getStatus() {
-            switch (changeBox.getSelectedIndex()) {
-            case 1:
-                return StatusFlag.UPDATE;
-            case 2:
-                return StatusFlag.UNSET;
-            default:
-                return StatusFlag.DONT_CHANGE;
-            }
-        }
-
-        public Dimension getMaximumSize() {
-            Dimension size = getPreferredSize();
-            size.width = Short.MAX_VALUE;
-            return size;
-        }
-    }
-
-    /**
-     * Property value interface.
-     */
-    public interface PropertyValue {
-        Object getPropertyValue() throws Exception;
-    }
-
-    /**
-     * String property.
-     */
-    public static class StringPropertyInputField extends JTextField implements PropertyValue {
-        private static final long serialVersionUID = 1L;
-
-        public StringPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
-            super(value == null ? "" : value.toString());
-
-            addKeyListener(new KeyListener() {
-                @Override
-                public void keyTyped(KeyEvent e) {
-                }
-
-                @Override
-                public void keyReleased(KeyEvent e) {
-                    status.setStatus(StatusFlag.UPDATE);
-                }
-
-                @Override
-                public void keyPressed(KeyEvent e) {
-                }
-            });
-        }
-
-        public Object getPropertyValue() {
-            return getText();
-        }
-    }
-
-    /**
-     * Formatted property.
-     */
-    public static class AbstractFormattedPropertyInputField extends JFormattedTextField implements PropertyValue {
-        private static final long serialVersionUID = 1L;
-
-        public AbstractFormattedPropertyInputField(final Object value, final Format format, final UpdateStatus status,
-                final Color bgColor) {
-            super(format);
-            if (value != null) {
-                setValue(value);
-            }
-
-            addKeyListener(new KeyListener() {
-                @Override
-                public void keyTyped(KeyEvent e) {
-                }
-
-                @Override
-                public void keyReleased(KeyEvent e) {
-                    status.setStatus(StatusFlag.UPDATE);
-                }
-
-                @Override
-                public void keyPressed(KeyEvent e) {
-                }
-            });
-        }
-
-        public Object getPropertyValue() throws ParseException {
-            commitEdit();
-            return getValue();
-        }
-    }
-
-    /**
-     * Integer property.
-     */
-    public static class IntegerPropertyInputField extends AbstractFormattedPropertyInputField {
-        private static final long serialVersionUID = 1L;
-
-        public IntegerPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
-            super(value, createFormat(), status, bgColor);
-            setHorizontalAlignment(JTextField.RIGHT);
-        }
-
-        private static DecimalFormat createFormat() {
-            DecimalFormat result = new DecimalFormat("#,##0");
-            result.setParseBigDecimal(true);
-            result.setParseIntegerOnly(true);
-            return result;
-        }
-
-        public Object getPropertyValue() {
-            return ((BigDecimal) super.getValue()).toBigIntegerExact();
-        }
-    }
-
-    /**
-     * Decimal property.
-     */
-    public static class DecimalPropertyInputField extends AbstractFormattedPropertyInputField {
-        private static final long serialVersionUID = 1L;
-
-        public DecimalPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
-            super(value, createFormat(), status, bgColor);
-            setHorizontalAlignment(JTextField.RIGHT);
-        }
-
-        private static DecimalFormat createFormat() {
-            DecimalFormat result = new DecimalFormat("#,##0.#############################");
-            result.setParseBigDecimal(true);
-            return result;
-        }
-    }
-
-    /**
-     * Boolean property.
-     */
-    public static class BooleanPropertyInputField extends JComboBox implements PropertyValue {
-        private static final long serialVersionUID = 1L;
-
-        public BooleanPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
-            super(new Object[] { true, false });
-            setSelectedItem(value == null ? true : value);
-
-            addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    status.setStatus(StatusFlag.UPDATE);
-                }
-            });
-        }
-
-        public Object getPropertyValue() {
-            return getSelectedItem();
-        }
-    }
-
-    /**
-     * DateTime property.
-     */
-    public static class DateTimePropertyInputField extends JPanel implements PropertyValue {
-        private static final long serialVersionUID = 1L;
-
-        private static final String[] MONTH_STRINGS;
-
-        static {
-            String[] months = new java.text.DateFormatSymbols().getMonths();
-            int lastIndex = months.length - 1;
-
-            if (months[lastIndex] == null || months[lastIndex].length() <= 0) {
-                String[] monthStrings = new String[lastIndex];
-                System.arraycopy(months, 0, monthStrings, 0, lastIndex);
-                MONTH_STRINGS = monthStrings;
-            } else {
-                MONTH_STRINGS = months;
-            }
-        }
-
-        private final SpinnerNumberModel day;
-        private final SpinnerListModel month;
-        private final SpinnerNumberModel year;
-        private final SpinnerNumberModel hour;
-        private final SpinnerNumberModel min;
-        private final SpinnerNumberModel sec;
-        private final TimeZone timezone;
-
-        public DateTimePropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
-            setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
-            setBackground(bgColor);
-
-            GregorianCalendar cal = (value == null ? new GregorianCalendar() : (GregorianCalendar) value);
-            timezone = cal.getTimeZone();
-
-            day = new SpinnerNumberModel(cal.get(Calendar.DATE), 1, 31, 1);
-            addSpinner(new JSpinner(day), status);
-
-            month = new SpinnerListModel(MONTH_STRINGS);
-            month.setValue(MONTH_STRINGS[cal.get(Calendar.MONTH)]);
-            JSpinner monthSpinner = new JSpinner(month);
-            JComponent editor = monthSpinner.getEditor();
-            if (editor instanceof JSpinner.DefaultEditor) {
-                JFormattedTextField tf = ((JSpinner.DefaultEditor) editor).getTextField();
-                tf.setColumns(6);
-                tf.setHorizontalAlignment(JTextField.RIGHT);
-            }
-            addSpinner(monthSpinner, status);
-
-            year = new SpinnerNumberModel(cal.get(Calendar.YEAR), 0, 9999, 1);
-            JSpinner yearSpinner = new JSpinner(year);
-            yearSpinner.setEditor(new JSpinner.NumberEditor(yearSpinner, "#"));
-            yearSpinner.getEditor().setBackground(bgColor);
-            addSpinner(yearSpinner, status);
-
-            add(new JLabel("  "));
-
-            hour = new SpinnerNumberModel(cal.get(Calendar.HOUR_OF_DAY), 0, 23, 1);
-            JSpinner hourSpinner = new JSpinner(hour);
-            addSpinner(hourSpinner, status);
-
-            add(new JLabel(":"));
-
-            min = new SpinnerNumberModel(cal.get(Calendar.MINUTE), 0, 59, 1);
-            JSpinner minSpinner = new JSpinner(min);
-            addSpinner(minSpinner, status);
-
-            add(new JLabel(":"));
-
-            sec = new SpinnerNumberModel(cal.get(Calendar.SECOND), 0, 59, 1);
-            JSpinner secSpinner = new JSpinner(sec);
-            addSpinner(secSpinner, status);
-
-            add(new JLabel(" " + timezone.getDisplayName(true, TimeZone.SHORT)));
-        }
-
-        private void addSpinner(final JSpinner spinner, final UpdateStatus status) {
-            spinner.addChangeListener(new ChangeListener() {
-                @Override
-                public void stateChanged(ChangeEvent e) {
-                    status.setStatus(StatusFlag.UPDATE);
-                }
-            });
-
-            add(spinner);
-        }
-
-        public Object getPropertyValue() {
-            GregorianCalendar result = new GregorianCalendar();
-
-            result.setTimeZone(timezone);
-
-            result.set(Calendar.YEAR, year.getNumber().intValue());
-            int mi = 0;
-            String ms = month.getValue().toString();
-            for (int i = 0; i < MONTH_STRINGS.length; i++) {
-                if (MONTH_STRINGS[i].equals(ms)) {
-                    mi = i;
-                    break;
-                }
-            }
-            result.set(Calendar.MONTH, mi);
-            result.set(Calendar.DATE, day.getNumber().intValue());
-            result.set(Calendar.HOUR_OF_DAY, hour.getNumber().intValue());
-            result.set(Calendar.MINUTE, min.getNumber().intValue());
-            result.set(Calendar.SECOND, sec.getNumber().intValue());
-
-            return result;
-        }
-    }
-
-    /**
-     * Multi value property.
-     */
-    public static class MultiValuePropertyInputField extends JPanel implements PropertyValue {
-        private static final long serialVersionUID = 1L;
-
-        private static final ImageIcon ICON_UP = ClientHelper.getIcon("up.png");
-        private static final ImageIcon ICON_DOWN = ClientHelper.getIcon("down.png");
-        private static final ImageIcon ICON_REMOVE = ClientHelper.getIcon("remove.png");
-
-        private final JComponent component;
-        private int position;
-
-        private JButton upButton;
-        private JButton downButton;
-
-        public MultiValuePropertyInputField(final JComponent component, final MultivalueManager mutlivalueManager,
-                final Color bgColor) {
-            super();
-            this.component = component;
-
-            setLayout(new BorderLayout());
-            setBackground(bgColor);
-
-            add(component, BorderLayout.CENTER);
-
-            JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
-            buttonPanel.setBackground(bgColor);
-
-            upButton = new JButton(ICON_UP);
-            upButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    mutlivalueManager.moveUp(MultiValuePropertyInputField.this.position);
-                }
-            });
-            buttonPanel.add(upButton);
-
-            downButton = new JButton(ICON_DOWN);
-            downButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    mutlivalueManager.moveDown(MultiValuePropertyInputField.this.position);
-                }
-            });
-            buttonPanel.add(downButton);
-
-            JButton removeButton = new JButton(ICON_REMOVE);
-            removeButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    mutlivalueManager.removeValue(MultiValuePropertyInputField.this.position);
-                }
-            });
-            buttonPanel.add(removeButton);
-
-            add(buttonPanel, BorderLayout.LINE_END);
-        }
-
-        private void updatePosition(int position, boolean isLast) {
-            this.position = position;
-            upButton.setEnabled(position > 0);
-            downButton.setEnabled(!isLast);
-        }
-
-        public Object getPropertyValue() throws Exception {
-            return ((PropertyValue) component).getPropertyValue();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ProxyDetector.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ProxyDetector.java
deleted file mode 100644
index 3cc317c..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ProxyDetector.java
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-
-/**
- * Tries to detect the OS proxy configuration.
- */
-public class ProxyDetector {
-
-    public static final String HTTP_PROXY_HOST = "http.proxyHost";
-    public static final String HTTP_PROXY_PORT = "http.proxyPort";
-    public static final String HTTP_PROXY_USER = "http.proxyUser";
-    public static final String HTTP_PROXY_PASSWORD = "http.proxyPassword";
-    public static final String HTTPS_PROXY_HOST = "https.proxyHost";
-    public static final String HTTPS_PROXY_PORT = "https.proxyPort";
-    public static final String HTTPS_PROXY_USER = "https.proxyUser";
-    public static final String HTTPS_PROXY_PASSWORD = "https.proxyPassword";
-    public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
-
-    public static final Pattern PROXY_ENV_VAR1 = Pattern.compile("http.?:\\/\\/(.+):(\\d+).*");
-    public static final Pattern PROXY_ENV_VAR2 = Pattern.compile("(.+):(\\d+)");
-    public static final Pattern PROXY_WIN_REG = Pattern.compile("\\s+Proxy(.+)\\s+REG.+\\s+(.+)");
-
-    private static boolean debug = false;
-
-    /**
-     * Gets proxy settings from system properties.
-     */
-    public static ProxySettings getJavaProxySettings() {
-        ProxySettings settings = new ProxySettings();
-
-        settings.setHttpProxyHost(System.getProperty(HTTP_PROXY_HOST));
-        settings.setHttpProxyPort(parsePort(System.getProperty(HTTP_PROXY_PORT)));
-        settings.setHttpProxyUser(System.getProperty(HTTP_PROXY_USER));
-        settings.setHttpProxyPassword(System.getProperty(HTTP_PROXY_PASSWORD));
-        settings.setHttpsProxyHost(System.getProperty(HTTPS_PROXY_HOST));
-        settings.setHttpsProxyPort(parsePort(System.getProperty(HTTPS_PROXY_PORT)));
-        settings.setHttpsProxyUser(System.getProperty(HTTPS_PROXY_USER));
-        settings.setHttpsProxyPassword(System.getProperty(HTTPS_PROXY_PASSWORD));
-
-        String nonProxyHosts = System.getProperty(HTTP_NON_PROXY_HOSTS);
-        if (nonProxyHosts != null) {
-            List<String> noHosts = new ArrayList<String>();
-
-            String nph = nonProxyHosts;
-            int pp = nph.indexOf('|');
-            while (pp > -1) {
-                String noHost = nph.substring(0, pp).trim();
-                if (noHost.length() > 0) {
-                    noHosts.add(noHost);
-                }
-
-                nph = nph.substring(pp + 1);
-                pp = nph.indexOf('|');
-            }
-
-            nph = nph.trim();
-            if (nph.length() > 0) {
-                noHosts.add(nph);
-            }
-
-            settings.setNonProxyHosts(noHosts);
-        }
-
-        if (settings.getHttpProxyHost() != null || settings.getHttpsProxyHost() != null) {
-            return settings;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets proxy settings from environment variables.
-     */
-    public static ProxySettings getEnvProxySettings() {
-        ProxySettings settings = new ProxySettings();
-
-        Map<String, String> env = System.getenv();
-
-        for (Map.Entry<String, String> e : env.entrySet()) {
-            String key = e.getKey().trim().toLowerCase(Locale.ENGLISH);
-
-            if ("http_proxy".equals(key)) {
-                Matcher m = PROXY_ENV_VAR1.matcher(e.getValue());
-                if (m.matches()) {
-                    settings.setHttpProxyHost(parseHost(m.group(1)));
-                    settings.setHttpProxyPort(parsePort(m.group(2)));
-                    settings.setHttpProxyUser(parseProxyUser(m.group(1)));
-                    settings.setHttpProxyPassword(parseProxyPassword(m.group(1)));
-                } else {
-                    m = PROXY_ENV_VAR2.matcher(e.getValue());
-                    if (m.matches()) {
-                        settings.setHttpProxyHost(parseHost(m.group(1)));
-                        settings.setHttpProxyPort(parsePort(m.group(2)));
-                        settings.setHttpProxyUser(parseProxyUser(m.group(1)));
-                        settings.setHttpProxyPassword(parseProxyPassword(m.group(1)));
-                    }
-                }
-            } else if ("https_proxy".equals(key)) {
-                Matcher m = PROXY_ENV_VAR1.matcher(e.getValue());
-                if (m.matches()) {
-                    settings.setHttpsProxyHost(parseHost(m.group(1)));
-                    settings.setHttpsProxyPort(parsePort(m.group(2)));
-                    settings.setHttpsProxyUser(parseProxyUser(m.group(1)));
-                    settings.setHttpsProxyPassword(parseProxyPassword(m.group(1)));
-                } else {
-                    m = PROXY_ENV_VAR2.matcher(e.getValue());
-                    if (m.matches()) {
-                        settings.setHttpProxyHost(parseHost(m.group(1)));
-                        settings.setHttpProxyPort(parsePort(m.group(2)));
-                        settings.setHttpsProxyUser(parseProxyUser(m.group(1)));
-                        settings.setHttpsProxyPassword(parseProxyPassword(m.group(1)));
-                    }
-                }
-            } else if ("no_proxy".equals(key)) {
-                List<String> noHosts = new ArrayList<String>();
-                for (String noHost : e.getValue().split(",")) {
-                    noHost = noHost.trim();
-                    if (noHost.length() == 0) {
-                        continue;
-                    }
-
-                    if (noHost.charAt(0) == '.') {
-                        noHost = "*" + noHost;
-                    }
-
-                    if (noHost.charAt(noHost.length() - 1) == '.') {
-                        noHost = noHost + "*";
-                    }
-
-                    noHosts.add(noHost);
-                }
-
-                settings.setNonProxyHosts(noHosts);
-            }
-        }
-
-        if (settings.getHttpProxyHost() != null || settings.getHttpsProxyHost() != null) {
-            return settings;
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets proxy settings from the Windows registry.
-     */
-    public static ProxySettings getRegistryProxySettings() {
-        if (!isWindows()) {
-            return null;
-        }
-
-        BufferedReader reader = null;
-        try {
-            ProxySettings settings = new ProxySettings();
-
-            Process process = Runtime
-                    .getRuntime()
-                    .exec("reg query \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\" /v Proxy*");
-
-            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-
-            String line;
-            while ((line = reader.readLine()) != null) {
-                Matcher m = PROXY_WIN_REG.matcher(line);
-                if (!m.matches()) {
-                    continue;
-                }
-
-                String key = m.group(1).trim().toLowerCase(Locale.ENGLISH);
-                String value = m.group(2).trim();
-
-                if ("enable".equals(key)) {
-                    if (!value.equals("0x1")) {
-                        // proxies disabled
-                        return null;
-                    }
-                } else if ("server".equals(key)) {
-                    // server
-                    String host = value;
-                    int port = 80;
-
-                    int x = value.indexOf(':');
-                    if (x > 0) {
-                        host = value.substring(0, x);
-                        port = parsePort(value.substring(x + 1));
-                    }
-
-                    settings.setHttpProxyHost(host);
-                    settings.setHttpProxyPort(port);
-                    settings.setHttpsProxyHost(host);
-                    settings.setHttpsProxyPort(port);
-                } else if ("override".equals(key)) {
-                    // no proxy
-                    List<String> noHosts = new ArrayList<String>();
-                    for (String noHost : value.split(";")) {
-                        noHost = noHost.trim();
-                        if (noHost.length() == 0) {
-                            continue;
-                        }
-                        noHosts.add(noHost);
-                    }
-
-                    settings.setNonProxyHosts(noHosts);
-                }
-            }
-
-            if (settings.getHttpProxyHost() != null || settings.getHttpsProxyHost() != null) {
-                return settings;
-            }
-        } catch (IOException e) {
-            // ignore
-            if (debug) {
-                e.printStackTrace();
-            }
-        } finally {
-            IOUtils.closeQuietly(reader);
-        }
-
-        return null;
-    }
-
-    private static String parseHost(String host) {
-        if (host == null) {
-            return null;
-        }
-
-        int at = host.lastIndexOf('@');
-        if (at > -1) {
-            return host.substring(at + 1);
-        }
-
-        return host;
-    }
-
-    private static int parsePort(String port) {
-        if (port == null) {
-            return 80;
-        }
-
-        try {
-            return Integer.parseInt(port);
-        } catch (NumberFormatException e) {
-            throw new RuntimeException("Invalid port: " + port);
-        }
-    }
-
-    private static String parseProxyUser(String host) {
-        if (host == null) {
-            return null;
-        }
-
-        int at = host.lastIndexOf('@');
-        if (at == -1) {
-            return null;
-        }
-
-        int colon = host.indexOf(':');
-        if (colon == -1 || colon > at) {
-            return host.substring(0, at);
-        }
-
-        return host.substring(0, colon);
-    }
-
-    private static String parseProxyPassword(String host) {
-        if (host == null) {
-            return null;
-        }
-
-        int at = host.lastIndexOf('@');
-        if (at == -1) {
-            return null;
-        }
-
-        int colon = host.indexOf(':');
-        if (colon == -1 || colon > at) {
-            return null;
-        }
-
-        return host.substring(colon + 1, at);
-    }
-
-    private static boolean isWindows() {
-        return System.getProperty("os.name").startsWith("Windows");
-    }
-
-    /**
-     * Main.
-     */
-    public static void main(String[] args) {
-        boolean javaParams = false;
-        boolean useSystemProxy = false;
-
-        for (String arg : args) {
-            if (arg.equalsIgnoreCase("-j")) {
-                javaParams = true;
-            } else if (arg.equalsIgnoreCase("-s")) {
-                useSystemProxy = true;
-            } else if (arg.equalsIgnoreCase("-d")) {
-                debug = true;
-            } else if (arg.equalsIgnoreCase("-h") || arg.equalsIgnoreCase("-?")) {
-                System.out.println("Parameters:");
-                System.out.println("-j  print Java system properties");
-                System.out.println("-s  add java.net.useSystemProxies property");
-                return;
-            }
-        }
-
-        ProxySettings settings = null;
-
-        settings = getJavaProxySettings();
-
-        if (settings == null) {
-            // try environment variables
-            settings = getEnvProxySettings();
-        }
-
-        if (settings == null) {
-            // try the Windows registry
-            settings = getRegistryProxySettings();
-        }
-
-        // print proxy settings
-        if (javaParams) {
-            String proxyStr = "";
-
-            if (settings != null) {
-                proxyStr = settings.toJavaConfigString();
-            }
-
-            if (useSystemProxy) {
-                if (proxyStr.length() > 0) {
-                    proxyStr = proxyStr + " ";
-                }
-                proxyStr = proxyStr + "-Djava.net.useSystemProxies=true";
-            }
-
-            System.out.println(proxyStr);
-        } else {
-            if (settings != null) {
-                System.out.println(settings.toString());
-            } else {
-                System.out.println("DIRECT");
-            }
-        }
-    }
-
-    /**
-     * Proxy settings holder.
-     */
-    public static class ProxySettings {
-        private String httpProxyHost;
-        private int httpProxyPort;
-        private String httpProxyUser;
-        private String httpProxyPassword;
-
-        private String httpsProxyHost;
-        private int httpsProxyPort;
-        private String httpsProxyUser;
-        private String httpsProxyPassword;
-
-        private List<String> nonProxyHosts;
-
-        public ProxySettings() {
-        }
-
-        public String getHttpProxyHost() {
-            return httpProxyHost;
-        }
-
-        public void setHttpProxyHost(String httpProxyHost) {
-            this.httpProxyHost = httpProxyHost;
-        }
-
-        public int getHttpProxyPort() {
-            return httpProxyPort;
-        }
-
-        public void setHttpProxyPort(int httpProxyPort) {
-            this.httpProxyPort = httpProxyPort;
-        }
-
-        public String getHttpProxyUser() {
-            return httpProxyUser;
-        }
-
-        public void setHttpProxyUser(String httpProxyUser) {
-            this.httpProxyUser = httpProxyUser;
-        }
-
-        public String getHttpProxyPassword() {
-            return httpProxyPassword;
-        }
-
-        public void setHttpProxyPassword(String httpProxyPassword) {
-            this.httpProxyPassword = httpProxyPassword;
-        }
-
-        public String getHttpsProxyHost() {
-            return httpsProxyHost;
-        }
-
-        public void setHttpsProxyHost(String httpsProxyHost) {
-            this.httpsProxyHost = httpsProxyHost;
-        }
-
-        public int getHttpsProxyPort() {
-            return httpsProxyPort;
-        }
-
-        public void setHttpsProxyPort(int httpsProxyPort) {
-            this.httpsProxyPort = httpsProxyPort;
-        }
-
-        public String getHttpsProxyUser() {
-            return httpsProxyUser;
-        }
-
-        public void setHttpsProxyUser(String httpsProxyUser) {
-            this.httpsProxyUser = httpsProxyUser;
-        }
-
-        public String getHttpsProxyPassword() {
-            return httpsProxyPassword;
-        }
-
-        public void setHttpsProxyPassword(String httpsProxyPassword) {
-            this.httpsProxyPassword = httpsProxyPassword;
-        }
-
-        public List<String> getNonProxyHosts() {
-            return nonProxyHosts;
-        }
-
-        public void setNonProxyHosts(List<String> nonProxyHosts) {
-            this.nonProxyHosts = nonProxyHosts;
-        }
-
-        public String toJavaConfigString() {
-            StringBuilder sb = new StringBuilder();
-
-            if (httpProxyHost != null) {
-                sb.append("-D" + HTTP_PROXY_HOST + "=" + httpProxyHost + " -D" + HTTP_PROXY_PORT + "=" + httpProxyPort);
-            }
-
-            if (httpProxyUser != null) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                sb.append("-D" + HTTP_PROXY_USER + "=" + httpProxyUser);
-            }
-
-            if (httpProxyPassword != null) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                sb.append("-D" + HTTP_PROXY_PASSWORD + "=" + httpProxyPassword);
-            }
-
-            if (httpsProxyHost != null) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                sb.append("-D" + HTTPS_PROXY_HOST + "=" + httpsProxyHost + " -D" + HTTPS_PROXY_PORT + "="
-                        + httpsProxyPort);
-            }
-
-            if (httpsProxyUser != null) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                sb.append("-D" + HTTPS_PROXY_USER + "=" + httpsProxyUser);
-            }
-
-            if (httpsProxyPassword != null) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                sb.append("-D" + HTTPS_PROXY_PASSWORD + "=" + httpsProxyPassword);
-            }
-
-            if (nonProxyHosts != null && !nonProxyHosts.isEmpty()) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-
-                if (isWindows()) {
-                    sb.append('\"');
-                }
-
-                sb.append("-D" + HTTP_NON_PROXY_HOSTS + "=");
-
-                boolean first = true;
-                for (String host : nonProxyHosts) {
-                    if (!first) {
-                        sb.append('|');
-                    } else {
-                        first = false;
-                    }
-
-                    sb.append(host);
-                }
-
-                if (isWindows()) {
-                    sb.append('\"');
-                }
-            }
-
-            return sb.toString();
-        }
-
-        @Override
-        public String toString() {
-            StringBuilder sb = new StringBuilder();
-
-            if (httpProxyHost != null) {
-                sb.append("HTTP proxy: " + httpProxyHost + ":" + httpProxyPort);
-            }
-
-            if (httpProxyUser != null) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("HTTP proxy user: " + httpProxyUser);
-            }
-
-            if (httpProxyPassword != null) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("HTTP proxy password: " + httpProxyPassword);
-            }
-
-            if (httpsProxyHost != null) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("HTTPS proxy: " + httpsProxyHost + ":" + httpsProxyPort);
-            }
-
-            if (httpsProxyUser != null) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("HTTPS proxy user: " + httpsProxyUser);
-            }
-
-            if (httpsProxyPassword != null) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("HTTPS proxy password: " + httpsProxyPassword);
-            }
-
-            if (nonProxyHosts != null && !nonProxyHosts.isEmpty()) {
-                if (sb.length() > 0) {
-                    sb.append('\n');
-                }
-
-                sb.append("Non proxy hosts: ");
-
-                boolean first = true;
-                for (String host : nonProxyHosts) {
-                    if (!first) {
-                        sb.append(",");
-                    } else {
-                        first = false;
-                    }
-
-                    sb.append(host);
-                }
-            }
-
-            return sb.toString();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java
deleted file mode 100644
index 8344b6e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionListener;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JFormattedTextField;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.JTextArea;
-import javax.swing.SwingConstants;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
-import javax.swing.text.NumberFormatter;
-
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.IdRenderer;
-
-public class QueryFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Cursor HAND_CURSOR = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
-    private static final Cursor DEFAULT_CURSOR = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-
-    private static final String WINDOW_TITLE = "CMIS Query";
-    private static final String DEFAULT_QUERY = "SELECT * FROM cmis:document";
-
-    private static final String[] QUERY_SNIPPETS = new String[] { //
-    "SELECT * FROM cmis:document", //
-            "SELECT * FROM cmis:folder", //
-            "SELECT cmis:objectId, cmis:name, SCORE() AS score FROM cmis:document WHERE CONTAINS('?')", //
-            "WHERE cmis:name LIKE '%'", //
-            "WHERE ? IN (?, ?, ?)", //
-            "WHERE IN_FOLDER('?')", //
-            "WHERE IN_TREE('?')", //
-            "WHERE ? = TIMESTAMP 'YYYY-MM-DDThh:mm:ss.sss[Z|+hh:mm|-hh:mm]'", //
-            "WHERE '?' = ANY ?", //
-            "ORDER BY cmis:name", //
-            "ORDER BY cmis:creationDate" };
-
-    private final ClientModel model;
-
-    private JTextArea queryText;
-    private JFormattedTextField maxHitsField;
-    private JCheckBox searchAllVersionsCheckBox;
-    private ResultTable resultsTable;
-    private JLabel queryTimeLabel;
-
-    public QueryFrame(ClientModel model) {
-        super();
-
-        this.model = model;
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE + " - " + model.getRepositoryName());
-        setPreferredSize(new Dimension(800, 700));
-        setMinimumSize(new Dimension(200, 60));
-
-        setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
-
-        // input
-        JPanel inputPanel = new JPanel();
-        inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS));
-
-        // query text area
-        queryText = new JTextArea(DEFAULT_QUERY, 5, 60);
-        queryText.setLineWrap(true);
-        queryText.setPreferredSize(new Dimension(Short.MAX_VALUE, queryText.getPreferredSize().height));
-        inputPanel.add(queryText);
-
-        JPanel inputPanel2 = new JPanel();
-        inputPanel2.setLayout(new BorderLayout());
-
-        // buttons
-        JPanel buttonPanel = new JPanel();
-
-        maxHitsField = new JFormattedTextField(new NumberFormatter());
-        maxHitsField.setValue(Integer.valueOf(100));
-        maxHitsField.setColumns(5);
-
-        JLabel maxHitsLabel = new JLabel("Max hits:");
-        maxHitsLabel.setLabelFor(maxHitsField);
-
-        buttonPanel.add(maxHitsLabel);
-        buttonPanel.add(maxHitsField);
-
-        searchAllVersionsCheckBox = new JCheckBox("search all versions", false);
-        buttonPanel.add(searchAllVersionsCheckBox);
-
-        JButton queryButton = new JButton("Query", ClientHelper.getIcon("query.png"));
-        queryButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                doQuery();
-            }
-        });
-
-        buttonPanel.add(queryButton);
-
-        inputPanel2.add(buttonPanel, BorderLayout.LINE_END);
-
-        // snippets
-        final JPopupMenu snippetsPopup = new JPopupMenu();
-        for (final String s : QUERY_SNIPPETS) {
-            JMenuItem menuItem = new JMenuItem(s);
-            menuItem.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    queryText.insert(s, queryText.getCaretPosition());
-                }
-            });
-            snippetsPopup.add(menuItem);
-        }
-
-        final JButton snippetButton = new JButton("Query Snippets", ClientHelper.getIcon("paste.png"));
-        snippetButton.setFocusPainted(true);
-        snippetButton.setBorderPainted(false);
-        snippetButton.setContentAreaFilled(false);
-        snippetButton.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                snippetsPopup.show(snippetButton, 0, snippetButton.getHeight());
-            }
-        });
-
-        inputPanel2.add(snippetButton, BorderLayout.LINE_START);
-
-        // query time label
-        queryTimeLabel = new JLabel("");
-        queryTimeLabel.setHorizontalAlignment(SwingConstants.CENTER);
-        inputPanel2.add(queryTimeLabel, BorderLayout.CENTER);
-
-        inputPanel2.setMaximumSize(new Dimension(Short.MAX_VALUE, inputPanel2.getPreferredSize().height));
-        inputPanel.add(inputPanel2);
-
-        // table
-        resultsTable = new ResultTable();
-
-        final JPopupMenu popup = new JPopupMenu();
-        JMenuItem menuItem = new JMenuItem("Copy to clipboard");
-        popup.add(menuItem);
-
-        menuItem.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ClientHelper.copyTableToClipboard(resultsTable);
-            }
-        });
-
-        resultsTable.addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                int row = resultsTable.rowAtPoint(e.getPoint());
-                int column = resultsTable.columnAtPoint(e.getPoint());
-                if (row > -1 && resultsTable.getColumnClass(column) == ObjectIdImpl.class) {
-                    try {
-                        model.loadObject(((ObjectId) resultsTable.getValueAt(row, column)).getId());
-                    } catch (Exception ex) {
-                        ClientHelper.showError(QueryFrame.this, ex);
-                    }
-                }
-            }
-
-            public void mousePressed(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            public void mouseReleased(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            private void maybeShowPopup(MouseEvent e) {
-                if (e.isPopupTrigger()) {
-                    popup.show(e.getComponent(), e.getX(), e.getY());
-                }
-            }
-        });
-
-        resultsTable.addMouseMotionListener(new MouseMotionListener() {
-            public void mouseMoved(MouseEvent e) {
-                int row = resultsTable.rowAtPoint(e.getPoint());
-                int column = resultsTable.columnAtPoint(e.getPoint());
-                if (row > -1 && resultsTable.getColumnClass(column) == ObjectIdImpl.class) {
-                    resultsTable.setCursor(HAND_CURSOR);
-                } else {
-                    resultsTable.setCursor(DEFAULT_CURSOR);
-                }
-            }
-
-            public void mouseDragged(MouseEvent e) {
-            }
-        });
-
-        add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, inputPanel, new JScrollPane(resultsTable)));
-
-        getRootPane().setDefaultButton(queryButton);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    private synchronized void doQuery() {
-        String text = queryText.getText();
-        text = text.replace('\n', ' ');
-
-        ItemIterable<QueryResult> results = null;
-
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            int maxHits = 1000;
-            try {
-                maxHitsField.commitEdit();
-                maxHits = ((Number) maxHitsField.getValue()).intValue();
-                if (maxHits < 0) {
-                    maxHits = 0;
-                    maxHitsField.setValue(0);
-                }
-            } catch (Exception e) {
-                ClientHelper.showError(this, e);
-            }
-
-            results = model.query(text, searchAllVersionsCheckBox.isSelected(), maxHits);
-
-            ResultTableModel rtm = new ResultTableModel();
-
-            long startTime = System.currentTimeMillis();
-
-            int row = 0;
-            ItemIterable<QueryResult> page = results.getPage(maxHits);
-            for (QueryResult qr : page) {
-                rtm.setColumnCount(Math.max(rtm.getColumnCount(), qr.getProperties().size()));
-
-                for (PropertyData<?> prop : qr.getProperties()) {
-                    if (PropertyIds.OBJECT_ID.equals(prop.getId()) && (prop.getFirstValue() != null)) {
-                        rtm.setValue(row, prop.getQueryName(), new ObjectIdImpl(prop.getFirstValue().toString()));
-                    } else {
-                        rtm.setValue(row, prop.getQueryName(), prop.getValues());
-                    }
-                }
-
-                row++;
-            }
-            rtm.setRowCount(row);
-
-            long stopTime = System.currentTimeMillis();
-            float time = ((float) (stopTime - startTime)) / 1000f;
-            String total = "<unknown>";
-            if (page.getTotalNumItems() >= 0) {
-                total = String.valueOf(page.getTotalNumItems());
-            }
-
-            queryTimeLabel.setText(" " + row + " hits, " + total + " total (" + time + " sec)");
-
-            resultsTable.setModel(rtm);
-        } catch (Exception ex) {
-            ClientHelper.showError(null, ex);
-            return;
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    static class ResultTableModel extends AbstractTableModel {
-
-        private static final long serialVersionUID = 1L;
-
-        private int columnCount = 0;
-        private int rowCount = 0;
-        private final Map<String, Integer> columnMapping = new HashMap<String, Integer>();
-        private final Map<Integer, Map<Integer, Object>> data = new HashMap<Integer, Map<Integer, Object>>();
-        private final Map<Integer, Map<Integer, List<?>>> multivalue = new HashMap<Integer, Map<Integer, List<?>>>();
-        private final Map<Integer, Class<?>> columnClass = new HashMap<Integer, Class<?>>();
-
-        public ResultTableModel() {
-        }
-
-        public void setColumnCount(int columnCount) {
-            this.columnCount = columnCount;
-        }
-
-        public int getColumnCount() {
-            return columnCount;
-        }
-
-        public void setRowCount(int rowCount) {
-            this.rowCount = rowCount;
-        }
-
-        public int getRowCount() {
-            return rowCount;
-        }
-
-        public void setValue(final int rowIndex, final String queryName, Object value) {
-            Integer col = columnMapping.get(queryName);
-            if (col == null) {
-                col = columnMapping.size();
-                columnMapping.put(queryName, columnMapping.size());
-            }
-
-            if (value == null) {
-                return;
-            }
-
-            if (value instanceof List<?>) {
-                List<?> values = (List<?>) value;
-                if (values.isEmpty()) {
-                    return;
-                }
-
-                value = values.get(0);
-
-                if (values.size() > 1) {
-                    Map<Integer, List<?>> mvrow = multivalue.get(rowIndex);
-                    if (mvrow == null) {
-                        mvrow = new HashMap<Integer, List<?>>();
-                        multivalue.put(rowIndex, mvrow);
-                    }
-                    mvrow.put(col, values);
-                }
-            }
-
-            if (value instanceof GregorianCalendar) {
-                value = ClientHelper.getDateString((GregorianCalendar) value);
-            }
-
-            columnClass.put(col, value.getClass());
-
-            Map<Integer, Object> row = data.get(rowIndex);
-            if (row == null) {
-                row = new HashMap<Integer, Object>();
-                data.put(rowIndex, row);
-            }
-
-            row.put(col, value);
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            Map<Integer, Object> row = data.get(rowIndex);
-            if (row == null) {
-                return null;
-            }
-
-            return row.get(columnIndex);
-        }
-
-        public List<?> getMultiValueAt(int rowIndex, int columnIndex) {
-            Map<Integer, List<?>> row = multivalue.get(rowIndex);
-            if (row == null) {
-                return null;
-            }
-
-            return row.get(columnIndex);
-        }
-
-        @Override
-        public String getColumnName(int column) {
-            for (Map.Entry<String, Integer> e : columnMapping.entrySet()) {
-                if (e.getValue().equals(column)) {
-                    return e.getKey();
-                }
-            }
-
-            return "?";
-        }
-
-        @Override
-        public Class<?> getColumnClass(int columnIndex) {
-            Class<?> clazz = columnClass.get(columnIndex);
-            if (clazz != null) {
-                return clazz;
-            }
-
-            return String.class;
-        }
-    }
-
-    static class ResultTable extends JTable {
-
-        private static final long serialVersionUID = 1L;
-
-        public ResultTable() {
-            super();
-
-            setDefaultRenderer(ObjectIdImpl.class, new IdRenderer());
-            setFillsViewportHeight(true);
-            setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-        }
-
-        @Override
-        public String getToolTipText(final MouseEvent e) {
-            String result = null;
-
-            Point p = e.getPoint();
-            int rowIndex = rowAtPoint(p);
-            int columnIndex = convertColumnIndexToModel(columnAtPoint(p));
-
-            final ResultTableModel model = (ResultTableModel) getModel();
-
-            final List<?> values = model.getMultiValueAt(rowIndex, columnIndex);
-            if (values != null) {
-                StringBuilder sb = new StringBuilder();
-
-                for (Object value : values) {
-                    if (sb.length() == 0) {
-                        sb.append("<html>");
-                    } else {
-                        sb.append("<br>");
-                    }
-                    if (value == null) {
-                        sb.append("<i>null</i>");
-                    } else {
-                        ClientHelper.encodeHtml(sb, value.toString());
-                    }
-                }
-
-                result = sb.toString();
-            } else {
-                final Object value = model.getValueAt(rowIndex, columnIndex);
-                if (value != null) {
-                    result = value.toString();
-                }
-            }
-
-            return result;
-        }
-
-        @Override
-        public Component prepareRenderer(final TableCellRenderer renderer, final int rowIndex, final int columnIndex) {
-            final Component prepareRenderer = super.prepareRenderer(renderer, rowIndex, columnIndex);
-            final TableColumn column = getColumnModel().getColumn(columnIndex);
-
-            final int currentWidth = column.getPreferredWidth();
-            if (currentWidth < 200) {
-                int width = prepareRenderer.getPreferredSize().width;
-                if (currentWidth < width) {
-                    if (width < 50) {
-                        width = 50;
-                    } else if (width > 200) {
-                        width = 200;
-                    }
-
-                    if (width != currentWidth) {
-                        column.setPreferredWidth(width);
-                    }
-                }
-            }
-
-            return prepareRenderer;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RandomInputStream.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RandomInputStream.java
deleted file mode 100644
index 4bf1901..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RandomInputStream.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Random;
-
-public class RandomInputStream extends InputStream {
-
-    private final Random random;
-    private final long length;
-    private long pos;
-
-    public RandomInputStream(long length) {
-        this(length, System.currentTimeMillis());
-    }
-
-    public RandomInputStream(long length, long seed) {
-        random = new Random(seed);
-        this.length = length;
-        pos = 0;
-    }
-
-    @Override
-    public int available() throws IOException {
-        return (int) Math.min(Integer.MAX_VALUE, length - pos);
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        if (n <= 0) {
-            return 0;
-        }
-
-        for (long l = 0; l < n; l++) {
-            if (read() == -1) {
-                return l;
-            }
-        }
-
-        return n;
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (pos == length) {
-            return -1;
-        }
-
-        pos++;
-
-        return random.nextInt(256);
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        return read(b, 0, b.length);
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        if (b == null) {
-            throw new NullPointerException();
-        } else if ((off < 0) || (len < 0) || (len > b.length - off)) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        for (int i = 0; i < len; i++) {
-            int r = read();
-            if (r == -1) {
-                return (i == 0 ? -1 : i);
-            }
-            b[off + i] = (byte) r;
-        }
-
-        return len;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java
deleted file mode 100644
index b914fad..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.awt.Dimension;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.JFrame;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JTree;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeSelectionModel;
-
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.InfoPanel;
-
-public class RepositoryInfoFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "CMIS Repository Info";
-
-    private final ClientModel model;
-
-    public RepositoryInfoFrame(ClientModel model) {
-        super();
-
-        this.model = model;
-        createGUI();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE + " - " + model.getRepositoryName());
-        setPreferredSize(new Dimension(700, 700));
-        setMinimumSize(new Dimension(200, 60));
-
-        RepositoryInfo repInfo = null;
-        try {
-            repInfo = model.getRepositoryInfo();
-        } catch (Exception e) {
-            ClientHelper.showError(this, e);
-            dispose();
-            return;
-        }
-
-        add(new JScrollPane(new RepositoryInfoPanel(model, repInfo)));
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    static class RepositoryInfoPanel extends InfoPanel {
-
-        private static final long serialVersionUID = 1L;
-
-        private final RepositoryInfo repInfo;
-
-        public RepositoryInfoPanel(ClientModel model, RepositoryInfo repInfo) {
-            super(model);
-
-            this.repInfo = repInfo;
-            createGUI();
-        }
-
-        private void createGUI() {
-            setupGUI();
-
-            addLine("Name:", true).setText(repInfo.getName());
-            addLine("Id:").setText(repInfo.getId());
-            addLine("Description:").setText(repInfo.getDescription());
-            addLine("Vendor:").setText(repInfo.getVendorName());
-            addLine("Product:").setText(repInfo.getProductName() + " " + repInfo.getProductVersion());
-            addLine("CMIS Version:").setText(repInfo.getCmisVersionSupported());
-            addId("Root folder Id:").setText(repInfo.getRootFolderId());
-            addLine("Latest change token:").setText(repInfo.getLatestChangeLogToken());
-            addLink("Thin client URI:").setText(repInfo.getThinClientUri());
-            addLine("Principal id anonymous:").setText(repInfo.getPrincipalIdAnonymous());
-            addLine("Principal id anyone:").setText(repInfo.getPrincipalIdAnyone());
-            addYesNoLabel("Changes incomplete:").setValue(is(repInfo.getChangesIncomplete()));
-
-            StringBuilder sb = new StringBuilder();
-            if (repInfo.getChangesOnType() != null) {
-                for (BaseTypeId bt : repInfo.getChangesOnType()) {
-                    appendToString(sb, bt.value());
-                }
-            }
-            addLine("Changes on type:").setText(sb.toString());
-
-            if (repInfo.getCapabilities() != null) {
-                RepositoryCapabilities cap = repInfo.getCapabilities();
-
-                addLine("Capabilities:", true).setText("");
-
-                addYesNoLabel("Get descendants supported:").setValue(is(cap.isGetDescendantsSupported()));
-                addYesNoLabel("Get folder tree supported:").setValue(is(cap.isGetFolderTreeSupported()));
-                addYesNoLabel("Unfiling supported:").setValue(is(cap.isUnfilingSupported()));
-                addYesNoLabel("Multifiling supported:").setValue(is(cap.isMultifilingSupported()));
-                addYesNoLabel("Version specific filing supported:")
-                        .setValue(is(cap.isVersionSpecificFilingSupported()));
-                addLine("Order by:").setText(str(cap.getOrderByCapability()));
-                addLine("Query:").setText(str(cap.getQueryCapability()));
-                addLine("Joins:").setText(str(cap.getJoinCapability()));
-                addYesNoLabel("All versions searchable:").setValue(is(cap.isAllVersionsSearchableSupported()));
-                addYesNoLabel("PWC searchable:").setValue(is(cap.isPwcSearchableSupported()));
-                addYesNoLabel("PWC updatable:").setValue(is(cap.isPwcUpdatableSupported()));
-                addLine("Content stream updates:").setText(str(cap.getContentStreamUpdatesCapability()));
-                addLine("Renditions:").setText(str(cap.getRenditionsCapability()));
-                addLine("Changes:").setText(str(cap.getChangesCapability()));
-                addLine("ACLs:").setText(str(cap.getAclCapability()));
-
-                sb = new StringBuilder();
-                if (cap.getNewTypeSettableAttributes() != null) {
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetId())) {
-                        appendToString(sb, "id");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetLocalName())) {
-                        appendToString(sb, "localName");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetLocalNamespace())) {
-                        appendToString(sb, "localNamespace");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetDisplayName())) {
-                        appendToString(sb, "displayName");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetQueryName())) {
-                        appendToString(sb, "queryName");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetDescription())) {
-                        appendToString(sb, "description");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetCreatable())) {
-                        appendToString(sb, "creatable");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetFileable())) {
-                        appendToString(sb, "fileable");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetQueryable())) {
-                        appendToString(sb, "queryable");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetFulltextIndexed())) {
-                        appendToString(sb, "fulltextIndexed");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetIncludedInSupertypeQuery())) {
-                        appendToString(sb, "includedInSupertypeQuery");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetControllablePolicy())) {
-                        appendToString(sb, "controllablePolicy");
-                    }
-
-                    if (Boolean.TRUE.equals(cap.getNewTypeSettableAttributes().canSetControllableAcl())) {
-                        appendToString(sb, "controllableACL");
-                    }
-                }
-
-                addLine("New type settable attributes:").setText(sb.toString());
-
-                sb = new StringBuilder();
-                if (cap.getCreatablePropertyTypes() != null && cap.getCreatablePropertyTypes().canCreate() != null) {
-                    for (PropertyType pt : cap.getCreatablePropertyTypes().canCreate()) {
-                        appendToString(sb, pt.value());
-                    }
-                }
-
-                addLine("Creatable property types:").setText(sb.toString());
-            }
-
-            if (repInfo.getAclCapabilities() != null) {
-                AclCapabilities cap = repInfo.getAclCapabilities();
-
-                addLine("ACL Capabilities:", true).setText("");
-
-                addLine("Supported permissions:").setText(str(cap.getSupportedPermissions()));
-                addLine("ACL propagation:").setText(str(cap.getAclPropagation()));
-
-                if (cap.getPermissions() != null) {
-                    String[][] data = new String[cap.getPermissions().size()][2];
-
-                    int i = 0;
-                    for (PermissionDefinition pd : cap.getPermissions()) {
-                        data[i][0] = pd.getId();
-                        data[i][1] = pd.getDescription();
-                        i++;
-                    }
-
-                    JTable permTable = new JTable(data, new String[] { "Permission", "Description" });
-                    permTable.setFillsViewportHeight(true);
-                    addComponent("Permissions:", new JScrollPane(permTable));
-                }
-
-                if (cap.getPermissionMapping() != null) {
-                    String[][] data = new String[cap.getPermissionMapping().size()][2];
-
-                    int i = 0;
-                    for (PermissionMapping pm : cap.getPermissionMapping().values()) {
-                        data[i][0] = pm.getKey();
-                        data[i][1] = (pm.getPermissions() == null ? "" : pm.getPermissions().toString());
-                        i++;
-                    }
-
-                    JTable permMapTable = new JTable(data, new String[] { "Key", "Permissions" });
-                    permMapTable.setFillsViewportHeight(true);
-                    addComponent("Permission mapping:", new JScrollPane(permMapTable));
-                }
-            }
-
-            if (isNotEmpty(repInfo.getExtensionFeatures())) {
-                JTree extensionFeaturesTree = new JTree();
-                extensionFeaturesTree.setRootVisible(false);
-                extensionFeaturesTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-
-                DefaultMutableTreeNode extFeatRootNode = new DefaultMutableTreeNode("Extensions");
-
-                for (ExtensionFeature ef : repInfo.getExtensionFeatures()) {
-                    String efId = ef.getId();
-                    if (efId == null) {
-                        efId = "???";
-                    }
-
-                    DefaultMutableTreeNode efNode = new DefaultMutableTreeNode(efId);
-                    extFeatRootNode.add(efNode);
-
-                    if (ef.getCommonName() != null) {
-                        efNode.add(new DefaultMutableTreeNode("Common Name: " + ef.getCommonName()));
-                    }
-
-                    if (ef.getVersionLabel() != null) {
-                        efNode.add(new DefaultMutableTreeNode("Version Label: " + ef.getVersionLabel()));
-                    }
-
-                    if (ef.getDescription() != null) {
-                        efNode.add(new DefaultMutableTreeNode("Description: " + ef.getDescription()));
-                    }
-
-                    if (ef.getUrl() != null) {
-                        efNode.add(new DefaultMutableTreeNode("URL: " + ef.getUrl()));
-                    }
-
-                    if (isNotEmpty(ef.getFeatureData())) {
-                        DefaultMutableTreeNode dataNode = new DefaultMutableTreeNode("Feature Data");
-                        efNode.add(dataNode);
-
-                        for (Map.Entry<String, String> e : ef.getFeatureData().entrySet()) {
-                            dataNode.add(new DefaultMutableTreeNode(e.getKey() + ": " + e.getValue()));
-                        }
-                    }
-                }
-
-                extensionFeaturesTree.setModel(new DefaultTreeModel(extFeatRootNode));
-
-                addComponent("Extension Features:", new JScrollPane(extensionFeaturesTree));
-            }
-
-            if (isNotEmpty(repInfo.getExtensions())) {
-                JTree extensionsTree = new JTree();
-                extensionsTree.setRootVisible(false);
-                extensionsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-
-                DefaultMutableTreeNode extRootNode = new DefaultMutableTreeNode("Extensions");
-                addExtension(extRootNode, repInfo.getExtensions());
-
-                extensionsTree.setModel(new DefaultTreeModel(extRootNode));
-
-                addComponent("Extensions:", new JScrollPane(extensionsTree));
-            }
-        }
-
-        private void addExtension(DefaultMutableTreeNode parent, List<CmisExtensionElement> extensions) {
-            if (isNullOrEmpty(extensions)) {
-                return;
-            }
-
-            for (CmisExtensionElement ext : extensions) {
-                DefaultMutableTreeNode node = new DefaultMutableTreeNode(new ExtensionNode(ext));
-                parent.add(node);
-
-                if (isNotEmpty(ext.getChildren())) {
-                    addExtension(node, ext.getChildren());
-                }
-            }
-        }
-
-        private void appendToString(StringBuilder sb, String str) {
-            if (sb.length() > 0) {
-                sb.append(", ");
-            }
-
-            sb.append(str);
-        }
-
-        private boolean is(Boolean b) {
-            if (b == null) {
-                return false;
-            }
-
-            return b.booleanValue();
-        }
-
-        private String str(Object o) {
-            if (o == null) {
-                return "?";
-            }
-
-            return o.toString();
-        }
-
-        static class ExtensionNode {
-            private final CmisExtensionElement extension;
-
-            public ExtensionNode(CmisExtensionElement extension) {
-                this.extension = extension;
-            }
-
-            @Override
-            public String toString() {
-                return (extension.getNamespace() == null ? "" : "{" + extension.getNamespace() + "}")
-                        + extension.getName()
-                        + (!extension.getAttributes().isEmpty() ? " " + extension.getAttributes() : "")
-                        + (extension.getChildren().isEmpty() ? ": " + extension.getValue() : "");
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
deleted file mode 100644
index 48139d9..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.AbstractCellEditor;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JProgressBar;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.JTree;
-import javax.swing.SwingWorker;
-import javax.swing.ToolTipManager;
-import javax.swing.UIManager;
-import javax.swing.border.EmptyBorder;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeCellEditor;
-import javax.swing.tree.TreeCellRenderer;
-import javax.swing.tree.TreeNode;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.impl.TestParameters;
-import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
-import org.apache.chemistry.opencmis.workbench.checks.SwingReport;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-/**
- * TCK dialog and runner.
- */
-public class TckDialog {
-
-    private final Frame owner;
-    private final ClientModel model;
-    private final TckDialogRunner runner;
-
-    private Map<CmisTestResultStatus, Integer> status;
-
-    private JProgressBar groupsProgressBar;
-    private JProgressBar testsProgressBar;
-    private JLabel statusLabel;
-
-    public TckDialog(Frame owner, ClientModel model) {
-        this.owner = owner;
-        this.model = model;
-        this.runner = new TckDialogRunner(model, this);
-
-        status = new HashMap<CmisTestResultStatus, Integer>();
-        status.put(CmisTestResultStatus.INFO, 0);
-        status.put(CmisTestResultStatus.SKIPPED, 0);
-        status.put(CmisTestResultStatus.OK, 0);
-        status.put(CmisTestResultStatus.WARNING, 0);
-        status.put(CmisTestResultStatus.FAILURE, 0);
-        status.put(CmisTestResultStatus.UNEXPECTED_EXCEPTION, 0);
-
-        try {
-            runner.loadDefaultTckGroups();
-        } catch (Exception e) {
-            JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "TCK Error", JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-
-        new TckSelectDialog();
-    }
-
-    private class TckSelectDialog extends JDialog {
-        private static final long serialVersionUID = 1L;
-
-        public TckSelectDialog() {
-            super(owner, "TCK", true);
-
-            createGUI();
-        }
-
-        private void createGUI() {
-            setPreferredSize(new Dimension(600, 500));
-            setMinimumSize(new Dimension(600, 500));
-
-            setLayout(new BorderLayout());
-
-            // tree
-            final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");
-            final JTree groupTree = new JTree(rootNode);
-
-            for (CmisTestGroup group : runner.getGroups()) {
-                final TestTreeNode groupNode = new TestTreeNode(groupTree, group);
-                rootNode.add(groupNode);
-                for (CmisTest test : group.getTests()) {
-                    final TestTreeNode testNode = new TestTreeNode(groupTree, test);
-                    groupNode.add(testNode);
-                }
-            }
-
-            ((DefaultTreeModel) groupTree.getModel()).reload();
-
-            groupTree.setRootVisible(false);
-            groupTree.setCellRenderer(new TestTreeNodeRender());
-            groupTree.setCellEditor(new TestTreeNodeEditor());
-            groupTree.setEditable(true);
-            ToolTipManager.sharedInstance().registerComponent(groupTree);
-
-            for (int i = 0; i < groupTree.getRowCount(); i++) {
-                groupTree.expandRow(i);
-            }
-
-            final JPopupMenu treePopup = new JPopupMenu();
-
-            final JMenuItem selectItem = new JMenuItem("Select all");
-            selectItem.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    selectAll(groupTree, true);
-                }
-            });
-            treePopup.add(selectItem);
-
-            final JMenuItem deselectItem = new JMenuItem("Deselect all");
-            deselectItem.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    selectAll(groupTree, false);
-                }
-            });
-            treePopup.add(deselectItem);
-
-            groupTree.addMouseListener(new MouseAdapter() {
-                public void mousePressed(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                public void mouseReleased(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                private void maybeShowPopup(MouseEvent e) {
-                    if (e.isPopupTrigger()) {
-                        treePopup.show(e.getComponent(), e.getX(), e.getY());
-                    }
-                }
-            });
-
-            // config panel
-            final JPanel configPanel = new JPanel();
-            configPanel.setLayout(new BoxLayout(configPanel, BoxLayout.PAGE_AXIS));
-            configPanel.setPreferredSize(new Dimension(getWidth() / 2, 500));
-            configPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
-
-            final JComboBox folderComboBox = addComboBox(configPanel, "Test folder type:",
-                    BaseTypeId.CMIS_FOLDER.value(), TestParameters.DEFAULT_FOLDER_TYPE_VALUE, true);
-            configPanel.add(Box.createRigidArea(new Dimension(1, 10)));
-
-            final JComboBox documentComboBox = addComboBox(configPanel, "Test document type:",
-                    BaseTypeId.CMIS_DOCUMENT.value(), TestParameters.DEFAULT_DOCUMENT_TYPE_VALUE, true);
-            configPanel.add(Box.createRigidArea(new Dimension(1, 10)));
-
-            final JComboBox relationshipComboBox = addComboBox(configPanel, "Test relationship type:",
-                    BaseTypeId.CMIS_RELATIONSHIP.value(), TestParameters.DEFAULT_RELATIONSHIP_TYPE_VALUE, true);
-            configPanel.add(Box.createRigidArea(new Dimension(1, 10)));
-
-            final JComboBox itemComboBox = addComboBox(configPanel, "Test item type:", BaseTypeId.CMIS_ITEM.value(),
-                    TestParameters.DEFAULT_ITEM_TYPE_VALUE, true);
-            configPanel.add(Box.createRigidArea(new Dimension(1, 10)));
-
-            final JComboBox secondaryComboBox = addComboBox(configPanel, "Test secondary type:",
-                    BaseTypeId.CMIS_SECONDARY.value(), TestParameters.DEFAULT_SECONDARY_TYPE_VALUE, false);
-            configPanel.add(Box.createRigidArea(new Dimension(1, 10)));
-
-            configPanel.add(new JLabel("Test folder path:"));
-            final JTextField testParentFolderField = new JTextField(TestParameters.DEFAULT_TEST_FOLDER_PARENT_VALUE);
-            testParentFolderField.setMaximumSize(new Dimension(Short.MAX_VALUE, 10));
-            testParentFolderField.setAlignmentX(Component.LEFT_ALIGNMENT);
-            configPanel.add(testParentFolderField);
-
-            configPanel.add(Box.createVerticalGlue());
-
-            add(configPanel);
-
-            final JPanel mainPanel = new JPanel(new BorderLayout());
-            mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-            mainPanel.add(new JScrollPane(groupTree), BorderLayout.CENTER);
-            mainPanel.add(configPanel, BorderLayout.LINE_END);
-            add(mainPanel, BorderLayout.CENTER);
-
-            final JButton runButton = new JButton("Run TCK", ClientHelper.getIcon("tck.png"));
-            runButton.setDefaultCapable(true);
-            runButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent event) {
-                    int answer = JOptionPane
-                            .showConfirmDialog(
-                                    owner,
-                                    "Running the TCK may take a long time and may add, remove and alter data in the repository!\n"
-                                            + "It also puts at a strain on the repository, performing several thousand calls!\n"
-                                            + "\nAre you sure you want to proceed?", "TCK", JOptionPane.YES_NO_OPTION,
-                                    JOptionPane.WARNING_MESSAGE);
-
-                    if (answer == JOptionPane.YES_OPTION) {
-                        Map<String, String> parameters = runner.getParameters();
-                        parameters.put(TestParameters.DEFAULT_FOLDER_TYPE, (String) folderComboBox.getSelectedItem());
-                        parameters.put(TestParameters.DEFAULT_DOCUMENT_TYPE,
-                                (String) documentComboBox.getSelectedItem());
-                        if (relationshipComboBox.isEnabled()) {
-                            parameters.put(TestParameters.DEFAULT_RELATIONSHIP_TYPE,
-                                    (String) relationshipComboBox.getSelectedItem());
-                        }
-                        if (itemComboBox.isEnabled()) {
-                            parameters.put(TestParameters.DEFAULT_ITEM_TYPE, (String) itemComboBox.getSelectedItem());
-                        }
-                        if (secondaryComboBox.isEnabled()) {
-                            parameters.put(TestParameters.DEFAULT_SECONDARY_TYPE,
-                                    (String) secondaryComboBox.getSelectedItem());
-                        }
-                        parameters.put(TestParameters.DEFAULT_TEST_FOLDER_PARENT, testParentFolderField.getText());
-
-                        runner.setParameters(parameters);
-
-                        dispose();
-                        new TckRunDialog();
-                    }
-                }
-            });
-
-            final JPanel runButtonPanel = new JPanel();
-            runButtonPanel.setLayout(new BoxLayout(runButtonPanel, BoxLayout.PAGE_AXIS));
-            runButtonPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
-            runButton.setMaximumSize(new Dimension(Short.MAX_VALUE, 30));
-            runButtonPanel.add(runButton);
-
-            add(runButtonPanel, BorderLayout.PAGE_END);
-
-            getRootPane().setDefaultButton(runButton);
-
-            ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-            pack();
-            setLocationRelativeTo(null);
-            setVisible(true);
-        }
-
-        private void selectAll(final JTree tree, boolean select) {
-            for (CmisTestGroup group : runner.getGroups()) {
-                group.setEnabled(select);
-                for (CmisTest test : group.getTests()) {
-                    test.setEnabled(select);
-                }
-            }
-
-            DefaultTreeModel treeModel = ((DefaultTreeModel) tree.getModel());
-            treeModel.nodeChanged((TreeNode) treeModel.getRoot());
-        }
-
-        private JComboBox addComboBox(JPanel panel, String title, String rootTypeId, String defaultTypeId,
-                boolean creatableOnly) {
-            final JLabel label = new JLabel(title);
-            label.setAlignmentX(Component.LEFT_ALIGNMENT);
-            panel.add(label);
-
-            List<ObjectType> types = model.getTypesAsList(rootTypeId, creatableOnly);
-            String[] typeIds = new String[types.size()];
-
-            int i = 0;
-            for (ObjectType type : types) {
-                typeIds[i++] = type.getId();
-            }
-
-            final JComboBox comboBox = new JComboBox(typeIds);
-            comboBox.setSelectedItem(defaultTypeId);
-            comboBox.setAlignmentX(Component.LEFT_ALIGNMENT);
-            comboBox.setMaximumSize(new Dimension(Short.MAX_VALUE, 10));
-            comboBox.setEnabled(typeIds.length > 0);
-            panel.add(comboBox);
-
-            return comboBox;
-        }
-    }
-
-    private static class TestTreeNode extends DefaultMutableTreeNode {
-        private static final long serialVersionUID = 1L;
-
-        private final JTree tree;
-        private final CmisTestGroup group;
-        private final CmisTest test;
-
-        public TestTreeNode(JTree tree, CmisTestGroup group) {
-            this.tree = tree;
-            this.group = group;
-            this.test = null;
-        }
-
-        public TestTreeNode(JTree tree, CmisTest test) {
-            this.tree = tree;
-            this.test = test;
-            this.group = null;
-        }
-
-        public CmisTestGroup getGroup() {
-            return group;
-        }
-
-        public String getName() {
-            if (group != null) {
-                return group.getName();
-            }
-
-            return test.getName();
-        }
-
-        public String getDescription() {
-            if (group != null) {
-                return group.getDescription();
-            }
-
-            return test.getDescription();
-        }
-
-        public boolean isEnabled() {
-            if (group != null) {
-                return group.isEnabled();
-            }
-
-            return test.isEnabled();
-        }
-
-        public void setEnabled(boolean enabled) {
-            DefaultTreeModel treeModel = ((DefaultTreeModel) tree.getModel());
-
-            if (group != null) {
-                group.setEnabled(enabled);
-
-                for (int i = 0; i < getChildCount(); i++) {
-                    TestTreeNode node = (TestTreeNode) getChildAt(i);
-                    node.setEnabled(enabled);
-                    treeModel.nodeChanged(node);
-                }
-
-                return;
-            }
-
-            test.setEnabled(enabled);
-
-            if (enabled) {
-                TestTreeNode node = (TestTreeNode) getParent();
-                node.getGroup().setEnabled(true);
-                treeModel.nodeChanged(node);
-            }
-        }
-    }
-
-    private static class TestTreeNodeRender extends JCheckBox implements TreeCellRenderer {
-        private static final long serialVersionUID = 1L;
-
-        private final Color textSelectionColor;
-        private final Color textNonSelectionColor;
-        private final Color backgroundSelectionColor;
-        private final Color backgroundNonSelectionColor;
-
-        public TestTreeNodeRender() {
-            textSelectionColor = UIManager.getDefaults().getColor("Tree.selectionForeground");
-            textNonSelectionColor = UIManager.getDefaults().getColor("Tree.textForeground");
-            backgroundSelectionColor = UIManager.getDefaults().getColor("Tree.selectionBackground");
-            backgroundNonSelectionColor = UIManager.getDefaults().getColor("Tree.textBackground");
-
-            Insets margins = UIManager.getDefaults().getInsets("Tree.rendererMargins");
-            if (margins != null) {
-                setBorder(new EmptyBorder(margins.top, margins.left, margins.bottom, margins.right));
-            }
-        }
-
-        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
-                boolean leaf, int row, boolean hasFocus) {
-
-            if (sel) {
-                setForeground(textSelectionColor);
-                setBackground(backgroundSelectionColor);
-            } else {
-                setForeground(textNonSelectionColor);
-                setBackground(backgroundNonSelectionColor);
-            }
-
-            if (value instanceof TestTreeNode) {
-                TestTreeNode node = (TestTreeNode) value;
-                setText(node.getName());
-                setSelected(node.isEnabled());
-                setToolTipText(node.getDescription());
-            } else {
-                setText(value == null ? "" : value.toString());
-                setToolTipText(null);
-            }
-
-            return this;
-        }
-
-        public void validate() {
-        }
-
-        public void invalidate() {
-        }
-
-        public void revalidate() {
-        }
-
-        public void repaint(long tm, int x, int y, int width, int height) {
-        }
-
-        public void repaint(Rectangle r) {
-        }
-
-        public void repaint() {
-        }
-    }
-
-    private static class TestTreeNodeEditor extends AbstractCellEditor implements TreeCellEditor {
-        private static final long serialVersionUID = 1L;
-
-        private TestTreeNodeRender lastObject;
-
-        @Override
-        public Object getCellEditorValue() {
-            return lastObject;
-        }
-
-        @Override
-        public Component getTreeCellEditorComponent(JTree tree, final Object value, boolean isSelected,
-                boolean expanded, boolean leaf, int row) {
-
-            lastObject = new TestTreeNodeRender();
-            lastObject.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, false);
-            lastObject.addItemListener(new ItemListener() {
-                public void itemStateChanged(ItemEvent itemEvent) {
-                    ((TestTreeNode) value).setEnabled(((JCheckBox) itemEvent.getItem()).isSelected());
-                    fireEditingStopped();
-                }
-            });
-
-            return lastObject;
-        }
-    }
-
-    private class TckRunDialog extends JDialog {
-        private static final long serialVersionUID = 1L;
-
-        private final TckTask task;
-
-        public TckRunDialog() {
-            super(owner, "TCK");
-
-            createGUI();
-
-            task = new TckTask(this, runner);
-            task.execute();
-        }
-
-        private void createGUI() {
-            setPreferredSize(new Dimension(500, 200));
-            setMinimumSize(new Dimension(500, 200));
-
-            setLayout(new BorderLayout());
-
-            JPanel progressPanel = new JPanel();
-            progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.Y_AXIS));
-            progressPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-            progressPanel.add(Box.createRigidArea(new Dimension(0, 10)));
-
-            JLabel groupsLabel = new JLabel("Groups:");
-            groupsLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
-            progressPanel.add(groupsLabel);
-
-            groupsProgressBar = new JProgressBar();
-            groupsProgressBar.setMinimumSize(new Dimension(500, 30));
-            groupsProgressBar.setPreferredSize(new Dimension(500, 30));
-            groupsProgressBar.setMaximumSize(new Dimension(Short.MAX_VALUE, 30));
-            groupsProgressBar.setAlignmentX(Component.LEFT_ALIGNMENT);
-            groupsProgressBar.setAlignmentY(Component.CENTER_ALIGNMENT);
-            progressPanel.add(groupsProgressBar);
-
-            progressPanel.add(Box.createRigidArea(new Dimension(0, 10)));
-
-            JLabel testsLabel = new JLabel("Tests:");
-            testsLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
-            progressPanel.add(testsLabel);
-
-            testsProgressBar = new JProgressBar();
-            testsProgressBar.setMinimumSize(new Dimension(500, 30));
-            testsProgressBar.setPreferredSize(new Dimension(500, 30));
-            testsProgressBar.setMaximumSize(new Dimension(Short.MAX_VALUE, 30));
-            testsProgressBar.setAlignmentX(Component.LEFT_ALIGNMENT);
-            testsProgressBar.setAlignmentY(Component.CENTER_ALIGNMENT);
-            progressPanel.add(testsProgressBar);
-
-            progressPanel.add(Box.createRigidArea(new Dimension(0, 10)));
-
-            statusLabel = new JLabel();
-            progressPanel.add(statusLabel);
-
-            add(progressPanel, BorderLayout.CENTER);
-
-            JButton cancelButton = new JButton("Cancel");
-            cancelButton.setDefaultCapable(true);
-            cancelButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent event) {
-                    task.cancel(true);
-                }
-            });
-
-            final JPanel cancelButtonPanel = new JPanel();
-            cancelButtonPanel.setLayout(new BoxLayout(cancelButtonPanel, BoxLayout.PAGE_AXIS));
-            cancelButtonPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
-            cancelButton.setMaximumSize(new Dimension(Short.MAX_VALUE, 30));
-            cancelButtonPanel.add(cancelButton);
-
-            add(cancelButtonPanel, BorderLayout.PAGE_END);
-
-            getRootPane().setDefaultButton(cancelButton);
-
-            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-            pack();
-            setLocationRelativeTo(null);
-            setVisible(true);
-        }
-    }
-
-    private static class TckDialogRunner extends AbstractRunner {
-        public TckDialogRunner(ClientModel model, TckDialog tckDialog) {
-            Map<String, String> parameters = new HashMap<String, String>(model.getClientSession()
-                    .getSessionParameters());
-            parameters.put(SessionParameter.REPOSITORY_ID, model.getClientSession().getSession().getRepositoryInfo()
-                    .getId());
-
-            setParameters(parameters);
-        }
-    }
-
-    private class DialogProgressMonitor implements CmisTestProgressMonitor {
-
-        public DialogProgressMonitor(int numberOfGroups) {
-            groupsProgressBar.setStringPainted(true);
-            groupsProgressBar.setMinimum(0);
-            groupsProgressBar.setMaximum(numberOfGroups);
-            groupsProgressBar.setValue(0);
-        }
-
-        public void startGroup(CmisTestGroup group) {
-            groupsProgressBar.setString(group.getName());
-
-            testsProgressBar.setStringPainted(true);
-            testsProgressBar.setMinimum(0);
-            testsProgressBar.setMaximum(group.getTests().size());
-            testsProgressBar.setValue(0);
-        }
-
-        public void endGroup(CmisTestGroup group) {
-            groupsProgressBar.setString("");
-            groupsProgressBar.setValue(groupsProgressBar.getValue() + 1);
-        }
-
-        public void startTest(CmisTest test) {
-            testsProgressBar.setString(test.getName());
-        }
-
-        public void endTest(CmisTest test) {
-            testsProgressBar.setString("");
-            testsProgressBar.setValue(testsProgressBar.getValue() + 1);
-
-            for (CmisTestResult tr : test.getResults()) {
-                int x = status.get(tr.getStatus());
-                status.put(tr.getStatus(), x + 1);
-            }
-
-            StringBuilder sb = new StringBuilder("<html>");
-            int x;
-
-            x = status.get(CmisTestResultStatus.INFO);
-            if (x > 0) {
-                sb.append("<font color='#000000'>[Info: " + x + "]</font>  ");
-            }
-
-            x = status.get(CmisTestResultStatus.SKIPPED);
-            if (x > 0) {
-                sb.append("<font color='#444444'>[Skipped: " + x + "]</font>  ");
-            }
-
-            x = status.get(CmisTestResultStatus.OK);
-            if (x > 0) {
-                sb.append("<font color='#009900'>[Ok: " + x + "]</font>  ");
-            }
-
-            x = status.get(CmisTestResultStatus.WARNING);
-            if (x > 0) {
-                sb.append("<font color='#999900'>[Warning: " + x + "]</font>  ");
-            }
-
-            x = status.get(CmisTestResultStatus.FAILURE);
-            if (x > 0) {
-                sb.append("<font color='#996000'>[Failure: " + x + "]</font>  ");
-            }
-
-            x = status.get(CmisTestResultStatus.UNEXPECTED_EXCEPTION);
-            if (x > 0) {
-                sb.append("<font color='#990000'>[Exception: " + x + "]</font>  ");
-            }
-
-            sb.append("</html>");
-
-            statusLabel.setText(sb.toString());
-        }
-
-        public void message(String msg) {
-        }
-    }
-
-    class TckTask extends SwingWorker<Void, Void> {
-        private final JDialog dialog;
-        private final TckDialogRunner runner;
-
-        public TckTask(JDialog dialog, TckDialogRunner runner) {
-            this.dialog = dialog;
-            this.runner = runner;
-        }
-
-        @Override
-        public Void doInBackground() {
-            try {
-                runner.run(new DialogProgressMonitor(runner.getGroups().size()));
-            } catch (InterruptedException ie) {
-                runner.cancel();
-            } catch (Exception e) {
-                JOptionPane
-                        .showMessageDialog(owner, "Error: " + e.getMessage(), "TCK Error", JOptionPane.ERROR_MESSAGE);
-            }
-
-            return null;
-        }
-
-        @Override
-        public void done() {
-            try {
-                SwingReport report = new SwingReport(null, 700, 500);
-                report.createReport(runner.getParameters(), runner.getGroups(), (Writer) null);
-            } catch (Exception e) {
-                JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
-                        JOptionPane.ERROR_MESSAGE);
-            } finally {
-                dialog.dispose();
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypeSplitPane.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypeSplitPane.java
deleted file mode 100644
index 99e483c..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypeSplitPane.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumn;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.CollectionRenderer;
-import org.apache.chemistry.opencmis.workbench.swing.InfoPanel;
-import org.apache.chemistry.opencmis.workbench.swing.YesNoLabel;
-
-public class TypeSplitPane extends JSplitPane {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private TypeInfoPanel typePanel;
-
-    private PropertyDefinitionTable propertyDefinitionTable;
-
-    public TypeSplitPane(ClientModel model) {
-        super(JSplitPane.VERTICAL_SPLIT);
-
-        this.model = model;
-
-        createGUI();
-    }
-
-    protected ClientModel getClientModel() {
-        return model;
-    }
-
-    private void createGUI() {
-        typePanel = new TypeInfoPanel(model);
-
-        propertyDefinitionTable = new PropertyDefinitionTable();
-
-        add(typePanel);
-
-        setLeftComponent(new JScrollPane(typePanel));
-        setRightComponent(new JScrollPane(propertyDefinitionTable));
-
-        setDividerLocation(300);
-    }
-
-    public void setType(ObjectType type) {
-        typePanel.setType(type);
-        propertyDefinitionTable.setType(type);
-    }
-
-    static class TypeInfoPanel extends InfoPanel {
-
-        private static final long serialVersionUID = 1L;
-
-        private JTextField nameField;
-        private JTextField descriptionField;
-        private JTextField idField;
-        private JTextField localNamespaceField;
-        private JTextField localNameField;
-        private JTextField queryNameField;
-        private JTextField baseTypeField;
-        private YesNoLabel creatableLabel;
-        private YesNoLabel fileableLabel;
-        private YesNoLabel queryableLabel;
-        private YesNoLabel includeInSuperTypeLabel;
-        private YesNoLabel fulltextIndexedLabel;
-        private YesNoLabel aclLabel;
-        private YesNoLabel policyLabel;
-        private YesNoLabel versionableLabel;
-        private JTextField contentStreamAllowedField;
-        private JTextField allowedSourceTypesField;
-        private JTextField allowedTargetTypesField;
-        private JTextField typeMutabilityField;
-
-        public TypeInfoPanel(ClientModel model) {
-            super(model);
-            createGUI();
-        }
-
-        public void setType(ObjectType type) {
-            if (type != null) {
-                nameField.setText(type.getDisplayName());
-                descriptionField.setText(type.getDescription());
-                idField.setText(type.getId());
-                localNamespaceField.setText(type.getLocalNamespace());
-                localNameField.setText(type.getLocalName());
-                queryNameField.setText(type.getQueryName());
-                baseTypeField.setText(type.getBaseTypeId().value());
-                creatableLabel.setValue(is(type.isCreatable()));
-                fileableLabel.setValue(is(type.isFileable()));
-                queryableLabel.setValue(is(type.isQueryable()));
-                includeInSuperTypeLabel.setValue(is(type.isIncludedInSupertypeQuery()));
-                fulltextIndexedLabel.setValue(is(type.isFulltextIndexed()));
-                aclLabel.setValue(is(type.isControllableAcl()));
-                policyLabel.setValue(is(type.isControllablePolicy()));
-
-                if (type.getTypeMutability() != null) {
-                    StringBuilder sb = new StringBuilder();
-
-                    if (Boolean.TRUE.equals(type.getTypeMutability().canCreate())) {
-                        sb.append("create");
-                    }
-
-                    if (Boolean.TRUE.equals(type.getTypeMutability().canUpdate())) {
-                        if (sb.length() > 0) {
-                            sb.append(", ");
-                        }
-                        sb.append("update");
-                    }
-
-                    if (Boolean.TRUE.equals(type.getTypeMutability().canDelete())) {
-                        if (sb.length() > 0) {
-                            sb.append(", ");
-                        }
-                        sb.append("delete");
-                    }
-
-                    typeMutabilityField.setText(sb.toString());
-                } else {
-                    typeMutabilityField.setText("");
-                }
-
-                if (type instanceof DocumentTypeDefinition) {
-                    DocumentTypeDefinition docType = (DocumentTypeDefinition) type;
-                    versionableLabel.setVisible(true);
-                    versionableLabel.setValue(is(docType.isVersionable()));
-                    contentStreamAllowedField.setVisible(true);
-                    contentStreamAllowedField.setText(docType.getContentStreamAllowed() == null ? "???" : docType
-                            .getContentStreamAllowed().value());
-                } else {
-                    versionableLabel.setVisible(false);
-                    contentStreamAllowedField.setVisible(false);
-                }
-
-                if (type instanceof RelationshipTypeDefinition) {
-                    RelationshipTypeDefinition relationshipType = (RelationshipTypeDefinition) type;
-                    allowedSourceTypesField.setVisible(true);
-                    allowedSourceTypesField.setText(relationshipType.getAllowedSourceTypeIds() == null ? "???"
-                            : relationshipType.getAllowedSourceTypeIds().toString());
-                    allowedTargetTypesField.setVisible(true);
-                    allowedTargetTypesField.setText(relationshipType.getAllowedTargetTypeIds() == null ? "???"
-                            : relationshipType.getAllowedTargetTypeIds().toString());
-                } else {
-                    allowedSourceTypesField.setVisible(false);
-                    allowedTargetTypesField.setVisible(false);
-                }
-            } else {
-                nameField.setText("");
-                descriptionField.setText("");
-                idField.setText("");
-                localNamespaceField.setText("");
-                localNameField.setText("");
-                queryNameField.setText("");
-                baseTypeField.setText("");
-                creatableLabel.setValue(false);
-                fileableLabel.setValue(false);
-                queryableLabel.setValue(false);
-                includeInSuperTypeLabel.setValue(false);
-                fulltextIndexedLabel.setValue(false);
-                aclLabel.setValue(false);
-                policyLabel.setValue(false);
-                versionableLabel.setVisible(false);
-                contentStreamAllowedField.setVisible(false);
-                allowedSourceTypesField.setVisible(false);
-                allowedTargetTypesField.setVisible(false);
-                typeMutabilityField.setText("");
-            }
-
-            revalidate();
-        }
-
-        private void createGUI() {
-            setupGUI();
-
-            nameField = addLine("Name:", true);
-            descriptionField = addLine("Description:");
-            idField = addLine("Id:");
-            localNamespaceField = addLine("Local Namespace:");
-            localNameField = addLine("Local Name:");
-            queryNameField = addLine("Query Name:");
-            baseTypeField = addLine("Base Type:");
-            creatableLabel = addYesNoLabel("Creatable:");
-            fileableLabel = addYesNoLabel("Fileable:");
-            queryableLabel = addYesNoLabel("Queryable:");
-            includeInSuperTypeLabel = addYesNoLabel("Included in super type queries:");
-            fulltextIndexedLabel = addYesNoLabel("Full text indexed:");
-            aclLabel = addYesNoLabel("ACL controlable:");
-            policyLabel = addYesNoLabel("Policy controlable:");
-            typeMutabilityField = addLine("Type mutability:");
-            versionableLabel = addYesNoLabel("Versionable:");
-            contentStreamAllowedField = addLine("Content stream allowed:");
-            allowedSourceTypesField = addLine("Allowed source types:");
-            allowedTargetTypesField = addLine("Allowed target types:");
-        }
-
-        private boolean is(Boolean b) {
-            if (b == null) {
-                return false;
-            }
-
-            return b.booleanValue();
-        }
-    }
-
-    static class PropertyDefinitionTable extends JTable {
-
-        private static final long serialVersionUID = 1L;
-
-        private static final String[] COLUMN_NAMES = { "Name", "Id", "Description", "Local Namespace", "Local Name",
-                "Query Name", "Type", "Cardinality", "Updatability", "Queryable", "Orderable", "Required", "Inherited",
-                "Default Value", "Open Choice", "Choices" };
-        private static final int[] COLUMN_WIDTHS = { 200, 200, 200, 200, 200, 200, 80, 80, 80, 50, 50, 50, 50, 200, 50,
-                200 };
-
-        private ObjectType type;
-        private List<PropertyDefinition<?>> propertyDefintions;
-
-        public PropertyDefinitionTable() {
-            setDefaultRenderer(Collection.class, new CollectionRenderer());
-            setModel(new PropertyDefinitionTableModel(this));
-
-            setAutoResizeMode(AUTO_RESIZE_OFF);
-
-            for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
-                TableColumn column = getColumnModel().getColumn(i);
-                column.setPreferredWidth(COLUMN_WIDTHS[i]);
-            }
-
-            final JPopupMenu popup = new JPopupMenu();
-            JMenuItem menuItem = new JMenuItem("Copy to clipboard");
-            popup.add(menuItem);
-
-            menuItem.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    ClientHelper.copyTableToClipboard(PropertyDefinitionTable.this);
-                }
-            });
-
-            addMouseListener(new MouseAdapter() {
-                public void mousePressed(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                public void mouseReleased(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                private void maybeShowPopup(MouseEvent e) {
-                    if (e.isPopupTrigger()) {
-                        popup.show(e.getComponent(), e.getX(), e.getY());
-                    }
-                }
-            });
-
-            setFillsViewportHeight(true);
-        }
-
-        public void setType(ObjectType type) {
-            this.type = type;
-
-            if ((type != null) && (type.getPropertyDefinitions() != null)) {
-                propertyDefintions = new ArrayList<PropertyDefinition<?>>();
-                for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-                    propertyDefintions.add(propDef);
-                }
-
-                Collections.sort(propertyDefintions, new Comparator<PropertyDefinition<?>>() {
-                    public int compare(PropertyDefinition<?> pd1, PropertyDefinition<?> pd2) {
-                        return pd1.getId().compareTo(pd2.getId());
-                    }
-                });
-            } else {
-                propertyDefintions = null;
-            }
-
-            ((AbstractTableModel) getModel()).fireTableDataChanged();
-        }
-
-        public ObjectType getType() {
-            return type;
-        }
-
-        public List<PropertyDefinition<?>> getPropertyDefinitions() {
-            return propertyDefintions;
-        }
-
-        static class PropertyDefinitionTableModel extends AbstractTableModel {
-
-            private static final long serialVersionUID = 1L;
-
-            private final PropertyDefinitionTable table;
-
-            public PropertyDefinitionTableModel(PropertyDefinitionTable table) {
-                this.table = table;
-            }
-
-            public String getColumnName(int columnIndex) {
-                return COLUMN_NAMES[columnIndex];
-            }
-
-            public int getColumnCount() {
-                return COLUMN_NAMES.length;
-            }
-
-            public int getRowCount() {
-                if (table.getPropertyDefinitions() == null) {
-                    return 0;
-                }
-
-                return table.getPropertyDefinitions().size();
-            }
-
-            public Object getValueAt(int rowIndex, int columnIndex) {
-                PropertyDefinition<?> propDef = table.getPropertyDefinitions().get(rowIndex);
-
-                switch (columnIndex) {
-                case 0:
-                    return propDef.getDisplayName();
-                case 1:
-                    return propDef.getId();
-                case 2:
-                    return propDef.getDescription();
-                case 3:
-                    return propDef.getLocalNamespace();
-                case 4:
-                    return propDef.getLocalName();
-                case 5:
-                    return propDef.getQueryName();
-                case 6:
-                    return propDef.getPropertyType();
-                case 7:
-                    return propDef.getCardinality();
-                case 8:
-                    return propDef.getUpdatability();
-                case 9:
-                    return propDef.isQueryable();
-                case 10:
-                    return propDef.isOrderable();
-                case 11:
-                    return propDef.isRequired();
-                case 12:
-                    return propDef.isInherited();
-                case 13:
-                    return propDef.getDefaultValue();
-                case 14:
-                    return propDef.isOpenChoice();
-                case 15:
-                    return propDef.getChoices();
-                default:
-                }
-
-                return null;
-            }
-
-            @Override
-            public Class<?> getColumnClass(int columnIndex) {
-                if ((columnIndex == 13) || (columnIndex == 15)) {
-                    return Collection.class;
-                }
-
-                return super.getColumnClass(columnIndex);
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypesFrame.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypesFrame.java
deleted file mode 100644
index e4c5cff..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TypesFrame.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JToolBar;
-import javax.swing.JTree;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.filechooser.FileFilter;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeSelectionModel;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.util.TypeUtils;
-import org.apache.chemistry.opencmis.client.util.TypeUtils.ValidationError;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class TypesFrame extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String WINDOW_TITLE = "CMIS Types";
-
-    private static final int BUTTON_SAVE = 0;
-    private static final int BUTTON_UPDATE = 1;
-    private static final int BUTTON_DELETE = 2;
-    private static final int BUTTON_CREATE = 3;
-
-    private final ClientModel model;
-    private RepositoryInfo repInfo;
-    private ObjectType currentType;
-
-    private JToolBar toolBar;
-    private JButton[] toolbarButton;
-    private JTree typesTree;
-    private TypeSplitPane typePanel;
-
-    public TypesFrame(ClientModel model) {
-        super();
-
-        this.model = model;
-        repInfo = model.getRepositoryInfo();
-
-        createGUI();
-        loadData();
-    }
-
-    private void createGUI() {
-        setTitle(WINDOW_TITLE + " - " + model.getRepositoryName());
-
-        ImageIcon icon = ClientHelper.getIcon("icon.png");
-        if (icon != null) {
-            setIconImage(icon.getImage());
-        }
-
-        setPreferredSize(new Dimension(1000, 700));
-        setMinimumSize(new Dimension(200, 60));
-        setLayout(new BorderLayout());
-
-        toolBar = new JToolBar("CMIS Types Toolbar", JToolBar.HORIZONTAL);
-
-        toolbarButton = new JButton[4];
-
-        JMenuItem menuItem;
-
-        // -- save ---
-        final JPopupMenu savePopup = new JPopupMenu();
-
-        menuItem = new JMenuItem("Save Type Definition to XML");
-        savePopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createXmlFileChooser();
-                fileChooser.setSelectedFile(new File(getFilename() + ".xml"));
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Save XML");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        OutputStream out = new BufferedOutputStream(new FileOutputStream(fileChooser.getSelectedFile()));
-                        TypeUtils.writeToXML(currentType, out);
-                        out.flush();
-                        out.close();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        menuItem = new JMenuItem("Save Type Definition to JSON");
-        savePopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createJsonFileChooser();
-                fileChooser.setSelectedFile(new File(getFilename() + ".json"));
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Save JSON");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        OutputStream out = new BufferedOutputStream(new FileOutputStream(fileChooser.getSelectedFile()));
-                        TypeUtils.writeToJSON(currentType, out);
-                        out.flush();
-                        out.close();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        toolbarButton[BUTTON_SAVE] = new JButton("Save Type Definition", ClientHelper.getIcon("savetype.png"));
-        toolbarButton[BUTTON_SAVE].addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                savePopup.show(toolbarButton[BUTTON_SAVE], 0, toolbarButton[BUTTON_SAVE].getHeight());
-            }
-        });
-        toolBar.add(toolbarButton[BUTTON_SAVE]);
-
-        toolBar.addSeparator();
-
-        // -- update --
-        final JPopupMenu updatePopup = new JPopupMenu();
-        menuItem = new JMenuItem("Load Type Definition from XML");
-        updatePopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createXmlFileChooser();
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Load XML");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        InputStream in = new BufferedInputStream(new FileInputStream(fileChooser.getSelectedFile()),
-                                64 * 1024);
-                        TypeDefinition type = TypeUtils.readFromXML(in);
-                        in.close();
-
-                        if (checkTypeDefinition(type)) {
-                            model.getClientSession().getSession().updateType(type);
-                        }
-
-                        loadData();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        menuItem = new JMenuItem("Load Type Definition from JSON");
-        updatePopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createJsonFileChooser();
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Load JSON");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        InputStream in = new BufferedInputStream(new FileInputStream(fileChooser.getSelectedFile()),
-                                64 * 1024);
-                        TypeDefinition type = TypeUtils.readFromJSON(in);
-                        in.close();
-
-                        if (checkTypeDefinition(type)) {
-                            model.getClientSession().getSession().updateType(type);
-                        }
-
-                        loadData();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        toolbarButton[BUTTON_UPDATE] = new JButton("Update Type", ClientHelper.getIcon("updatetype.png"));
-        toolbarButton[BUTTON_UPDATE].setEnabled(repInfo.getCmisVersion() != CmisVersion.CMIS_1_0);
-        toolbarButton[BUTTON_UPDATE].addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                updatePopup.show(toolbarButton[BUTTON_UPDATE], 0, toolbarButton[BUTTON_UPDATE].getHeight());
-            }
-        });
-        toolBar.add(toolbarButton[BUTTON_UPDATE]);
-
-        // -- delete --
-        toolbarButton[BUTTON_DELETE] = new JButton("Delete Type", ClientHelper.getIcon("deletetype.png"));
-        toolbarButton[BUTTON_DELETE].setEnabled(repInfo.getCmisVersion() != CmisVersion.CMIS_1_0);
-        toolbarButton[BUTTON_DELETE].addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                int answer = JOptionPane.showConfirmDialog(getOwner(), "Do you really want to delete the type "
-                        + currentType.getId() + "?", "Delete Type", JOptionPane.YES_NO_OPTION,
-                        JOptionPane.WARNING_MESSAGE);
-
-                if (answer == JOptionPane.YES_OPTION) {
-                    try {
-                        model.getClientSession().getSession().deleteType(currentType.getId());
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-
-                    loadData();
-                }
-            }
-        });
-        toolBar.add(toolbarButton[BUTTON_DELETE]);
-
-        toolBar.addSeparator();
-
-        // -- create --
-        final JPopupMenu createPopup = new JPopupMenu();
-        menuItem = new JMenuItem("Load Type Definition from XML");
-        createPopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createXmlFileChooser();
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Load XML");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        InputStream in = new BufferedInputStream(new FileInputStream(fileChooser.getSelectedFile()),
-                                64 * 1024);
-                        TypeDefinition type = TypeUtils.readFromXML(in);
-                        in.close();
-
-                        if (checkTypeDefinition(type)) {
-                            model.getClientSession().getSession().createType(type);
-                        }
-
-                        loadData();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        menuItem = new JMenuItem("Load Type Definition from JSON");
-        createPopup.add(menuItem);
-        menuItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = createJsonFileChooser();
-
-                int chooseResult = fileChooser.showDialog(getRootPane(), "Load JSON");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    try {
-                        InputStream in = new BufferedInputStream(new FileInputStream(fileChooser.getSelectedFile()),
-                                64 * 1024);
-                        TypeDefinition type = TypeUtils.readFromJSON(in);
-                        in.close();
-
-                        if (checkTypeDefinition(type)) {
-                            model.getClientSession().getSession().createType(type);
-                        }
-
-                        loadData();
-                    } catch (Exception e) {
-                        ClientHelper.showError(getRootPane(), e);
-                    }
-                }
-            }
-        });
-
-        toolbarButton[BUTTON_CREATE] = new JButton("Create Type", ClientHelper.getIcon("newtype.png"));
-        toolbarButton[BUTTON_CREATE].setEnabled(repInfo.getCmisVersion() != CmisVersion.CMIS_1_0);
-        toolbarButton[BUTTON_CREATE].addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                createPopup.show(toolbarButton[BUTTON_CREATE], 0, toolbarButton[BUTTON_CREATE].getHeight());
-            }
-        });
-        toolBar.add(toolbarButton[BUTTON_CREATE]);
-
-        add(toolBar, BorderLayout.PAGE_START);
-
-        typesTree = new JTree();
-        typesTree.setRootVisible(false);
-        typesTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-
-        typesTree.addTreeSelectionListener(new TreeSelectionListener() {
-            public void valueChanged(TreeSelectionEvent e) {
-                DefaultMutableTreeNode node = (DefaultMutableTreeNode) ((JTree) e.getSource())
-                        .getLastSelectedPathComponent();
-
-                if (node == null) {
-                    return;
-                }
-
-                currentType = ((TypeNode) node.getUserObject()).getType();
-
-                if (repInfo.getCmisVersion() != CmisVersion.CMIS_1_0) {
-                    toolbarButton[BUTTON_UPDATE].setEnabled(currentType.getTypeMutability() != null
-                            && Boolean.TRUE.equals(currentType.getTypeMutability().canUpdate()));
-                    toolbarButton[BUTTON_DELETE].setEnabled(currentType.getTypeMutability() != null
-                            && Boolean.TRUE.equals(currentType.getTypeMutability().canDelete()));
-                }
-
-                typePanel.setType(currentType);
-            }
-        });
-
-        typePanel = new TypeSplitPane(model);
-
-        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(typesTree), typePanel);
-        splitPane.setDividerLocation(300);
-
-        add(splitPane, BorderLayout.CENTER);
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    private JFileChooser createXmlFileChooser() {
-        JFileChooser fileChooser = new JFileChooser();
-        fileChooser.addChoosableFileFilter(new FileFilter() {
-
-            @Override
-            public String getDescription() {
-                return "XML CMIS Type Definition File";
-            }
-
-            @Override
-            public boolean accept(File f) {
-                return f.isDirectory() || f.getName().endsWith(".xml");
-            }
-        });
-
-        return fileChooser;
-    }
-
-    private JFileChooser createJsonFileChooser() {
-        JFileChooser fileChooser = new JFileChooser();
-        fileChooser.addChoosableFileFilter(new FileFilter() {
-
-            @Override
-            public String getDescription() {
-                return "JSON CMIS Type Definition File";
-            }
-
-            @Override
-            public boolean accept(File f) {
-                return f.isDirectory() || f.getName().endsWith(".json");
-            }
-        });
-
-        return fileChooser;
-    }
-
-    private String getFilename() {
-        if (currentType != null) {
-            String filename = currentType.getId();
-            filename = filename.replace(':', '_');
-            filename = filename.replace('/', '_');
-            filename = filename.replace('\\', '_');
-
-            return filename;
-        }
-
-        return "type";
-    }
-
-    private boolean checkTypeDefinition(TypeDefinition type) {
-        StringBuilder sb = new StringBuilder();
-
-        List<ValidationError> typeResult = TypeUtils.validateTypeDefinition(type);
-
-        if (isNotEmpty(typeResult)) {
-            sb.append("\nType Definition:\n");
-
-            for (ValidationError error : typeResult) {
-                sb.append("- ");
-                sb.append(error.toString());
-                sb.append('\n');
-            }
-        }
-
-        if (type.getPropertyDefinitions() != null) {
-            for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
-                List<ValidationError> propResult = TypeUtils.validatePropertyDefinition(propDef);
-
-                if (isNotEmpty(propResult)) {
-                    sb.append("\nProperty Definition '" + propDef.getId() + "':\n");
-
-                    for (ValidationError error : propResult) {
-                        sb.append("- ");
-                        sb.append(error.toString());
-                        sb.append('\n');
-                    }
-                }
-            }
-        }
-
-        if (sb.length() == 0) {
-            return true;
-        }
-
-        int answer = JOptionPane
-                .showConfirmDialog(this, "The type defintion has the following issues.\n" + sb.toString()
-                        + "\n\nDo you want to proceed anyway?", "Type Definition Validation",
-                        JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
-
-        return answer == JOptionPane.YES_OPTION;
-    }
-
-    private void loadData() {
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
-
-            List<Tree<ObjectType>> types = model.getTypeDescendants();
-            for (Tree<ObjectType> tt : types) {
-                addLevel(rootNode, tt);
-            }
-
-            DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
-            typesTree.setModel(treeModel);
-
-            typesTree.setSelectionRow(0);
-        } catch (Exception ex) {
-            ClientHelper.showError(null, ex);
-            return;
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    private void addLevel(DefaultMutableTreeNode parent, Tree<ObjectType> tree) {
-        DefaultMutableTreeNode node = new DefaultMutableTreeNode(new TypeNode(tree.getItem()));
-        parent.add(node);
-
-        if (tree.getChildren() != null) {
-            for (Tree<ObjectType> tt : tree.getChildren()) {
-                addLevel(node, tt);
-            }
-        }
-    }
-
-    static class TypeNode {
-        private final ObjectType type;
-
-        public TypeNode(ObjectType type) {
-            this.type = type;
-        }
-
-        public ObjectType getType() {
-            return type;
-        }
-
-        @Override
-        public String toString() {
-            return type.getDisplayName() + " (" + type.getId() + ")";
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/Workbench.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/Workbench.java
deleted file mode 100644
index 817c4cb..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/Workbench.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench;
-
-import java.net.Authenticator;
-
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.UIManager.LookAndFeelInfo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Workbench {
-
-    private static final Logger LOG = LoggerFactory.getLogger(Workbench.class);
-
-    public Workbench() {
-        // set Mac OS X name
-        System.setProperty("com.apple.mrj.application.apple.menu.about.name", "CMIS Workbench");
-
-        // turn off existing Authenticators (-> Web Start)
-        Authenticator.setDefault(null);
-
-        // set up Swing
-        try {
-            SwingUtilities.invokeAndWait(new Runnable() {
-                public void run() {
-                    try {
-                        boolean nimbus = false;
-
-                        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
-                            if ("Nimbus".equals(info.getName())) {
-                                UIManager.setLookAndFeel(info.getClassName());
-                                nimbus = true;
-                                break;
-                            }
-                        }
-
-                        if (!nimbus) {
-                            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-                        }
-                    } catch (Exception e) {
-                        LOG.warn("Nimbus not available: " + e.getMessage(), e);
-                    }
-                }
-            });
-        } catch (Exception e) {
-            LOG.warn("Nimbus not available: " + e.getMessage(), e);
-        }
-
-        JFrame.setDefaultLookAndFeelDecorated(true);
-        JDialog.setDefaultLookAndFeelDecorated(true);
-        ClientHelper.installKeyBindings();
-
-        // show client frame
-        javax.swing.SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                new ClientFrame();
-            }
-        });
-    }
-
-    public static void main(String[] args) {
-        new Workbench();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java
deleted file mode 100644
index 26be0f6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.AclEditorFrame;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class AclUpdatePanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    public AclUpdatePanel(ClientModel model) {
-        super("Change ACL", "Open ACL Editor", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getObject() == null) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_APPLY_ACL);
-    }
-
-    @Override
-    public boolean doAction() {
-        new AclEditorFrame(getClientModel(), getObject());
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AddObjectToFolderPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AddObjectToFolderPanel.java
deleted file mode 100644
index 76847d9..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AddObjectToFolderPanel.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class AddObjectToFolderPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField folderField;
-    private JCheckBox allVersionsBox;
-
-    public AddObjectToFolderPanel(ClientModel model) {
-        super("Add Object To Folder", "Add", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel folderPanel = new JPanel(new BorderLayout());
-        folderPanel.setBackground(Color.WHITE);
-
-        folderPanel.add(new JLabel("Folder Id:"), BorderLayout.LINE_START);
-
-        folderField = new JTextField(30);
-        folderPanel.add(folderField, BorderLayout.CENTER);
-
-        addActionComponent(folderPanel);
-
-        allVersionsBox = new JCheckBox("add all versions", true);
-        addActionComponent(allVersionsBox);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (!(getObject() instanceof FileableCmisObject)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_ADD_OBJECT_TO_FOLDER);
-    }
-
-    @Override
-    public boolean doAction() {
-        ObjectId folderId = getClientModel().getClientSession().getSession().createObjectId(folderField.getText());
-        ((FileableCmisObject) getObject()).addToFolder(folderId, allVersionsBox.isSelected());
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AppendContentStreamPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AppendContentStreamPanel.java
deleted file mode 100644
index 6112c5d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AppendContentStreamPanel.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.io.FileNotFoundException;
-
-import javax.swing.JCheckBox;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class AppendContentStreamPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField filenameField;
-    private JCheckBox isLastChunkBox;
-
-    public AppendContentStreamPanel(ClientModel model) {
-        super("Append Content Stream", "Append Content Stream", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        filenameField = new JTextField(30);
-        addActionComponent(createFilenamePanel(filenameField));
-
-        isLastChunkBox = new JCheckBox("is last chunk", false);
-        addActionComponent(isLastChunkBox);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getCmisVersion() == CmisVersion.CMIS_1_0) {
-            return false;
-        }
-
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_SET_CONTENT_STREAM);
-    }
-
-    @Override
-    public boolean doAction() throws FileNotFoundException {
-        ContentStream content = getClientModel().createContentStream(filenameField.getText());
-
-        try {
-            ((Document) getObject()).appendContentStream(content, isLastChunkBox.isSelected());
-        } finally {
-            IOUtils.closeQuietly(content);
-        }
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/ApplyPolicyPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/ApplyPolicyPanel.java
deleted file mode 100644
index 6084f97..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/ApplyPolicyPanel.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class ApplyPolicyPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField policyField;
-
-    public ApplyPolicyPanel(ClientModel model) {
-        super("Apply Policy", "Apply Policy", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel policyIdPanel = new JPanel(new BorderLayout());
-        policyIdPanel.setBackground(Color.WHITE);
-
-        policyIdPanel.add(new JLabel("Policy Id:"), BorderLayout.LINE_START);
-
-        policyField = new JTextField(30);
-        policyIdPanel.add(policyField, BorderLayout.CENTER);
-
-        addActionComponent(policyIdPanel);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getObject() == null) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_APPLY_POLICY);
-    }
-
-    @Override
-    public boolean doAction() {
-        getObject().applyPolicy(new ObjectIdImpl(policyField.getText()));
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CancelCheckOutPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CancelCheckOutPanel.java
deleted file mode 100644
index 83b2020..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CancelCheckOutPanel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class CancelCheckOutPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    public CancelCheckOutPanel(ClientModel model) {
-        super("Cancel Check-out Object", "Cancel Check-out", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_CANCEL_CHECK_OUT);
-    }
-
-    @Override
-    public boolean doAction() {
-        ((Document) getObject()).cancelCheckOut();
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckInPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckInPanel.java
deleted file mode 100644
index 461cdb8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckInPanel.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.io.FileNotFoundException;
-
-import javax.swing.JCheckBox;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class CheckInPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JCheckBox majorBox;
-    private JTextField filenameField;
-
-    public CheckInPanel(ClientModel model) {
-        super("Check-in Object", "Check-in", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        majorBox = new JCheckBox("major version", true);
-        addActionComponent(majorBox);
-
-        filenameField = new JTextField(30);
-        addActionComponent(createFilenamePanel(filenameField));
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_CHECK_IN);
-    }
-
-    @Override
-    public boolean doAction() throws FileNotFoundException {
-        ContentStream content = getClientModel().createContentStream(filenameField.getText());
-
-        try {
-            ((Document) getObject()).checkIn(majorBox.isSelected(), null, content, null, null, null, null);
-        } finally {
-            IOUtils.closeQuietly(content);
-        }
-
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckOutPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckOutPanel.java
deleted file mode 100644
index a6e54f6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CheckOutPanel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class CheckOutPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    public CheckOutPanel(ClientModel model) {
-        super("Check-out Object", "Check-out", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_CHECK_OUT);
-    }
-
-    @Override
-    public boolean doAction() {
-        ((Document) getObject()).checkOut();
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CopyPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CopyPanel.java
deleted file mode 100644
index 7e9b8bd..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/CopyPanel.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class CopyPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField targetFolderField;
-
-    public CopyPanel(ClientModel model) {
-        super("Copy Object", "Copy", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel targetFolderPanel = new JPanel(new BorderLayout());
-        targetFolderPanel.setBackground(Color.WHITE);
-
-        targetFolderPanel.add(new JLabel("Target Folder Id:"), BorderLayout.LINE_START);
-
-        targetFolderField = new JTextField(30);
-        targetFolderPanel.add(targetFolderField, BorderLayout.CENTER);
-
-        addActionComponent(targetFolderPanel);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public boolean doAction() {
-        ObjectId targetFolderId = new ObjectIdImpl(targetFolderField.getText());
-        ((Document) getObject()).copy(targetFolderId);
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteContentStreamPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteContentStreamPanel.java
deleted file mode 100644
index ed80cb1..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteContentStreamPanel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class DeleteContentStreamPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    public DeleteContentStreamPanel(ClientModel model) {
-        super("Delete Content Stream", "Delete Content Stream", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_DELETE_CONTENT_STREAM);
-    }
-
-    @Override
-    public boolean doAction() {
-        ((Document) getObject()).deleteContentStream();
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeletePanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeletePanel.java
deleted file mode 100644
index 026db01..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeletePanel.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import javax.swing.JCheckBox;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class DeletePanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JCheckBox allVersionsBox;
-
-    public DeletePanel(ClientModel model) {
-        super("Delete Object", "Delete", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        allVersionsBox = new JCheckBox("delete all versions", true);
-        addActionComponent(allVersionsBox);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getObject() == null) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_DELETE_OBJECT);
-    }
-
-    @Override
-    public boolean doAction() {
-        getObject().delete(allVersionsBox.isSelected());
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteTreePanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteTreePanel.java
deleted file mode 100644
index aba07f2..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/DeleteTreePanel.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.util.List;
-
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class DeleteTreePanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JCheckBox allVersionsBox;
-    private JComboBox unfileObjectsBox;
-    private JCheckBox continueOnFailureBox;
-
-    public DeleteTreePanel(ClientModel model) {
-        super("Delete Tree", "Delete", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        allVersionsBox = new JCheckBox("delete all versions", true);
-        addActionComponent(allVersionsBox);
-
-        unfileObjectsBox = new JComboBox(new Object[] { UnfileObject.DELETE, UnfileObject.DELETESINGLEFILED,
-                UnfileObject.UNFILE });
-        unfileObjectsBox.setSelectedIndex(0);
-        addActionComponent(unfileObjectsBox);
-
-        continueOnFailureBox = new JCheckBox("continue on failure", true);
-        addActionComponent(allVersionsBox);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Folder)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_DELETE_TREE);
-    }
-
-    @Override
-    public boolean doAction() {
-        List<String> ids = ((Folder) getObject()).deleteTree(allVersionsBox.isSelected(),
-                (UnfileObject) unfileObjectsBox.getSelectedItem(), continueOnFailureBox.isSelected());
-
-        if (ids != null && !ids.isEmpty()) {
-            StringBuilder sb = new StringBuilder(
-                    "Delete tree failed! At least the following objects could not be deleted:\n");
-
-            for (String id : ids) {
-                sb.append('\n');
-                sb.append(id);
-            }
-
-            JOptionPane.showMessageDialog(this, sb.toString(), "Delete Tree", JOptionPane.ERROR_MESSAGE);
-        }
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/MovePanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/MovePanel.java
deleted file mode 100644
index 93e5b41..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/MovePanel.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class MovePanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField targetFolderField;
-
-    public MovePanel(ClientModel model) {
-        super("Move Object", "Move", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel targetFolderPanel = new JPanel(new BorderLayout());
-        targetFolderPanel.setBackground(Color.WHITE);
-
-        targetFolderPanel.add(new JLabel("Target Folder Id:"), BorderLayout.LINE_START);
-
-        targetFolderField = new JTextField(30);
-        targetFolderPanel.add(targetFolderField, BorderLayout.CENTER);
-
-        addActionComponent(targetFolderPanel);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof FileableCmisObject)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_MOVE_OBJECT);
-    }
-
-    @Override
-    public boolean doAction() {
-        ObjectId targetFolderId = new ObjectIdImpl(targetFolderField.getText());
-        FileableCmisObject before = (FileableCmisObject) getObject();
-        FileableCmisObject after = before.move(getClientModel().getCurrentFolder(), targetFolderId);
-        return before.getId().equals(after.getId());
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/PropertyUpdatePanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/PropertyUpdatePanel.java
deleted file mode 100644
index 011c2fa..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/PropertyUpdatePanel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.PropertyEditorFrame;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class PropertyUpdatePanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyUpdatePanel(ClientModel model) {
-        super("Update Properties", "Open Property Editor", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getObject() == null) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_UPDATE_PROPERTIES);
-    }
-
-    @Override
-    public boolean doAction() {
-        new PropertyEditorFrame(getClientModel(), getObject());
-        return false;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemoveObjectFromFolderPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemoveObjectFromFolderPanel.java
deleted file mode 100644
index 78d1b5b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemoveObjectFromFolderPanel.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class RemoveObjectFromFolderPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField folderField;
-
-    public RemoveObjectFromFolderPanel(ClientModel model) {
-        super("Remove Object From Folder", "Remove", model);
-    }
-
-    @Override
-    public void setVisible(boolean visible) {
-        if (visible) {
-            if (getClientModel().getCurrentFolder() != null) {
-                folderField.setText(getClientModel().getCurrentFolder().getId());
-            } else {
-                folderField.setText("");
-            }
-        }
-
-        super.setVisible(visible);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel folderPanel = new JPanel(new BorderLayout());
-        folderPanel.setBackground(Color.WHITE);
-
-        folderPanel.add(new JLabel("Folder Id:"), BorderLayout.LINE_START);
-
-        folderField = new JTextField(30);
-        folderPanel.add(folderField, BorderLayout.CENTER);
-
-        addActionComponent(folderPanel);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (!(getObject() instanceof FileableCmisObject)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_REMOVE_OBJECT_FROM_FOLDER);
-    }
-
-    @Override
-    public boolean doAction() {
-        ObjectId folderId = getClientModel().getClientSession().getSession().createObjectId(folderField.getText());
-        ((FileableCmisObject) getObject()).removeFromFolder(folderId);
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemovePolicyPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemovePolicyPanel.java
deleted file mode 100644
index 23b6b50..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/RemovePolicyPanel.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class RemovePolicyPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField policyField;
-
-    public RemovePolicyPanel(ClientModel model) {
-        super("Remove Policy", "Remove Policy", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        JPanel policyIdPanel = new JPanel(new BorderLayout());
-        policyIdPanel.setBackground(Color.WHITE);
-
-        policyIdPanel.add(new JLabel("Policy Id:"), BorderLayout.LINE_START);
-
-        policyField = new JTextField(30);
-        policyIdPanel.add(policyField, BorderLayout.CENTER);
-
-        addActionComponent(policyIdPanel);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if (getObject() == null) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_REMOVE_POLICY);
-    }
-
-    @Override
-    public boolean doAction() {
-        getObject().removePolicy(new ObjectIdImpl(policyField.getText()));
-        return true;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/SetContentStreamPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/SetContentStreamPanel.java
deleted file mode 100644
index 3bafc28..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/SetContentStreamPanel.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.actions;
-
-import java.io.FileNotFoundException;
-
-import javax.swing.JCheckBox;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
-
-public class SetContentStreamPanel extends ActionPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private JTextField filenameField;
-    private JCheckBox overwriteBox;
-
-    public SetContentStreamPanel(ClientModel model) {
-        super("Set Content Stream", "Set Content Stream", model);
-    }
-
-    @Override
-    protected void createActionComponents() {
-        filenameField = new JTextField(30);
-        addActionComponent(createFilenamePanel(filenameField));
-
-        overwriteBox = new JCheckBox("overwrite", true);
-        addActionComponent(overwriteBox);
-    }
-
-    @Override
-    public boolean isAllowed() {
-        if ((getObject() == null) || !(getObject() instanceof Document)) {
-            return false;
-        }
-
-        if ((getObject().getAllowableActions() == null)
-                || (getObject().getAllowableActions().getAllowableActions() == null)) {
-            return true;
-        }
-
-        return getObject().hasAllowableAction(Action.CAN_SET_CONTENT_STREAM);
-    }
-
-    @Override
-    public boolean doAction() throws FileNotFoundException {
-        ContentStream content = getClientModel().createContentStream(filenameField.getText());
-
-        try {
-            ((Document) getObject()).setContentStream(content, overwriteBox.isSelected());
-        } finally {
-            if (content != null) {
-                IOUtils.closeQuietly(content);
-            }
-        }
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java
deleted file mode 100644
index 5f9fc85..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.checks;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
-import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
-
-/**
- * This class checks an object for CMIS specification compliance.
- */
-public class ObjectComplianceCheck extends AbstractSessionTest {
-
-    private String objectId;
-
-    public ObjectComplianceCheck(String objectId) {
-        this.objectId = objectId;
-    }
-
-    @Override
-    public final void init(Map<String, String> parameters) {
-        super.init(parameters);
-        setName("Object Compliance Check");
-    }
-
-    @Override
-    public final void run(Session session) {
-        CmisObject object = session.getObject(objectId, SELECT_ALL_NO_CACHE_OC);
-        String[] propertiesToCheck = getAllProperties(object);
-
-        addResult(checkObject(session, object, propertiesToCheck, "Object check: " + object.getId()));
-
-        if (object instanceof Document) {
-            addResult(checkVersionHistory(session, object, propertiesToCheck,
-                    "Version history check: " + object.getId()));
-        } else if (object instanceof Folder) {
-            addResult(checkChildren(session, (Folder) object, "Folder children check: " + object.getId()));
-        }
-
-        if (getResults().isEmpty()) {
-            addResult(createResult(CmisTestResultStatus.OK, "Object seems to be compliant! Id: " + object.getId()));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java
deleted file mode 100644
index e195a02..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.checks;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.tck.impl.AbstractCmisTestGroup;
-
-public class ObjectComplianceTestGroup extends AbstractCmisTestGroup {
-
-    private String objectId;
-
-    public ObjectComplianceTestGroup(Map<String, String> parameters, String objectId) throws Exception {
-        this.objectId = objectId;
-        init(parameters);
-    }
-
-    @Override
-    public final void init(Map<String, String> parameters) throws Exception {
-        super.init(parameters);
-
-        setName("Object Compliance Test Group");
-
-        addTest(new ObjectComplianceCheck(objectId));
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java
deleted file mode 100644
index 0087f80..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.checks;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Desktop;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.SwingConstants;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-
-import org.apache.chemistry.opencmis.tck.CmisTest;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.tck.CmisTestReport;
-import org.apache.chemistry.opencmis.tck.CmisTestResult;
-import org.apache.chemistry.opencmis.tck.report.AbstractCmisTestReport;
-import org.apache.chemistry.opencmis.tck.report.HtmlReport;
-import org.apache.chemistry.opencmis.tck.report.TextReport;
-import org.apache.chemistry.opencmis.tck.report.XmlReport;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-
-/**
- * Swing Report.
- */
-public class SwingReport extends AbstractCmisTestReport {
-
-    private static final Icon GROUP_ICON = new ColorIcon(Color.GRAY);
-    private static final Icon TEST_ICON = new ColorIcon(Color.BLUE);
-    private static final Icon STATUS_OK_ICON = new ColorIcon(Color.GREEN);
-    private static final Icon STATUS_WARNING_ICON = new ColorIcon(Color.YELLOW);
-    private static final Icon STATUS_FAILURE_ICON = new ColorIcon(Color.RED);
-    private static final Icon OTHER_ICON = new ColorIcon(Color.LIGHT_GRAY);
-
-    private final Frame owner;
-    private final int width;
-    private final int height;
-    private Map<String, String> parameters;
-    private List<CmisTestGroup> groups;
-
-    public SwingReport(Frame owner, int width, int height) {
-        this.owner = owner;
-        this.width = width;
-        this.height = height;
-    }
-
-    @Override
-    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer) {
-        this.parameters = parameters;
-        this.groups = groups;
-        new SwingReportDialog();
-    }
-
-    /**
-     * Report dialog.
-     */
-    private class SwingReportDialog extends JDialog {
-
-        private static final long serialVersionUID = 1L;
-
-        public SwingReportDialog() {
-            super(owner, "Test Report");
-            createGUI();
-        }
-
-        private void createGUI() {
-            setPreferredSize(new Dimension(width, height));
-            setMinimumSize(new Dimension(width, height));
-
-            setLayout(new BorderLayout());
-
-            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");
-
-            for (CmisTestGroup group : groups) {
-                if (!group.isEnabled()) {
-                    continue;
-                }
-
-                DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group);
-                rootNode.add(groupNode);
-                for (CmisTest test : group.getTests()) {
-                    if (!test.isEnabled()) {
-                        continue;
-                    }
-
-                    DefaultMutableTreeNode testNode = new DefaultMutableTreeNode(test);
-                    groupNode.add(testNode);
-                    populateResultBranch(testNode, test.getResults());
-                }
-            }
-
-            JTree groupTree = new JTree(rootNode);
-            groupTree.setRootVisible(false);
-            groupTree.setCellRenderer(new ReportTreeCellRenderer());
-
-            for (int i = 0; i < groupTree.getRowCount(); i++) {
-                groupTree.expandRow(i);
-            }
-
-            add(new JScrollPane(groupTree), BorderLayout.CENTER);
-
-            final JPanel reportPanel = new JPanel();
-            reportPanel.add(new JLabel("Open report as "));
-            final JComboBox reportType = new JComboBox(new Object[] { "HTML", "Text", "XML" });
-            reportPanel.add(reportType);
-            final JButton reportButton = new JButton("go");
-            reportPanel.add(reportButton);
-
-            reportButton.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent event) {
-                    try {
-                        // create report
-                        File tempReportFile = null;
-                        CmisTestReport report = null;
-
-                        switch (reportType.getSelectedIndex()) {
-                        case 1:
-                            tempReportFile = File.createTempFile("cmistck", ".txt");
-                            report = new TextReport();
-                            break;
-                        case 2:
-                            tempReportFile = File.createTempFile("cmistck", ".xml");
-                            report = new XmlReport();
-                            break;
-                        default:
-                            tempReportFile = File.createTempFile("cmistck", ".html");
-                            report = new HtmlReport();
-                            break;
-                        }
-
-                        tempReportFile.deleteOnExit();
-                        report.createReport(parameters, groups, tempReportFile);
-
-                        // show report
-                        Desktop desktop = Desktop.getDesktop();
-                        if (!desktop.isSupported(Desktop.Action.OPEN)) {
-                            JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(),
-                                    "Report", JOptionPane.INFORMATION_MESSAGE);
-                        } else {
-                            desktop.open(tempReportFile);
-                        }
-                    } catch (Exception e) {
-                        JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
-                                JOptionPane.ERROR_MESSAGE);
-                    }
-                }
-            });
-
-            add(reportPanel, BorderLayout.PAGE_END);
-
-            ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-            pack();
-            setLocationRelativeTo(null);
-            setVisible(true);
-        }
-
-        private void populateResultBranch(DefaultMutableTreeNode parent, List<CmisTestResult> results) {
-            if (results == null) {
-                return;
-            }
-
-            for (CmisTestResult result : results) {
-                DefaultMutableTreeNode resultNode = new DefaultMutableTreeNode(result);
-                parent.add(resultNode);
-                populateResultBranch(resultNode, result.getChildren());
-            }
-        }
-
-        private class ReportTreeCellRenderer extends DefaultTreeCellRenderer {
-
-            private static final long serialVersionUID = 1L;
-
-            public ReportTreeCellRenderer() {
-            }
-
-            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
-                    boolean leaf, int row, boolean hasFocus) {
-                super.getTreeCellRendererComponent(tree, "", sel, expanded, leaf, row, hasFocus);
-
-                DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
-
-                if (node.getUserObject() instanceof CmisTestGroup) {
-                    setText(((CmisTestGroup) node.getUserObject()).getName());
-                    setIcon(GROUP_ICON);
-                } else if (node.getUserObject() instanceof CmisTest) {
-                    setText(((CmisTest) node.getUserObject()).getName());
-                    setIcon(TEST_ICON);
-                } else if (node.getUserObject() instanceof CmisTestResult) {
-                    CmisTestResult result = (CmisTestResult) node.getUserObject();
-
-                    String text = "<html><b>" + result.getStatus() + ": " + result.getMessage() + "</b>";
-                    if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
-                        text += " (" + result.getStackTrace()[0].getFileName() + ":"
-                                + result.getStackTrace()[0].getLineNumber() + ")";
-                    }
-                    setText(text);
-
-                    switch (result.getStatus()) {
-                    case OK:
-                        setIcon(STATUS_OK_ICON);
-                        break;
-                    case WARNING:
-                        setIcon(STATUS_WARNING_ICON);
-                        break;
-                    case FAILURE:
-                    case UNEXPECTED_EXCEPTION:
-                        setIcon(STATUS_FAILURE_ICON);
-                        break;
-                    default:
-                        setIcon(OTHER_ICON);
-                    }
-                } else {
-                    setText(value.toString());
-                    setIcon(OTHER_ICON);
-                }
-
-                setVerticalTextPosition(SwingConstants.TOP);
-
-                return this;
-            }
-        }
-    }
-
-    private static class ColorIcon implements Icon {
-
-        private final Color color;
-
-        public ColorIcon(Color color) {
-            this.color = color;
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            g.setColor(color);
-            g.fillRect(0, 0, getIconWidth(), getIconHeight());
-        }
-
-        public int getIconWidth() {
-            return 8;
-        }
-
-        public int getIconHeight() {
-            return 18;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java
deleted file mode 100644
index c444fc8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.Cursor;
-import java.awt.event.MouseEvent;
-import java.util.Collection;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.AclEditorFrame;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class ACLTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Principal", "Permissions", "Direct" };
-    private static final int[] COLUMN_WIDTHS = { 200, 400, 50 };
-
-    public ACLTable(ClientModel model) {
-        super();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void doubleClickAction(MouseEvent e, int rowIndex) {
-        AllowableActions aa = getObject().getAllowableActions();
-
-        if ((aa == null) || (aa.getAllowableActions() == null)
-                || aa.getAllowableActions().contains(Action.CAN_APPLY_ACL)) {
-            new AclEditorFrame(getClientModel(), getObject());
-
-            try {
-                setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                getClientModel().reloadObject();
-                getClientModel().reloadFolder();
-            } catch (Exception ex) {
-                ClientHelper.showError(null, ex);
-            } finally {
-                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            }
-        }
-    }
-
-    public int getDetailRowCount() {
-        if ((getObject().getAcl() == null) || (getObject().getAcl().getAces() == null)) {
-            return 0;
-        }
-
-        return getObject().getAcl().getAces().size();
-    }
-
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Ace ace = getObject().getAcl().getAces().get(rowIndex);
-
-        switch (columnIndex) {
-        case 0:
-            return ace.getPrincipalId();
-        case 1:
-            return ace.getPermissions();
-        case 2:
-            return ace.isDirect();
-        default:
-        }
-
-        return null;
-    }
-
-    @Override
-    public Class<?> getDetailColumClass(int columnIndex) {
-        if (columnIndex == 1) {
-            return Collection.class;
-        } else if (columnIndex == 2) {
-            return Boolean.class;
-        }
-
-        return super.getDetailColumClass(columnIndex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
deleted file mode 100644
index c776874..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.Cursor;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionListener;
-import java.util.Collection;
-
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JTabbedPane;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumn;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-import org.apache.chemistry.opencmis.workbench.swing.CollectionRenderer;
-import org.apache.chemistry.opencmis.workbench.swing.IdRenderer;
-
-public abstract class AbstractDetailsTable extends JTable implements ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Cursor HAND_CURSOR = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
-    private static final Cursor DEFAULT_CURSOR = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-
-    private ClientModel model;
-    private String[] columnNames;
-
-    @SuppressWarnings("PMD.ArrayIsStoredDirectly")
-    public void init(final ClientModel model, final String[] columnNames, final int[] colummnWidths) {
-        this.model = model;
-        model.addObjectListener(this);
-
-        this.columnNames = columnNames;
-
-        setModel(new DetailsTableModel(this));
-
-        setDefaultRenderer(Collection.class, new CollectionRenderer());
-        setDefaultRenderer(ObjectId.class, new IdRenderer());
-        setAutoResizeMode(AUTO_RESIZE_OFF);
-        setAutoCreateRowSorter(true);
-
-        for (int i = 0; i < colummnWidths.length; i++) {
-            TableColumn column = getColumnModel().getColumn(i);
-            column.setPreferredWidth(colummnWidths[i]);
-        }
-
-        setFillsViewportHeight(true);
-
-        final JPopupMenu popup = new JPopupMenu();
-        final JMenuItem menuItem = new JMenuItem("Copy to clipboard");
-        popup.add(menuItem);
-
-        menuItem.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ClientHelper.copyTableToClipboard(AbstractDetailsTable.this);
-            }
-        });
-
-        addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                if (SwingUtilities.isLeftMouseButton(e)) {
-                    int row = rowAtPoint(e.getPoint());
-                    int column = columnAtPoint(e.getPoint());
-                    if (row > -1 && column > -1) {
-                        if (e.getClickCount() == 1) {
-                            singleClickAction(e, row, column);
-                        } else if (e.getClickCount() == 2) {
-                            doubleClickAction(e, row);
-                        }
-                    }
-                }
-            }
-
-            public void mousePressed(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            public void mouseReleased(MouseEvent e) {
-                maybeShowPopup(e);
-            }
-
-            private void maybeShowPopup(MouseEvent e) {
-                if (e.isPopupTrigger()) {
-                    popup.show(e.getComponent(), e.getX(), e.getY());
-                }
-            }
-        });
-
-        addMouseMotionListener(new MouseMotionListener() {
-            public void mouseMoved(MouseEvent e) {
-                int row = rowAtPoint(e.getPoint());
-                int column = columnAtPoint(e.getPoint());
-                if (row > -1 && getColumnClass(column) == ObjectId.class) {
-                    setCursor(HAND_CURSOR);
-                } else {
-                    setCursor(DEFAULT_CURSOR);
-                }
-
-            }
-
-            public void mouseDragged(MouseEvent e) {
-            }
-        });
-    }
-
-    public void objectLoaded(ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                ((DetailsTableModel) getModel()).fireTableDataChanged();
-            }
-        });
-    }
-
-    public CmisObject getObject() {
-        return model.getCurrentObject();
-    }
-
-    public ClientModel getClientModel() {
-        return model;
-    }
-
-    public String[] getColumnNames() {
-        return columnNames;
-    }
-
-    public abstract int getDetailRowCount();
-
-    public abstract Object getDetailValueAt(int rowIndex, int columnIndex);
-
-    public Class<?> getDetailColumClass(int columnIndex) {
-        return String.class;
-    }
-
-    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
-    }
-
-    public void doubleClickAction(MouseEvent e, int rowIndex) {
-    }
-
-    public void setTab(int tab) {
-        ((JTabbedPane) getParent().getParent().getParent()).setSelectedIndex(tab);
-    }
-
-    static class DetailsTableModel extends AbstractTableModel {
-
-        private final AbstractDetailsTable table;
-
-        public DetailsTableModel(AbstractDetailsTable table) {
-            this.table = table;
-        }
-
-        private static final long serialVersionUID = 1L;
-
-        public String getColumnName(int columnIndex) {
-            return table.getColumnNames()[columnIndex];
-        }
-
-        public int getColumnCount() {
-            return table.getColumnNames().length;
-        }
-
-        public int getRowCount() {
-            if (table.getObject() == null) {
-                return 0;
-            }
-
-            return table.getDetailRowCount();
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            if (table.getObject() == null) {
-                return null;
-            }
-
-            return table.getDetailValueAt(rowIndex, columnIndex);
-        }
-
-        public Class<?> getColumnClass(int columnIndex) {
-            return table.getDetailColumClass(columnIndex);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java
deleted file mode 100644
index d3a947d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.workbench.actions.AclUpdatePanel;
-import org.apache.chemistry.opencmis.workbench.actions.AddObjectToFolderPanel;
-import org.apache.chemistry.opencmis.workbench.actions.AppendContentStreamPanel;
-import org.apache.chemistry.opencmis.workbench.actions.ApplyPolicyPanel;
-import org.apache.chemistry.opencmis.workbench.actions.CancelCheckOutPanel;
-import org.apache.chemistry.opencmis.workbench.actions.CheckInPanel;
-import org.apache.chemistry.opencmis.workbench.actions.CheckOutPanel;
-import org.apache.chemistry.opencmis.workbench.actions.CopyPanel;
-import org.apache.chemistry.opencmis.workbench.actions.DeleteContentStreamPanel;
-import org.apache.chemistry.opencmis.workbench.actions.DeletePanel;
-import org.apache.chemistry.opencmis.workbench.actions.DeleteTreePanel;
-import org.apache.chemistry.opencmis.workbench.actions.MovePanel;
-import org.apache.chemistry.opencmis.workbench.actions.PropertyUpdatePanel;
-import org.apache.chemistry.opencmis.workbench.actions.RemoveObjectFromFolderPanel;
-import org.apache.chemistry.opencmis.workbench.actions.RemovePolicyPanel;
-import org.apache.chemistry.opencmis.workbench.actions.SetContentStreamPanel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-
-public class ActionsPanel extends JPanel implements ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private PropertyUpdatePanel propertyUpdatePanel;
-    private DeletePanel deletePanel;
-    private DeleteTreePanel deleteTreePanel;
-    private CopyPanel copyPanel;
-    private MovePanel movePanel;
-    private CheckOutPanel checkOutPanel;
-    private CancelCheckOutPanel cancelCheckOutPanel;
-    private CheckInPanel checkInPanel;
-    private SetContentStreamPanel setContentStreamPanel;
-    private AppendContentStreamPanel appendContentStreamPanel;
-    private DeleteContentStreamPanel deleteContentStreamPanel;
-    private AddObjectToFolderPanel addObjectToFolderPanel;
-    private RemoveObjectFromFolderPanel removeObjectFromFolderPanel;
-    private AclUpdatePanel aclUpdatePanel;
-    private ApplyPolicyPanel applyPolicyPanel;
-    private RemovePolicyPanel removePolicyPanel;
-
-    public ActionsPanel(ClientModel model) {
-        super();
-
-        this.model = model;
-        model.addObjectListener(this);
-
-        createGUI();
-    }
-
-    public void objectLoaded(ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                CmisObject object = model.getCurrentObject();
-
-                propertyUpdatePanel.setObject(object);
-                propertyUpdatePanel.setVisible(propertyUpdatePanel.isAllowed());
-
-                deletePanel.setObject(object);
-                deletePanel.setVisible(deletePanel.isAllowed());
-
-                deleteTreePanel.setObject(object);
-                deleteTreePanel.setVisible(deleteTreePanel.isAllowed());
-
-                copyPanel.setObject(object);
-                copyPanel.setVisible(copyPanel.isAllowed());
-
-                movePanel.setObject(object);
-                movePanel.setVisible(movePanel.isAllowed());
-
-                checkOutPanel.setObject(object);
-                checkOutPanel.setVisible(checkOutPanel.isAllowed());
-
-                cancelCheckOutPanel.setObject(object);
-                cancelCheckOutPanel.setVisible(cancelCheckOutPanel.isAllowed());
-
-                checkInPanel.setObject(object);
-                checkInPanel.setVisible(checkInPanel.isAllowed());
-
-                setContentStreamPanel.setObject(object);
-                setContentStreamPanel.setVisible(setContentStreamPanel.isAllowed());
-
-                appendContentStreamPanel.setObject(object);
-                appendContentStreamPanel.setVisible(appendContentStreamPanel.isAllowed());
-
-                deleteContentStreamPanel.setObject(object);
-                deleteContentStreamPanel.setVisible(deleteContentStreamPanel.isAllowed());
-
-                addObjectToFolderPanel.setObject(object);
-                addObjectToFolderPanel.setVisible(addObjectToFolderPanel.isAllowed());
-
-                removeObjectFromFolderPanel.setObject(object);
-                removeObjectFromFolderPanel.setVisible(removeObjectFromFolderPanel.isAllowed());
-
-                aclUpdatePanel.setObject(object);
-                aclUpdatePanel.setVisible(aclUpdatePanel.isAllowed());
-
-                applyPolicyPanel.setObject(object);
-                applyPolicyPanel.setVisible(applyPolicyPanel.isAllowed());
-
-                removePolicyPanel.setObject(object);
-                removePolicyPanel.setVisible(removePolicyPanel.isAllowed());
-            }
-        });
-    }
-
-    private void createGUI() {
-        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
-        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-        propertyUpdatePanel = new PropertyUpdatePanel(model);
-        add(propertyUpdatePanel);
-
-        deletePanel = new DeletePanel(model);
-        add(deletePanel);
-
-        deleteTreePanel = new DeleteTreePanel(model);
-        add(deleteTreePanel);
-
-        copyPanel = new CopyPanel(model);
-        add(copyPanel);
-
-        movePanel = new MovePanel(model);
-        add(movePanel);
-
-        checkOutPanel = new CheckOutPanel(model);
-        add(checkOutPanel);
-
-        cancelCheckOutPanel = new CancelCheckOutPanel(model);
-        add(cancelCheckOutPanel);
-
-        checkInPanel = new CheckInPanel(model);
-        add(checkInPanel);
-
-        setContentStreamPanel = new SetContentStreamPanel(model);
-        add(setContentStreamPanel);
-
-        appendContentStreamPanel = new AppendContentStreamPanel(model);
-        add(appendContentStreamPanel);
-
-        deleteContentStreamPanel = new DeleteContentStreamPanel(model);
-        add(deleteContentStreamPanel);
-
-        addObjectToFolderPanel = new AddObjectToFolderPanel(model);
-        add(addObjectToFolderPanel);
-
-        removeObjectFromFolderPanel = new RemoveObjectFromFolderPanel(model);
-        add(removeObjectFromFolderPanel);
-
-        applyPolicyPanel = new ApplyPolicyPanel(model);
-        add(applyPolicyPanel);
-
-        aclUpdatePanel = new AclUpdatePanel(model);
-        add(aclUpdatePanel);
-
-        removePolicyPanel = new RemovePolicyPanel(model);
-        add(removePolicyPanel);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.java
deleted file mode 100644
index 0c86220..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class DetailsTabs extends JTabbedPane {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private ObjectPanel objectPanel;
-    private ActionsPanel actionsPanel;
-    private PropertyTable propertyTable;
-    private RelationshipTable relationshipTable;
-    private RenditionTable renditionTable;
-    private ACLTable aclTable;
-    private PolicyTable policyTable;
-    private VersionTable versionTable;
-    private TypesPanel typesPanel;
-    private ExtensionsPanel extensionsPanel;
-
-    public DetailsTabs(ClientModel model) {
-        super(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
-
-        this.model = model;
-        createGUI();
-    }
-
-    private void createGUI() {
-        objectPanel = new ObjectPanel(model);
-        actionsPanel = new ActionsPanel(model);
-        propertyTable = new PropertyTable(model);
-        relationshipTable = new RelationshipTable(model);
-        renditionTable = new RenditionTable(model);
-        aclTable = new ACLTable(model);
-        policyTable = new PolicyTable(model);
-        versionTable = new VersionTable(model);
-        typesPanel = new TypesPanel(model);
-        extensionsPanel = new ExtensionsPanel(model);
-
-        addTab("Object", new JScrollPane(objectPanel));
-        addTab("Actions", new JScrollPane(actionsPanel));
-        addTab("Properties", new JScrollPane(propertyTable));
-        addTab("Relationships", new JScrollPane(relationshipTable));
-        addTab("Renditions", new JScrollPane(renditionTable));
-        addTab("ACL", new JScrollPane(aclTable));
-        addTab("Policies", new JScrollPane(policyTable));
-        addTab("Versions", new JScrollPane(versionTable));
-        addTab("Type", new JScrollPane(typesPanel));
-        addTab("Extensions", new JScrollPane(extensionsPanel));
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ExtensionsPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ExtensionsPanel.java
deleted file mode 100644
index e36f2ed..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ExtensionsPanel.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.awt.Color;
-import java.util.List;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.SwingUtilities;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeSelectionModel;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
-import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-
-public class ExtensionsPanel extends JPanel implements ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private JTree extensionsTree;
-
-    public ExtensionsPanel(ClientModel model) {
-        super();
-
-        this.model = model;
-        model.addObjectListener(this);
-
-        createGUI();
-    }
-
-    @Override
-    public void objectLoaded(ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                CmisObject object = model.getCurrentObject();
-
-                DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
-
-                if (object != null) {
-                    List<CmisExtensionElement> extensions;
-
-                    // object extensions
-                    extensions = object.getExtensions(ExtensionLevel.OBJECT);
-                    if (isNotEmpty(extensions)) {
-                        DefaultMutableTreeNode objectRootNode = new DefaultMutableTreeNode("Object");
-                        addExtension(objectRootNode, extensions);
-                        rootNode.add(objectRootNode);
-                    }
-
-                    // property extensions
-                    extensions = object.getExtensions(ExtensionLevel.PROPERTIES);
-                    if (isNotEmpty(extensions)) {
-                        DefaultMutableTreeNode propertiesRootNode = new DefaultMutableTreeNode("Properties");
-                        addExtension(propertiesRootNode, extensions);
-                        rootNode.add(propertiesRootNode);
-                    }
-
-                    // allowable actions extensions
-                    extensions = object.getExtensions(ExtensionLevel.ALLOWABLE_ACTIONS);
-                    if (isNotEmpty(extensions)) {
-                        DefaultMutableTreeNode allowableActionsRootNode = new DefaultMutableTreeNode(
-                                "Allowable Actions");
-                        addExtension(allowableActionsRootNode, extensions);
-                        rootNode.add(allowableActionsRootNode);
-                    }
-
-                    // ACL extensions
-                    extensions = object.getExtensions(ExtensionLevel.ACL);
-                    if (isNotEmpty(extensions)) {
-                        DefaultMutableTreeNode aclRootNode = new DefaultMutableTreeNode("ACL");
-                        addExtension(aclRootNode, extensions);
-                        rootNode.add(aclRootNode);
-                    }
-
-                    // policies extensions
-                    extensions = object.getExtensions(ExtensionLevel.POLICIES);
-                    if (isNotEmpty(extensions)) {
-                        DefaultMutableTreeNode policiesRootNode = new DefaultMutableTreeNode("Policies");
-                        addExtension(policiesRootNode, extensions);
-                        rootNode.add(policiesRootNode);
-                    }
-                }
-
-                DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
-
-                extensionsTree.setModel(treeModel);
-            }
-        });
-    }
-
-    private void addExtension(DefaultMutableTreeNode parent, List<CmisExtensionElement> extensions) {
-        if (isNullOrEmpty(extensions)) {
-            return;
-        }
-
-        for (CmisExtensionElement ext : extensions) {
-            DefaultMutableTreeNode node = new DefaultMutableTreeNode(new ExtensionNode(ext));
-            parent.add(node);
-
-            if (isNotEmpty(ext.getChildren())) {
-                addExtension(node, ext.getChildren());
-            }
-        }
-    }
-
-    private void createGUI() {
-        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
-        setBorder(BorderFactory.createEmptyBorder());
-        setBackground(Color.WHITE);
-
-        extensionsTree = new JTree();
-        extensionsTree.setRootVisible(false);
-        extensionsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-        extensionsTree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-        extensionsTree.setModel(new DefaultTreeModel(null));
-
-        JScrollPane pane = new JScrollPane(extensionsTree);
-        pane.setBorder(BorderFactory.createEmptyBorder());
-
-        add(pane);
-    }
-
-    static class ExtensionNode {
-        private final CmisExtensionElement extension;
-
-        public ExtensionNode(CmisExtensionElement extension) {
-            this.extension = extension;
-        }
-
-        @Override
-        public String toString() {
-            return (extension.getNamespace() == null ? "" : "{" + extension.getNamespace() + "}") + extension.getName()
-                    + (!extension.getAttributes().isEmpty() ? " " + extension.getAttributes() : "")
-                    + (extension.getChildren().isEmpty() ? ": " + extension.getValue() : "");
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
deleted file mode 100644
index b923583..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-import groovy.ui.Console;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import javax.script.ScriptEngineFactory;
-import javax.script.ScriptEngineManager;
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.SecondaryType;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.tck.CmisTestGroup;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.checks.ObjectComplianceTestGroup;
-import org.apache.chemistry.opencmis.workbench.checks.SwingReport;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-import org.apache.chemistry.opencmis.workbench.swing.InfoPanel;
-
-public class ObjectPanel extends InfoPanel implements ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Set<String> scriptExtensions;
-
-    private JTextField nameField;
-    private JTextField idField;
-    private JTextField typeField;
-    private JTextField basetypeField;
-    private InfoList secondaryTypesList;
-    private JTextField versionLabelField;
-    private JTextField pwcField;
-    private JTextField contentUrlField;
-    private InfoList pathsList;
-    private InfoList allowableActionsList;
-    private JTextField aclExactField;
-    private JPanel buttonPanel;
-    private JButton refreshButton;
-    private JButton checkButton;
-    private JPanel scriptPanel;
-    private JButton scriptOpenButton;
-    private JButton scriptRunButton;
-    private JTextArea scriptOutput;
-    private JTextAreaWriter scriptOutputWriter;
-
-    public ObjectPanel(ClientModel model) {
-        super(model);
-
-        model.addObjectListener(this);
-
-        // get all installed script engines
-        scriptExtensions = new HashSet<String>();
-        ScriptEngineManager mgr = new ScriptEngineManager();
-        for (ScriptEngineFactory sef : mgr.getEngineFactories()) {
-            scriptExtensions.addAll(sef.getExtensions());
-        }
-
-        createGUI();
-    }
-
-    public void objectLoaded(ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                CmisObject object = getClientModel().getCurrentObject();
-
-                if (object == null) {
-                    nameField.setText("");
-                    idField.setText("");
-                    typeField.setText("");
-                    basetypeField.setText("");
-                    secondaryTypesList.removeAll();
-                    versionLabelField.setText("");
-                    pwcField.setText("");
-                    pathsList.removeAll();
-                    contentUrlField.setText("");
-                    allowableActionsList.removeAll();
-                    aclExactField.setText("");
-                    refreshButton.setEnabled(false);
-                    checkButton.setEnabled(false);
-                    scriptPanel.setVisible(false);
-                } else {
-                    try {
-                        nameField.setText(object.getName());
-                        idField.setText(object.getId());
-                        typeField.setText(object.getType().getId());
-                        basetypeField.setText(object.getBaseTypeId().toString());
-
-                        if (object.getSecondaryTypes() != null) {
-                            List<String> secTypeIds = new ArrayList<String>();
-                            for (SecondaryType type : object.getSecondaryTypes()) {
-                                secTypeIds.add(type.getId());
-                            }
-                            secondaryTypesList.setList(secTypeIds);
-                        } else {
-                            secondaryTypesList.removeAll();
-                        }
-
-                        if (object instanceof Document) {
-                            Document doc = (Document) object;
-
-                            try {
-                                versionLabelField.setText(doc.getVersionLabel());
-                            } catch (Exception e) {
-                                versionLabelField.setText("???");
-                            }
-
-                            if (doc.isVersionSeriesCheckedOut() == null) {
-                                pwcField.setText("");
-                            } else if (doc.isVersionSeriesCheckedOut().booleanValue()) {
-                                pwcField.setText(doc.getVersionSeriesCheckedOutId());
-                            } else {
-                                pwcField.setText("(not checked out)");
-                            }
-                        } else {
-                            pwcField.setText("");
-                            versionLabelField.setText("");
-                        }
-
-                        if (object instanceof FileableCmisObject) {
-                            if (object instanceof Folder) {
-                                pathsList.setList(Collections.singletonList(((Folder) object).getPath()));
-                            } else {
-                                pathsList.setList(Collections.singletonList(""));
-                                final FileableCmisObject pathObject = (FileableCmisObject) object;
-                                SwingUtilities.invokeLater(new Runnable() {
-                                    @Override
-                                    public void run() {
-                                        try {
-                                            List<String> paths = pathObject.getPaths();
-                                            if (isNullOrEmpty(paths)) {
-                                                pathsList.setList(Collections.singletonList("(unfiled)"));
-                                            } else {
-                                                pathsList.setList(paths);
-                                            }
-                                        } catch (Exception e) {
-                                            pathsList.setList(Collections.singletonList("(???)"));
-                                            // ClientHelper.showError(null, e);
-                                        }
-                                        ObjectPanel.this.revalidate();
-                                    }
-                                });
-                            }
-                        } else {
-                            pathsList.setList(Collections.singletonList("(not filable)"));
-                        }
-
-                        String docUrl = getDocumentURL(object, getClientModel().getClientSession().getSession());
-                        if (docUrl != null) {
-                            contentUrlField.setText(docUrl);
-                        } else {
-                            contentUrlField.setText("(not available)");
-                        }
-
-                        if (object.getAllowableActions() != null) {
-                            allowableActionsList.setList(object.getAllowableActions().getAllowableActions());
-                        } else {
-                            allowableActionsList.setList(Collections.singletonList("(missing)"));
-                        }
-
-                        if (object.getAcl() == null) {
-                            aclExactField.setText("(no ACL)");
-                        } else {
-                            if (object.getAcl().isExact() == null) {
-                                aclExactField.setText("exact flag not set");
-                            } else if (object.getAcl().isExact().booleanValue()) {
-                                aclExactField.setText("is exact");
-                            } else {
-                                aclExactField.setText("is not exact");
-                            }
-                        }
-
-                        refreshButton.setEnabled(true);
-                        checkButton.setEnabled(true);
-
-                        if (object instanceof Document) {
-                            String name = object.getName().toLowerCase(Locale.ENGLISH);
-                            int x = name.lastIndexOf('.');
-                            if ((x > -1) && (scriptExtensions.contains(name.substring(x + 1)))) {
-                                scriptPanel.setVisible(true);
-                                scriptOutput.setVisible(false);
-                            } else {
-                                scriptPanel.setVisible(false);
-                            }
-                        }
-                    } catch (Exception e) {
-                        ClientHelper.showError(ObjectPanel.this, e);
-                    }
-                }
-
-                revalidate();
-            }
-        });
-    }
-
-    private void createGUI() {
-        setupGUI();
-
-        nameField = addLine("Name:", true);
-        idField = addId("Id:");
-        typeField = addLine("Type:");
-        basetypeField = addLine("Base Type:");
-        secondaryTypesList = addComponent("Secondary Types:", new InfoList());
-        pathsList = addComponent("Paths:", new InfoList());
-        versionLabelField = addLine("Version Label:");
-        pwcField = addId("PWC:");
-        contentUrlField = addLink("Content URL:");
-        allowableActionsList = addComponent("Allowable Actions:", new InfoList());
-        aclExactField = addLine("ACL:");
-
-        buttonPanel = addComponent("", new JPanel(new BorderLayout()));
-        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
-        buttonPanel.setOpaque(false);
-
-        refreshButton = new JButton("Refresh");
-        refreshButton.setEnabled(false);
-        buttonPanel.add(refreshButton);
-        checkButton = new JButton("Check specification compliance");
-        checkButton.setEnabled(false);
-        buttonPanel.add(checkButton);
-
-        scriptPanel = addComponent("", new JPanel(new BorderLayout()));
-        scriptPanel.setOpaque(false);
-        scriptPanel.setVisible(false);
-
-        JPanel scriptButtonPanel = new JPanel();
-        scriptButtonPanel.setLayout(new BoxLayout(scriptButtonPanel, BoxLayout.LINE_AXIS));
-        scriptButtonPanel.setOpaque(false);
-        scriptPanel.add(scriptButtonPanel, BorderLayout.PAGE_START);
-        scriptOpenButton = new JButton("Open Script");
-        scriptButtonPanel.add(scriptOpenButton);
-        scriptRunButton = new JButton("Run Script");
-        scriptButtonPanel.add(scriptRunButton);
-
-        scriptOutput = new JTextArea(null, 1, 80);
-        scriptOutput.setEditable(false);
-        scriptOutput.setFont(Font.decode("Monospaced"));
-        scriptOutput.setBorder(BorderFactory.createTitledBorder(""));
-        scriptOutputWriter = new JTextAreaWriter(scriptOutput);
-        scriptPanel.add(scriptOutput, BorderLayout.CENTER);
-
-        refreshButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    getClientModel().reloadObject();
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-
-        checkButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                    Map<String, String> parameters = new HashMap<String, String>(getClientModel().getClientSession()
-                            .getSessionParameters());
-                    parameters.put(SessionParameter.REPOSITORY_ID, getClientModel().getRepositoryInfo().getId());
-                    String objectId = getClientModel().getCurrentObject().getId();
-
-                    ObjectComplianceTestGroup octg = new ObjectComplianceTestGroup(parameters, objectId);
-                    octg.run();
-
-                    List<CmisTestGroup> groups = new ArrayList<CmisTestGroup>();
-                    groups.add(octg);
-                    SwingReport report = new SwingReport(null, 700, 500);
-                    report.createReport(parameters, groups, (Writer) null);
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-
-        scriptOpenButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    Document doc = (Document) getClientModel().getCurrentObject();
-
-                    String name = doc.getName().toLowerCase(Locale.ENGLISH);
-                    if (name.endsWith(".groovy")) {
-                        File file = ClientHelper.createTempFileFromDocument(doc, null);
-                        Console console = ClientHelper.openConsole(ObjectPanel.this, getClientModel(), null);
-                        if (console != null) {
-                            console.loadScriptFile(file);
-                        }
-                    } else {
-                        ClientHelper.open(ObjectPanel.this, doc, null);
-                    }
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-
-        scriptRunButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                    Document doc = (Document) getClientModel().getCurrentObject();
-                    File file = ClientHelper.createTempFileFromDocument(doc, null);
-                    String name = doc.getName().toLowerCase(Locale.ENGLISH);
-                    String ext = name.substring(name.lastIndexOf('.') + 1);
-
-                    scriptOutput.setText("");
-                    scriptOutput.setVisible(true);
-                    scriptOutput.invalidate();
-
-                    ClientHelper.runJSR223Script(ObjectPanel.this, getClientModel(), file, ext, scriptOutputWriter);
-                } catch (Exception ex) {
-                    ClientHelper.showError(null, ex);
-                } finally {
-                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                }
-            }
-        });
-
-    }
-
-    private String getDocumentURL(final CmisObject document, final Session session) {
-        if (!(document instanceof Document)) {
-            return null;
-        }
-
-        if (session.getBinding().getObjectService() instanceof LinkAccess) {
-            return ((LinkAccess) session.getBinding().getObjectService()).loadContentLink(session.getRepositoryInfo()
-                    .getId(), document.getId());
-        }
-
-        return null;
-    }
-
-    private static class JTextAreaWriter extends Writer {
-        private final JTextArea textArea;
-
-        public JTextAreaWriter(JTextArea textArea) {
-            this.textArea = textArea;
-        }
-
-        @Override
-        public void write(final char[] cbuf, final int off, final int len) throws IOException {
-            final String s = new String(cbuf, off, len);
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    textArea.append(s);
-                }
-            });
-        }
-
-        @Override
-        public void flush() throws IOException {
-        }
-
-        @Override
-        public void close() throws IOException {
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java
deleted file mode 100644
index 6139e5d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.event.MouseEvent;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class PolicyTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Name", "Id" };
-    private static final int[] COLUMN_WIDTHS = { 200, 400 };
-
-    public PolicyTable(ClientModel model) {
-        super();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
-        if (getColumnClass(colIndex) != ObjectId.class) {
-            return;
-        }
-
-        try {
-            getClientModel().loadObject(
-                    getObject().getPolicies().get(getRowSorter().convertRowIndexToModel(rowIndex)).getId());
-            setTab(0);
-        } catch (Exception ex) {
-            ClientHelper.showError(this, ex);
-        }
-    }
-
-    public int getDetailRowCount() {
-        if (getObject().getPolicies() == null) {
-            return 0;
-        }
-
-        return getObject().getPolicies().size();
-    }
-
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Policy policy = getObject().getPolicies().get(rowIndex);
-
-        switch (columnIndex) {
-        case 0:
-            return policy.getName();
-        case 1:
-            return policy;
-        default:
-        }
-
-        return null;
-    }
-
-    @Override
-    public Class<?> getDetailColumClass(int columnIndex) {
-        if (columnIndex == 1) {
-            return ObjectId.class;
-        }
-
-        return super.getDetailColumClass(columnIndex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java
deleted file mode 100644
index cc2438f..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.event.MouseEvent;
-import java.util.Collection;
-
-import org.apache.chemistry.opencmis.client.api.Property;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.workbench.PropertyEditorFrame;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class PropertyTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Name", "Id", "Type", "Value" };
-    private static final int[] COLUMN_WIDTHS = { 200, 200, 80, 300 };
-
-    public PropertyTable(ClientModel model) {
-        super();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void doubleClickAction(MouseEvent e, int rowIndex) {
-        if (getObject().hasAllowableAction(Action.CAN_UPDATE_PROPERTIES)) {
-            new PropertyEditorFrame(getClientModel(), getObject());
-        }
-    }
-
-    public int getDetailRowCount() {
-        return getObject().getProperties().size();
-    }
-
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Property<?> property = getObject().getProperties().get(rowIndex);
-
-        switch (columnIndex) {
-        case 0:
-            return property.getDefinition().getDisplayName();
-        case 1:
-            return property.getId();
-        case 2:
-            return property.getDefinition().getPropertyType().value();
-        case 3:
-            return property.getValues();
-        default:
-        }
-
-        return null;
-    }
-
-    @Override
-    public Class<?> getDetailColumClass(int columnIndex) {
-        if (columnIndex == 3) {
-            return Collection.class;
-        }
-
-        return super.getDetailColumClass(columnIndex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java
deleted file mode 100644
index ebd48ff..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.event.MouseEvent;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.Relationship;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class RelationshipTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Name", "Type", "Relationship Id", "Source", "Target" };
-    private static final int[] COLUMN_WIDTHS = { 200, 200, 200, 200, 200 };
-
-    public RelationshipTable(ClientModel model) {
-        super();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
-        if (getColumnClass(colIndex) != ObjectId.class) {
-            return;
-        }
-
-        ObjectId id = (ObjectId) getValueAt(rowIndex, colIndex);
-        if ((id == null) || (id.getId() == null)) {
-            return;
-        }
-
-        try {
-            getClientModel().loadObject(id.getId());
-            setTab(0);
-        } catch (Exception ex) {
-            ClientHelper.showError(this, ex);
-        }
-    }
-
-    @Override
-    public int getDetailRowCount() {
-        if (getObject().getRelationships() == null) {
-            return 0;
-        }
-
-        return getObject().getRelationships().size();
-    }
-
-    @Override
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Relationship relationship = getObject().getRelationships().get(rowIndex);
-
-        switch (columnIndex) {
-        case 0:
-            return relationship.getName();
-        case 1:
-            return relationship.getType().getId();
-        case 2:
-            return relationship;
-        case 3:
-            return relationship.getSourceId();
-        case 4:
-            return relationship.getTarget();
-        default:
-        }
-
-        return null;
-    }
-
-    @Override
-    public Class<?> getDetailColumClass(int columnIndex) {
-        if ((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
-            return ObjectId.class;
-        }
-
-        return super.getDetailColumClass(columnIndex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RenditionTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RenditionTable.java
deleted file mode 100644
index 25acc48..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RenditionTable.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.event.MouseEvent;
-
-import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public class RenditionTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Title", "Kind", "MIME Type", "Size", "Stream Id" };
-    private static final int[] COLUMN_WIDTHS = { 200, 200, 80, 80, 200 };
-
-    public RenditionTable(ClientModel model) {
-        super();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void doubleClickAction(MouseEvent e, int rowIndex) {
-        String streamId = getObject().getRenditions().get(getRowSorter().convertRowIndexToModel(rowIndex))
-                .getStreamId();
-
-        if (e.isShiftDown()) {
-            ClientHelper.download(this.getParent(), getObject(), streamId);
-        } else {
-            ClientHelper.open(this.getParent(), getObject(), streamId);
-        }
-    }
-
-    @Override
-    public int getDetailRowCount() {
-        if (getObject().getRenditions() == null) {
-            return 0;
-        }
-
-        return getObject().getRenditions().size();
-    }
-
-    @Override
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Rendition rendition = getObject().getRenditions().get(rowIndex);
-
-        switch (columnIndex) {
-        case 0:
-            return rendition.getTitle();
-        case 1:
-            return rendition.getKind();
-        case 2:
-            return rendition.getMimeType();
-        case 3:
-            return rendition.getLength();
-        case 4:
-            return rendition.getStreamId();
-        default:
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/TypesPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/TypesPanel.java
deleted file mode 100644
index b5ea379..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/TypesPanel.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import javax.swing.SwingUtilities;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.workbench.TypeSplitPane;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
-
-public class TypesPanel extends TypeSplitPane implements ObjectListener {
-
-    private static final long serialVersionUID = 1L;
-
-    public TypesPanel(ClientModel model) {
-        super(model);
-        model.addObjectListener(this);
-    }
-
-    @Override
-    public void objectLoaded(ClientModelEvent event) {
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                CmisObject object = getClientModel().getCurrentObject();
-
-                if (object == null) {
-                    setType(null);
-                } else {
-                    setType(object.getType());
-                }
-            }
-        });
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java
deleted file mode 100644
index 9ae2e84..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.details;
-
-import java.awt.Cursor;
-import java.awt.event.MouseEvent;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import javax.swing.SwingUtilities;
-
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.commons.enums.Action;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
-
-public class VersionTable extends AbstractDetailsTable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String[] COLUMN_NAMES = { "Name", "Label", "Latest", "Major", "Latest Major", "Id",
-            "Filename", "MIME Type", "Length" };
-    private static final int[] COLUMN_WIDTHS = { 200, 200, 50, 50, 50, 400, 200, 100, 100 };
-
-    private List<Document> versions;
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    public VersionTable(ClientModel model) {
-        super();
-
-        versions = Collections.emptyList();
-        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-    }
-
-    @Override
-    public void objectLoaded(ClientModelEvent event) {
-        lock.writeLock().lock();
-        try {
-            versions = Collections.emptyList();
-        } finally {
-            lock.writeLock().unlock();
-        }
-
-        if (getObject() instanceof Document) {
-            final Document doc = (Document) getObject();
-
-            boolean fetchVersions = (getObject().getAllowableActions() == null)
-                    || (getObject().getAllowableActions().getAllowableActions() == null)
-                    || doc.hasAllowableAction(Action.CAN_GET_ALL_VERSIONS);
-            
-            if (fetchVersions) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-                            List<Document> newVersions = doc.getAllVersions(getClientModel().getClientSession()
-                                    .getVersionOperationContext());
-
-                            lock.writeLock().lock();
-                            try {
-                                versions = newVersions;
-                            } finally {
-                                lock.writeLock().unlock();
-                            }
-                        } catch (Exception ex) {
-                            if (!(ex instanceof CmisNotSupportedException)) {
-                                ClientHelper.showError(null, ex);
-                            }
-                        } finally {
-                            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                        }
-                        ((DetailsTableModel) getModel()).fireTableDataChanged();
-                    }
-                });
-            }
-        }
-
-        super.objectLoaded(event);
-    }
-
-    @Override
-    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
-        if (getColumnClass(colIndex) != ObjectId.class) {
-            return;
-        }
-
-        String versionId = null;
-        lock.readLock().lock();
-        try {
-            versionId = versions.get(getRowSorter().convertRowIndexToModel(rowIndex)).getId();
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        try {
-            getClientModel().loadObject(versionId);
-            setTab(0);
-        } catch (Exception ex) {
-            ClientHelper.showError(this, ex);
-        }
-    }
-
-    @Override
-    public void doubleClickAction(MouseEvent e, int rowIndex) {
-        lock.readLock().lock();
-        try {
-            if (e.isShiftDown()) {
-                ClientHelper.download(this.getParent(), versions.get(getRowSorter().convertRowIndexToModel(rowIndex)),
-                        null);
-            } else {
-                ClientHelper
-                        .open(this.getParent(), versions.get(getRowSorter().convertRowIndexToModel(rowIndex)), null);
-            }
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    @Override
-    public int getDetailRowCount() {
-        if (!(getObject() instanceof Document)) {
-            return 0;
-        }
-
-        lock.readLock().lock();
-        try {
-            return versions.size();
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    @Override
-    public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Document version = null;
-
-        lock.readLock().lock();
-        try {
-            version = versions.get(rowIndex);
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        switch (columnIndex) {
-        case 0:
-            return version.getName();
-        case 1:
-            return version.getVersionLabel();
-        case 2:
-            return version.isLatestVersion();
-        case 3:
-            return version.isMajorVersion();
-        case 4:
-            return version.isLatestMajorVersion();
-        case 5:
-            return version;
-        case 6:
-            return version.getContentStreamFileName();
-        case 7:
-            return version.getContentStreamMimeType();
-        case 8:
-            return version.getContentStreamLength() == -1 ? null : version.getContentStreamLength();
-        default:
-        }
-
-        return null;
-    }
-
-    @Override
-    public Class<?> getDetailColumClass(int columnIndex) {
-        if ((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
-            return Boolean.class;
-        } else if (columnIndex == 5) {
-            return ObjectId.class;
-        } else if (columnIndex == 8) {
-            return Long.class;
-        }
-
-        return super.getDetailColumClass(columnIndex);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
deleted file mode 100644
index 4a5c41b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNotEmpty;
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.isNullOrEmpty;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.event.EventListenerList;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.impl.IOUtils;
-import org.apache.chemistry.opencmis.commons.impl.MimeTypes;
-import org.apache.chemistry.opencmis.workbench.LoggingInputStream;
-import org.apache.chemistry.opencmis.workbench.RandomInputStream;
-
-public class ClientModel {
-
-    // object details must not be older than 60 seconds
-    private static final long OLD = 60 * 1000;
-
-    private ClientSession clientSession;
-
-    private Folder currentFolder = null;
-    private List<CmisObject> currentChildren = Collections.emptyList();
-    private CmisObject currentObject = null;
-
-    private final EventListenerList listenerList = new EventListenerList();
-
-    public ClientModel() {
-    }
-
-    public void addFolderListener(FolderListener listener) {
-        listenerList.add(FolderListener.class, listener);
-    }
-
-    public void removeFolderListener(FolderListener listener) {
-        listenerList.remove(FolderListener.class, listener);
-    }
-
-    public void addObjectListener(ObjectListener listener) {
-        listenerList.add(ObjectListener.class, listener);
-    }
-
-    public void removeObjectListener(ObjectListener listener) {
-        listenerList.remove(ObjectListener.class, listener);
-    }
-
-    public synchronized void setClientSession(ClientSession clientSession) {
-        this.clientSession = clientSession;
-    }
-
-    public synchronized ClientSession getClientSession() {
-        return clientSession;
-    }
-
-    public synchronized RepositoryInfo getRepositoryInfo() {
-        Session session = clientSession.getSession();
-        return session.getRepositoryInfo();
-    }
-
-    public synchronized String getRepositoryName() {
-        try {
-            return getRepositoryInfo().getName();
-        } catch (Exception e) {
-            return "?";
-        }
-    }
-
-    public synchronized boolean supportsQuery() {
-        try {
-            RepositoryCapabilities cap = getRepositoryInfo().getCapabilities();
-            if (cap == null) {
-                return true;
-            }
-
-            return (cap.getQueryCapability() != null) && (cap.getQueryCapability() != CapabilityQuery.NONE);
-        } catch (Exception e) {
-            return false;
-        }
-    }
-
-    public synchronized boolean supportsChangeLog() {
-        try {
-            RepositoryCapabilities cap = getRepositoryInfo().getCapabilities();
-            if (cap == null) {
-                return true;
-            }
-
-            return (cap.getChangesCapability() != null) && (cap.getChangesCapability() != CapabilityChanges.NONE);
-        } catch (Exception e) {
-            return false;
-        }
-    }
-
-    public synchronized boolean supportsItems() {
-        for (ObjectType type : clientSession.getSession().getTypeChildren(null, false)) {
-            if (type.getBaseTypeId() == BaseTypeId.CMIS_ITEM) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public synchronized boolean supportsRelationships() {
-        for (ObjectType type : clientSession.getSession().getTypeChildren(null, false)) {
-            if (type.getBaseTypeId() == BaseTypeId.CMIS_RELATIONSHIP) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public synchronized ObjectId loadFolder(String folderId, boolean byPath) {
-        try {
-            Session session = clientSession.getSession();
-            CmisObject selectedObject = null;
-            CmisObject folderObject = null;
-
-            if (byPath) {
-                selectedObject = session.getObjectByPath(folderId);
-            } else {
-                selectedObject = session.getObject(folderId);
-            }
-
-            if (selectedObject instanceof Folder) {
-                folderObject = selectedObject;
-            } else {
-                if (selectedObject instanceof FileableCmisObject) {
-                    List<Folder> parents = ((FileableCmisObject) selectedObject).getParents();
-                    if (isNotEmpty(parents)) {
-                        folderObject = parents.get(0);
-                    } else {
-                        setCurrentFolder(null, new ArrayList<CmisObject>(0));
-                        return selectedObject;
-                    }
-                } else {
-                    setCurrentFolder(null, new ArrayList<CmisObject>(0));
-                    return selectedObject;
-                }
-            }
-
-            List<CmisObject> children = new ArrayList<CmisObject>();
-
-            if (clientSession.getMaxChildren() != 0) {
-                // if maxChildren == 0 don't call getChildren()
-                ItemIterable<CmisObject> iter = ((Folder) folderObject).getChildren(clientSession
-                        .getFolderOperationContext());
-
-                if (clientSession.getMaxChildren() > 0) {
-                    // if maxChildren > 0 restrict number of children
-                    // otherwise load all
-                    iter = iter.getPage(clientSession.getMaxChildren());
-                }
-
-                for (CmisObject child : iter) {
-                    children.add(child);
-                }
-            }
-
-            setCurrentFolder((Folder) folderObject, children);
-
-            return selectedObject;
-        } catch (CmisBaseException ex) {
-            setCurrentFolder(null, new ArrayList<CmisObject>(0));
-            throw ex;
-        }
-    }
-
-    public synchronized void reloadFolder() {
-        if (currentFolder != null) {
-            loadFolder(currentFolder.getId(), false);
-        }
-    }
-
-    public synchronized void loadObject(String objectId) {
-        try {
-            Session session = clientSession.getSession();
-            CmisObject object = session.getObject(objectId, clientSession.getObjectOperationContext());
-            object.refreshIfOld(OLD);
-
-            setCurrentObject(object);
-        } catch (CmisBaseException ex) {
-            setCurrentObject(null);
-            throw ex;
-        }
-    }
-
-    public synchronized void reloadObject() {
-        if (currentObject == null) {
-            return;
-        }
-
-        try {
-            Session session = clientSession.getSession();
-            CmisObject object = session.getObject(currentObject, clientSession.getObjectOperationContext());
-            object.refresh();
-
-            setCurrentObject(object);
-        } catch (CmisBaseException ex) {
-            setCurrentObject(null);
-            throw ex;
-        }
-    }
-
-    public synchronized ItemIterable<QueryResult> query(String q, boolean searchAllVersions, int maxHits) {
-        OperationContext queryContext = new OperationContextImpl(null, false, false, false, IncludeRelationships.NONE,
-                null, false, null, false, maxHits > 0 ? maxHits : 1);
-
-        Session session = clientSession.getSession();
-        return session.query(q, searchAllVersions, queryContext);
-    }
-
-    public synchronized List<Tree<ObjectType>> getTypeDescendants() {
-        Session session = clientSession.getSession();
-        return session.getTypeDescendants(null, -1, true);
-    }
-
-    public ContentStream createContentStream(String filename) throws FileNotFoundException {
-        ContentStream content = null;
-        if ((filename != null) && (filename.length() > 0)) {
-            File file = new File(filename);
-            InputStream stream = new LoggingInputStream(new BufferedInputStream(new FileInputStream(file), 512 * 1024),
-                    file.getName());
-
-            content = clientSession.getSession().getObjectFactory()
-                    .createContentStream(file.getName(), file.length(), MimeTypes.getMIMEType(file), stream);
-        }
-
-        return content;
-    }
-
-    public synchronized ObjectId createDocument(String name, String type, String filename,
-            Map<String, Object> additionalProperties, VersioningState versioningState, boolean unfiled)
-            throws FileNotFoundException {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-
-        if (additionalProperties != null) {
-            properties.putAll(additionalProperties);
-        }
-
-        ContentStream content = createContentStream(filename);
-
-        try {
-            return clientSession.getSession().createDocument(properties, (unfiled ? null : currentFolder), content,
-                    versioningState, null, null, null);
-        } finally {
-            IOUtils.closeQuietly(content);
-        }
-    }
-
-    public ContentStream createContentStream(String name, long length, long seed) {
-        return clientSession
-                .getSession()
-                .getObjectFactory()
-                .createContentStream(name, length, "application/octet-stream",
-                        new LoggingInputStream(new RandomInputStream(length, seed), name + " (random)"));
-    }
-
-    public synchronized ObjectId createDocument(String name, String type, Map<String, Object> additionalProperties,
-            long length, long seed, VersioningState versioningState, boolean unfiled) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-
-        if (additionalProperties != null) {
-            properties.putAll(additionalProperties);
-        }
-
-        ContentStream content = createContentStream(name, length, seed);
-        try {
-            return clientSession.getSession().createDocument(properties, (unfiled ? null : currentFolder), content,
-                    versioningState, null, null, null);
-        } finally {
-            IOUtils.closeQuietly(content);
-        }
-    }
-
-    public synchronized ObjectId createItem(String name, String type, Map<String, Object> additionalProperties) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-
-        if (additionalProperties != null) {
-            properties.putAll(additionalProperties);
-        }
-
-        return clientSession.getSession().createItem(properties, currentFolder, null, null, null);
-    }
-
-    public synchronized ObjectId createFolder(String name, String type, Map<String, Object> additionalProperties) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-
-        if (additionalProperties != null) {
-            properties.putAll(additionalProperties);
-        }
-
-        return clientSession.getSession().createFolder(properties, currentFolder, null, null, null);
-    }
-
-    public synchronized ObjectId createRelationship(String name, String type, String sourceId, String targetId,
-            Map<String, Object> additionalProperties) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.put(PropertyIds.NAME, name);
-        properties.put(PropertyIds.OBJECT_TYPE_ID, type);
-        properties.put(PropertyIds.SOURCE_ID, sourceId);
-        properties.put(PropertyIds.TARGET_ID, targetId);
-
-        if (additionalProperties != null) {
-            properties.putAll(additionalProperties);
-        }
-
-        return clientSession.getSession().createRelationship(properties, null, null, null);
-    }
-
-    public synchronized List<ObjectType> getTypesAsList(String rootTypeId, boolean creatableOnly) {
-        List<ObjectType> result = new ArrayList<ObjectType>();
-
-        ObjectType rootType = null;
-        try {
-            rootType = clientSession.getSession().getTypeDefinition(rootTypeId);
-        } catch (CmisBaseException e) {
-            return result;
-        }
-
-        List<Tree<ObjectType>> types = clientSession.getSession().getTypeDescendants(rootTypeId, -1, true);
-        addType(types, result, creatableOnly);
-
-        if (creatableOnly) {
-            boolean isCreatable = (rootType.isCreatable() == null ? true : rootType.isCreatable().booleanValue());
-            if (isCreatable) {
-                result.add(rootType);
-            }
-        } else {
-            result.add(rootType);
-        }
-
-        Collections.sort(result, new Comparator<ObjectType>() {
-            public int compare(ObjectType ot1, ObjectType ot2) {
-                return ot1.getDisplayName().compareTo(ot2.getDisplayName());
-            }
-        });
-
-        return result;
-    }
-
-    private void addType(List<Tree<ObjectType>> types, List<ObjectType> resultList, boolean creatableOnly) {
-        assert types != null;
-        assert resultList != null;
-
-        for (Tree<ObjectType> tt : types) {
-            if (tt.getItem() != null) {
-                if (creatableOnly) {
-                    boolean isCreatable = (tt.getItem().isCreatable() == null ? true : tt.getItem().isCreatable()
-                            .booleanValue());
-                    if (isCreatable) {
-                        resultList.add(tt.getItem());
-                    }
-                } else {
-                    resultList.add(tt.getItem());
-                }
-
-                addType(tt.getChildren(), resultList, creatableOnly);
-            }
-        }
-    }
-
-    public synchronized Folder getCurrentFolder() {
-        return currentFolder;
-    }
-
-    public synchronized List<CmisObject> getCurrentChildren() {
-        return currentChildren;
-    }
-
-    public synchronized CmisObject getFromCurrentChildren(String id) {
-        if (isNullOrEmpty(currentChildren)) {
-            return null;
-        }
-
-        for (CmisObject o : currentChildren) {
-            if (o.getId().equals(id)) {
-                return o;
-            }
-        }
-
-        return null;
-    }
-
-    private synchronized void setCurrentFolder(Folder folder, List<CmisObject> children) {
-        currentFolder = folder;
-        currentChildren = children;
-
-        for (FolderListener fl : listenerList.getListeners(FolderListener.class)) {
-            fl.folderLoaded(new ClientModelEvent(this));
-        }
-    }
-
-    public synchronized CmisObject getCurrentObject() {
-        return currentObject;
-    }
-
-    private synchronized void setCurrentObject(CmisObject object) {
-        currentObject = object;
-
-        for (ObjectListener ol : listenerList.getListeners(ObjectListener.class)) {
-            ol.objectLoaded(new ClientModelEvent(this));
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModelEvent.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModelEvent.java
deleted file mode 100644
index d1dadc8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModelEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import java.util.EventObject;
-
-public class ClientModelEvent extends EventObject {
-
-    private static final long serialVersionUID = 1L;
-
-    public ClientModelEvent(Object source) {
-        super(source);
-    }
-
-    public ClientModel getClientModel() {
-        if (getSource() instanceof ClientModel) {
-            return (ClientModel) getSource();
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientOperationContext.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientOperationContext.java
deleted file mode 100644
index 39b2176..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientOperationContext.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-
-public final class ClientOperationContext extends OperationContextImpl {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final String FILTER = "filter";
-    public static final String INCLUDE_ACLS = "includeAcls";
-    public static final String INCLUDE_ALLOWABLE_ACTIONS = "includeAllowableActions";
-    public static final String INCLUDE_POLICIES = "includePolicies";
-    public static final String INCLUDE_RELATIONSHIPS = "includeRelationships";
-    public static final String RENDITION_FILTER = "renditionFilter";
-    public static final String ORDER_BY = "orderBy";
-    public static final String MAX_ITEMS_PER_PAGE = "maxItemsPerPage";
-
-    public ClientOperationContext(String prefix, Map<String, String> map) {
-        loadContext(prefix, map);
-        setIncludePathSegments(false);
-        setCacheEnabled(true);
-    }
-
-    public void loadContext(String prefix, Map<String, String> map) {
-        setFilterString(map.get(prefix + FILTER));
-        setIncludeAcls(parseBoolean(map.get(prefix + INCLUDE_ACLS), false));
-        setIncludeAllowableActions(parseBoolean(map.get(prefix + INCLUDE_ALLOWABLE_ACTIONS), false));
-        setIncludePolicies(parseBoolean(map.get(prefix + INCLUDE_POLICIES), false));
-        setIncludeRelationships(parseIncludeRelationships(map.get(prefix + INCLUDE_RELATIONSHIPS),
-                IncludeRelationships.NONE));
-        setRenditionFilterString(map.get(prefix + RENDITION_FILTER));
-        setOrderBy(map.get(prefix + ORDER_BY));
-        setMaxItemsPerPage(parseInteger(map.get(prefix + MAX_ITEMS_PER_PAGE), 1000));
-    }
-
-    private boolean parseBoolean(String s, boolean defaultValue) {
-        return (s == null ? defaultValue : Boolean.parseBoolean(s));
-    }
-
-    private IncludeRelationships parseIncludeRelationships(String s, IncludeRelationships defaultValue) {
-        if (s == null) {
-            return defaultValue;
-        }
-
-        try {
-            return IncludeRelationships.fromValue(s);
-        } catch (Exception e) {
-            return defaultValue;
-        }
-    }
-
-    private int parseInteger(String s, int defaultValue) {
-        if (s == null) {
-            return defaultValue;
-        }
-
-        try {
-            return Integer.parseInt(s);
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java
deleted file mode 100644
index 5e7ff2b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import java.net.Authenticator;
-import java.security.cert.X509Certificate;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-import org.apache.chemistry.opencmis.client.SessionParameterMap;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.BindingType;
-import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ClientSession {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ClientSession.class);
-
-    public static final String WORKBENCH_PREFIX = "cmis.workbench.";
-    public static final String OBJECT_PREFIX = WORKBENCH_PREFIX + "object.";
-    public static final String FOLDER_PREFIX = WORKBENCH_PREFIX + "folder.";
-    public static final String VERSION_PREFIX = WORKBENCH_PREFIX + "version.";
-    public static final String ACCEPT_SELF_SIGNED_CERTIFICATES = WORKBENCH_PREFIX + "acceptSelfSignedCertificates";
-    public static final String MAX_FOLDER_CHILDREN = FOLDER_PREFIX + "maxChildren";
-
-    public enum Authentication {
-        NONE, STANDARD, NTLM, OAUTH_BEARER
-    }
-
-    private static final Set<String> FOLDER_PROPERTY_SET = new HashSet<String>();
-    static {
-        FOLDER_PROPERTY_SET.add(PropertyIds.OBJECT_ID);
-        FOLDER_PROPERTY_SET.add(PropertyIds.OBJECT_TYPE_ID);
-        FOLDER_PROPERTY_SET.add(PropertyIds.NAME);
-        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_LENGTH);
-        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_FILE_NAME);
-        FOLDER_PROPERTY_SET.add(PropertyIds.CREATED_BY);
-        FOLDER_PROPERTY_SET.add(PropertyIds.CREATION_DATE);
-        FOLDER_PROPERTY_SET.add(PropertyIds.LAST_MODIFIED_BY);
-        FOLDER_PROPERTY_SET.add(PropertyIds.LAST_MODIFICATION_DATE);
-        FOLDER_PROPERTY_SET.add(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
-        FOLDER_PROPERTY_SET.add(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
-    }
-
-    private static final Set<String> VERSION_PROPERTY_SET = new HashSet<String>();
-    static {
-        VERSION_PROPERTY_SET.add(PropertyIds.OBJECT_ID);
-        VERSION_PROPERTY_SET.add(PropertyIds.OBJECT_TYPE_ID);
-        VERSION_PROPERTY_SET.add(PropertyIds.NAME);
-        VERSION_PROPERTY_SET.add(PropertyIds.VERSION_LABEL);
-        VERSION_PROPERTY_SET.add(PropertyIds.IS_LATEST_VERSION);
-        VERSION_PROPERTY_SET.add(PropertyIds.IS_MAJOR_VERSION);
-        VERSION_PROPERTY_SET.add(PropertyIds.IS_LATEST_MAJOR_VERSION);
-        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_LENGTH);
-        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_FILE_NAME);
-    }
-
-    private Map<String, String> sessionParameters;
-    private List<Repository> repositories;
-    private Session session;
-    private OperationContext objectOperationContext;
-    private OperationContext folderOperationContext;
-    private OperationContext versionOperationContext;
-    private int maxChildren;
-
-    public ClientSession(Map<String, String> sessionParameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
-        if (sessionParameters == null) {
-            throw new IllegalArgumentException("Parameters must not be null!");
-        }
-
-        connect(sessionParameters, objectFactory, authenticationProvider, cache, typeDefCache);
-    }
-
-    public static SessionParameterMap createSessionParameters(String url, BindingType binding, String username,
-            String password, Authentication authentication, boolean compression, boolean clientCompression,
-            boolean cookies) {
-        SessionParameterMap parameters = new SessionParameterMap();
-
-        switch (binding) {
-        case WEBSERVICES:
-            parameters.setWebServicesBindingUrl(url);
-            break;
-        case ATOMPUB:
-            parameters.setAtomPubBindingUrl(url);
-            break;
-        case BROWSER:
-            parameters.setBrowserBindingUrl(url);
-            break;
-        default:
-            parameters.put(SessionParameter.BINDING_TYPE, BindingType.CUSTOM.value());
-        }
-
-        switch (authentication) {
-        case STANDARD:
-            parameters.setUsernameTokenAuthentication(username, password, true);
-            break;
-        case NTLM:
-            parameters.setNtlmAuthentication(username, password);
-            break;
-        case OAUTH_BEARER:
-            parameters.setOAuthBearerTokenAuthentication(username);
-            break;
-        default:
-            parameters.setNoAuthentication();
-        }
-
-        parameters.setCompression(compression);
-        parameters.setClientCompression(clientCompression);
-
-        parameters.setCookies(cookies);
-
-        // get additional workbench properties from system properties
-        Properties sysProps = System.getProperties();
-        for (String key : sysProps.stringPropertyNames()) {
-            if (key.startsWith(WORKBENCH_PREFIX)) {
-                parameters.put(key, sysProps.getProperty(key));
-            }
-        }
-
-        // set proxy authentication
-        if (url != null) {
-            String urlLower = url.trim().toLowerCase(Locale.ENGLISH);
-
-            if (urlLower.startsWith("http://")) {
-                String proxyUser = System.getProperty("http.proxyUser");
-                if (proxyUser != null) {
-                    String proxyPassword = System.getProperty("http.proxyPassword");
-                    parameters.setProxyUserAndPassword(proxyUser, proxyPassword);
-                }
-            } else if (urlLower.startsWith("https://")) {
-                String proxyUser = System.getProperty("https.proxyUser");
-                if (proxyUser != null) {
-                    String proxyPassword = System.getProperty("https.proxyPassword");
-                    parameters.setProxyUserAndPassword(proxyUser, proxyPassword);
-                }
-            }
-        }
-
-        return parameters;
-    }
-
-    private void connect(Map<String, String> sessionParameters, ObjectFactory objectFactory,
-            AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
-        this.sessionParameters = sessionParameters;
-
-        // set a new dummy authenticator
-        // don't send previous credentials to another server
-        Authenticator.setDefault(new Authenticator() {
-        });
-
-        if (Boolean.parseBoolean(sessionParameters.get(ACCEPT_SELF_SIGNED_CERTIFICATES))) {
-            acceptSelfSignedCertificates();
-        }
-
-        maxChildren = -1;
-        String maxChildrenStr = sessionParameters.get(MAX_FOLDER_CHILDREN);
-        if (maxChildrenStr != null) {
-            try {
-                maxChildren = Integer.valueOf(maxChildrenStr.trim());
-            } catch (NumberFormatException e) {
-                LOG.warn("Invalid " + MAX_FOLDER_CHILDREN + " parameter!", e);
-            }
-        }
-
-        repositories = SessionFactoryImpl.newInstance().getRepositories(sessionParameters, objectFactory,
-                authenticationProvider, cache, typeDefCache);
-    }
-
-    public List<Repository> getRepositories() {
-        return repositories;
-    }
-
-    public synchronized Session createSession(int index) {
-        session = repositories.get(index).createSession();
-        objectOperationContext = null;
-        folderOperationContext = null;
-        versionOperationContext = null;
-        return getSession();
-    }
-
-    public Session getSession() {
-        return session;
-    }
-
-    public Map<String, String> getSessionParameters() {
-        return Collections.unmodifiableMap(sessionParameters);
-    }
-
-    public int getMaxChildren() {
-        return maxChildren;
-    }
-
-    public synchronized OperationContext getObjectOperationContext() {
-        if (objectOperationContext == null) {
-            createOperationContexts();
-        }
-        return objectOperationContext;
-    }
-
-    public synchronized OperationContext getFolderOperationContext() {
-        if (folderOperationContext == null) {
-            createOperationContexts();
-        }
-        return folderOperationContext;
-    }
-
-    public synchronized OperationContext getVersionOperationContext() {
-        if (versionOperationContext == null) {
-            createOperationContexts();
-        }
-        return versionOperationContext;
-    }
-
-    private void createOperationContexts() {
-
-        RepositoryInfo repositoryInfo = getSession().getRepositoryInfo();
-
-        String supportsAcl = "true";
-        if (repositoryInfo != null && repositoryInfo.getCapabilities() != null
-                && repositoryInfo.getCapabilities().getAclCapability() == CapabilityAcl.NONE) {
-            supportsAcl = "false";
-        }
-
-        // object operation context
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.FILTER, "*");
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ACLS, supportsAcl);
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ALLOWABLE_ACTIONS, "true");
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_POLICIES, "true");
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_RELATIONSHIPS,
-                IncludeRelationships.BOTH.value());
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.RENDITION_FILTER, "*");
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.ORDER_BY, null);
-        setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "1000");
-
-        objectOperationContext = new ClientOperationContext(OBJECT_PREFIX, sessionParameters);
-
-        // folder operation context
-        if (!sessionParameters.containsKey(FOLDER_PREFIX + ClientOperationContext.FILTER)) {
-            ObjectType type = session.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value());
-
-            StringBuilder filter = new StringBuilder();
-            for (String propId : FOLDER_PROPERTY_SET) {
-                PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(propId);
-                if (propDef != null) {
-                    if (filter.length() > 0) {
-                        filter.append(',');
-                    }
-                    filter.append(propDef.getQueryName());
-                }
-            }
-
-            sessionParameters.put(FOLDER_PREFIX + ClientOperationContext.FILTER, filter.toString());
-        }
-
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ACLS, "false");
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ALLOWABLE_ACTIONS, "false");
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_POLICIES, "false");
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_RELATIONSHIPS,
-                IncludeRelationships.NONE.value());
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.RENDITION_FILTER, "cmis:none");
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.ORDER_BY, null);
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "10000");
-
-        folderOperationContext = new ClientOperationContext(FOLDER_PREFIX, sessionParameters);
-
-        if (!sessionParameters.containsKey(VERSION_PREFIX + ClientOperationContext.FILTER)) {
-            ObjectType type = session.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value());
-
-            StringBuilder filter = new StringBuilder();
-            for (String propId : VERSION_PROPERTY_SET) {
-                PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(propId);
-                if (propDef != null) {
-                    if (filter.length() > 0) {
-                        filter.append(',');
-                    }
-                    filter.append(propDef.getQueryName());
-                }
-            }
-
-            sessionParameters.put(VERSION_PREFIX + ClientOperationContext.FILTER, filter.toString());
-        }
-
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ACLS, "false");
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ALLOWABLE_ACTIONS, "false");
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_POLICIES, "false");
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_RELATIONSHIPS,
-                IncludeRelationships.NONE.value());
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.RENDITION_FILTER, "cmis:none");
-        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "10000");
-
-        versionOperationContext = new ClientOperationContext(VERSION_PREFIX, sessionParameters);
-    }
-
-    private void setDefault(String prefix, Map<String, String> map, String key, String value) {
-        if (!map.containsKey(prefix + key)) {
-            map.put(prefix + key, value);
-        }
-    }
-
-    private void acceptSelfSignedCertificates() {
-        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
-            public X509Certificate[] getAcceptedIssuers() {
-                return new X509Certificate[0];
-            }
-
-            public void checkClientTrusted(X509Certificate[] certs, String authType) {
-            }
-
-            public void checkServerTrusted(X509Certificate[] certs, String authType) {
-            }
-        } };
-
-        HostnameVerifier accepctAllHostnames = new HostnameVerifier() {
-            @Override
-            public boolean verify(String hostname, SSLSession session) {
-                return true;
-            }
-        };
-
-        try {
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, trustAllCerts, new java.security.SecureRandom());
-            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
-            HttpsURLConnection.setDefaultHostnameVerifier(accepctAllHostnames);
-        } catch (Exception e) {
-            LOG.error(e.getMessage(), e);
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/FolderListener.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/FolderListener.java
deleted file mode 100644
index dce1685..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/FolderListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import java.util.EventListener;
-
-public interface FolderListener extends EventListener {
-
-    void folderLoaded(ClientModelEvent event);
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ObjectListener.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ObjectListener.java
deleted file mode 100644
index 479a4a7..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ObjectListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.model;
-
-import java.util.EventListener;
-
-public interface ObjectListener extends EventListener {
-
-    void objectLoaded(ClientModelEvent event);
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/ActionPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/ActionPanel.java
deleted file mode 100644
index b5a1110..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/ActionPanel.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.UIManager;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public abstract class ActionPanel extends JPanel implements ActionListener {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-    private CmisObject object;
-
-    private JPanel centerPanel;
-
-    public ActionPanel(String title, String buttonLabel, ClientModel model) {
-        super();
-        this.model = model;
-        createGUI(title, buttonLabel);
-    }
-
-    public ClientModel getClientModel() {
-        return model;
-    }
-
-    public void setObject(CmisObject object) {
-        this.object = object;
-    }
-
-    public CmisObject getObject() {
-        return object;
-    }
-
-    public CmisVersion getCmisVersion() {
-        try {
-            return model.getRepositoryInfo().getCmisVersion();
-        } catch (Exception e) {
-            return CmisVersion.CMIS_1_0;
-        }
-    }
-
-    private void createGUI(String title, String buttonLabel) {
-        BorderLayout borderLayout = new BorderLayout();
-        borderLayout.setVgap(3);
-        setLayout(borderLayout);
-
-        setBackground(Color.WHITE);
-        setBorder(BorderFactory.createCompoundBorder(
-                BorderFactory.createEmptyBorder(5, 5, 5, 5),
-                BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.GRAY, 2),
-                        BorderFactory.createEmptyBorder(5, 5, 5, 5))));
-
-        Font labelFont = UIManager.getFont("Label.font");
-        Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-
-        JLabel titleLabel = new JLabel(title);
-        titleLabel.setFont(boldFont);
-        add(titleLabel, BorderLayout.PAGE_START);
-
-        centerPanel = new JPanel();
-        centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
-        centerPanel.setBackground(Color.WHITE);
-        add(centerPanel, BorderLayout.CENTER);
-
-        createActionComponents();
-
-        JButton actionButton = new JButton(buttonLabel);
-        actionButton.addActionListener(this);
-        add(actionButton, BorderLayout.PAGE_END);
-
-        setMaximumSize(new Dimension(Short.MAX_VALUE, getPreferredSize().height));
-    }
-
-    protected void addActionComponent(JComponent comp) {
-        comp.setAlignmentX(LEFT_ALIGNMENT);
-        centerPanel.add(comp);
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-            ((JButton) e.getSource()).requestFocusInWindow();
-            if (doAction()) {
-                model.reloadObject();
-            }
-            model.reloadFolder();
-        } catch (Exception ex) {
-            ClientHelper.showError(null, ex);
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-    }
-
-    protected abstract void createActionComponents();
-
-    public abstract boolean isAllowed();
-
-    /**
-     * @return <code>true</code> if object should be reloaded.
-     */
-    public abstract boolean doAction() throws Exception;
-
-    protected JPanel createFilenamePanel(final JTextField filenameField) {
-        JPanel filePanel = new JPanel(new BorderLayout());
-        filePanel.setBackground(Color.WHITE);
-
-        filePanel.add(new JLabel("File:"), BorderLayout.LINE_START);
-
-        filePanel.add(filenameField, BorderLayout.CENTER);
-
-        JButton browseButton = new JButton("Browse");
-        browseButton.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                JFileChooser fileChooser = new JFileChooser();
-                int chooseResult = fileChooser.showDialog(filenameField, "Select");
-                if (chooseResult == JFileChooser.APPROVE_OPTION) {
-                    if (fileChooser.getSelectedFile().isFile()) {
-                        filenameField.setText(fileChooser.getSelectedFile().getAbsolutePath());
-                    }
-                }
-            }
-        });
-        filePanel.add(browseButton, BorderLayout.LINE_END);
-
-        return filePanel;
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
deleted file mode 100644
index a8cee8b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.util.Collection;
-import java.util.GregorianCalendar;
-
-import javax.swing.JTable;
-import javax.swing.UIManager;
-import javax.swing.table.DefaultTableCellRenderer;
-
-import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-
-public class CollectionRenderer extends DefaultTableCellRenderer {
-    private static final long serialVersionUID = 1L;
-
-    private static final String NOT_SET_COLOR;
-
-    static {
-        Color notSetColor = UIManager.getColor("Label.disabledText");
-        if (notSetColor != null) {
-            NOT_SET_COLOR = String.format("#%1$02x%2$02x%3$02x", notSetColor.getRed(), notSetColor.getGreen(),
-                    notSetColor.getBlue());
-        } else {
-            NOT_SET_COLOR = "#8e8f91";
-        }
-    }
-
-    public CollectionRenderer() {
-        super();
-    }
-
-    @Override
-    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
-            int row, int column) {
-        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-
-        int height = (int) getPreferredSize().getHeight();
-        if (height > (getFontMetrics(getFont()).getHeight() + getInsets().bottom + getInsets().top)) {
-            if (table.getRowHeight(row) != height) {
-                table.setRowHeight(row, height);
-            }
-        }
-
-        return comp;
-    }
-
-    @Override
-    protected void setValue(Object value) {
-        Collection<?> col = (Collection<?>) value;
-
-        if (col == null || col.isEmpty()) {
-            super.setValue("<html><span><font color=" + NOT_SET_COLOR + "><i>not set</i></font></span>");
-            return;
-        }
-
-        // build string
-        StringBuilder sb = new StringBuilder("<html>");
-        for (Object o : col) {
-            sb.append("<span>"); // workaround for a bug in Swing
-            if (o == null) {
-                sb.append("<i>null</i>");
-            } else if (o instanceof GregorianCalendar) {
-                sb.append(ClientHelper.getDateString((GregorianCalendar) o));
-            } else if (o instanceof Choice<?>) {
-                Object choiceValue = ((Choice<?>) o).getValue();
-                if (choiceValue == null) {
-                    sb.append("<i>null</i>");
-                } else if (o instanceof GregorianCalendar) {
-                    sb.append(ClientHelper.getDateString((GregorianCalendar) o));
-                } else {
-                    ClientHelper.encodeHtml(sb, choiceValue.toString());
-                }
-            } else {
-                ClientHelper.encodeHtml(sb, o.toString());
-            }
-            sb.append("</span><br/>");
-        }
-        // sb.append("</html>");
-
-        super.setValue(sb.toString());
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CreateDialog.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CreateDialog.java
deleted file mode 100644
index 2c4adf0..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CreateDialog.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.BorderFactory;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.PropertyType;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-public abstract class CreateDialog extends JDialog {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-    private final JPanel panel;
-    private final JPanel mandatoryPropertiesPanel;
-    private final JPanel actionPanel;
-    private final Map<String, JComponent> mandatoryProperties;
-
-    public CreateDialog(Frame owner, String title, ClientModel model) {
-        super(owner, title, true);
-        this.model = model;
-
-        setLayout(new BorderLayout());
-        panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-        add(panel, BorderLayout.CENTER);
-
-        mandatoryProperties = new HashMap<String, JComponent>();
-        mandatoryPropertiesPanel = new JPanel(new GridBagLayout());
-        mandatoryPropertiesPanel
-                .setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0),
-                        BorderFactory.createTitledBorder("Mandatory properties")));
-
-        actionPanel = new JPanel();
-        createRow(actionPanel, 10);
-    }
-
-    protected ClientModel getClientModel() {
-        return model;
-    }
-
-    protected final void createRow(String label, JComponent comp, int row) {
-        createRow(panel, label, comp, row);
-    }
-
-    protected final void createActionRow(String label, JComponent comp, int row) {
-        createRow(actionPanel, label, comp, row);
-    }
-
-    protected final void createRow(JPanel panel, String label, JComponent comp, int row) {
-        JLabel textLabel = new JLabel(label);
-        textLabel.setLabelFor(comp);
-
-        GridBagConstraints c = new GridBagConstraints();
-        c.anchor = GridBagConstraints.LINE_START;
-        c.fill = GridBagConstraints.HORIZONTAL;
-        c.gridx = 0;
-        c.gridy = row;
-        panel.add(textLabel, c);
-        c.gridx = 1;
-        panel.add(comp, c);
-    }
-
-    protected final void createRow(JComponent comp, int row) {
-        GridBagConstraints c = new GridBagConstraints();
-        c.anchor = GridBagConstraints.LINE_START;
-        c.fill = GridBagConstraints.HORIZONTAL;
-        c.gridx = 0;
-        c.gridy = row;
-        c.gridwidth = 2;
-        panel.add(comp, c);
-    }
-
-    public final void showDialog() {
-        panel.invalidate();
-
-        ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
-        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        pack();
-        setLocationRelativeTo(null);
-        setVisible(true);
-    }
-
-    protected final Object[] getTypes(String rootTypeId) {
-        List<ObjectType> types = model.getTypesAsList(rootTypeId, true);
-
-        Object[] result = new Object[types.size()];
-
-        int i = 0;
-        for (final ObjectType type : types) {
-            result[i] = new ObjectTypeItem() {
-                public ObjectType getObjectType() {
-                    return type;
-                }
-
-                @Override
-                public String toString() {
-                    return type.getDisplayName() + " (" + type.getId() + ")";
-                }
-            };
-
-            i++;
-        }
-
-        return result;
-    }
-
-    protected final void updateMandatoryFields(TypeDefinition type) {
-        mandatoryProperties.clear();
-        mandatoryPropertiesPanel.removeAll();
-
-        final Map<String, PropertyDefinition<?>> propertyDefinitions = type.getPropertyDefinitions();
-        if (propertyDefinitions != null) {
-            int row = 0;
-            for (PropertyDefinition<?> definition : propertyDefinitions.values()) {
-                if (definition.isRequired()
-                        && !(PropertyIds.NAME.equals(definition.getId())
-                                || PropertyIds.OBJECT_TYPE_ID.equals(definition.getId())
-                                || PropertyIds.SOURCE_ID.equals(definition.getId()) || PropertyIds.TARGET_ID
-                                    .equals(definition.getId()))) {
-                    JComponent child = createPropertyComponent(definition);
-                    mandatoryProperties.put(definition.getId(), child);
-                    createRow(mandatoryPropertiesPanel, definition.getDisplayName() + ":", child, row);
-                    row++;
-                }
-            }
-        }
-
-        if (mandatoryPropertiesPanel.getComponents().length > 0) {
-            createRow(mandatoryPropertiesPanel, 9);
-        } else {
-            panel.remove(mandatoryPropertiesPanel);
-        }
-
-        pack();
-        repaint();
-    }
-
-    protected JComponent createPropertyComponent(PropertyDefinition<?> definition) {
-        final PropertyType propertyType = definition.getPropertyType();
-        JComponent result;
-        switch (propertyType) {
-        case BOOLEAN:
-            result = new JCheckBox();
-            break;
-        default:
-            result = new JTextField("", 50);
-            break;
-        }
-
-        return result;
-    }
-
-    protected Map<String, Object> getMandatoryPropertyValues() {
-        if (mandatoryProperties.isEmpty()) {
-            return null;
-        }
-
-        Map<String, Object> result = new HashMap<String, Object>();
-
-        for (Map.Entry<String, JComponent> component : mandatoryProperties.entrySet()) {
-            Object value = null;
-            if (component.getValue() instanceof JTextField) {
-                value = ((JTextField) component.getValue()).getText();
-            } else if (component.getValue() instanceof JCheckBox) {
-                value = ((JCheckBox) component.getValue()).isSelected();
-            }
-
-            result.put(component.getKey(), value);
-        }
-
-        return result;
-    }
-
-    public interface ObjectTypeItem {
-        ObjectType getObjectType();
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/GregorianCalendarRenderer.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/GregorianCalendarRenderer.java
deleted file mode 100644
index e30f355..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/GregorianCalendarRenderer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import java.util.GregorianCalendar;
-
-import javax.swing.table.DefaultTableCellRenderer;
-
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-
-public class GregorianCalendarRenderer extends DefaultTableCellRenderer {
-    private static final long serialVersionUID = 1L;
-
-    public GregorianCalendarRenderer() {
-        super();
-    }
-
-    public void setValue(Object value) {
-        setText(ClientHelper.getDateString((GregorianCalendar) value));
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java
deleted file mode 100644
index 71e37f3..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import java.awt.Component;
-
-import javax.swing.JTable;
-import javax.swing.table.DefaultTableCellRenderer;
-
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-
-public class IdRenderer extends DefaultTableCellRenderer {
-    private static final long serialVersionUID = 1L;
-
-    public IdRenderer() {
-        super();
-    }
-
-    @Override
-    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
-            int row, int column) {
-        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-        comp.setForeground(isSelected ? ClientHelper.LINK_SELECTED_COLOR : ClientHelper.LINK_COLOR);
-
-        return comp;
-    }
-
-    public void setValue(Object value) {
-        String text = "";
-        if (value instanceof ObjectId) {
-            if (((ObjectId) value).getId() != null) {
-                StringBuilder sb = new StringBuilder("<html><u>");
-                ClientHelper.encodeHtml(sb, ((ObjectId) value).getId());
-                sb.append("</u></html>");
-                text = sb.toString();
-            }
-        }
-
-        setText(text);
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java
deleted file mode 100644
index 1662f96..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import static org.apache.chemistry.opencmis.commons.impl.CollectionsHelper.*;
-
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Desktop;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.net.URI;
-import java.util.Collection;
-import java.util.EnumMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.swing.AbstractButton;
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-import org.apache.chemistry.opencmis.workbench.model.ClientModel;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.EncodeHintType;
-import com.google.zxing.WriterException;
-import com.google.zxing.client.j2se.MatrixToImageWriter;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
-
-public abstract class InfoPanel extends JPanel {
-
-    private static final long serialVersionUID = 1L;
-
-    private final ClientModel model;
-
-    private JPanel gridPanel;
-    private GridBagConstraints gbc;
-    private Font boldFont;
-
-    public InfoPanel(ClientModel model) {
-        this.model = model;
-    }
-
-    protected ClientModel getClientModel() {
-        return model;
-    }
-
-    protected void setupGUI() {
-        setLayout(new FlowLayout(FlowLayout.LEFT));
-        setBackground(Color.WHITE);
-
-        gridPanel = new JPanel(new GridBagLayout());
-        gridPanel.setBackground(Color.WHITE);
-        add(gridPanel);
-
-        gbc = new GridBagConstraints();
-
-        gbc.fill = GridBagConstraints.BOTH;
-        gbc.gridy = 0;
-        gbc.insets = new Insets(3, 3, 3, 3);
-
-        Font labelFont = UIManager.getFont("Label.font");
-        boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
-    }
-
-    protected JTextField addLine(final String label) {
-        return addLine(label, false);
-    }
-
-    protected JTextField addLine(final String label, final boolean bold) {
-        return addLine(label, bold, new JTextField());
-    }
-
-    protected JTextField addLine(final String label, final boolean bold, JTextField textField) {
-        textField.setEditable(false);
-        textField.setBorder(BorderFactory.createEmptyBorder());
-        if (bold) {
-            textField.setFont(boldFont);
-        }
-
-        JLabel textLable = new JLabel(label);
-        textLable.setLabelFor(textField);
-        if (bold) {
-            textLable.setFont(boldFont);
-        }
-
-        gbc.gridy++;
-
-        gbc.gridx = 0;
-        gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
-        gridPanel.add(textLable, gbc);
-
-        gbc.gridx = 1;
-        gbc.anchor = GridBagConstraints.BASELINE_LEADING;
-        gridPanel.add(textField, gbc);
-
-        return textField;
-    }
-
-    protected JTextField addId(final String label) {
-        return addLine(label, false, new IdTextField());
-    }
-
-    protected JTextField addLink(final String label) {
-        return addLine(label, false, new UrlTextField());
-    }
-
-    protected YesNoLabel addYesNoLabel(String label) {
-        YesNoLabel ynl = new YesNoLabel();
-
-        JLabel textLable = new JLabel(label);
-        textLable.setLabelFor(ynl);
-
-        gbc.gridy++;
-
-        gbc.gridx = 0;
-        gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
-        gridPanel.add(textLable, gbc);
-
-        gbc.gridx = 1;
-        gbc.anchor = GridBagConstraints.BASELINE_LEADING;
-        gridPanel.add(ynl, gbc);
-
-        return ynl;
-    }
-
-    protected <T extends JComponent> T addComponent(String label, T comp) {
-        JLabel textLable = new JLabel(label);
-
-        JPanel panel = new JPanel();
-        panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
-        panel.setBorder(BorderFactory.createEmptyBorder());
-        panel.setOpaque(false);
-        panel.add(comp);
-        textLable.setLabelFor(panel);
-
-        gbc.gridy++;
-
-        gbc.gridx = 0;
-        gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
-        gridPanel.add(textLable, gbc);
-
-        gbc.gridx = 1;
-        gbc.anchor = GridBagConstraints.BASELINE_LEADING;
-        gridPanel.add(panel, gbc);
-
-        return comp;
-    }
-
-    public static class InfoList extends JPanel {
-        private static final long serialVersionUID = 1L;
-
-        public InfoList() {
-            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-            setBackground(Color.WHITE);
-        }
-
-        public void clear() {
-            removeAll();
-        }
-
-        public void setList(Collection<?> list) {
-            clear();
-
-            if (isNullOrEmpty(list)) {
-                return;
-            }
-
-            for (Object o : list) {
-                JTextField textField = new JTextField(o == null ? "" : o.toString());
-                textField.setEditable(false);
-                textField.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
-                add(textField);
-            }
-        }
-    }
-
-    private abstract class ClickableTextField extends JTextField {
-        private static final long serialVersionUID = 1L;
-
-        private String link;
-        private boolean updated = false;
-        private final JPopupMenu popup;
-
-        public ClickableTextField() {
-            popup = new JPopupMenu();
-            final JMenuItem menuItem = new JMenuItem("Copy to clipboard");
-            popup.add(menuItem);
-
-            menuItem.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-                    Transferable transferable = new StringSelection(link);
-                    clipboard.setContents(transferable, null);
-                }
-            });
-
-            addMouseListener(new MouseAdapter() {
-                @Override
-                public void mouseClicked(MouseEvent e) {
-                    if (link != null) {
-                        if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 1) {
-                            try {
-                                linkAction(link);
-                            } catch (Exception ex) {
-                                ClientHelper.showError(InfoPanel.this, ex);
-                            }
-                        }
-                    }
-                }
-
-                @Override
-                public void mousePressed(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                @Override
-                public void mouseReleased(MouseEvent e) {
-                    maybeShowPopup(e);
-                }
-
-                private void maybeShowPopup(MouseEvent e) {
-                    if (e.isPopupTrigger()) {
-                        popup.show(e.getComponent(), e.getX(), e.getY());
-                    }
-                }
-            });
-        }
-
-        public JPopupMenu getPopupMenu() {
-            return popup;
-        }
-
-        public abstract boolean isLink(String link);
-
-        public abstract Color getLinkColor(String link);
-
-        public abstract void linkAction(String link);
-
-        @Override
-        public void setText(String text) {
-            if (!isLink(text)) {
-                setForeground(UIManager.getColor("textForeground"));
-                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                popup.setEnabled(false);
-                link = null;
-            } else {
-                setForeground(getLinkColor(text));
-                setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-                popup.setEnabled(true);
-                link = text;
-            }
-
-            updated = true;
-
-            super.setText(text);
-        }
-
-        @Override
-        public void validate() {
-        }
-
-        @Override
-        public void revalidate() {
-        }
-
-        @Override
-        public void repaint(long tm, int x, int y, int width, int height) {
-            if (updated) {
-                super.repaint(tm, x, y, width, height);
-                updated = false;
-            }
-        }
-
-        @Override
-        public void repaint(Rectangle r) {
-        }
-
-        @Override
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-
-            if (link != null) {
-                FontMetrics fm = getFontMetrics(getFont());
-
-                int y1 = fm.getHeight() - 2;
-                int x2 = fm.stringWidth(link);
-                g.setColor(getLinkColor(link));
-                g.drawLine(0, y1, x2, y1);
-            }
-        }
-    }
-
-    private class IdTextField extends ClickableTextField {
-        private static final long serialVersionUID = 1L;
-
-        public IdTextField() {
-            super();
-        }
-
-        @Override
-        public boolean isLink(String link) {
-            return link != null && link.length() > 0 && link.charAt(0) != '(';
-        }
-
-        @Override
-        public Color getLinkColor(String link) {
-            return ClientHelper.LINK_COLOR;
-        }
-
-        @Override
-        public void linkAction(String link) {
-            try {
-                getClientModel().loadObject(link);
-            } catch (Exception ex) {
-                ClientHelper.showError(InfoPanel.this, ex);
-            }
-        }
-    }
-
-    private class UrlTextField extends ClickableTextField {
-        private static final long serialVersionUID = 1L;
-
-        private JMenuItem qrCodeItem;
-
-        public UrlTextField() {
-            super();
-
-            qrCodeItem = new JMenuItem();
-            qrCodeItem.setVerticalTextPosition(AbstractButton.BOTTOM);
-            qrCodeItem.setHorizontalTextPosition(AbstractButton.CENTER);
-
-            getPopupMenu().addSeparator();
-            getPopupMenu().add(qrCodeItem);
-        }
-
-        @Override
-        public void setText(String text) {
-            if (isLink(text)) {
-                try {
-                    Map<EncodeHintType, Object> hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
-                    hints.put(EncodeHintType.MARGIN, 0);
-
-                    BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, 200, 200, hints);
-                    qrCodeItem.setIcon(new ImageIcon(MatrixToImageWriter.toBufferedImage(bitMatrix)));
-                    qrCodeItem.setVisible(true);
-                } catch (WriterException e) {
-                    qrCodeItem.setVisible(false);
-                }
-            } else {
-                qrCodeItem.setVisible(false);
-                getPopupMenu().setEnabled(false);
-            }
-
-            super.setText(text);
-        }
-
-        @Override
-        public boolean isLink(String link) {
-            if (link == null || link.length() == 0) {
-                return false;
-            }
-
-            String lower = link.toLowerCase(Locale.ENGLISH);
-            return lower.startsWith("http://") || lower.startsWith("https://");
-        }
-
-        @Override
-        public Color getLinkColor(String link) {
-            return Color.BLUE;
-        }
-
-        @Override
-        public void linkAction(String link) {
-            if (Desktop.isDesktopSupported()) {
-                try {
-                    Desktop.getDesktop().browse(new URI(link));
-                } catch (Exception ex) {
-                    ClientHelper.showError(InfoPanel.this, ex);
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/YesNoLabel.java b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/YesNoLabel.java
deleted file mode 100644
index 651e73f..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/YesNoLabel.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.workbench.swing;
-
-import javax.swing.Icon;
-import javax.swing.JLabel;
-
-import org.apache.chemistry.opencmis.workbench.ClientHelper;
-
-public class YesNoLabel extends JLabel {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final Icon TRUE_ICON = ClientHelper.getIcon("yes.png");
-    public static final Icon FALSE_ICON = ClientHelper.getIcon("no.png");
-
-    public static final String YES_TEXT = "Yes";
-    public static final String NO_TEXT = "No";
-
-    private boolean value = true;
-
-    public YesNoLabel() {
-        super(YES_TEXT, TRUE_ICON, LEFT);
-    }
-
-    public boolean getValue() {
-        return value;
-    }
-
-    public void setValue(boolean value) {
-        if (this.value != value) {
-            this.value = value;
-            setIcon(value ? TRUE_ICON : FALSE_ICON);
-            setText(value ? YES_TEXT : NO_TEXT);
-            invalidate();
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/jnlp/template.vm b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/jnlp/template.vm
deleted file mode 100644
index d35aad0..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/jnlp/template.vm
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<jnlp spec="1.5+" codebase="!server!">
-  <information>
-    <title>$project.Name</title>
-    <vendor>$project.Organization.Name</vendor>
-    <homepage href="http://chemistry.apache.org/java/opencmis.html"/>
-    <description>$project.Description</description>
-    <offline-allowed/>
-    <update check="timeout" policy="prompt-update"/>
-  </information>
-  <security>
-     <all-permissions/>
-  </security>
-  <resources>
-    <j2se version="1.6+" initial-heap-size="64m" max-heap-size="256m"/>
-     $dependencies
-    <property name="cmis.workbench.url" value="!repository!"/>  
-    <property name="cmis.workbench.user" value="!user!"/>  
-    <property name="cmis.workbench.password" value="!password!"/>
-    <property name="cmis.workbench.binding" value="!binding!"/>
-  </resources>
-  <application-desc main-class="$mainClass"/>
-</jnlp>
-
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README-cmis-workbench.txt b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README-cmis-workbench.txt
deleted file mode 100644
index 6582e18..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README-cmis-workbench.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-CMIS Workbench
-
-This is a simple Content Management Interoperability Services (CMIS) client based on Swing and 
-Apache Chemistry OpenCMIS (http://chemistry.apache.org/java/opencmis.html).
-
-This CMIS client is distributed under the Apache License, version 2.0.
-Please see the NOTICE and LICENSE files for details.
-
-
-Get the latest released CMIS Workbench from here:
-http://chemistry.apache.org/java/download.html
-
-
-
-System properties reference
----------------------------
-
-Login dialog:
-
-cmis.workbench.url               - preset URL
-cmis.workbench.user              - preset user name
-cmis.workbench.password          - preset password
-cmis.workbench.binding           - preset binding (atompub/webservices/browser)
-cmis.workbench.authentication    - preset authentication method (none/standard/ntlm)
-cmis.workbench.compression       - preset compression (on/off)
-cmis.workbench.clientcompression - preset client compression (on/off)
-cmis.workbench.cookies           - preset cookies (on/off)
-
-
-Folder operation context:
-
-cmis.workbench.folder.filter
-cmis.workbench.folder.includeAcls
-cmis.workbench.folder.includeAllowableActions
-cmis.workbench.folder.includePolicies
-cmis.workbench.folder.includeRelationships
-cmis.workbench.folder.renditionFilter
-cmis.workbench.folder.orderBy
-cmis.workbench.folder.maxItemsPerPage
-cmis.workbench.folder.maxChildren
-
-
-Object operation context:
-
-cmis.workbench.object.filter
-cmis.workbench.object.includeAcls
-cmis.workbench.object.includeAllowableActions
-cmis.workbench.object.includePolicies
-cmis.workbench.object.includeRelationships
-cmis.workbench.object.renditionFilter
-
-
-Version operation context:
-
-cmis.workbench.version.filter
-cmis.workbench.version.includeAcls
-cmis.workbench.version.includeAllowableActions
-cmis.workbench.version.includePolicies
-cmis.workbench.version.includeRelationships
-cmis.workbench.version.renditionFilter
-cmis.workbench.version.maxItemsPerPage
-
-Others:
-
-cmis.workbench.acceptSelfSignedCertificates - disable SSL certificate check (true/false)
-
-cmis.workbench.configs - path to a repository configuration library properties file
-cmis.workbench.scripts - path to Groovy scripts library properties file
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-atompub.properties
deleted file mode 100644
index 569f8f2..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 3.4 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/alfresco/service/cmis
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-webservices.properties
deleted file mode 100644
index 5aea75d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-3.4-webservices.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 3.4 Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/alfresco/cmis/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/alfresco/cmis/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/alfresco/cmis/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/alfresco/cmis/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/alfresco/cmis/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/alfresco/cmis/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/alfresco/cmis/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/alfresco/cmis/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/alfresco/cmis/PolicyService?wsdl
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
-
-cmis.workbench.folder.filter=*
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-atompub.properties
deleted file mode 100644
index ab5f4ef..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 4 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/alfresco/cmisatom
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-webservices.properties
deleted file mode 100644
index 05e589c..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 4 Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/alfresco/cmisws/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/alfresco/cmisws/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/alfresco/cmisws/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/alfresco/cmisws/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/alfresco/cmisws/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/alfresco/cmisws/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/alfresco/cmisws/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/alfresco/cmisws/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/alfresco/cmisws/PolicyService?wsdl
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.0-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.0-atompub.properties
deleted file mode 100644
index 6bdcf6b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.0-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 4.2 CMIS 1.0 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/alfresco/api/-default-/public/cmis/versions/1.0/atom
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-atompub.properties
deleted file mode 100644
index 16bb8ab..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 4.2 CMIS 1.1 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/alfresco/api/-default-/public/cmis/versions/1.1/atom
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-browser.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-browser.properties
deleted file mode 100644
index 3e4400c..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-4.2-1.1-browser.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco 4.2 Browser
-
-org.apache.chemistry.opencmis.binding.spi.type=browser
-org.apache.chemistry.opencmis.binding.browser.url=http://<host>/alfresco/api/-default-/public/cmis/versions/1.1/browser
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.0-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.0-atompub.properties
deleted file mode 100644
index c137a93..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.0-atompub.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco Cloud CMIS 1.0 AtomPub
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=https://api.alfresco.com/cmis/versions/1.0/atom
-org.apache.chemistry.opencmis.binding.auth.http.basic=false
-
-# Please provide a valid OAuth access token in the following property
-# Note that Alfresco Cloud access tokens have a limited lifetime (currently 1 hour) and the OpenCMIS Workbench does not auto-refresh the access token when it expires
-org.apache.chemistry.opencmis.binding.header.0=Authorization:Bearer ####ACCESS_TOKEN####
-
-# Other optional options - compression etc. - may be provided here
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-atompub.properties
deleted file mode 100644
index 9035155..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-atompub.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco Cloud CMIS 1.1 AtomPub
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=https://api.alfresco.com/cmis/versions/1.1/atom
-org.apache.chemistry.opencmis.binding.auth.http.basic=false
-
-# Please provide a valid OAuth access token in the following property
-# Note that Alfresco Cloud access tokens have a limited lifetime (currently 1 hour) and the OpenCMIS Workbench does not auto-refresh the access token when it expires
-org.apache.chemistry.opencmis.binding.header.0=Authorization:Bearer ####ACCESS_TOKEN####
-
-# Other optional options - compression etc. - may be provided here
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-browser.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-browser.properties
deleted file mode 100644
index 00cafda..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/alfresco-cloud-1.1-browser.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Alfresco Cloud CMIS 1.1 Browser
-org.apache.chemistry.opencmis.binding.spi.type=browser
-org.apache.chemistry.opencmis.binding.browser.url=https://api.alfresco.com/cmis/versions/1.1/browser
-org.apache.chemistry.opencmis.binding.auth.http.basic=false
-
-# Please provide a valid OAuth access token in the following property
-# Note that Alfresco Cloud access tokens have a limited lifetime (currently 1 hour) and the OpenCMIS Workbench does not auto-refresh the access token when it expires
-org.apache.chemistry.opencmis.binding.header.0=Authorization:Bearer ####ACCESS_TOKEN####
-
-# Other optional options - compression etc. - may be provided here
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/config-library.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/config-library.properties
deleted file mode 100644
index 48329ff..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/config-library.properties
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-#
-# Add more configurations here.
-# key = config file, value = title
-#
-
-alfresco-3.4-atompub.properties=Alfresco 3.4 AtomPub
-alfresco-3.4-webservices.properties=Alfresco 3.4 Web Services
-alfresco-4-atompub.properties=Alfresco 4.0 AtomPub
-alfresco-4-webservices.properties=Alfresco 4.0 Web Services
-alfresco-4.2-1.0-atompub.properties=Alfresco 4.2 AtomPub (1.0)
-alfresco-4.2-1.1-atompub.properties=Alfresco 4.2 AtomPub (1.1)
-alfresco-4.2-1.1-browser.properties=Alfresco 4.2 Browser (1.1)
-alfresco-cloud-1.0-atompub.properties=Alfresco in the cloud AtomPub (1.0)
-alfresco-cloud-1.1-atompub.properties=Alfresco in the cloud AtomPub (1.1)
-alfresco-cloud-1.1-browser.properties=Alfresco in the cloud Browser (1.1)
-
-sharepoint-2010-atompub.properties=SharePoint 2010 AtomPub
-sharepoint-2010-webservices.properties=SharePoint 2010 Web Services
-sharepoint-2013-atompub.properties=SharePoint 2013 AtomPub
-sharepoint-2013-webservices.properties=SharePoint 2013 Web Services
-
-opentext-els-10.2.0-atompub.properties=Open Text ELS 10.2.0 AtomPub
-opentext-els-10.2.0-webservices.properties=Open Text ELS 10.2.0 Web Services
-
-nuxeo-5.4-atompub.properties=Nuxeo 5.4 AtomPub
-nuxeo-5.4-webservices.properties=Nuxeo 5.4 Web Services
-
-ibm-filenet-p8-atompub.properties=IBM FileNet P8 AtomPub
-ibm-filenet-p8-webservices.properties=IBM FileNet P8 Web Services
-
-lotus-live-files-atompub.properties=Lotus Live Files AtomPub
-lotus-quickr-domino-atompub.properties=Lotus Quickr Domino AtomPub
-
-opencmis-test-server-atompub.properties=OpenCMIS Test Server AtomPub
-opencmis-test-server-webservices.properties=OpenCMIS Test Server Web Services
-
-opencmis-fileshare-atompub.properties=OpenCMIS FileShare AtomPub
-opencmis-fileshare-webservices.properties=OpenCMIS FileShare Web Services
-
-sap-hana-cloud-atompub.properties=SAP HANA Cloud Document Service AtomPub
-sap-hana-cloud-webservices.properties=SAP HANA Cloud Document Service Web Services
-sap-hana-cloud-browser.properties=SAP HANA Cloud Document Service Browser
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-atompub.properties
deleted file mode 100644
index 2fb081e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# IBM P8 CMIS AtomPub - note the /p8cmis/ root portion of the url may vary in some installations
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/p8cmis/resources/Service
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-webservices.properties
deleted file mode 100644
index 3a9f30f..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/ibm-filenet-p8-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# IBM P8 Web Services - note the /p8cmis/ root portion of the url may vary in some installations
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/p8cmis/wsdl
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-live-files-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-live-files-atompub.properties
deleted file mode 100644
index a7ca626..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-live-files-atompub.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Lotus Live Files AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=https://apps.lotuslive.com/files/basic/cmis/my/servicedoc
-org.apache.chemistry.opencmis.user=<email>
-org.apache.chemistry.opencmis.password=<password>
-
-cmis.workbench.folder.maxItemsPerPage=500
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-quickr-domino-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-quickr-domino-atompub.properties
deleted file mode 100644
index cc7b630..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/lotus-quickr-domino-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Lotus Quickr Domino AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/servlet/cmis/repository/_P<Quickr place name>_RMain.nsf/servicedoc
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-atompub.properties
deleted file mode 100644
index 1135a92..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Nuxeo 5.4 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/nuxeo/atom/cmis
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-webservices.properties
deleted file mode 100644
index 979f60a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/nuxeo-5.4-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Nuxeo 5.4 Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/nuxeo/webservices/cmis/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/nuxeo/webservices/cmis/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/nuxeo/webservices/cmis/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/nuxeo/webservices/cmis/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/nuxeo/webservices/cmis/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/nuxeo/webservices/cmis/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/nuxeo/webservices/cmis/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/nuxeo/webservices/cmis/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/nuxeo/webservices/cmis/PolicyService?wsdl
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-atompub.properties
deleted file mode 100644
index 269aa79..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# OpenCMIS FileShare AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/fileshare/atom
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-webservices.properties
deleted file mode 100644
index 2258fed..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-fileshare-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# OpenCMIS FileShare Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/fileshare/services/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/fileshare/services/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/fileshare/services/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/fileshare/services/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/fileshare/services/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/fileshare/services/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/fileshare/services/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/fileshare/servicess/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/fileshare/services/PolicyService?wsdl
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-atompub.properties
deleted file mode 100644
index 359b520..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-atompub.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# OpenCMIS test server AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://repo.opencmis.org/inmemory/atom
-org.apache.chemistry.opencmis.binding.compression=true
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-webservices.properties
deleted file mode 100644
index 424f285..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opencmis-test-server-webservices.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# OpenCMIS test server Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://repo.opencmis.org/inmemory/services/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://repo.opencmis.org/inmemory/services/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://repo.opencmis.org/inmemory/services/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://repo.opencmis.org/inmemory/services/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://repo.opencmis.org/inmemory/services/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://repo.opencmis.org/inmemory/services/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://repo.opencmis.org/inmemory/services/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://repo.opencmis.org/inmemory/servicess/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://repo.opencmis.org/inmemory/services/PolicyService?wsdl
-org.apache.chemistry.opencmis.binding.compression=true
-org.apache.chemistry.opencmis.user=test
-org.apache.chemistry.opencmis.password=test
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-atompub.properties
deleted file mode 100644
index 246fffa..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#

-#

-# Licensed to the Apache Software Foundation (ASF) under one

-# or more contributor license agreements.  See the NOTICE file

-# distributed with this work for additional information

-# regarding copyright ownership.  The ASF licenses this file

-# to you under the Apache License, Version 2.0 (the

-# "License"); you may not use this file except in compliance

-# with the License.  You may obtain a copy of the License at

-#

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

-#

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

-# software distributed under the License is distributed on an

-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-# KIND, either express or implied.  See the License for the

-# specific language governing permissions and limitations

-# under the License.

-#

-#

-

-# Open Text ELS 10.2.0 AtomPub

-

-org.apache.chemistry.opencmis.binding.spi.type=atompub

-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/ot-cmisatom/atom

-org.apache.chemistry.opencmis.user=<user>

-org.apache.chemistry.opencmis.password=<password>

diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-webservices.properties
deleted file mode 100644
index 0b3588b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/opentext-els-10.2.0-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#

-#

-# Licensed to the Apache Software Foundation (ASF) under one

-# or more contributor license agreements.  See the NOTICE file

-# distributed with this work for additional information

-# regarding copyright ownership.  The ASF licenses this file

-# to you under the Apache License, Version 2.0 (the

-# "License"); you may not use this file except in compliance

-# with the License.  You may obtain a copy of the License at

-#

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

-#

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

-# software distributed under the License is distributed on an

-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-# KIND, either express or implied.  See the License for the

-# specific language governing permissions and limitations

-# under the License.

-#

-#

-

-# Open Text ELS 10.2.0 Web Services

-

-org.apache.chemistry.opencmis.binding.spi.type=webservices

-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/ot-cmis/services/RepositoryService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/ot-cmis/services/NavigationService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/ot-cmis/services/ObjectService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/ot-cmis/services/VersioningService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/ot-cmis/services/DiscoveryService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/ot-cmis/services/MultiFilingService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/ot-cmis/services/RelationshipService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/ot-cmis/services/ACLService?wsdl

-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/ot-cmis/services/PolicyService?wsdl

-org.apache.chemistry.opencmis.user=<user>

-org.apache.chemistry.opencmis.password=<password>

diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-atompub.properties
deleted file mode 100644
index db28f94..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-atompub.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SAP HANA Cloud Document Service - AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/<context>/atom
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-browser.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-browser.properties
deleted file mode 100644
index d026349..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-browser.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SAP HANA Cloud Document Service - Browser
-
-org.apache.chemistry.opencmis.binding.spi.type=browser
-org.apache.chemistry.opencmis.binding.browser.url=http://<host>/<context>/json
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-webservices.properties
deleted file mode 100644
index b6eea3e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sap-hana-cloud-webservices.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SAP HANA Cloud Document Service - Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/<context>/services/RepositoryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/<context>/services/NavigationService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/<context>/services/ObjectService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/<context>/services/VersioningService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/<context>/services/DiscoveryService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/<context>/services/MultiFilingService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/<context>/services/RelationshipService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/<context>/services/ACLService?wsdl
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/<context>/services/PolicyService?wsdl
-org.apache.chemistry.opencmis.user=<user>
-org.apache.chemistry.opencmis.password=<password>
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-atompub.properties
deleted file mode 100644
index be2e01a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-atompub.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SharePoint 2010 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/_vti_bin/cmis/rest/<SPList>?getrepositoryinfo
-org.apache.chemistry.opencmis.binding.auth.classname=org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider
-org.apache.chemistry.opencmis.user=<domain>\<user>
-org.apache.chemistry.opencmis.password=<password>
-
-org.apache.chemistry.opencmis.workaround.includeObjectIdOnCheckout=true
-org.apache.chemistry.opencmis.workaround.includeObjectIdOnMove=true
-org.apache.chemistry.opencmis.workaround.omitChangeTokens=true
-org.apache.chemistry.opencmis.workaround.addNameOnCheckIn=true
-
-cmis.workbench.folder.filter=*
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-webservices.properties
deleted file mode 100644
index 42504df..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2010-webservices.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SharePoint 2010 Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.auth.classname=org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider
-org.apache.chemistry.opencmis.user=<domain>\<user>
-org.apache.chemistry.opencmis.password=<password>
-
-cmis.workbench.folder.filter=*
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-atompub.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-atompub.properties
deleted file mode 100644
index 5756ddc..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-atompub.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SharePoint 2013 AtomPub
-
-org.apache.chemistry.opencmis.binding.spi.type=atompub
-org.apache.chemistry.opencmis.binding.atompub.url=http://<host>/_vti_bin/cmis/rest?getRepositories
-org.apache.chemistry.opencmis.user=<domain>\<user>
-org.apache.chemistry.opencmis.password=<password>
-
-org.apache.chemistry.opencmis.workaround.omitChangeTokens=true
-org.apache.chemistry.opencmis.workaround.addNameOnCheckIn=true
-
-cmis.workbench.folder.filter=*
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-webservices.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-webservices.properties
deleted file mode 100644
index e44ddc0..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/configs/sharepoint-2013-webservices.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# SharePoint 2013 Web Services
-
-org.apache.chemistry.opencmis.binding.spi.type=webservices
-org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/_vti_bin/cmissoapwsdl.aspx
-org.apache.chemistry.opencmis.user=<domain>\<user>
-org.apache.chemistry.opencmis.password=<password>
-
-cmis.workbench.folder.filter=*
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png
deleted file mode 100644
index 1aa7f09..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/changelog.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/changelog.png
deleted file mode 100644
index c3d245d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/changelog.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/checkedout.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/checkedout.png
deleted file mode 100644
index c7f74c3..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/checkedout.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/connect.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/connect.png
deleted file mode 100644
index a0d7118..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/connect.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/console.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/console.png
deleted file mode 100644
index ceb0fb9..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/console.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/deletetype.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/deletetype.png
deleted file mode 100644
index 05ff036..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/deletetype.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/document.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/document.png
deleted file mode 100644
index 2d7f2d6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/document.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png
deleted file mode 100644
index 3dd7fcc..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/folder.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/folder.png
deleted file mode 100644
index 65bd0bb..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/folder.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.icns b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.icns
deleted file mode 100644
index 2089fb8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.icns
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.png
deleted file mode 100644
index ca7839f..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/icon.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/info.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/info.png
deleted file mode 100644
index 0437a0d..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/info.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/item.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/item.png
deleted file mode 100644
index 4f99a7f..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/item.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/log.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/log.png
deleted file mode 100644
index 65caccf..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/log.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newdocument.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newdocument.png
deleted file mode 100644
index e3808a1..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newdocument.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newfolder.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newfolder.png
deleted file mode 100644
index 1c3dc94..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newfolder.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newrelationship.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newrelationship.png
deleted file mode 100644
index 6b5e40b..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newrelationship.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newtype.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newtype.png
deleted file mode 100644
index 3ec0300..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/newtype.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/no.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/no.png
deleted file mode 100644
index f2cd515..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/no.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png
deleted file mode 100644
index f6a625c..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/policy.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/policy.png
deleted file mode 100644
index 0466619..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/policy.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/pwc.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/pwc.png
deleted file mode 100644
index 7221bba..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/pwc.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/query.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/query.png
deleted file mode 100644
index 4e522b2..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/query.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/relationship.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/relationship.png
deleted file mode 100644
index 800b9e8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/relationship.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png
deleted file mode 100644
index 00b654e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/repository-info.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/repository-info.png
deleted file mode 100644
index a5ad728..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/repository-info.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/savetype.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/savetype.png
deleted file mode 100644
index 340a87e..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/savetype.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/tck.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/tck.png
deleted file mode 100644
index 2bb2adf..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/tck.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/types.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/types.png
deleted file mode 100644
index 2e519ce..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/types.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png
deleted file mode 100644
index fa9a7d7..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/updatetype.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/updatetype.png
deleted file mode 100644
index 5ad4fe6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/updatetype.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/yes.png b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/yes.png
deleted file mode 100644
index 763d9da..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/yes.png
+++ /dev/null
Binary files differ
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/log4j.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/log4j.properties
deleted file mode 100644
index 388d4f6..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootLogger=info, logframe
-
-log4j.appender.logframe = org.apache.chemistry.opencmis.workbench.ClientWriterAppender
-log4j.appender.logframe.layout = org.apache.log4j.EnhancedPatternLayout
-log4j.appender.logframe.layout.ConversionPattern = > %d{HH:mm:ss} %5.5p %40.40c: %m%n%throwable{50}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy
deleted file mode 100644
index e777fc0..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package scripts
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.commons.definitions.*
-import org.apache.chemistry.opencmis.client.api.*
-
-class CMIS {
-
-    Session session
-
-    CMIS(Session session) {
-        this.session = session
-    }
-
-    CmisObject getObject(id) {
-        CmisObject result = null
-
-        if (id instanceof CmisObject) {
-            result = id
-        } else if (id instanceof ObjectId) {
-            result = session.getObject(id)
-        } else if (id instanceof String) {
-            if (id.startsWith("/")) {
-                result = session.getObjectByPath(id)
-            } else {
-                result = session.getObject(id)
-            }
-        }
-
-        if (result == null) {
-            throw new Exception("Object not found!")
-        }
-
-        result
-    }
-
-    Folder getFolder(id) {
-        CmisObject folder = getObject(id)
-        if(!(folder instanceof Folder)) {
-            throw new Exception("Object is not a folder!")
-        }
-
-        folder
-    }
-
-    Document getDocument(id) {
-        CmisObject doc = getObject(id)
-        if(!(doc instanceof Document)) {
-            throw new Exception("Object is not a document!")
-        }
-
-        doc
-    }
-
-    void printProperties(id) {
-        CmisObject object = getObject(id)
-
-        if(!object.properties) {
-            println "- no properties (???) -"
-        } else {
-            object.properties.each { prop -> printProperty(prop) }
-        }
-    }
-
-    void printProperty(Property prop) {
-        println "${prop.id}: ${prop.valuesAsString}"
-    }
-
-    void printAllowableActions(id) {
-        CmisObject object = getObject(id)
-
-        if (!object.allowableActions || !object.allowableActions.allowableActions) {
-            println "- no allowable actions -"
-        } else {
-            object.allowableActions.allowableActions.each { action ->
-                println action.value()
-            }
-        }
-    }
-
-    void printVersions(id) {
-        Document doc = getDocument(id)
-
-        if (!((DocumentType) doc.type).isVersionable()) {
-            println "- not versionsable -"
-            return
-        }
-
-        List<Document> versions = doc.allVersions
-
-        if (!versions) {
-            println "- no versions -"
-        } else {
-            versions.each { version -> println "${version.versionLabel} (${version.id}) [${version.type.id}]" }
-        }
-    }
-
-    void printChildren(id) {
-        Folder folder = getFolder(id)
-
-        boolean hasChildren = false
-        folder.children.each { child ->
-            println "${child.name} (${child.id}) [${child.type.id}]"
-            hasChildren = true
-        }
-
-        if (!hasChildren) {
-            println "- no children -"
-        }
-    }
-
-    void printRelationships(id) {
-        CmisObject object = getObject(id)
-
-        boolean hasRelationships = false
-        object.relationships.each { rel ->
-            println "${rel.name} (${rel.id}) [${rel.type.id}]"
-            hasRelationships = true
-        }
-
-        if (!hasRelationships) {
-            println "- no relationships -"
-        }
-    }
-
-    void printRenditions(id) {
-        Document doc = getDocument(id)
-
-        List<Rendition> renditons = doc.renditions
-
-        if(!renditons) {
-            println "- no renditions -"
-        } else {
-            renditons.each { rendition -> println "${rendition.title} (MIME type: ${rendition.mimeType}, length: ${rendition.length} bytes" }
-        }
-    }
-
-    void printObjectSummary(id) {
-        CmisObject object = getObject(id)
-
-        println "Name:        ${object.name}"
-        println "Object Id:   ${object.id}"
-        println "Object Type: ${object.type.id}"
-        println ""
-        println "--------------------------------------------------"
-        println "Properties:"
-        println "--------------------------------------------------"
-        printProperties(object)
-        println ""
-        println "--------------------------------------------------"
-        println "Allowable Actions:"
-        println "--------------------------------------------------"
-        printAllowableActions(object)
-        println ""
-        println "--------------------------------------------------"
-        println "Relationships:"
-        println "--------------------------------------------------"
-        printRelationships(object)
-
-        if(object instanceof Document) {
-            println ""
-            println "--------------------------------------------------"
-            println "Versions:"
-            println "--------------------------------------------------"
-            printVersions(object)
-            println ""
-            println "--------------------------------------------------"
-            println "Renditions:"
-            println "--------------------------------------------------"
-            printRenditions(object)
-        }
-
-        if(object instanceof Folder) {
-            println ""
-            println "--------------------------------------------------"
-            println "Children:"
-            println "--------------------------------------------------"
-            printChildren(id)
-        }
-    }
-
-    void download(id, destination) {
-        Document doc = getDocument(id)
-
-        def file = new FileOutputStream(destination)
-        def out = new BufferedOutputStream(file)
-        out << doc.contentStream.stream
-        out.close()
-    }
-
-    Folder createFolder(parent, String name, String type = "cmis:folder") {
-        CmisObject parentFolder = getFolder(parent)
-
-        def properties = [
-            (PropertyIds.OBJECT_TYPE_ID): type,
-            (PropertyIds.NAME): name
-        ]
-
-        parentFolder.createFolder(properties)
-    }
-
-    Document createTextDocument(parent, String name, String content, String type = "cmis:document",
-            VersioningState versioningState = VersioningState.MAJOR) {
-        CmisObject parentFolder = getFolder(parent)
-
-        def properties = [
-            (PropertyIds.OBJECT_TYPE_ID): type,
-            (PropertyIds.NAME): name
-        ]
-
-        def stream = new ByteArrayInputStream(content.bytes)
-
-        def contentStream = session.objectFactory.createContentStream(name, content.bytes.length, "text/plain", stream)
-
-        parentFolder.createDocument(properties, contentStream, versioningState)
-    }
-
-    Document createDocumentFromFile(parent, File file, String type = "cmis:document",
-            VersioningState versioningState = VersioningState.MAJOR) {
-        CmisObject parentFolder = getFolder(parent)
-
-        def name = file.name
-        def mimetype = org.apache.chemistry.opencmis.commons.impl.MimeTypes.getMIMEType(file)
-
-        def properties = [
-            (PropertyIds.OBJECT_TYPE_ID): type,
-            (PropertyIds.NAME): name
-        ]
-
-        def contentStream = session.objectFactory.createContentStream(name, file.size(), mimetype, new FileInputStream(file))
-
-        parentFolder.createDocument(properties, contentStream, versioningState)
-    }
-
-    Relationship createRelationship(source, target, name, type) {
-        CmisObject sourceObject = getObject(source)
-        CmisObject targetObject = getObject(target)
-
-        def properties = [
-            (PropertyIds.OBJECT_TYPE_ID): type,
-            (PropertyIds.NAME): name,
-            (PropertyIds.SOURCE_ID): sourceObject.id,
-            (PropertyIds.TARGET_ID): targetObject.id
-        ]
-
-        getObject(session.createRelationship(properties))
-    }
-
-    void delete(id) {
-        if (id instanceof ObjectId) {
-            session.delete(id)
-        } else{
-            session.delete(session.createObjectId(id))
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/counttypes.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/counttypes.groovy
deleted file mode 100644
index 8cfdc58..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/counttypes.groovy
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-println "'cmis:document' and subtypes:     ${countTypes('cmis:document')}"
-println "'cmis:item' and subtypes:         ${countTypes('cmis:item')}"
-println "'cmis:folder' and subtypes:       ${countTypes('cmis:folder')}"
-println "'cmis:relationship' and subtypes: ${countTypes('cmis:relationship')}"
-println "'cmis:policy' and subtypes:       ${countTypes('cmis:policy')}"
-
-
-
-int countTypes(String typeId) {
-    def counter = 0
-
-    try {
-        session.getTypeDescendants(typeId, -1, false).each { counter += 1 + count(it) }
-        counter++
-    }
-    catch (any) {
-    }
-
-    counter
-}
-
-int count(Tree tree) {
-    def counter = 0
-    tree.children.each { counter += 1 + count(it) }
-
-    counter
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/download.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/download.groovy
deleted file mode 100644
index 9babe11..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/download.groovy
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-cmis = new scripts.CMIS(session)
-
-// destination folder
-File localFolder = new File("/some/local/folder")
-
-// source folder
-Folder sourceFolder = cmis.getFolder("/folder/to/download")
-
-// download folder tree
-download(localFolder, sourceFolder)
-
-
-//--------------------------------------------------
-
-def download(File localFolder, Folder sourceFolder) {
-    println "\nDownloading ${sourceFolder.name} to ${localFolder.absolutePath}\n"
-
-    sourceFolder.children.each { child ->
-        File newFile = new File(localFolder, child.name)
-
-        if (child instanceof Folder) {
-            println "[Folder] ${newFile.name}"
-            newFile.mkdir()
-
-            download(newFile, child)
-        }
-        else if (child instanceof Document) {
-            println "[File]   ${newFile.name}"
-            cmis.download(child, newFile)
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/getdescendants.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/getdescendants.groovy
deleted file mode 100644
index dc77f6a..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/getdescendants.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.client.api.*
-
-session.rootFolder.getDescendants(-1).each { printTree(it, 0) }
-
-def printTree(Tree tree, int depth) {
-    depth.times { print "  " }
-
-    println tree.item.name
-
-    tree.children.each { printTree(it, depth + 1) }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/mimetype.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/mimetype.groovy
deleted file mode 100644
index dd2e2b8..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/mimetype.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.client.api.*
-
-Document doc = session.getObject("...");
-
-MutableContentStream contentStream = doc.getContentStream();
-contentStream.setMimeType("application/other");
-
-doc.setContentStream(contentStream, true);
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/ping.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/ping.groovy
deleted file mode 100644
index ac8a1af..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/ping.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-CmisObject root = session.getRootFolder()
-
-ping({ root.refresh() })
-
-
-
-
-def ping(func, int sleepSeconds = 2, int turns = 100) {
-    func()
-
-    long total = 0
-    long max = 0
-    long min = Long.MAX_VALUE
-
-    for (i in 1..turns) {
-        long start = System.currentTimeMillis()
-        func()
-        long end = System.currentTimeMillis()
-
-        long time = end - start
-        total += time
-        max = max < time ? time : max
-        min = min > time ? time : min
-
-        println String.format('[%1s] %2$5d: %3$5d ms   (min: %4$5d ms, max: %5$5d ms, avg: %6$7.1f ms)',
-                (new Date(start)).format('yyyy-MM-dd hh:mm:ss'),
-                i,
-                time,
-                min,
-                max,
-                total / i)
-
-        sleep sleepSeconds * 1000
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/query.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/query.groovy
deleted file mode 100644
index 2cce542..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/query.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-String cql = "SELECT cmis:objectId, cmis:name, cmis:contentStreamLength FROM cmis:document"
-
-ItemIterable<QueryResult> results = session.query(cql, false)
-
-//ItemIterable<QueryResult> results = session.query(cql, false).getPage(10)
-//ItemIterable<QueryResult> results = session.query(cql, false).skipTo(10).getPage(10)
-
-results.each { hit ->
-    hit.properties.each { println "${it.queryName}: ${it.firstValue}" }
-    println "--------------------------------------"
-}
-
-println "--------------------------------------"
-println "Total number: ${results.totalNumItems}"
-println "Has more: ${results.hasMoreItems}"
-println "--------------------------------------"
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/script-library.properties b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/script-library.properties
deleted file mode 100644
index 94130f7..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/script-library.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-#
-# Add more scripts here.
-# key = script file, value = title
-#
-
-startup.groovy = - Demo -
-template.groovy = - Basic template -
-
-getdescendants.groovy = Print descendants tree
-query.groovy = Execute a query
-counttypes.groovy = Count types and sub types
-upload.groovy = Upload a local folder to the repository
-download.groovy = Download a repository folder to the local disk
-ping.groovy = Ping the repository
-stats.groovy = Count objects and bytes
-mimetype.groovy = Change document MIME type
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/startup.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/startup.groovy
deleted file mode 100644
index 8dc5215..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/startup.groovy
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-// variable 'session' is bound to the current OpenCMIS session
-
-
-// print the repository name - Java style
-println "Repository: " + session.getRepositoryInfo().getName()
-
-// print the repository name - Groovy style
-println "Repository: ${session.repositoryInfo.name}"
-
-
-// get root folder
-Folder root = session.getRootFolder()
-println "--- Root Folder: " + root.getName() + " ---"
-
-// print root folder children
-for(CmisObject object: root.getChildren()) {
-    println object.getName() + " \t(" + object.getType().getId() + ")"
-}
-
-// run a quick query
-for(QueryResult hit: session.query("SELECT * FROM cmis:document", false)) {
-    hit.properties.each{ println "${it.queryName}: ${it.firstValue}" }
-    println "----------------------------------"
-}
-
-// CMIS helper script
-def cmis = new scripts.CMIS(session)
-
-cmis.printProperties "/"                    // access by path
-cmis.printProperties session.rootFolder.id  // access by id
-cmis.printProperties session.rootFolder     // access by object
-
-// Folder folder = cmis.createFolder("/", "test-folder", "cmis:folder")
-
-// Document doc = cmis.createTextDocument(folder, "test.txt", "Hello World!", "cmis:document")
-// cmis.printProperties doc
-// cmis.download(doc, "/some/path/helloWorld.txt")
-// cmis.delete doc.id
-
-// cmis.delete folder
-
-
-// see /scripts/CMIS.groovy for more methods
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/stats.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/stats.groovy
deleted file mode 100644
index 4ea03e7..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/stats.groovy
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-Folder folder = (Folder) session.getObjectByPath("/")
-
-
-def stats = count(folder, true)
-
-println "Folder ${folder.name}"
-println "----------------------------------------------"
-println "Folders:   ${stats['folders']}"
-println "Documents: ${stats['documents']}"
-println "Items:     ${stats['items']}"
-println "Policies:  ${stats['policies']}"
-println "Content:   ${stats['bytes']} bytes"
-
-
-
-def count(Folder folder, boolean tree = false) {
-    def stats = [:]
-    stats["folders"] = 0
-    stats["documents"] = 0
-    stats["items"] = 0
-    stats["policies"] = 0
-    stats["bytes"] = 0
-
-    OperationContext oc = session.createOperationContext()
-    oc.setFilterString("cmis:objectId,cmis:contentStreamLength")
-    oc.setIncludeAllowableActions(false)
-    oc.setMaxItemsPerPage(10000)
-
-    countInternal(folder, tree, oc, stats)
-
-    stats
-}
-
-def countInternal(Folder folder, boolean tree, OperationContext oc, def stats) {
-    folder.getChildren(oc).each { child ->
-        if (child instanceof Folder) {
-            stats["folders"]++
-            if (tree) {
-                countInternal(child, true, oc, stats)
-            }
-        } else if (child instanceof Document) {
-            stats["documents"]++
-            long size = ((Document) child).getContentStreamLength()
-            if (size > 0) {
-                stats["bytes"] += size
-            }
-        } else if (child instanceof Item) {
-            stats["item"]++
-        } else if (child instanceof Policy) {
-            stats["policies"]++
-        }
-    }
-}
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/template.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/template.groovy
deleted file mode 100644
index f4d3aee..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/template.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-// def cmis = new scripts.CMIS(session)
-// println session.repositoryInfo.name
-// cmis.printObjectSummary "/"
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/upload.groovy b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/upload.groovy
deleted file mode 100644
index ef5b768..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/upload.groovy
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.chemistry.opencmis.commons.*
-import org.apache.chemistry.opencmis.commons.data.*
-import org.apache.chemistry.opencmis.commons.enums.*
-import org.apache.chemistry.opencmis.client.api.*
-
-cmis = new scripts.CMIS(session)
-
-// destination folder
-Folder destFolder = cmis.getFolder("/")
-
-// source folder
-String localPath = "/some/local/folder"
-
-// upload folder tree
-upload(destFolder, localPath)
-
-
-//--------------------------------------------------
-
-def upload(destination, String localPath,
-        String folderType = "cmis:folder",
-        String documentType = "cmis:document",
-        VersioningState versioningState = VersioningState.MAJOR) {
-
-    println "Uploading...\n"
-    doUpload(destination, new File(localPath), folderType, documentType, versioningState)
-    println "\n...done."
-}
-
-def doUpload(Folder parent, File folder, String folderType, String documentType, VersioningState versioningState) {
-    folder.eachFile {
-        if (it.name.startsWith(".")) {
-            println "Skipping ${it.name}"
-            return
-        }
-
-        println it.name
-
-        if (it.isFile()) {
-            cmis.createDocumentFromFile(parent, it, documentType, versioningState)
-        }
-        else if(it.isDirectory()) {
-            Folder newFolder = cmis.createFolder(parent, it.name, folderType)
-            doUpload(newFolder, it, folderType, documentType, versioningState)
-        }
-    }
-}
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/info.plist b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/info.plist
deleted file mode 100644
index ca55564..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-    <key>CFBundleName</key>
-    <string>CMIS Workbench @versionnumber@</string>
-    <key>CFBundleIdentifier</key>
-    <string>org.apache.chemistry.opencmis.workbench</string>
-    <key>CFBundleExecutable</key>
-    <string>run.sh</string>
-    <key>CFBundleIconFile</key>
-    <string>icon.icns</string>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>1.0</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleSignature</key>
-    <string>????</string>
-    <key>CFBundleVersion</key>
-    <string>@versionnumber@</string>
-</dict>
-</plist>
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/run.sh b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/run.sh
deleted file mode 100644
index 4964084..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/run.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-"$(dirname "$0")/../Resources/workbench.sh"
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.bat b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.bat
deleted file mode 100644
index a929d07..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem Licensed to the Apache Software Foundation (ASF) under one or more
-rem contributor license agreements.  See the NOTICE file distributed with
-rem this work for additional information regarding copyright ownership.
-rem The ASF licenses this file to You under the Apache License, Version 2.0
-rem (the "License"); you may not use this file except in compliance with
-rem the License.  You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-rem @version@
-
-cd %~dp0\lib
-
-rem use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-rem uncomment the following lines to configure HTTP proxy
-
-rem set http_proxy=http://<proxy>:<port>
-rem set https_proxy=https://<proxy>:<port>
-rem set no_proxy=localhost,127.0.0.0,.local
-
-
-for /F "delims=/" %%x in ('"java -classpath .;* org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s"') do set "JAVA_PROXY_CONF=%%x"
-set JAVA_OPTS=%JAVA_PROXY_CONF% -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=axis2
-
-start /B javaw %JAVA_OPTS% %CUSTOM_JAVA_OPTS% -classpath ".;*" org.apache.chemistry.opencmis.workbench.Workbench
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.sh b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.sh
deleted file mode 100644
index 7e804e5..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-axis2.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# @version@
-
-if [ -z "$JAVA_HOME" ]; then
-  j=$(which java 2>/dev/null)
-  if [ -z "$j" ]; then
- 	echo "Unable to locate Java!"
-    exit 1
-  else
-    JAVA="$j"
-  fi
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-
-SCRIPT_DIR=$(dirname "$0")
-cd "$SCRIPT_DIR/lib"
-
-WCP="."
-for i in *.jar; do
-  WCP="$i:${WCP}"
-done
-
-# use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-# uncomment the following lines to configure HTTP proxy
-
-# export http_proxy=http://<proxy>:<port>
-# export https_proxy=https://<proxy>:<port>
-# export no_proxy=localhost,127.0.0.0,.local
-
-
-JAVA_PROXY_CONF=$($JAVA -classpath $WCP org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s)
-JAVA_OPTS="$JAVA_PROXY_CONF -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=axis2"
-
-exec $JAVA $JAVA_OPTS $CUSTOM_JAVA_OPTS -classpath $WCP org.apache.chemistry.opencmis.workbench.Workbench &
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.bat b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.bat
deleted file mode 100644
index 07b7892..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem Licensed to the Apache Software Foundation (ASF) under one or more
-rem contributor license agreements.  See the NOTICE file distributed with
-rem this work for additional information regarding copyright ownership.
-rem The ASF licenses this file to You under the Apache License, Version 2.0
-rem (the "License"); you may not use this file except in compliance with
-rem the License.  You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-rem @version@
-
-cd %~dp0\lib
-
-rem use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-rem uncomment the following lines to configure HTTP proxy
-
-rem set http_proxy=http://<proxy>:<port>
-rem set https_proxy=https://<proxy>:<port>
-rem set no_proxy=localhost,127.0.0.0,.local
-
-
-for /F "delims=/" %%x in ('"java -classpath .;* org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s"') do set "JAVA_PROXY_CONF=%%x"
-set JAVA_OPTS=%JAVA_PROXY_CONF% -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=cxf
-
-start /B javaw %JAVA_OPTS% %CUSTOM_JAVA_OPTS% -classpath ".;*" org.apache.chemistry.opencmis.workbench.Workbench
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.sh b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.sh
deleted file mode 100644
index 1260575..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-cxf.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# @version@
-
-if [ -z "$JAVA_HOME" ]; then
-  j=$(which java 2>/dev/null)
-  if [ -z "$j" ]; then
- 	echo "Unable to locate Java!"
-    exit 1
-  else
-    JAVA="$j"
-  fi
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-
-SCRIPT_DIR=$(dirname "$0")
-cd "$SCRIPT_DIR/lib"
-
-WCP="."
-for i in *.jar; do
-  WCP="$i:${WCP}"
-done
-
-# use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-# uncomment the following lines to configure HTTP proxy
-
-# export http_proxy=http://<proxy>:<port>
-# export https_proxy=https://<proxy>:<port>
-# export no_proxy=localhost,127.0.0.0,.local
-
-
-JAVA_PROXY_CONF=$($JAVA -classpath $WCP org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s)
-JAVA_OPTS="$JAVA_PROXY_CONF -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=cxf"
-
-exec $JAVA $JAVA_OPTS $CUSTOM_JAVA_OPTS -classpath $WCP org.apache.chemistry.opencmis.workbench.Workbench &
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.bat b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.bat
deleted file mode 100644
index 2b04377..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem Licensed to the Apache Software Foundation (ASF) under one or more
-rem contributor license agreements.  See the NOTICE file distributed with
-rem this work for additional information regarding copyright ownership.
-rem The ASF licenses this file to You under the Apache License, Version 2.0
-rem (the "License"); you may not use this file except in compliance with
-rem the License.  You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-rem @version@
-
-cd %~dp0\lib
-
-rem use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-rem uncomment the following lines to configure HTTP proxy
-
-rem set http_proxy=http://<proxy>:<port>
-rem set https_proxy=https://<proxy>:<port>
-rem set no_proxy=localhost,127.0.0.0,.local
-
-
-for /F "delims=/" %%x in ('"java -classpath .;* org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s"') do set "JAVA_PROXY_CONF=%%x"
-set JAVA_OPTS=%JAVA_PROXY_CONF% -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=sunri
-
-start /B javaw %JAVA_OPTS% %CUSTOM_JAVA_OPTS% -classpath ".;*" org.apache.chemistry.opencmis.workbench.Workbench
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.sh b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.sh
deleted file mode 100644
index fde7f83..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench-ri.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# @version@
-
-if [ -z "$JAVA_HOME" ]; then
-  j=$(which java 2>/dev/null)
-  if [ -z "$j" ]; then
- 	echo "Unable to locate Java!"
-    exit 1
-  else
-    JAVA="$j"
-  fi
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-
-SCRIPT_DIR=$(dirname "$0")
-cd "$SCRIPT_DIR/lib"
-
-WCP="."
-for i in *.jar; do
-  WCP="$i:${WCP}"
-done
-
-# use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-# uncomment the following lines to configure HTTP proxy
-
-# export http_proxy=http://<proxy>:<port>
-# export https_proxy=https://<proxy>:<port>
-# export no_proxy=localhost,127.0.0.0,.local
-
-
-JAVA_PROXY_CONF=$($JAVA -classpath $WCP org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s)
-JAVA_OPTS="$JAVA_PROXY_CONF -Dorg.apache.chemistry.opencmis.binding.webservices.jaxws.impl=sunri"
-
-exec $JAVA $JAVA_OPTS $CUSTOM_JAVA_OPTS -classpath $WCP org.apache.chemistry.opencmis.workbench.Workbench &
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.bat b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.bat
deleted file mode 100644
index 9446846..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem Licensed to the Apache Software Foundation (ASF) under one or more
-rem contributor license agreements.  See the NOTICE file distributed with
-rem this work for additional information regarding copyright ownership.
-rem The ASF licenses this file to You under the Apache License, Version 2.0
-rem (the "License"); you may not use this file except in compliance with
-rem the License.  You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-rem @version@
-
-cd %~dp0\lib
-
-rem use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-rem uncomment the following lines to configure HTTP proxy
-
-rem set http_proxy=http://<proxy>:<port>
-rem set https_proxy=https://<proxy>:<port>
-rem set no_proxy=localhost,127.0.0.0,.local
-
-
-for /F "delims=/" %%x in ('"java -classpath .;* org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s"') do set "JAVA_PROXY_CONF=%%x"
-set JAVA_OPTS=%JAVA_PROXY_CONF%
-
-start /B javaw %JAVA_OPTS% %CUSTOM_JAVA_OPTS% -classpath ".;*" org.apache.chemistry.opencmis.workbench.Workbench
\ No newline at end of file
diff --git a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.sh b/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.sh
deleted file mode 100644
index 13972d9..0000000
--- a/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/start/workbench.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-# #!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# @version@
-
-if [ -z "$JAVA_HOME" ]; then
-  j=$(which java 2>/dev/null)
-  if [ -z "$j" ]; then
- 	echo "Unable to locate Java!"
-    exit 1
-  else
-    JAVA="$j"
-  fi
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-
-SCRIPT_DIR=$(dirname "$0")
-cd "$SCRIPT_DIR/lib"
-
-WCP="."
-for i in *.jar; do
-  WCP="$i:${WCP}"
-done
-
-# use variable CUSTOM_JAVA_OPTS to set additional JAVA options
-
-# uncomment the following lines to configure HTTP proxy
-
-# export http_proxy=http://<proxy>:<port>
-# export https_proxy=https://<proxy>:<port>
-# export no_proxy=localhost,127.0.0.0,.local
-
-
-JAVA_PROXY_CONF=$($JAVA -classpath $WCP org.apache.chemistry.opencmis.workbench.ProxyDetector -j -s)
-JAVA_OPTS="$JAVA_PROXY_CONF"
-
-exec $JAVA $JAVA_OPTS $CUSTOM_JAVA_OPTS -classpath $WCP org.apache.chemistry.opencmis.workbench.Workbench &
\ No newline at end of file
diff --git a/trunk/pom.xml b/trunk/pom.xml
deleted file mode 100644
index e763dab..0000000
--- a/trunk/pom.xml
+++ /dev/null
@@ -1,718 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>16</version>
-    </parent>
-
-    <!-- Project Information -->
-
-    <groupId>org.apache.chemistry.opencmis</groupId>
-    <artifactId>chemistry-opencmis</artifactId>
-    <name>Apache Chemistry OpenCMIS</name>
-    <version>0.13.0</version>
-    <packaging>pom</packaging>
-
-    <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-    </organization>
-
-    <url>http://chemistry.apache.org/java/</url>
-    
-    <ciManagement>
-        <system>Hudson Zones Apache</system>
-        <url>http://hudson.zones.apache.org/hudson/view/Chemistry/</url>
-    </ciManagement>
-    <inceptionYear>2009</inceptionYear>
-    <description>
-        Apache Chemistry OpenCMIS is an open source implementation of the OASIS CMIS specification.
-    </description>
-
-    <licenses>
-        <license>
-            <name>Apache 2</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/chemistry/opencmis/tags/chemistry-opencmis-0.13.0-RC1</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/chemistry/opencmis/tags/chemistry-opencmis-0.13.0-RC1</developerConnection>
-        <url>http://svn.apache.org/viewvc/chemistry/opencmis/tags/chemistry-opencmis-0.13.0-RC1</url>
-    </scm>
-
-    <distributionManagement>
-        <site>
-            <id>${site.staging.id}</id>
-            <url>${site.staging.url}</url>
-        </site>
-    </distributionManagement>
-
-    <issueManagement>
-        <system>Jira</system>
-        <url>https://issues.apache.org/jira/browse/CMIS</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>Chemistry Development List</name>
-            <subscribe>dev-subscribe@chemistry.apache.org</subscribe>
-            <unsubscribe>dev-unsubscribe@chemistry.apache.org</unsubscribe>
-            <post>dev@chemistry.apache.org</post>
-            <archive>
-                http://mail-archives.apache.org/mod_mbox/chemistry-dev/
-            </archive>
-        </mailingList>
-        <mailingList>
-            <name>Chemistry Source Control List</name>
-            <subscribe>commits-subscribe@chemistry.apache.org</subscribe>
-            <unsubscribe>commits-unsubscribe@chemistry.apache.org</unsubscribe>
-            <post>commits@chemistry.apache.org</post>
-            <archive>
-                http://mail-archives.apache.org/mod_mbox/chemistry-commits/
-            </archive>
-        </mailingList>
-    </mailingLists>
-
-    <developers>
-        <developer>
-            <name>Florian Müller</name>
-            <id>fmui</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Jens Hübel</name>
-            <id>jenshuebel</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>David Ward</name>
-            <id>dward</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Martin Hermes</name>
-            <id>hermesm</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Paul Goetz</name>
-            <id>paulgoetz</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>David Caruana</name>
-            <id>dcaruana</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Gabriele Columbro</name>
-            <id>gabriele</id>
-            <email>gabriele@apache.org</email>
-            <roles>
-                <role>release manager</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Florent Guillaume</name>
-            <id>fguillaume</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Stefane Fermigier</name>
-            <id>sfermigier</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-        <developer>
-            <name>Jean Marie Pascal</name>
-            <id>jmpascal</id>
-            <roles>
-                <role>committer</role>
-            </roles>
-        </developer>
-    </developers>
-
-
-    <!-- Project Environment -->
-    <modules>
-        <module>chemistry-opencmis-commons/chemistry-opencmis-commons-api</module>
-        <module>chemistry-opencmis-commons/chemistry-opencmis-commons-impl</module>
-        <module>chemistry-opencmis-client/chemistry-opencmis-client-api</module>
-        <module>chemistry-opencmis-client/chemistry-opencmis-client-impl</module>
-        <module>chemistry-opencmis-client/chemistry-opencmis-client-bindings</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-support</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-bindings</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-bindings-war</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-inmemory</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-fileshare</module>
-        <!-- <module>chemistry-opencmis-server/chemistry-opencmis-server-jcr</module> -->
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-archetype</module>
-        <module>chemistry-opencmis-server/chemistry-opencmis-server-extension-archetype</module>
-        <module>chemistry-opencmis-bridge/chemistry-opencmis-bridge</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-fit</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-tck</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-tools</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-util</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-browser</module>
-        <module>chemistry-opencmis-test/chemistry-opencmis-test-browser-app</module>
-        <module>chemistry-opencmis-workbench/chemistry-opencmis-workbench</module>
-        <module>chemistry-opencmis-osgi/chemistry-opencmis-osgi-client</module>
-        <module>chemistry-opencmis-android/chemistry-opencmis-android-client</module>
-        <module>chemistry-opencmis-dist</module>
-    </modules>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <docs.start.url>http://chemistry.apache.org/java/opencmis.html</docs.start.url>
-        <docs.download.directory>${project.build.directory}/downloaded-site</docs.download.directory>
-        <!--  
-            | Here we configure Maven documentation site (incl. Javadocs) deployment 
-            |
-            | By default site is deployed to:
-            | https://svn.apache.org/repos/asf/chemistry/site/trunk/content/java/${site.label}/maven/ 
-            | where site.label = project.version 
-            
-            | For details/changes see http://chemistry.apache.org/java/documentation-lifecycle.html
-            |
-            | Note: Site label (or any other property like site.staging.url) can be overriden on the command line to deploy to distinct location during site development
-            -->
-        <site.label>${project.version}</site.label>
-        <site.staging.id>apache-site-staging</site.staging.id>
-        <!-- We're using wagon-svn to deploy directly to svn.apache.org to feed CMS with generated docs -->
-        <site.staging.protocol>svn:https</site.staging.protocol>
-        <site.staging.host>svn.apache.org</site.staging.host>
-        <site.staging.folder>/repos/asf/chemistry/site/trunk/content/java/${site.label}/maven</site.staging.folder>
-        <site.staging.url>${site.staging.protocol}://${site.staging.host}${site.staging.folder}</site.staging.url>
-        <parentBasedir>${project.basedir}</parentBasedir>
-
-        <woodstox.version>4.4.0</woodstox.version>
-        <osgi.version>5.0.0</osgi.version>
-        <felix.plugin.version>2.3.7</felix.plugin.version>
-        <junit.version>4.11</junit.version>
-        <slf4j.version>1.7.5</slf4j.version>
-        <log4j.version>1.2.17</log4j.version>
-        <apacheclient.version>4.2.6</apacheclient.version>
-        <jaxws-rt.version>2.1.7</jaxws-rt.version>
-        <cxf.version>2.7.11</cxf.version>
-        <axis2.version>1.6.2</axis2.version>
-        <mimepull.version>1.9.4</mimepull.version>
-    </properties>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.antlr</groupId>
-                    <artifactId>antlr3-maven-plugin</artifactId>
-                    <version>3.3</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.antlr</groupId>
-                    <artifactId>maven-gunit-plugin</artifactId>
-                    <version>3.3</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.4</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-antrun-plugin</artifactId>
-                    <version>1.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>exec-maven-plugin</artifactId>
-                    <version>1.2.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-war-plugin</artifactId>
-                    <version>2.4</version>
-                    <configuration>
-                        <archive>
-                            <manifestEntries>
-                                <DisableIBMJAXWSEngine>true</DisableIBMJAXWSEngine>
-                            </manifestEntries>
-                        </archive>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-remote-resources-plugin</artifactId>
-                    <version>1.4</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-archetype-plugin</artifactId>
-                     <version>2.2</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>buildnumber-maven-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>create</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <doCheck>false</doCheck>
-                    <doUpdate>false</doUpdate>
-                    <getRevisionOnlyOnce>true</getRevisionOnlyOnce>
-                    <revisionOnScmFailure>?</revisionOnScmFailure>
-                    <timestampFormat>{0,date,yyyy-MM-dd'T'HH:mm:ssZ}</timestampFormat>
-                </configuration>
-            </plugin>
-            <!-- Working, but not attached to the deployment. 
-            Blocked on http://jira.codehaus.org/browse/MINSTALL-82
-            <plugin>
-                <groupId>net.ju-n.maven.plugins</groupId>
-                <artifactId>checksum-maven-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>artifacts</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <algorithms>
-                        <algorithm>SHA-256</algorithm>
-                    </algorithms>
-                </configuration>
-            </plugin>
-             -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archiveClasses>true</archiveClasses>
-                    <attachClasses>true</attachClasses>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
-                            <X-Apache-SVN-Revision>${buildNumber}</X-Apache-SVN-Revision>
-                            <Implementation-Title>${project.name}</Implementation-Title>
-                            <Implementation-Version>${project.version}</Implementation-Version>
-                            <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
-                            <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-release-plugin</artifactId>
-                <version>2.5</version>
-                <configuration>
-                    <useReleaseProfile>false</useReleaseProfile>
-                    <!-- TODO: Add autogenerated JIRA release notes -->
-                    <preparationGoals>clean install</preparationGoals>
-                    <goals>deploy site</goals>
-                    <arguments>-Papache-release</arguments>
-                    <!-- Add this profile to also deploy the site upon release -->
-                    <!-- <arguments>-Papache-release,site-deploy</arguments> -->
-                    <autoVersionSubmodules>true</autoVersionSubmodules>
-                    <username>${apache.username}</username>
-                    <password>${apache.password}</password>
-                    <!-- To lock files during release -->
-                    <useEditMode>true</useEditMode>
-                </configuration>
-            </plugin>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <target>${maven.compile.target}</target>
-                    <source>${maven.compile.source}</source>
-                    <encoding>UTF-8</encoding>
-                    <forceJavacCompilerUse>true</forceJavacCompilerUse>
-                    <compilerArgument>-XDignore.symbol.file</compilerArgument>
-                </configuration>
-            </plugin>
-            <plugin>
-                <inherited>true</inherited>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>2.2.1</version>
-                <executions>
-                    <execution>
-                        <id>attach-sources</id>
-                        <goals>
-                            <goal>jar-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <includePom>true</includePom>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.6</version>
-                <configuration>
-                    <encoding>UTF-8</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <configuration>
-                    <appendedResourcesDirectory>${parentBasedir}/src/main/appended-resources</appendedResourcesDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-eclipse-plugin</artifactId>
-                <version>2.9</version>
-                <configuration>
-                    <downloadSources>true</downloadSources>
-                    <downloadJavadocs>true</downloadJavadocs>
-                    <workspace>.</workspace>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.sonatype.plugins</groupId>
-                <artifactId>maven-version-plugin</artifactId>
-                <version>1.0</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <version>2.10</version>
-                <configuration>
-                    <configLocation>src/main/resources/checkstyle.xml</configLocation>
-                    <suppressionsLocation>src/main/resources/suppressions.xml</suppressionsLocation>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.14.1</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>3.3</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-gpg-plugin</artifactId>
-                <version>1.4</version>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
-                            <X-Apache-SVN-Revision>${buildNumber}</X-Apache-SVN-Revision>
-                            <Implementation-Title>${project.name}</Implementation-Title>
-                            <Implementation-Version>${project.version}</Implementation-Version>
-                            <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
-                            <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-deploy-plugin</artifactId>
-                <version>2.8.1</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>com.google.code.maven-svn-wagon</groupId>
-                        <artifactId>maven-svn-wagon</artifactId>
-                        <version>1.4</version>
-                    </dependency>
-                </dependencies>
-                <configuration>
-                    <deployAtEnd>false</deployAtEnd>
-                </configuration>
-            </plugin>
-        </plugins>
-        <extensions>
-             <extension>
-                 <groupId>com.google.code.maven-svn-wagon</groupId>
-                 <artifactId>maven-svn-wagon</artifactId>
-                 <version>1.4</version>
-             </extension>
-        </extensions>
-    </build>
-
-    <repositories>
-        <repository>
-            <id>jboss.public</id>
-            <name>JBoss repository (for JAX-WS 2.1.7)</name>
-            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
-        </repository>
-        <repository>
-            <id>maven2-repository.dev.java.net</id>
-            <name>Java.net Repository for Maven 2</name>
-            <url>http://download.java.net/maven/2/</url>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>maven2-repository.dev.java.net</id>
-            <url>http://download.java.net/maven/2/</url>
-        </pluginRepository>
-        <pluginRepository>
-            <id>jboss-public</id>
-            <name>Jboss Repository for Maven 2</name>
-            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
-        </pluginRepository>
-    </pluginRepositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>${slf4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <type>jar</type>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-report-plugin</artifactId>
-                <version>2.14.1</version>
-                <configuration>
-                    <aggregate>true</aggregate>
-                    <reportsDirectories>
-                        <reportsDirectory>${project.build.directory}/surefire-reports/</reportsDirectory>
-                        <reportsDirectory>${project.build.directory}/failsafe-reports/</reportsDirectory>
-                    </reportsDirectories>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jxr-plugin</artifactId>
-                <version>2.2</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-                <version>2.7</version>
-            </plugin>
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-javadoc-plugin</artifactId>
-              <version>2.9</version>
-              <inherited>false</inherited>
-              <reportSets>
-                <reportSet>
-                  <id>aggregate</id>
-                  <reports>
-                    <report>aggregate</report>
-                  </reports>
-                </reportSet>
-              </reportSets>
-              <configuration>
-                  <doctitle>Apache Chemistry OpenCMIS ${project.version}</doctitle>
-                  <windowtitle>Apache Chemistry OpenCMIS ${project.version}</windowtitle>
-                  <!-- TODO: Update this for new packages -->
-                  <groups>
-                      <group>
-                          <title>OpenCMIS Client API</title>
-                          <packages>org.apache.chemistry.opencmis.client:org.apache.chemistry.opencmis.client.api:org.apache.chemistry.opencmis.client.util</packages>
-                      </group>
-                      <group>
-                          <title>OpenCMIS Commons API</title>
-                          <packages>org.apache.chemistry.opencmis.commons:org.apache.chemistry.opencmis.commons.*</packages>
-                      </group>
-                      <group>
-                          <title>OpenCMIS Bindings SPI</title>
-                          <packages>org.apache.chemistry.opencmis.client.bindings</packages>
-                      </group>
-                      <group>
-                          <title>OpenCMIS Server</title>
-                          <packages>org.apache.chemistry.opencmis.commons.server:org.apache.chemistry.opencmis.commons.impl.server:org.apache.chemistry.opencmis.server.support:org.apache.chemistry.opencmis.server.support.query:org.apache.chemistry.opencmis.server.filter:org.apache.chemistry.opencmis.server.shared</packages>
-                      </group>
-                      <group>
-                          <title>OpenCMIS Bridge</title>
-                          <packages>org.apache.chemistry.opencmis.bridge*</packages>
-                      </group>
-                      <group>
-                          <title>OpenCMIS TCK</title>
-                          <packages>org.apache.chemistry.opencmis.tck*</packages>
-                      </group>
-                    </groups>
-                    <!--<excludePackageNames>org.apache.chemistry.opencmis.commons.impl:org.apache.chemistry.opencmis.commons.impl.dataobjects:org.apache.chemistry.opencmis.client.runtime:org.apache.chemistry.opencmis.client.runtime.*:org.apache.chemistry.opencmis.commons.impl.jaxb:org.apache.chemistry.opencmis.client.bindings.impl:org.apache.chemistry.opencmis.client.bindings.cache:org.apache.chemistry.opencmis.client.bindings.spi:org.apache.chemistry.opencmis.server.impl:org.apache.chemistry.opencmis.fit:org.apache.chemistry.opencmis.util.repository:org.apache.chemistry.opencmis.fileshare:org.apache.chemistry.opencmis.fileshare:org.apache.chemistry.opencmis.inmemory:org.apache.chemistry.opencmis.fileshare:org.apache.chemistry.opencmis.jcr:org.apache.chemistry.opencmis.browser:org.apache.chemistry.opencmis.workbench:org.apache.chemistry.opencmis.commander:org.apache.chemistry.opencmis.client.osgi</excludePackageNames>-->
-                    <sourceFileExcludes>
-                      <exclude>**/CmisQl*</exclude>
-                      <exclude>**/CmisQueryWalk*</exclude>
-                      <exclude>**/TextSearch*</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/*</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/dataobjects/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/json/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/tube/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/jaxb/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/server/ObjectInfoImpl*</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commons/impl/server/RenditionInfoImpl*</exclude>
-                      <exclude>org/apache/chemistry/opencmis/client/runtime/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/client/bindings/impl/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/client/bindings/cache/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/client/bindings/spi/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/server/impl/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/server/shared/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/server/support/filter/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/fit/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/util/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/fileshare/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/inmemory/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/jcr/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/browser/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/workbench/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/commander/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/client/osgi/**</exclude>
-                      <exclude>org/apache/chemistry/opencmis/tools/**</exclude>
-                    </sourceFileExcludes>
-                    <tags>
-                      <tag>
-                        <name>cmis</name>
-                        <placement>a</placement>
-                        <head>CMIS:</head>
-                      </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <profiles>
-        <!--
-            Extending the default -Papache-release profile used *only*
-            during releases
-        -->
-        <profile>
-            <id>apache-release</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <!-- Generates aggregated javadocs -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-javadoc-plugin</artifactId>
-                        <version>2.8.1</version>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>generate-docs</id>
-                                <goals>
-                                    <goal>aggregate</goal>
-                                </goals>
-                                <phase>generate-resources</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <!--
-                        We want to package up licenses
-                        resources in the JARs produced
-                    -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-remote-resources-plugin</artifactId>
-                        <configuration>
-                            <appendedResourcesDirectory>${parentBasedir}/src/main/appended-resources</appendedResourcesDirectory>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-war-plugin</artifactId>
-                        <configuration>
-                            <webResources>
-                                <resource>
-                                    <!-- this is relative to the pom.xml directory -->
-                                    <directory>${project.build.directory}/maven-shared-archive-resources</directory>
-                                    <includes>
-                                        <include>META-INF/*</include>
-                                    </includes>
-                                </resource>
-                            </webResources>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>site-deploy</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-site-plugin</artifactId>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>site-deploy-toplevel</id>
-                                <goals>
-                                    <goal>deploy</goal>
-                                </goals>
-                                <phase>site</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-</project>
\ No newline at end of file
diff --git a/trunk/src/main/appended-resources/META-INF/LICENSE b/trunk/src/main/appended-resources/META-INF/LICENSE
deleted file mode 100644
index 64e7237..0000000
--- a/trunk/src/main/appended-resources/META-INF/LICENSE
+++ /dev/null
@@ -1,6 +0,0 @@
-
-EXTERNAL DEPENDENCIES
-
-This software depends on libraries with separate copyright notices and
-license terms. Your use of these dependencies is subject to the licenses
-referred to in the separate DEPENDENCIES file.
\ No newline at end of file
diff --git a/trunk/src/main/appended-resources/META-INF/NOTICE b/trunk/src/main/appended-resources/META-INF/NOTICE
deleted file mode 100644
index 64e7237..0000000
--- a/trunk/src/main/appended-resources/META-INF/NOTICE
+++ /dev/null
@@ -1,6 +0,0 @@
-
-EXTERNAL DEPENDENCIES
-
-This software depends on libraries with separate copyright notices and
-license terms. Your use of these dependencies is subject to the licenses
-referred to in the separate DEPENDENCIES file.
\ No newline at end of file
diff --git a/trunk/src/main/appended-resources/supplemental-models.xml b/trunk/src/main/appended-resources/supplemental-models.xml
deleted file mode 100644
index 40c5e30..0000000
--- a/trunk/src/main/appended-resources/supplemental-models.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<supplementalDataModels>
-    <supplement>
-        <project>
-            <groupId>javax.xml.ws</groupId>
-            <artifactId>jaxws-api</artifactId>
-            <version>2.1</version>
-            <name>JAX-WS (JSR-224) API</name>
-            <url>https://jax-ws.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-impl</artifactId>
-            <version>2.1.11</version>
-            <name>Sun JAXB Reference Implementation Runtime</name>
-            <url>https://jaxb.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>com.sun.xml.messaging.saaj</groupId>
-            <artifactId>saaj-impl</artifactId>
-            <version>1.3.3</version>
-            <name>Sun SAAJ Standard Implementation</name>
-            <url>https://saaj.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.xml.soap</groupId>
-            <artifactId>saaj-api</artifactId>
-            <version>1.3</version>
-            <name>SAAJ API</name>
-            <url>https://saaj.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>com.sun.xml.stream.buffer</groupId>
-            <artifactId>streambuffer</artifactId>
-            <version>0.9</version>
-            <name>XML Stream Buffer Project</name>
-            <url>https://xmlstreambuffer.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.xml.bind</groupId>
-            <artifactId>jaxb-api</artifactId>
-            <version>2.1</version>
-            <name>Java Architecture for XML Binding</name>
-            <url>https://jaxb.dev.java.net/</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Common Development And Distribution License (CDDL) Version 1.0</name>
-                    <url>http://www.sun.com/cddl/cddl.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1</version>
-            <name>JavaBeans(TM) Activation Framework Specification</name>
-            <url>http://www.oracle.com/technetwork/java/jaf11-139815.html</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Common Development And Distribution License (CDDL) Version 1.0</name>
-                    <url>http://www.sun.com/cddl/cddl.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.annotation</groupId>
-            <artifactId>jsr250-api</artifactId>
-            <version>1.1</version>
-            <name>JSR-250 Common Annotations for the Java(TM) Platform</name>
-            <url>http://jcp.org/aboutJava/communityprocess/final/jsr250/index.html</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Common Development And Distribution License (CDDL) Version 1.0</name>
-                    <url>http://www.sun.com/cddl/cddl.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.jws</groupId>
-            <artifactId>jsr181-api</artifactId>
-            <version>1.0-MR1</version>
-            <name>Web Services Metadata for Java</name>
-            <url>http://jcp.org/en/jsr/summary?id=181</url>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>com.sun.org.apache.xml.internal</groupId>
-            <artifactId>resolver</artifactId>
-            <version>20050927</version>
-            <name>XML Resolver library</name>
-            <organization>
-                <name>Sun Microsystems, Inc</name>
-                <url>http://www.sun.com/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Apache 2</name>
-                    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>javax.xml.stream</groupId>
-            <artifactId>stax-api</artifactId>
-            <version>1.0</version>
-            <name>Streaming API for XML</name>
-            <url>http://stax.codehaus.org</url>
-            <organization>
-                <name>BEA Systems</name>
-            </organization>
-            <licenses>
-                <license>
-                    <name>Dual license consisting of the CDDL v1.0 and GPL v2</name>
-                    <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>org.jvnet.staxex</groupId>
-            <artifactId>stax-ex</artifactId>
-            <version>1.2</version>
-            <name>StAX-Ex Project</name>
-            <organization>
-                <name>Java.net</name>
-                <url>http://dev.java.net</url>
-            </organization>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>org.jvnet</groupId>
-            <artifactId>mimepull</artifactId>
-            <version>1.3</version>
-            <url>https://mimepull.dev.java.net</url>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>stax</groupId>
-            <artifactId>stax-api</artifactId>
-            <version>1.0.1</version>
-            <organization>
-                <name>Codehaus</name>
-                <url>http://codehaus.org</url>
-            </organization>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>antlr</groupId>
-            <artifactId>antlr</artifactId>
-            <version>2.7.7</version>
-            <organization>
-                <name>ANTLR</name>
-                <url>http://www.antlr.org/</url>
-            </organization>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr-runtime</artifactId>
-            <version>3.2</version>
-            <organization>
-                <name>ANTLR</name>
-                <url>http://www.antlr.org/</url>
-            </organization>
-            <licenses>
-                <license>
-                    <name>BSD licence</name>
-                    <url>http://antlr.org/license.html</url>
-                </license>
-            </licenses>
-        </project>
-    </supplement>
-    <supplement>
-        <project>
-            <groupId>org.antlr</groupId>
-            <artifactId>stringtemplate</artifactId>
-            <version>3.2</version>
-            <organization>
-                <name>ANTLR</name>
-                <url>http://www.antlr.org/</url>
-            </organization>
-        </project>
-    </supplement>
-     <supplement>
-        <project>
-            <groupId>net.sf.jopt-simple</groupId>
-            <artifactId>jopt-simple</artifactId>
-            <version>3.2</version>
-            <organization>
-                <name>Sourceforge</name>
-                <url>http://www.sourceforge.net/</url>
-            </organization>
-        </project>
-    </supplement>
-</supplementalDataModels>
diff --git a/trunk/src/main/resources/checkstyle.xml b/trunk/src/main/resources/checkstyle.xml
deleted file mode 100644
index 6421ef8..0000000
--- a/trunk/src/main/resources/checkstyle.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
-    
-<module name="Checker">
-    <property name="charset" value="UTF-8"/>
-
-    <module name="SuppressionFilter">
-        <property name="file" value="${checkstyle.suppressions.file}"/>
-    </module>
-
-    <module name="JavadocPackage">
-      <property name="allowLegacy" value="true"/>
-      <property name="severity" value="warning"/>
-    </module>
-    <!--<module name="NewlineAtEndOfFile"/>-->
-    <!--<module name="Translation"/>-->
-    <module name="FileLength">
-        <property name="max" value="4000"/>
-    </module>
-    <module name="FileTabCharacter">
-        <property name="eachLine" value="true"/>
-    </module>
-    <!--
-    <module name="RegexpSingleline">
-        <property name="format" value="\s+$"/>
-        <property name="message" value="Line has trailing spaces."/>
-    </module>
-    -->
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-        <property name="tabWidth" value="4"/>
-
-        <module name="JavadocMethod"/>
-        <module name="JavadocType">
-            <property name="scope" value="public"/>
-            <property name="allowUnknownTags" value="true"/>
-        </module>
-        <module name="JavadocVariable"/>
-        <module name="JavadocStyle"/>
-        <module name="MissingDeprecated"/>
-        <!--
-        <module name="WriteTag">
-            <property name="tag" value="@cmis"/>
-            <property name="tagFormat" value="\d\.\d"/>
-            <property name="severity" value="ignore"/>
-            <property name="tagSeverity" value="info"/>
-        </module>
-        -->
-
-        <module name="ConstantName"/>
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MemberName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-
-        <!-- <module name="Header">                            -->
-            <!-- The follow property value demonstrates the ability     -->
-            <!-- to have access to ANT properties. In this case it uses -->
-            <!-- the ${basedir} property to allow Checkstyle to be run  -->
-            <!-- from any directory within a project. See property      -->
-            <!-- expansion,                                             -->
-            <!-- http://checkstyle.sf.net/config.html#properties        -->
-            <!-- <property                                              -->
-            <!--     name="headerFile"                                  -->
-            <!--     value="${basedir}/java.header"/>                   -->
-        <!-- </module> -->
-
-
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports">
-            <property name="processJavadoc" value="true"/>
-        </module>    
-
-        <module name="LineLength">
-            <!-- the Eclipse formatter sometimes adds a few more characters: 120 -> 125 -->
-            <property name="max" value="125"/>
-        </module>
-        <module name="MethodLength">
-            <property name="max" value="300"/>
-        </module>
-        <module name="ParameterNumber">
-            <property name="max" value="12"/>
-        </module>
-
-        <module name="EmptyForIteratorPad"/>
-        <module name="EmptyForInitializerPad"/>
-        <module name="MethodParamPad"/>
-        <module name="NoWhitespaceAfter">
-           <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, UNARY_PLUS"/>
-        </module>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="ParenPad"/>
-        <module name="TypecastParenPad"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-        <module name="AvoidNestedBlocks"/>
-        <module name="EmptyBlock">
-            <property name="option" value="text"/>
-        </module>
-        <module name="LeftCurly">
-            <property name="option" value="eol"/>
-        </module>
-        <module name="NeedBraces"/>
-        <module name="RightCurly">
-            <property name="option" value="same"/>
-        </module>
-
-        <module name="EmptyStatement"/>
-        <module name="IllegalThrows">
-            <property name="severity" value="warning"/>
-        </module>
-        <module name="StringLiteralEquality">
-            <property name="severity" value="info"/>
-        </module>
-        <module name="EqualsHashCode"/>
-        <module name="CovariantEquals"/>
-        <module name="HiddenField">
-            <property name="ignoreConstructorParameter" value="true"/>
-            <property name="ignoreSetter" value="true"/>
-        </module>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <!--
-        <module name="MagicNumber">
-            <property name="severity" value="info"/>
-        </module>
-        -->
-        <module name="MissingSwitchDefault"/>
-        <module name="DefaultComesLast"/>
-        <module name="RedundantThrows"/>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!--<module name="DesignForExtension"/>-->
-        <module name="FinalClass"/>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier"/>
-
-        <module name="ArrayTypeStyle"/>
-        <!--<module name="FinalParameters"/>-->
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-</module>
diff --git a/trunk/src/main/resources/suppressions.xml b/trunk/src/main/resources/suppressions.xml
deleted file mode 100644
index 7c7f6ed..0000000
--- a/trunk/src/main/resources/suppressions.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.1//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
-
-<suppressions>
-    <suppress checks="Javadoc.*"
-              files="^(?!.*(org/apache/chemistry/opencmis/client/|org/apache/chemistry/opencmis/client/api/|org/apache/chemistry/opencmis/commons/|org/apache/chemistry/opencmis/server/support).*$)"/>
-    <suppress checks="Javadoc.*"
-              files=".*(/impl/.*|Impl\.java|/spi/.*|/runtime/.*)"/>
-</suppressions>
\ No newline at end of file
diff --git a/trunk/src/site/apt/index.apt b/trunk/src/site/apt/index.apt
deleted file mode 100644
index c7cc14d..0000000
--- a/trunk/src/site/apt/index.apt
+++ /dev/null
@@ -1,39 +0,0 @@
-~~
-~~
-~~ Licensed to the Apache Software Foundation (ASF) under one
-~~ or more contributor license agreements.  See the NOTICE file
-~~ distributed with this work for additional information
-~~ regarding copyright ownership.  The ASF licenses this file
-~~ to you under the Apache License, Version 2.0 (the
-~~ "License"); you may not use this file except in compliance
-~~ with the License.  You may obtain a copy of the License at
-~~
-~~   http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~ Unless required by applicable law or agreed to in writing,
-~~ software distributed under the License is distributed on an
-~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-~~ KIND, either express or implied.  See the License for the
-~~ specific language governing permissions and limitations
-~~ under the License.
-~~
-~~
-
-  -----
-  Chemistry OpenCMIS
-  -----
-
-Chemistry OpenCMIS
-  
-  OpenCMIS is an open source implementation of the  {{{http://chemistry.apache.org/project/cmis.html}OASIS CMIS specification}}
-  for Java.
-
-  User and developer documentation for OpenCMIS is available in the main {{{http://chemistry.apache.org/java/opencmis.html}Chemistry website}}
-
-  In this site you can find instead OpenCMIS developer information for this version (see top right corner) like:
-
-  * Info for all OpenCMIS modules available in this release (see menu on the left)
-
-  * {{{./apidocs/index.html} Full JavaDocs}}
-
-  * {{{./surefire-report.html} Aggregated unit + integration test reports}} for the full OpenCMIS framework
\ No newline at end of file
diff --git a/trunk/src/site/resources/images/apache-logo.gif b/trunk/src/site/resources/images/apache-logo.gif
deleted file mode 100644
index 22eb9d7..0000000
--- a/trunk/src/site/resources/images/apache-logo.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/src/site/resources/images/chemistry-logo.png b/trunk/src/site/resources/images/chemistry-logo.png
deleted file mode 100644
index 167efaf..0000000
--- a/trunk/src/site/resources/images/chemistry-logo.png
+++ /dev/null
Binary files differ
diff --git a/trunk/src/site/site.xml b/trunk/src/site/site.xml
deleted file mode 100644
index 0e6e1ef..0000000
--- a/trunk/src/site/site.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT 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="OpenCMIS">
-
-    <publishDate position="left" />
-    <version position="right" />
-
-    <bannerLeft>
-        <name>${project.name}</name>
-        <src>images/chemistry-logo.png</src>
-        <href>http://chemistry.apache.org/java</href>
-    </bannerLeft>
-
-    <bannerRight>
-        <name>The Apache Software Foundation</name>
-        <src>images/apache-logo.gif</src>
-        <href>http://www.apache.org/</href>
-	</bannerRight>
-
-
-    <poweredBy>
-      <logo name="Maven" href="http://maven.apache.org/"
-            img="http://maven.apache.org/images/logos/maven-feather.png"/>
-    </poweredBy>
-
-
-    <skin>
-        <groupId>org.apache.maven.skins</groupId>
-        <artifactId>maven-default-skin</artifactId>
-        <version>1.0</version>
-    </skin>
-
-    <body>
-        <menu ref="parent" inherit="top" />
-        <!-- Sub modules have no interesting information (all reports are aggregated at top level) so we comment them out for now -->
-        <!-- <menu ref="modules" inherit="top" /> -->
-        <menu ref="reports" inherit="top" />
-
-        <menu name="Chemistry" inherit="top">
-            <item name="Main Website" href="http://chemistry.apache.org" />
-        </menu>
-    </body>
-</project>
\ No newline at end of file